INTEGRATION: CWS eforms2 (1.1.2); FILE ADDED

2004/11/05 17:50:11 fs 1.1.2.15: #i36765# allow submission with InteractionHandler
2004/10/01 19:01:24 dvo 1.1.2.14: #i34793# throw WrappedTargetException/RuntimeException for submission errors
Issue number:
Submitted by:
Reviewed by:
2004/09/14 09:53:18 dvo 1.1.2.13: #i33880# ensure that submission always knows its model
Issue number:
Submitted by:
Reviewed by:
2004/08/11 18:07:00 dvo 1.1.2.12: #i31958# default "none" for replace
Issue number:
Submitted by:
Reviewed by:
2004/08/06 14:00:50 fs 1.1.2.11: #i31958# keep our PropertySetInfo alive
2004/07/12 14:11:55 fs 1.1.2.10: #114856# introduced and used XSubmission
2004/06/04 13:37:15 dvo 1.1.2.9: #114856# solve compilation problems uncovered with gcc
Issue number:
Submitted by:
Reviewed by:
2004/04/26 11:42:27 dvo 1.1.2.8: #114856# observe bidn and ref attributes on submission
Issue number:
Submitted by:
Reviewed by:
2004/04/23 14:04:47 lo 1.1.2.7: #i26721# put/get/post support
2004/04/23 11:30:09 lo 1.1.2.6: #i26721# put/get/post support for submission
2004/04/23 09:46:16 lo 1.1.2.5: #i26721# put/get/post support for submission
2004/04/22 09:13:36 dvo 1.1.2.4: #114856# improve dynamic binding capability
Issue number:
Submitted by:
Reviewed by:
2004/04/07 13:29:50 dvo 1.1.2.3: #114856# continue implementation
Issue number:
Submitted by:
Reviewed by:
2004/04/06 11:18:15 lo 1.1.2.2: #114856# submission cont.
2004/04/01 11:25:06 dvo 1.1.2.1: #114856# add submission
Issue number:
Submitted by:
Reviewed by:
This commit is contained in:
Oliver Bolte
2004-11-16 09:56:45 +00:00
parent 68b6c90647
commit fa0019d277

View File

@@ -0,0 +1,784 @@
/*************************************************************************
*
* $RCSfile: submission.cxx,v $
*
* $Revision: 1.2 $
*
* last change: $Author: obo $ $Date: 2004-11-16 10:56:45 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (the "License"); You may not use this file
* except in compliance with the License. You may obtain a copy of the
* License at http://www.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
#include "submission.hxx"
#include "model.hxx"
#include "binding.hxx"
#include "mip.hxx"
#include "evaluationcontext.hxx"
#include "unohelper.hxx"
#include "submission/submission_put.hxx"
#include "submission/submission_post.hxx"
#include "submission/submission_get.hxx"
#include <rtl/ustring.hxx>
#include <rtl/ustrbuf.hxx>
#include <com/sun/star/uno/Sequence.hxx>
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/xforms/XModel.hpp>
#include <com/sun/star/uno/RuntimeException.hpp>
#include <com/sun/star/xml/xpath/XXPathObject.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
#include <com/sun/star/xml/xpath/XPathObjectType.hpp>
#include <com/sun/star/xml/dom/XNodeList.hpp>
#include <com/sun/star/xml/dom/XDocument.hpp>
#include <com/sun/star/xml/dom/XDocumentBuilder.hpp>
#include <com/sun/star/xml/dom/XDocumentFragment.hpp>
#include <com/sun/star/xml/dom/NodeType.hpp>
#include <cppuhelper/typeprovider.hxx>
#include <comphelper/propertysetinfo.hxx>
#include <unotools/processfactory.hxx>
#include <memory>
using rtl::OUString;
using rtl::OUStringBuffer;
using com::sun::star::beans::UnknownPropertyException;
using com::sun::star::beans::PropertyVetoException;
using com::sun::star::lang::IllegalArgumentException;
using com::sun::star::util::VetoException;
using com::sun::star::form::submission::XSubmissionVetoListener;
using com::sun::star::lang::WrappedTargetException;
using com::sun::star::lang::NoSupportException;
using com::sun::star::task::XInteractionHandler;
using com::sun::star::xforms::XModel;
using com::sun::star::container::XNameAccess;
using com::sun::star::xml::xpath::XXPathObject;
using com::sun::star::xml::xpath::XPathObjectType;
using xforms::Submission;
using xforms::Model;
using xforms::MIP;
using std::auto_ptr;
using namespace com::sun::star::uno;
using namespace com::sun::star::lang;
using namespace com::sun::star::xml::dom;
Submission::Submission() :
msID(),
msBind(),
maRef(),
msAction(),
msMethod(),
msVersion(),
mbIndent(),
msMediaType(),
msEncoding(),
mbOmitXmlDeclaration(),
mbStandalone(),
msCDataSectionElement(),
msReplace( OUSTRING("none") ),
msSeparator(),
msIncludeNamespacePrefixes(),
m_aFactory(utl::getProcessServiceFactory())
{
setInfo( _getPropertySetInfo() );
}
Submission::~Submission() throw()
{
}
Reference<XModel> Submission::getModel() const
{
return mxModel;
}
void Submission::setModel( const Reference<XModel>& xModel )
{
mxModel = xModel;
}
OUString Submission::getID() const
{
return msID;
}
void Submission::setID( const OUString& sID )
{
msID = sID;
}
OUString Submission::getBind() const
{
return msBind;
}
void Submission::setBind( const OUString& sBind )
{
msBind = sBind;
}
OUString Submission::getRef() const
{
return maRef.getExpression();
}
void Submission::setRef( const OUString& sRef )
{
maRef.setExpression( sRef );
}
OUString Submission::getAction() const
{
return msAction;
}
void Submission::setAction( const OUString& sAction )
{
msAction = sAction;
}
OUString Submission::getMethod() const
{
return msMethod;
}
void Submission::setMethod( const OUString& sMethod )
{
msMethod = sMethod;
}
OUString Submission::getVersion() const
{
return msVersion;
}
void Submission::setVersion( const OUString& sVersion )
{
msVersion = sVersion;
}
bool Submission::getIndent() const
{
return mbIndent;
}
void Submission::setIndent( bool bIndent )
{
mbIndent = bIndent;
}
OUString Submission::getMediaType() const
{
return msMediaType;
}
void Submission::setMediaType( const OUString& sMediaType )
{
msMediaType = sMediaType;
}
OUString Submission::getEncoding() const
{
return msEncoding;
}
void Submission::setEncoding( const OUString& sEncoding )
{
msEncoding = sEncoding;
}
bool Submission::getOmitXmlDeclaration() const
{
return mbOmitXmlDeclaration;
}
void Submission::setOmitXmlDeclaration( bool bOmitXmlDeclaration )
{
mbOmitXmlDeclaration = bOmitXmlDeclaration;
}
bool Submission::getStandalone() const
{
return mbStandalone;
}
void Submission::setStandalone( bool bStandalone )
{
mbStandalone = bStandalone;
}
OUString Submission::getCDataSectionElement() const
{
return msCDataSectionElement;
}
void Submission::setCDataSectionElement( const OUString& sCDataSectionElement )
{
msCDataSectionElement = sCDataSectionElement;
}
OUString Submission::getReplace() const
{
return msReplace;
}
void Submission::setReplace( const OUString& sReplace )
{
msReplace = sReplace;
}
OUString Submission::getSeparator() const
{
return msSeparator;
}
void Submission::setSeparator( const OUString& sSeparator )
{
msSeparator = sSeparator;
}
Sequence< OUString > Submission::getIncludeNamespacePrefixes() const
{
return msIncludeNamespacePrefixes;
}
void Submission::setIncludeNamespacePrefixes( const OUString& sIncludeNamespacePrefixes )
{
std::vector< OUString > vPrefixes;
sal_Int32 p = 0;
while ( p >= 0 );
{
vPrefixes.push_back(sIncludeNamespacePrefixes.getToken(0, ',', p));
}
msIncludeNamespacePrefixes = Sequence< OUString >(vPrefixes.begin(), vPrefixes.size());
}
bool Submission::doSubmit( const Reference< XInteractionHandler >& aHandler )
{
liveCheck();
// construct XXPathObject for submission doc; use bind in preference of ref
EvaluationContext aEvalContext;
ComputedExpression aExpression;
if( msBind.getLength() != 0 )
{
Binding* pBinding = Binding::getBinding( mxModel->getBinding(msBind) );
if( pBinding != NULL )
{
aExpression.setExpression( pBinding->getBindingExpression() );
aExpression.setNamespaces( pBinding->getBindingNamespaces() );
aEvalContext = pBinding->getEvaluationContext();
}
// TODO: else: illegal binding name -> raise error
}
else if( maRef.getExpression().getLength() != 0 )
{
aExpression.setExpression( maRef.getExpression() );
// TODO: store namespaces for ref expression!!!!
aExpression.setNamespaces( maRef.getNamespaces() );
aEvalContext = Model::getModel( mxModel )->getEvaluationContext();
}
else
{
aExpression.setExpression( OUSTRING( "/" ) );
// we don't need namespaces for "/".
aEvalContext = Model::getModel( mxModel )->getEvaluationContext();
}
aExpression.evaluate( aEvalContext );
Reference<XXPathObject> xResult = aExpression.getXPath();
OSL_ENSURE( xResult.is(), "no result?" );
// early out if we have not obtained any result
if( ! xResult.is() )
return false;
// Reference< XNodeList > aList = xResult->getNodeList();
OUString aMethod = getMethod();
// strip whitespace-only text node for get submission
Reference< XDocumentFragment > aFragment = createSubmissionDocument(
xResult, aMethod.equalsIgnoreAsciiCaseAscii("get"));
// submit result; set encoding, etc.
auto_ptr<CSubmission> xSubmission;
if (aMethod.equalsIgnoreAsciiCaseAscii("PUT"))
xSubmission = auto_ptr<CSubmission>(
new CSubmissionPut( getAction(), aFragment));
else if (aMethod.equalsIgnoreAsciiCaseAscii("post"))
xSubmission = auto_ptr<CSubmission>(
new CSubmissionPost( getAction(), aFragment));
else if (aMethod.equalsIgnoreAsciiCaseAscii("get"))
xSubmission = auto_ptr<CSubmission>(
new CSubmissionGet( getAction(), aFragment));
else
{
OSL_ENSURE(sal_False, "Unsupported xforms submission method");
return false;
}
xSubmission->setEncoding(getEncoding());
CSubmission::SubmissionResult aResult = xSubmission->submit();
return ( aResult == CSubmission::SUCCESS );
}
void Submission::releaseModel()
{
mxModel = NULL;
}
Sequence<sal_Int8> Submission::getUnoTunnelID()
{
static cppu::OImplementationId aImplementationId;
return aImplementationId.getImplementationId();
}
Submission* Submission::getSubmission(
const Reference<XPropertySet>& xPropertySet )
{
Reference<XUnoTunnel> xTunnel( xPropertySet, UNO_QUERY );
return xTunnel.is()
? reinterpret_cast<Submission*>(
xTunnel->getSomething( getUnoTunnelID() ) )
: NULL;
}
void Submission::liveCheck()
throw( RuntimeException )
{
bool bValid = mxModel.is();
if( ! bValid )
throw RuntimeException();
}
Model* Submission::getModelImpl() const
{
Model* pModel = NULL;
if( mxModel.is() )
pModel = Model::getModel( mxModel );
return pModel;
}
//
// Property-Set implementation
//
#define HANDLE_ID 0
#define HANDLE_Bind 1
#define HANDLE_Ref 2
#define HANDLE_Action 3
#define HANDLE_Method 4
#define HANDLE_Version 5
#define HANDLE_Indent 6
#define HANDLE_MediaType 7
#define HANDLE_Encoding 8
#define HANDLE_OmitXmlDeclaration 9
#define HANDLE_Standalone 10
#define HANDLE_CDataSectionElement 11
#define HANDLE_Replace 12
#define HANDLE_Separator 13
#define HANDLE_IncludeNamespacePrefixes 14
#define HANDLE_Model 15
#define ENTRY_FLAGS(NAME,TYPE,FLAG) { #NAME, sizeof(#NAME)-1, HANDLE_##NAME, &getCppuType(static_cast<TYPE*>(NULL)), FLAG, 0 }
#define ENTRY(NAME,TYPE) ENTRY_FLAGS(NAME,TYPE,0)
#define ENTRY_RO(NAME,TYPE) ENTRY_FLAGS(NAME,TYPE,com::sun::star::beans::PropertyAttribute::READONLY)
#define ENTRY_END { NULL, 0, NULL, 0, 0}
comphelper::PropertySetInfo* Submission::_getPropertySetInfo()
{
static comphelper::PropertySetInfo* pInfo = NULL;
static comphelper::PropertyMapEntry pEntries[] =
{
ENTRY( ID, OUString ),
ENTRY( Bind, OUString ),
ENTRY( Ref, OUString ),
ENTRY( Action, OUString ),
ENTRY( Method, OUString ),
ENTRY( Version, OUString ),
ENTRY( Indent, bool ),
ENTRY( MediaType, OUString ),
ENTRY( Encoding, OUString ),
ENTRY( OmitXmlDeclaration, bool ),
ENTRY( Standalone, bool ),
ENTRY( CDataSectionElement, OUString ),
ENTRY( Replace, OUString ),
ENTRY( Separator, OUString ),
ENTRY( IncludeNamespacePrefixes, OUString ),
ENTRY( Model, Reference<XModel> ),
ENTRY_END
};
if( pInfo == NULL )
{
pInfo = new comphelper::PropertySetInfo( pEntries );
pInfo->acquire();
}
return pInfo;
}
void Submission::_setPropertyValues(
const comphelper::PropertyMapEntry** ppEntries,
const Any* pValues )
throw( UnknownPropertyException,
PropertyVetoException,
IllegalArgumentException,
WrappedTargetException )
{
// iterate over all PropertyMapEntry/Any pairs
for( ; *ppEntries != NULL; ppEntries++, pValues++ )
{
// delegate each property to the suitable handler method
switch( (*ppEntries)->mnHandle )
{
case HANDLE_ID:
setAny( this, &Submission::setID, *pValues );
break;
case HANDLE_Bind:
setAny( this, &Submission::setBind, *pValues );
break;
case HANDLE_Ref:
setAny( this, &Submission::setRef, *pValues );
break;
case HANDLE_Action:
setAny( this, &Submission::setAction, *pValues );
break;
case HANDLE_Method:
setAny( this, &Submission::setMethod, *pValues );
break;
case HANDLE_Version:
setAny( this, &Submission::setVersion, *pValues );
break;
case HANDLE_Indent:
setAny( this, &Submission::setIndent, *pValues );
break;
case HANDLE_MediaType:
setAny( this, &Submission::setMediaType, *pValues );
break;
case HANDLE_Encoding:
setAny( this, &Submission::setEncoding, *pValues );
break;
case HANDLE_OmitXmlDeclaration:
setAny( this, &Submission::setOmitXmlDeclaration, *pValues );
break;
case HANDLE_Standalone:
setAny( this, &Submission::setStandalone, *pValues );
break;
case HANDLE_CDataSectionElement:
setAny( this, &Submission::setCDataSectionElement, *pValues );
break;
case HANDLE_Replace:
setAny( this, &Submission::setReplace, *pValues );
break;
case HANDLE_Separator:
setAny( this, &Submission::setSeparator, *pValues );
break;
case HANDLE_IncludeNamespacePrefixes:
setAny( this, &Submission::setIncludeNamespacePrefixes, *pValues );
break;
case HANDLE_Model:
setAny( this, &Submission::setModel, *pValues );
break;
default:
OSL_ENSURE( false, "Unknown HANDLE" );
break;
}
}
}
void Submission::_getPropertyValues(
const comphelper::PropertyMapEntry** ppEntries,
Any* pValues )
throw( UnknownPropertyException,
WrappedTargetException )
{
// iterate over all PropertyMapEntry/Any pairs
for( ; *ppEntries != NULL; ppEntries++, pValues++ )
{
// delegate each property to the suitable handler method
switch( (*ppEntries)->mnHandle )
{
case HANDLE_ID:
getAny( this, &Submission::getID, *pValues );
break;
case HANDLE_Bind:
getAny( this, &Submission::getBind, *pValues );
break;
case HANDLE_Ref:
getAny( this, &Submission::getRef, *pValues );
break;
case HANDLE_Action:
getAny( this, &Submission::getAction, *pValues );
break;
case HANDLE_Method:
getAny( this, &Submission::getMethod, *pValues );
break;
case HANDLE_Version:
getAny( this, &Submission::getVersion, *pValues );
break;
case HANDLE_Indent:
getAny( this, &Submission::getIndent, *pValues );
break;
case HANDLE_MediaType:
getAny( this, &Submission::getMediaType, *pValues );
break;
case HANDLE_Encoding:
getAny( this, &Submission::getEncoding, *pValues );
break;
case HANDLE_OmitXmlDeclaration:
getAny( this, &Submission::getOmitXmlDeclaration, *pValues );
break;
case HANDLE_Standalone:
getAny( this, &Submission::getStandalone, *pValues );
break;
case HANDLE_CDataSectionElement:
getAny( this, &Submission::getCDataSectionElement, *pValues );
break;
case HANDLE_Replace:
getAny( this, &Submission::getReplace, *pValues );
break;
case HANDLE_Separator:
getAny( this, &Submission::getSeparator, *pValues );
break;
case HANDLE_IncludeNamespacePrefixes:
getAny( this, &Submission::getIncludeNamespacePrefixes, *pValues );
break;
case HANDLE_Model:
getAny( this, &Submission::getModel, *pValues );
break;
default:
OSL_ENSURE( false, "Unknown HANDLE" );
break;
}
}
}
OUString SAL_CALL Submission::getName()
throw( RuntimeException )
{
return getID();
}
void SAL_CALL Submission::setName( const OUString& sID )
throw( RuntimeException )
{
setID( sID );
}
sal_Int64 SAL_CALL Submission::getSomething(
const Sequence<sal_Int8>& aId )
throw( RuntimeException )
{
return ( aId == getUnoTunnelID() ) ? reinterpret_cast<sal_Int64>(this) : 0;
}
void SAL_CALL Submission::submitWithInteraction( const Reference< XInteractionHandler >& _rxHandler ) throw ( VetoException, WrappedTargetException, RuntimeException )
{
// as long as this class is not really threadsafe, we need to copy the members we're interested
// in
Reference< XModel > xModel( mxModel );
::rtl::OUString sID( msID );
if ( !xModel.is() || !msID.getLength() )
throw RuntimeException(
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "This is not a valid submission object." ) ),
*this
);
try
{
xModel->submitWithInteraction( sID, _rxHandler );
}
catch( const RuntimeException& e )
{
// exception caught: re-throw as wrapped target exception
OUStringBuffer aMessage;
aMessage.append( OUSTRING("XForms submission '") );
aMessage.append( sID );
aMessage.append( OUSTRING("' failed due to exception being thrown.") );
throw WrappedTargetException( aMessage.makeStringAndClear(), *this, makeAny( e ) );
}
}
void SAL_CALL Submission::submit( ) throw ( VetoException, WrappedTargetException, RuntimeException )
{
submitWithInteraction( NULL );
}
void SAL_CALL Submission::addSubmissionVetoListener( const Reference< XSubmissionVetoListener >& listener ) throw (NoSupportException, RuntimeException)
{
// TODO
throw NoSupportException();
}
void SAL_CALL Submission::removeSubmissionVetoListener( const Reference< XSubmissionVetoListener >& listener ) throw (NoSupportException, RuntimeException)
{
// TODO
throw NoSupportException();
}
static sal_Bool _isIgnorable(const Reference< XNode >& aNode)
{
// ignore whitespace-only textnodes
if (aNode->getNodeType() == NodeType_TEXT_NODE)
{
OUString aTrimmedValue = aNode->getNodeValue().trim();
if (aTrimmedValue.getLength() == 0) return sal_True;
}
return sal_False;
}
// recursively copy relevant nodes from A to B
static void _cloneNodes(Model& aModel, const Reference< XNode >& dstParent, const Reference< XNode >& source, sal_Bool bRemoveWSNodes)
{
if (!source.is()) return;
Reference< XNode > cur = source;
Reference< XDocument > dstDoc = dstParent->getOwnerDocument();
Reference< XNode > imported;
while (cur.is())
{
// is this node relevant?
MIP mip = aModel.queryMIP(cur);
if(mip.isRelevant() && !(bRemoveWSNodes && _isIgnorable(cur)))
{
imported = dstDoc->importNode(cur, sal_False);
imported = dstParent->appendChild(imported);
// append source children to new imported parent
_cloneNodes(aModel, imported, cur->getFirstChild(), bRemoveWSNodes);
}
cur = cur->getNextSibling();
}
}
Reference< XDocumentFragment > Submission::createSubmissionDocument(const Reference< XXPathObject >& aObj, sal_Bool bRemoveWSNodes)
{
using namespace com::sun::star::xml::xpath;
Reference< XDocumentBuilder > aDocBuilder(m_aFactory->createInstance(
OUString::createFromAscii("com.sun.star.xml.dom.DocumentBuilder")), UNO_QUERY);
Reference< XDocument > aDocument = aDocBuilder->newDocument();
Reference< XDocumentFragment > aFragment = aDocument->createDocumentFragment();
//
if (aObj->getObjectType() == XPathObjectType_XPATH_NODESET)
{
Reference< XNodeList > aList = aObj->getNodeList();
Reference< XNode > aListItem;
for (sal_Int32 i=0; i < aList->getLength(); i++)
{
aListItem = aList->item(i);
if (aListItem->getNodeType()==NodeType_DOCUMENT_NODE)
aListItem = Reference< XNode >(
(Reference< XDocument >(aListItem, UNO_QUERY))->getDocumentElement(), UNO_QUERY);
// copy relevant nodes from instance into fragment
_cloneNodes(*getModelImpl(), Reference< XNode >(aFragment, UNO_QUERY), aListItem, bRemoveWSNodes);
}
}
return aFragment;
}
// some forwarding: XPropertySet is implemented in our base class,
// but also available as base of XSubmission
Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL Submission::getPropertySetInfo( ) throw(RuntimeException)
{
return PropertySetBase::getPropertySetInfo();
}
void SAL_CALL Submission::setPropertyValue( const ::rtl::OUString& aPropertyName, const Any& aValue ) throw(UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException)
{
PropertySetBase::setPropertyValue( aPropertyName, aValue );
}
Any SAL_CALL Submission::getPropertyValue( const ::rtl::OUString& PropertyName ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException)
{
return PropertySetBase::getPropertyValue( PropertyName );
}
void SAL_CALL Submission::addPropertyChangeListener( const ::rtl::OUString& aPropertyName, const Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException)
{
PropertySetBase::addPropertyChangeListener( aPropertyName, xListener );
}
void SAL_CALL Submission::removePropertyChangeListener( const ::rtl::OUString& aPropertyName, const Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException)
{
PropertySetBase::removePropertyChangeListener( aPropertyName, aListener );
}
void SAL_CALL Submission::addVetoableChangeListener( const ::rtl::OUString& PropertyName, const Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException)
{
PropertySetBase::addVetoableChangeListener( PropertyName, aListener );
}
void SAL_CALL Submission::removeVetoableChangeListener( const ::rtl::OUString& PropertyName, const Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw(UnknownPropertyException, WrappedTargetException, RuntimeException)
{
PropertySetBase::removeVetoableChangeListener( PropertyName, aListener );
}