You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by ar...@apache.org on 2013/03/24 14:21:56 UTC
svn commit: r1460358 - in /openoffice/trunk/main: offapi/com/sun/star/ucb/
ucb/source/ucp/webdav/
Author: arielch
Date: Sun Mar 24 13:21:56 2013
New Revision: 1460358
URL: http://svn.apache.org/r1460358
Log:
i121935 - UCB: new "addProperty" and "removeProperty" commands
Added:
openoffice/trunk/main/offapi/com/sun/star/ucb/PropertyCommandArgument.idl
Modified:
openoffice/trunk/main/offapi/com/sun/star/ucb/Content.idl
openoffice/trunk/main/offapi/com/sun/star/ucb/makefile.mk
openoffice/trunk/main/ucb/source/ucp/webdav/DAVProperties.cxx
openoffice/trunk/main/ucb/source/ucp/webdav/DAVProperties.hxx
openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontent.cxx
openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontent.hxx
openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontentcaps.cxx
Modified: openoffice/trunk/main/offapi/com/sun/star/ucb/Content.idl
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/offapi/com/sun/star/ucb/Content.idl?rev=1460358&r1=1460357&r2=1460358&view=diff
==============================================================================
--- openoffice/trunk/main/offapi/com/sun/star/ucb/Content.idl (original)
+++ openoffice/trunk/main/offapi/com/sun/star/ucb/Content.idl Sun Mar 24 13:21:56 2013
@@ -459,6 +459,65 @@ published service Content
</p>
</td>
</tr>
+ <tr>
+ <td>addProperty</td>
+ <td>void</td>
+ <td><type>PropertyCommandArgument</type> aCmdArg</td>
+ <td>
+ Adds a new properties to the content.
+ <p>
+ <member>PropertyCommandArgument::Property</member>
+ contains information about the property to be added.
+ <member>PropertyCommandArgument::DefaultValue</member>
+ may contain the default value for the property. Its type must
+ match the one specified in <member scope="com::sun::star::beans">Property::Type</member>.
+ </p>
+ <p>Note that the dynamic properties must be kept persistent. The
+ service <type>Store</type> (UCB persistence service) may be used to
+ implement this.</p>
+ <p><b>Important:</b> The implementation must at least support
+ adding properties of the following basic data types:</p>
+ <p>
+ <ul>
+ <li>boolean
+ <li>char
+ <li>byte
+ <li>string
+ <li>short
+ <li>long
+ <li>hyper
+ <li>float
+ <li>double
+ </ul>
+ </p>
+ <p>
+ Raises a <type scope="com::sun::star::beans">PropertyExistException</type>
+ if a property with the same name already exists;
+ <type scope="com::sun::star::beans">IllegalTypeException</type>
+ if the property has an unsupported type;
+ <type scope="com::sun::star::lang">IllegalArgumentException</type>
+ if the Name of the property is empty.</p>
+ <blockquote>
+ Note: This command replaces the deprecated interface method
+ <member scope="com::sun::star::beans">XPropertyContainer::addProperty</member>.
+ </blockquote>
+ </td>
+ </tr>
+ <tr>
+ <td>removeProperty</td>
+ <td>void</td>
+ <td>string PropertyName</td>
+ <td>Removes the properties from the content.
+ <p>Raises a <type scope="com::sun::star::beans">UnknownPropertyException</type>
+ if the property does not exist;
+ <type scope="com::sun::star::beans">NotRemoveableException</type>
+ if the property is not removable.</p>
+ <blockquote>
+ Note: This command replaces the deprecated interface method
+ <member scope="com::sun::star::beans">XPropertyContainer::removeProperty</member>.
+ </blockquote>
+ </td>
+ </tr>
</tbody>
</table>
@@ -804,7 +863,7 @@ published service Content
<td>TargetURL</td>
<td>string</td>
<td>for contents that are links to other contents, contains the URL of
- the target content</td>
+ the target content</td>
</tr>
<tr>
<td>TimeLimitStore</td>
@@ -815,7 +874,7 @@ published service Content
<td>UserName</td>
<td>string</td>
<td>contains a user name. (e.g. the user name needed to access a
- POP3-Account)</td>
+ POP3-Account)</td>
</tr>
<tr>
<td>VerificationMode</td>
Added: openoffice/trunk/main/offapi/com/sun/star/ucb/PropertyCommandArgument.idl
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/offapi/com/sun/star/ucb/PropertyCommandArgument.idl?rev=1460358&view=auto
==============================================================================
--- openoffice/trunk/main/offapi/com/sun/star/ucb/PropertyCommandArgument.idl (added)
+++ openoffice/trunk/main/offapi/com/sun/star/ucb/PropertyCommandArgument.idl Sun Mar 24 13:21:56 2013
@@ -0,0 +1,47 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+#ifndef __com_sun_star_ucb_PropertyCommandArgument_idl__
+#define __com_sun_star_ucb_PropertyCommandArgument_idl__
+
+#include <com/sun/star/beans/Property.idl>
+
+module com { module sun { module star { module ucb {
+
+/** The argument for the "addProperty" command.
+
+ @see XCommandProcessor
+ @since Apache OpenOffice 4.0
+*/
+struct PropertyCommandArgument
+{
+ /** The property that the command has to add.
+ */
+ com::sun::star::beans::Property Property;
+
+ /** The default value of the property.
+ */
+ any DefaultValue;
+};
+
+}; }; }; };
+
+#endif
Modified: openoffice/trunk/main/offapi/com/sun/star/ucb/makefile.mk
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/offapi/com/sun/star/ucb/makefile.mk?rev=1460358&r1=1460357&r2=1460358&view=diff
==============================================================================
--- openoffice/trunk/main/offapi/com/sun/star/ucb/makefile.mk (original)
+++ openoffice/trunk/main/offapi/com/sun/star/ucb/makefile.mk Sun Mar 24 13:21:56 2013
@@ -37,7 +37,7 @@ IDLFILES=\
AlreadyInitializedException.idl\
AnyCompareFactory.idl\
AuthenticationRequest.idl\
- URLAuthenticationRequest.idl\
+ CHAOSProgressStart.idl\
CachedContentResultSet.idl\
CachedContentResultSetFactory.idl\
CachedContentResultSetStub.idl\
@@ -46,7 +46,6 @@ IDLFILES=\
CachedDynamicResultSetFactory.idl\
CachedDynamicResultSetStub.idl\
CachedDynamicResultSetStubFactory.idl\
- CHAOSProgressStart.idl\
CertificateValidationRequest.idl\
Command.idl\
CommandAbortedException.idl\
@@ -83,6 +82,8 @@ IDLFILES=\
Error.idl\
ExpandContentProvider.idl\
ExportStreamInfo.idl\
+ FTPContent.idl\
+ FTPContentProvider.idl\
FetchError.idl\
FetchResult.idl\
FileContent.idl\
@@ -91,10 +92,8 @@ IDLFILES=\
FolderList.idl\
FolderListCommand.idl\
FolderListEntry.idl\
- FTPContent.idl\
- FTPContentProvider.idl\
- GlobalTransferCommandArgument.idl\
GIOContentProvider.idl\
+ GlobalTransferCommandArgument.idl\
GnomeVFSContentProvider.idl\
GnomeVFSDocumentContent.idl\
GnomeVFSFolderContent.idl\
@@ -108,6 +107,7 @@ IDLFILES=\
HierarchyFolderContent.idl\
HierarchyLinkContent.idl\
HierarchyRootFolderContent.idl\
+ IOErrorCode.idl\
IllegalIdentifierException.idl\
InsertCommandArgument.idl\
InteractiveAppException.idl\
@@ -117,8 +117,8 @@ IDLFILES=\
InteractiveFileIOException.idl\
InteractiveIOException.idl\
InteractiveLockingException.idl\
- InteractiveLockingLockedException.idl\
InteractiveLockingLockExpiredException.idl\
+ InteractiveLockingLockedException.idl\
InteractiveLockingNotLockedException.idl\
InteractiveNetworkConnectException.idl\
InteractiveNetworkException.idl\
@@ -128,12 +128,11 @@ IDLFILES=\
InteractiveNetworkResolveNameException.idl\
InteractiveNetworkWriteException.idl\
InteractiveWrongMediumException.idl\
- IOErrorCode.idl\
Link.idl\
ListAction.idl\
ListActionType.idl\
- ListenerAlreadySetException.idl\
ListEvent.idl\
+ ListenerAlreadySetException.idl\
Lock.idl\
LockDepth.idl\
LockEntry.idl\
@@ -159,6 +158,7 @@ IDLFILES=\
PostCommandArgument2.idl\
Priority.idl\
PropertiesManager.idl\
+ PropertyCommandArgument.idl\
PropertySetRegistry.idl\
PropertyValueInfo.idl\
PropertyValueState.idl\
@@ -191,10 +191,11 @@ IDLFILES=\
TransferInfo.idl\
TransferResult.idl\
TransientDocumentsContentProvider.idl\
- TransientDocumentsRootContent.idl\
TransientDocumentsDocumentContent.idl\
TransientDocumentsFolderContent.idl\
+ TransientDocumentsRootContent.idl\
TransientDocumentsStreamContent.idl\
+ URLAuthenticationRequest.idl\
UniversalContentBroker.idl\
UnsupportedCommandException.idl\
UnsupportedDataSinkException.idl\
@@ -262,7 +263,7 @@ IDLFILES=\
XSimpleFileAccess3.idl\
XSortedDynamicResultSetFactory.idl\
XSourceInitialization.idl\
- XWebDAVCommandEnvironment.idl
+ XWebDAVCommandEnvironment.idl \
# ------------------------------------------------------------------
Modified: openoffice/trunk/main/ucb/source/ucp/webdav/DAVProperties.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/ucb/source/ucp/webdav/DAVProperties.cxx?rev=1460358&r1=1460357&r2=1460358&view=diff
==============================================================================
--- openoffice/trunk/main/ucb/source/ucp/webdav/DAVProperties.cxx (original)
+++ openoffice/trunk/main/ucb/source/ucp/webdav/DAVProperties.cxx Sun Mar 24 13:21:56 2013
@@ -26,6 +26,7 @@
#include <string.h>
#include "DAVProperties.hxx"
+#include <rtl/ustrbuf.hxx>
using namespace http_dav_ucp;
@@ -192,3 +193,42 @@ bool DAVProperties::isUCBDeadProperty( c
rName.nspace, "http://ucb.openoffice.org/dav/props/" )
== 0 ) );
}
+
+bool DAVProperties::isUCBSpecialProperty(const rtl::OUString& rFullName, rtl::OUString& rParsedName)
+{
+ sal_Int32 nLen = rFullName.getLength();
+ if ( nLen <= 0 ||
+ !rFullName.matchAsciiL( RTL_CONSTASCII_STRINGPARAM( "<prop:" ) ) ||
+ !rFullName.endsWithAsciiL( RTL_CONSTASCII_STRINGPARAM( "\">" ) ) )
+ return false;
+
+ sal_Int32 nStart = RTL_CONSTASCII_LENGTH( "<prop:" );
+ sal_Int32 nEnd = rFullName.indexOf( sal_Unicode( ' ' ), nStart );
+ if ( nEnd == -1 )
+ return false;
+
+ rtl::OUString sPropName = rFullName.copy( nStart, nEnd - nStart );
+ if ( !sPropName.getLength() )
+ return false;
+
+ // TODO skip whitespaces?
+ if ( !rFullName.matchAsciiL( RTL_CONSTASCII_STRINGPARAM( "xmlns:prop=\"" ), ++nEnd ) )
+ return false;
+
+ nStart = nEnd + RTL_CONSTASCII_LENGTH( "xmlns:prop=\"" );
+ nEnd = rFullName.indexOf( sal_Unicode( '"' ), nStart );
+ if ( nEnd != nLen - RTL_CONSTASCII_LENGTH( "\">" ) )
+ return false;
+
+ rtl::OUString sNamesp = rFullName.copy( nStart, nEnd - nStart );
+ if ( !( nLen = sNamesp.getLength() ) )
+ return false;
+
+ rtl::OUStringBuffer aBuff( sNamesp );
+ if ( sNamesp[nLen - 1] != '/' )
+ aBuff.append( sal_Unicode( '/' ) );
+ aBuff.append( sPropName );
+ rParsedName = aBuff.makeStringAndClear();
+
+ return rParsedName.getLength();
+}
Modified: openoffice/trunk/main/ucb/source/ucp/webdav/DAVProperties.hxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/ucb/source/ucp/webdav/DAVProperties.hxx?rev=1460358&r1=1460357&r2=1460358&view=diff
==============================================================================
--- openoffice/trunk/main/ucb/source/ucp/webdav/DAVProperties.hxx (original)
+++ openoffice/trunk/main/ucb/source/ucp/webdav/DAVProperties.hxx Sun Mar 24 13:21:56 2013
@@ -50,6 +50,8 @@ struct DAVProperties
rtl::OUString & rFullName );
static bool isUCBDeadProperty( const SerfPropName & rName );
+ static bool isUCBSpecialProperty( const rtl::OUString & rFullName,
+ rtl::OUString & rParsedName );
};
} // namespace http_dav_ucp
Modified: openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontent.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontent.cxx?rev=1460358&r1=1460357&r2=1460358&view=diff
==============================================================================
--- openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontent.cxx (original)
+++ openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontent.cxx Sun Mar 24 13:21:56 2013
@@ -68,6 +68,7 @@
#include <com/sun/star/ucb/OpenCommandArgument2.hpp>
#include <com/sun/star/ucb/OpenMode.hpp>
#include <com/sun/star/ucb/PostCommandArgument2.hpp>
+#include <com/sun/star/ucb/PropertyCommandArgument.hpp>
#include <com/sun/star/ucb/TransferInfo.hpp>
#include <com/sun/star/ucb/UnsupportedCommandException.hpp>
#include <com/sun/star/ucb/UnsupportedDataSinkException.hpp>
@@ -769,6 +770,68 @@ uno::Any SAL_CALL Content::execute(
aRet = uno::makeAny( createNewContent( aArg ) );
}
+ else if ( aCommand.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "addProperty" )))
+ {
+ ucb::PropertyCommandArgument aPropArg;
+ if ( !( aCommand.Argument >>= aPropArg ))
+ {
+ ucbhelper::cancelCommandExecution(
+ uno::makeAny( lang::IllegalArgumentException(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "Wrong argument type!" )),
+ static_cast< cppu::OWeakObject * >( this ),
+ -1 ) ),
+ Environment );
+ }
+
+ // TODO when/if XPropertyContainer is removed,
+ // the command execution can be canceled in addProperty
+ try
+ {
+ addProperty( aPropArg, Environment );
+ }
+ catch ( const beans::PropertyExistException &e )
+ {
+ ucbhelper::cancelCommandExecution( uno::makeAny( e ), Environment );
+ }
+ catch ( const beans::IllegalTypeException&e )
+ {
+ ucbhelper::cancelCommandExecution( uno::makeAny( e ), Environment );
+ }
+ catch ( const lang::IllegalArgumentException&e )
+ {
+ ucbhelper::cancelCommandExecution( uno::makeAny( e ), Environment );
+ }
+ }
+ else if ( aCommand.Name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "removeProperty" )))
+ {
+ rtl::OUString sPropName;
+ if ( !( aCommand.Argument >>= sPropName ) )
+ {
+ ucbhelper::cancelCommandExecution(
+ uno::makeAny( lang::IllegalArgumentException(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "Wrong argument type!" )),
+ static_cast< cppu::OWeakObject * >( this ),
+ -1 ) ),
+ Environment );
+ }
+
+ // TODO when/if XPropertyContainer is removed,
+ // the command execution can be canceled in removeProperty
+ try
+ {
+ removeProperty( sPropName, Environment );
+ }
+ catch( const beans::UnknownPropertyException &e )
+ {
+ ucbhelper::cancelCommandExecution( uno::makeAny( e ), Environment );
+ }
+ catch( const beans::NotRemoveableException &e )
+ {
+ ucbhelper::cancelCommandExecution( uno::makeAny( e ), Environment );
+ }
+ }
else
{
//////////////////////////////////////////////////////////////////
@@ -820,42 +883,53 @@ void SAL_CALL Content::abort( sal_Int32
//
//=========================================================================
-// virtual
-void SAL_CALL Content::addProperty( const rtl::OUString& Name,
- sal_Int16 Attributes,
- const uno::Any& DefaultValue )
- throw( beans::PropertyExistException,
- beans::IllegalTypeException,
- lang::IllegalArgumentException,
- uno::RuntimeException )
+void Content::addProperty( const com::sun::star::ucb::PropertyCommandArgument &aCmdArg,
+ const uno::Reference< ucb::XCommandEnvironment >& xEnv )
+throw( beans::PropertyExistException,
+ beans::IllegalTypeException,
+ lang::IllegalArgumentException,
+ uno::RuntimeException )
{
// if ( m_bTransient )
// @@@ ???
+ const beans::Property aProperty = aCmdArg.Property;
+ const uno::Any aDefaultValue = aCmdArg.DefaultValue;
- if ( !Name.getLength() )
- throw lang::IllegalArgumentException();
+ // check property Name
+ if ( !aProperty.Name.getLength() )
+ throw lang::IllegalArgumentException(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "\"addProperty\" with empty Property.Name")),
+ static_cast< ::cppu::OWeakObject * >( this ),
+ -1 );
// Check property type.
- if ( !UCBDeadPropertyValue::supportsType( DefaultValue.getValueType() ) )
- {
- OSL_ENSURE( sal_False,
- "Content::addProperty - Unsupported property type!" );
- throw beans::IllegalTypeException();
- }
+ if ( !UCBDeadPropertyValue::supportsType( aProperty.Type ) )
+ throw beans::IllegalTypeException(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "\"addProperty\" unsupported Property.Type")),
+ static_cast< ::cppu::OWeakObject * >( this ) );
+
+ // check default value
+ if ( aDefaultValue.hasValue() && aDefaultValue.getValueType() != aProperty.Type )
+ throw beans::IllegalTypeException(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "\"addProperty\" DefaultValue does not match Property.Type")),
+ static_cast< ::cppu::OWeakObject * >( this ) );
//////////////////////////////////////////////////////////////////////
// Make sure a property with the requested name does not already
// exist in dynamic and static(!) properties.
//////////////////////////////////////////////////////////////////////
- // @@@ Need real command environment here, but where to get it from?
- // XPropertyContainer interface should be replaced by
- // XCommandProcessor commands!
- uno::Reference< ucb::XCommandEnvironment > xEnv;
+ // Take into account special properties with custom namespace
+ // using <prop:the_propname xmlns:prop="the_namespace">
+ rtl::OUString aSpecialName;
+ bool bIsSpecial = DAVProperties::isUCBSpecialProperty( aProperty.Name, aSpecialName );
// Note: This requires network access!
if ( getPropertySetInfo( xEnv, sal_False /* don't cache data */ )
- ->hasPropertyByName( Name ) )
+ ->hasPropertyByName( bIsSpecial ? aSpecialName : aProperty.Name ) )
{
// Property does already exist.
throw beans::PropertyExistException();
@@ -865,7 +939,7 @@ void SAL_CALL Content::addProperty( cons
// Add a new dynamic property.
//////////////////////////////////////////////////////////////////////
- ProppatchValue aValue( PROPSET, Name, DefaultValue );
+ ProppatchValue aValue( PROPSET, aProperty.Name, aDefaultValue );
std::vector< ProppatchValue > aProppatchValues;
aProppatchValues.push_back( aValue );
@@ -887,7 +961,7 @@ void SAL_CALL Content::addProperty( cons
// Notify propertyset info change listeners.
beans::PropertySetInfoChangeEvent evt(
static_cast< cppu::OWeakObject * >( this ),
- Name,
+ bIsSpecial ? aSpecialName : aProperty.Name,
-1, // No handle available
beans::PropertySetInfoChange::PROPERTY_INSERTED );
notifyPropertySetInfoChange( evt );
@@ -899,8 +973,9 @@ void SAL_CALL Content::addProperty( cons
// Support for setting arbitrary dead properties is optional!
// Store property locally.
- ContentImplHelper::addProperty(
- Name, Attributes, DefaultValue );
+ ContentImplHelper::addProperty( bIsSpecial ? aSpecialName : aProperty.Name,
+ aProperty.Attributes,
+ aDefaultValue );
}
else
{
@@ -917,9 +992,9 @@ void SAL_CALL Content::addProperty( cons
case NON_DAV:
// Store property locally.
- ContentImplHelper::addProperty( Name,
- Attributes,
- DefaultValue );
+ ContentImplHelper::addProperty( bIsSpecial ? aSpecialName : aProperty.Name,
+ aProperty.Attributes,
+ aDefaultValue );
break;
default:
@@ -946,25 +1021,19 @@ void SAL_CALL Content::addProperty( cons
}
}
-//=========================================================================
-// virtual
-void SAL_CALL Content::removeProperty( const rtl::OUString& Name )
- throw( beans::UnknownPropertyException,
- beans::NotRemoveableException,
- uno::RuntimeException )
+void Content::removeProperty( const rtl::OUString& Name,
+ const uno::Reference< ucb::XCommandEnvironment >& xEnv )
+throw( beans::UnknownPropertyException,
+ beans::NotRemoveableException,
+ uno::RuntimeException )
{
- // @@@ Need real command environment here, but where to get it from?
- // XPropertyContainer interface should be replaced by
- // XCommandProcessor commands!
- uno::Reference< ucb::XCommandEnvironment > xEnv;
-
#if 0
// @@@ REMOVEABLE z.Z. nicht richtig an der PropSetInfo gesetzt!!!
try
{
beans::Property aProp
- = getPropertySetInfo( xEnv, sal_False /* don't cache data */ )
- ->getPropertyByName( Name );
+ = getPropertySetInfo( xEnv, sal_False /* don't cache data */ )
+ ->getPropertyByName( Name );
if ( !( aProp.Attributes & beans::PropertyAttribute::REMOVEABLE ) )
{
@@ -1027,20 +1096,20 @@ void SAL_CALL Content::removeProperty( c
const ResourceType & rType = getResourceType( xEnv );
switch ( rType )
{
- case UNKNOWN:
- case DAV:
- throw beans::UnknownPropertyException();
-
- case NON_DAV:
- // Try to remove property from local store.
- ContentImplHelper::removeProperty( Name );
- break;
-
- default:
- OSL_ENSURE( sal_False,
- "Content::removeProperty - "
- "Unsupported resource type!" );
- break;
+ case UNKNOWN:
+ case DAV:
+ throw beans::UnknownPropertyException();
+
+ case NON_DAV:
+ // Try to remove property from local store.
+ ContentImplHelper::removeProperty( Name );
+ break;
+
+ default:
+ OSL_ENSURE( sal_False,
+ "Content::removeProperty - "
+ "Unsupported resource type!" );
+ break;
}
}
catch ( uno::Exception const & )
@@ -1061,6 +1130,35 @@ void SAL_CALL Content::removeProperty( c
}
}
+// virtual
+void SAL_CALL Content::addProperty( const rtl::OUString& Name,
+ sal_Int16 Attributes,
+ const uno::Any& DefaultValue )
+ throw( beans::PropertyExistException,
+ beans::IllegalTypeException,
+ lang::IllegalArgumentException,
+ uno::RuntimeException )
+{
+ beans::Property aProperty;
+ aProperty.Name = Name;
+ aProperty.Type = DefaultValue.getValueType();
+ aProperty.Attributes = Attributes;
+ aProperty.Handle = -1;
+
+ addProperty( ucb::PropertyCommandArgument( aProperty, DefaultValue ),
+ uno::Reference< ucb::XCommandEnvironment >());
+}
+
+// virtual
+void SAL_CALL Content::removeProperty( const rtl::OUString& Name )
+ throw( beans::UnknownPropertyException,
+ beans::NotRemoveableException,
+ uno::RuntimeException )
+{
+ removeProperty( Name,
+ uno::Reference< ucb::XCommandEnvironment >() );
+}
+
//=========================================================================
//
// XContentCreator methods.
@@ -1779,11 +1877,14 @@ uno::Sequence< uno::Any > Content::setPr
// Optional props.
//////////////////////////////////////////////////////////////
+ rtl::OUString aSpecialName;
+ bool bIsSpecial = DAVProperties::isUCBSpecialProperty( rName, aSpecialName );
+
if ( !xInfo.is() )
xInfo = getPropertySetInfo( xEnv,
sal_False /* don't cache data */ );
- if ( !xInfo->hasPropertyByName( rName ) )
+ if ( !xInfo->hasPropertyByName( bIsSpecial ? aSpecialName : rName ) )
{
// Check, whether property exists. Skip otherwise.
// PROPPATCH::set would add the property automatically, which
@@ -1832,7 +1933,7 @@ uno::Sequence< uno::Any > Content::setPr
static_cast< cppu::OWeakObject * >( this ) );
}
if ( rName.equalsAsciiL(
- RTL_CONSTASCII_STRINGPARAM( "CreatableContentsInfo" ) ) )
+ RTL_CONSTASCII_STRINGPARAM( "CreatableContentsInfo" ) ) )
{
// Read-only property!
aRet[ n ] <<= lang::IllegalAccessException(
Modified: openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontent.hxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontent.hxx?rev=1460358&r1=1460357&r2=1460358&view=diff
==============================================================================
--- openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontent.hxx (original)
+++ openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontent.hxx Sun Mar 24 13:21:56 2013
@@ -48,6 +48,7 @@ namespace com { namespace sun { namespac
namespace com { namespace sun { namespace star { namespace ucb {
struct OpenCommandArgument2;
+ struct PropertyCommandArgument;
struct PostCommandArgument2;
struct TransferInfo;
} } } }
@@ -192,6 +193,21 @@ private:
const com::sun::star::uno::Reference<
com::sun::star::ucb::XCommandEnvironment >& Environment );
+ // XPropertyContainer replacement
+ void addProperty( const com::sun::star::ucb::PropertyCommandArgument &aCmdArg,
+ const com::sun::star::uno::Reference<
+ com::sun::star::ucb::XCommandEnvironment >& Environment )
+ throw( com::sun::star::beans::PropertyExistException,
+ com::sun::star::beans::IllegalTypeException,
+ com::sun::star::lang::IllegalArgumentException,
+ com::sun::star::uno::RuntimeException );
+
+ void removeProperty( const rtl::OUString& Name,
+ const com::sun::star::uno::Reference<
+ com::sun::star::ucb::XCommandEnvironment >& Environment )
+ throw( com::sun::star::beans::UnknownPropertyException,
+ com::sun::star::beans::NotRemoveableException,
+ com::sun::star::uno::RuntimeException );
public:
Content( const ::com::sun::star::uno::Reference<
::com::sun::star::lang::XMultiServiceFactory >& rxSMgr,
Modified: openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontentcaps.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontentcaps.cxx?rev=1460358&r1=1460357&r2=1460358&view=diff
==============================================================================
--- openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontentcaps.cxx (original)
+++ openoffice/trunk/main/ucb/source/ucp/webdav/webdavcontentcaps.cxx Sun Mar 24 13:21:56 2013
@@ -38,6 +38,7 @@
#include <com/sun/star/ucb/OpenCommandArgument2.hpp>
#include <com/sun/star/ucb/InsertCommandArgument.hpp>
#include <com/sun/star/ucb/PostCommandArgument2.hpp>
+#include <com/sun/star/ucb/PropertyCommandArgument.hpp>
#include <com/sun/star/ucb/TransferInfo.hpp>
#include <com/sun/star/uno/Sequence.hxx>
#include <com/sun/star/util/DateTime.hpp>
@@ -529,7 +530,7 @@ uno::Sequence< ucb::CommandInfo > Conten
{
osl::Guard< osl::Mutex > aGuard( m_aMutex );
- uno::Sequence< ucb::CommandInfo > aCmdInfo( 8 );
+ uno::Sequence< ucb::CommandInfo > aCmdInfo( 10 );
///////////////////////////////////////////////////////////////
// Mandatory commands
@@ -594,6 +595,18 @@ uno::Sequence< ucb::CommandInfo > Conten
-1,
getCppuType( static_cast<
ucb::PostCommandArgument2 * >( 0 ) ) );
+ aCmdInfo[ 8 ] =
+ ucb::CommandInfo(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "addProperty" ) ),
+ -1,
+ getCppuType( static_cast<
+ ucb::PropertyCommandArgument * >( 0 ) ) );
+ aCmdInfo[ 9 ] =
+ ucb::CommandInfo(
+ rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "removeProperty" ) ),
+ -1,
+ getCppuType( static_cast<
+ rtl::OUString * >( 0 ) ) );
sal_Bool bFolder = sal_False;