Kaydet (Commit) 3d5d6017 authored tarafından Ariel Constenla-Haile's avatar Ariel Constenla-Haile

i121935 - UCB: new "addProperty" and "removeProperty" commands

üst e7b7b284
...@@ -459,6 +459,65 @@ published service Content ...@@ -459,6 +459,65 @@ published service Content
</p> </p>
</td> </td>
</tr> </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> </tbody>
</table> </table>
...@@ -804,7 +863,7 @@ published service Content ...@@ -804,7 +863,7 @@ published service Content
<td>TargetURL</td> <td>TargetURL</td>
<td>string</td> <td>string</td>
<td>for contents that are links to other contents, contains the URL of <td>for contents that are links to other contents, contains the URL of
the target content</td> the target content</td>
</tr> </tr>
<tr> <tr>
<td>TimeLimitStore</td> <td>TimeLimitStore</td>
...@@ -815,7 +874,7 @@ published service Content ...@@ -815,7 +874,7 @@ published service Content
<td>UserName</td> <td>UserName</td>
<td>string</td> <td>string</td>
<td>contains a user name. (e.g. the user name needed to access a <td>contains a user name. (e.g. the user name needed to access a
POP3-Account)</td> POP3-Account)</td>
</tr> </tr>
<tr> <tr>
<td>VerificationMode</td> <td>VerificationMode</td>
......
/**************************************************************
*
* 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
...@@ -37,7 +37,7 @@ IDLFILES=\ ...@@ -37,7 +37,7 @@ IDLFILES=\
AlreadyInitializedException.idl\ AlreadyInitializedException.idl\
AnyCompareFactory.idl\ AnyCompareFactory.idl\
AuthenticationRequest.idl\ AuthenticationRequest.idl\
URLAuthenticationRequest.idl\ CHAOSProgressStart.idl\
CachedContentResultSet.idl\ CachedContentResultSet.idl\
CachedContentResultSetFactory.idl\ CachedContentResultSetFactory.idl\
CachedContentResultSetStub.idl\ CachedContentResultSetStub.idl\
...@@ -46,7 +46,6 @@ IDLFILES=\ ...@@ -46,7 +46,6 @@ IDLFILES=\
CachedDynamicResultSetFactory.idl\ CachedDynamicResultSetFactory.idl\
CachedDynamicResultSetStub.idl\ CachedDynamicResultSetStub.idl\
CachedDynamicResultSetStubFactory.idl\ CachedDynamicResultSetStubFactory.idl\
CHAOSProgressStart.idl\
CertificateValidationRequest.idl\ CertificateValidationRequest.idl\
Command.idl\ Command.idl\
CommandAbortedException.idl\ CommandAbortedException.idl\
...@@ -83,6 +82,8 @@ IDLFILES=\ ...@@ -83,6 +82,8 @@ IDLFILES=\
Error.idl\ Error.idl\
ExpandContentProvider.idl\ ExpandContentProvider.idl\
ExportStreamInfo.idl\ ExportStreamInfo.idl\
FTPContent.idl\
FTPContentProvider.idl\
FetchError.idl\ FetchError.idl\
FetchResult.idl\ FetchResult.idl\
FileContent.idl\ FileContent.idl\
...@@ -91,10 +92,8 @@ IDLFILES=\ ...@@ -91,10 +92,8 @@ IDLFILES=\
FolderList.idl\ FolderList.idl\
FolderListCommand.idl\ FolderListCommand.idl\
FolderListEntry.idl\ FolderListEntry.idl\
FTPContent.idl\
FTPContentProvider.idl\
GlobalTransferCommandArgument.idl\
GIOContentProvider.idl\ GIOContentProvider.idl\
GlobalTransferCommandArgument.idl\
GnomeVFSContentProvider.idl\ GnomeVFSContentProvider.idl\
GnomeVFSDocumentContent.idl\ GnomeVFSDocumentContent.idl\
GnomeVFSFolderContent.idl\ GnomeVFSFolderContent.idl\
...@@ -108,6 +107,7 @@ IDLFILES=\ ...@@ -108,6 +107,7 @@ IDLFILES=\
HierarchyFolderContent.idl\ HierarchyFolderContent.idl\
HierarchyLinkContent.idl\ HierarchyLinkContent.idl\
HierarchyRootFolderContent.idl\ HierarchyRootFolderContent.idl\
IOErrorCode.idl\
IllegalIdentifierException.idl\ IllegalIdentifierException.idl\
InsertCommandArgument.idl\ InsertCommandArgument.idl\
InteractiveAppException.idl\ InteractiveAppException.idl\
...@@ -117,8 +117,8 @@ IDLFILES=\ ...@@ -117,8 +117,8 @@ IDLFILES=\
InteractiveFileIOException.idl\ InteractiveFileIOException.idl\
InteractiveIOException.idl\ InteractiveIOException.idl\
InteractiveLockingException.idl\ InteractiveLockingException.idl\
InteractiveLockingLockedException.idl\
InteractiveLockingLockExpiredException.idl\ InteractiveLockingLockExpiredException.idl\
InteractiveLockingLockedException.idl\
InteractiveLockingNotLockedException.idl\ InteractiveLockingNotLockedException.idl\
InteractiveNetworkConnectException.idl\ InteractiveNetworkConnectException.idl\
InteractiveNetworkException.idl\ InteractiveNetworkException.idl\
...@@ -128,12 +128,11 @@ IDLFILES=\ ...@@ -128,12 +128,11 @@ IDLFILES=\
InteractiveNetworkResolveNameException.idl\ InteractiveNetworkResolveNameException.idl\
InteractiveNetworkWriteException.idl\ InteractiveNetworkWriteException.idl\
InteractiveWrongMediumException.idl\ InteractiveWrongMediumException.idl\
IOErrorCode.idl\
Link.idl\ Link.idl\
ListAction.idl\ ListAction.idl\
ListActionType.idl\ ListActionType.idl\
ListenerAlreadySetException.idl\
ListEvent.idl\ ListEvent.idl\
ListenerAlreadySetException.idl\
Lock.idl\ Lock.idl\
LockDepth.idl\ LockDepth.idl\
LockEntry.idl\ LockEntry.idl\
...@@ -159,6 +158,7 @@ IDLFILES=\ ...@@ -159,6 +158,7 @@ IDLFILES=\
PostCommandArgument2.idl\ PostCommandArgument2.idl\
Priority.idl\ Priority.idl\
PropertiesManager.idl\ PropertiesManager.idl\
PropertyCommandArgument.idl\
PropertySetRegistry.idl\ PropertySetRegistry.idl\
PropertyValueInfo.idl\ PropertyValueInfo.idl\
PropertyValueState.idl\ PropertyValueState.idl\
...@@ -191,10 +191,11 @@ IDLFILES=\ ...@@ -191,10 +191,11 @@ IDLFILES=\
TransferInfo.idl\ TransferInfo.idl\
TransferResult.idl\ TransferResult.idl\
TransientDocumentsContentProvider.idl\ TransientDocumentsContentProvider.idl\
TransientDocumentsRootContent.idl\
TransientDocumentsDocumentContent.idl\ TransientDocumentsDocumentContent.idl\
TransientDocumentsFolderContent.idl\ TransientDocumentsFolderContent.idl\
TransientDocumentsRootContent.idl\
TransientDocumentsStreamContent.idl\ TransientDocumentsStreamContent.idl\
URLAuthenticationRequest.idl\
UniversalContentBroker.idl\ UniversalContentBroker.idl\
UnsupportedCommandException.idl\ UnsupportedCommandException.idl\
UnsupportedDataSinkException.idl\ UnsupportedDataSinkException.idl\
...@@ -262,7 +263,7 @@ IDLFILES=\ ...@@ -262,7 +263,7 @@ IDLFILES=\
XSimpleFileAccess3.idl\ XSimpleFileAccess3.idl\
XSortedDynamicResultSetFactory.idl\ XSortedDynamicResultSetFactory.idl\
XSourceInitialization.idl\ XSourceInitialization.idl\
XWebDAVCommandEnvironment.idl XWebDAVCommandEnvironment.idl \
# ------------------------------------------------------------------ # ------------------------------------------------------------------
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include <string.h> #include <string.h>
#include "DAVProperties.hxx" #include "DAVProperties.hxx"
#include <rtl/ustrbuf.hxx>
using namespace http_dav_ucp; using namespace http_dav_ucp;
...@@ -192,3 +193,42 @@ bool DAVProperties::isUCBDeadProperty( const SerfPropName & rName ) ...@@ -192,3 +193,42 @@ bool DAVProperties::isUCBDeadProperty( const SerfPropName & rName )
rName.nspace, "http://ucb.openoffice.org/dav/props/" ) rName.nspace, "http://ucb.openoffice.org/dav/props/" )
== 0 ) ); == 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();
}
...@@ -50,6 +50,8 @@ struct DAVProperties ...@@ -50,6 +50,8 @@ struct DAVProperties
rtl::OUString & rFullName ); rtl::OUString & rFullName );
static bool isUCBDeadProperty( const SerfPropName & rName ); static bool isUCBDeadProperty( const SerfPropName & rName );
static bool isUCBSpecialProperty( const rtl::OUString & rFullName,
rtl::OUString & rParsedName );
}; };
} // namespace http_dav_ucp } // namespace http_dav_ucp
......
...@@ -48,6 +48,7 @@ namespace com { namespace sun { namespace star { namespace sdbc { ...@@ -48,6 +48,7 @@ namespace com { namespace sun { namespace star { namespace sdbc {
namespace com { namespace sun { namespace star { namespace ucb { namespace com { namespace sun { namespace star { namespace ucb {
struct OpenCommandArgument2; struct OpenCommandArgument2;
struct PropertyCommandArgument;
struct PostCommandArgument2; struct PostCommandArgument2;
struct TransferInfo; struct TransferInfo;
} } } } } } } }
...@@ -192,6 +193,21 @@ private: ...@@ -192,6 +193,21 @@ private:
const com::sun::star::uno::Reference< const com::sun::star::uno::Reference<
com::sun::star::ucb::XCommandEnvironment >& Environment ); 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: public:
Content( const ::com::sun::star::uno::Reference< Content( const ::com::sun::star::uno::Reference<
::com::sun::star::lang::XMultiServiceFactory >& rxSMgr, ::com::sun::star::lang::XMultiServiceFactory >& rxSMgr,
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#include <com/sun/star/ucb/OpenCommandArgument2.hpp> #include <com/sun/star/ucb/OpenCommandArgument2.hpp>
#include <com/sun/star/ucb/InsertCommandArgument.hpp> #include <com/sun/star/ucb/InsertCommandArgument.hpp>
#include <com/sun/star/ucb/PostCommandArgument2.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/TransferInfo.hpp>
#include <com/sun/star/uno/Sequence.hxx> #include <com/sun/star/uno/Sequence.hxx>
#include <com/sun/star/util/DateTime.hpp> #include <com/sun/star/util/DateTime.hpp>
...@@ -529,7 +530,7 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands( ...@@ -529,7 +530,7 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands(
{ {
osl::Guard< osl::Mutex > aGuard( m_aMutex ); osl::Guard< osl::Mutex > aGuard( m_aMutex );
uno::Sequence< ucb::CommandInfo > aCmdInfo( 8 ); uno::Sequence< ucb::CommandInfo > aCmdInfo( 10 );
/////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////
// Mandatory commands // Mandatory commands
...@@ -594,6 +595,18 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands( ...@@ -594,6 +595,18 @@ uno::Sequence< ucb::CommandInfo > Content::getCommands(
-1, -1,
getCppuType( static_cast< getCppuType( static_cast<
ucb::PostCommandArgument2 * >( 0 ) ) ); 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; sal_Bool bFolder = sal_False;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment