summaryrefslogtreecommitdiff
path: root/ucb
diff options
context:
space:
mode:
authorCédric Bosdonnat <cedric.bosdonnat@free.fr>2012-10-11 14:14:48 +0200
committerCédric Bosdonnat <cedric.bosdonnat@free.fr>2012-10-11 17:31:18 +0200
commitc767f82403635221af58998a3265e38e8d19e76d (patch)
treeafaa73f1815ec9b55dfec569e12d4b62f897e0c8 /ucb
parent0c0e5c82c7d9fb790d0894c28af5cff99d71a910 (diff)
CMIS: Implemented the CheckOut button of the InfoBar
Implementing it needed: + Adding XCmisDocument::checkOut method and implement it in SfxBaseModel + Moving the CMIS properties loading into a SfxBaseModel private method to factorize code. + Adding the SfxInfoBarContainerChild registration in all modules Change-Id: I35bcb53cd2feff354aa5d9245897d0631cc924a0
Diffstat (limited to 'ucb')
-rw-r--r--ucb/source/ucp/cmis/cmis_content.cxx46
-rw-r--r--ucb/source/ucp/cmis/cmis_url.cxx6
-rw-r--r--ucb/source/ucp/cmis/cmis_url.hxx1
3 files changed, 53 insertions, 0 deletions
diff --git a/ucb/source/ucp/cmis/cmis_content.cxx b/ucb/source/ucp/cmis/cmis_content.cxx
index fbfa83bda138..0baee4fdea16 100644
--- a/ucb/source/ucp/cmis/cmis_content.cxx
+++ b/ucb/source/ucp/cmis/cmis_content.cxx
@@ -1005,6 +1005,9 @@ namespace cmis
( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "open" ) ),
-1, getCppuType( static_cast<ucb::OpenCommandArgument2 * >( 0 ) ) ),
+ // Mandatory CMIS-only commands
+ ucb::CommandInfo ( rtl::OUString( "checkout" ), -1, getCppuVoidType() ),
+
// Folder Only, omitted if not a folder
ucb::CommandInfo
( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "transfer" ) ),
@@ -1187,6 +1190,49 @@ namespace cmis
rtl::OUString::createFromAscii( e.what() ) );
}
}
+ else if ( aCommand.Name == "checkout" )
+ {
+ try
+ {
+ // Checkout the document if possible
+ libcmis::DocumentPtr pDoc = boost::dynamic_pointer_cast< libcmis::Document >( getObject( xEnv ) );
+ if ( pDoc.get( ) == NULL )
+ {
+ ucbhelper::cancelCommandExecution(
+ ucb::IOErrorCode_GENERAL,
+ uno::Sequence< uno::Any >( 0 ),
+ xEnv,
+ "Checkout only supported by documents" );
+ }
+ libcmis::DocumentPtr pPwc = pDoc->checkOut( );
+
+ // Compute the URL of the Private Working Copy (PWC)
+ URL aCmisUrl( m_sURL );
+ vector< string > aPaths = pPwc->getPaths( );
+ if ( !aPaths.empty() )
+ {
+ string sPath = aPaths.front( );
+ aCmisUrl.setObjectPath( STD_TO_OUSTR( sPath ) );
+ }
+ else
+ {
+ // We may have unfiled PWC depending on the server, those
+ // won't have any path, use their ID instead
+ string sId = pPwc->getId( );
+ aCmisUrl.setObjectId( STD_TO_OUSTR( sId ) );
+ }
+ aRet <<= aCmisUrl.asString( );
+ }
+ catch ( const libcmis::Exception& e )
+ {
+ SAL_INFO( "cmisucp", "Unexpected libcmis exception: " << e.what( ) );
+ ucbhelper::cancelCommandExecution(
+ ucb::IOErrorCode_GENERAL,
+ uno::Sequence< uno::Any >( 0 ),
+ xEnv,
+ rtl::OUString::createFromAscii( e.what() ) );
+ }
+ }
else
{
SAL_INFO( "cmisucp", "Unknown command to execute" );
diff --git a/ucb/source/ucp/cmis/cmis_url.cxx b/ucb/source/ucp/cmis/cmis_url.cxx
index e184d709d745..dfd0cc73e5cd 100644
--- a/ucb/source/ucp/cmis/cmis_url.cxx
+++ b/ucb/source/ucp/cmis/cmis_url.cxx
@@ -89,6 +89,12 @@ namespace cmis
m_sId = rtl::OUString( );
}
+ void URL::setObjectId( rtl::OUString sId )
+ {
+ m_sPath = rtl::OUString( );
+ m_sId = sId;
+ }
+
rtl::OUString URL::asString( )
{
rtl::OUString sUrl;
diff --git a/ucb/source/ucp/cmis/cmis_url.hxx b/ucb/source/ucp/cmis/cmis_url.hxx
index 6283d7aa874e..e2912d4bb494 100644
--- a/ucb/source/ucp/cmis/cmis_url.hxx
+++ b/ucb/source/ucp/cmis/cmis_url.hxx
@@ -56,6 +56,7 @@ namespace cmis
rtl::OUString& getUsername( ) { return m_sUser; }
rtl::OUString& getPassword( ) { return m_sPass; }
void setObjectPath( rtl::OUString sPath );
+ void setObjectId( rtl::OUString sId );
rtl::OUString asString( );
};