From d259e07e851cafa4e0ca68f7ab18535e82c7aed5 Mon Sep 17 00:00:00 2001 From: Cao Cuong Ngo Date: Tue, 9 Jul 2013 18:54:35 +0200 Subject: CMIS properties dialog: update properties Change-Id: Ia506713b61dc6c1343eac3640863c86a2fc3f18f --- sfx2/source/dialog/dinfdlg.cxx | 22 ++++++++++++++++++++++ sfx2/source/doc/objserv.cxx | 5 ++++- sfx2/source/doc/sfxbasemodel.cxx | 23 +++++++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) (limited to 'sfx2') diff --git a/sfx2/source/dialog/dinfdlg.cxx b/sfx2/source/dialog/dinfdlg.cxx index d5a68c8c6621..e2de7c9b5b03 100644 --- a/sfx2/source/dialog/dinfdlg.cxx +++ b/sfx2/source/dialog/dinfdlg.cxx @@ -576,6 +576,28 @@ std::vector< CmisProperty* > SfxDocumentInfoItem::GetCmisProperties() const return aRet; } +uno::Sequence< document::CmisProperty > SfxDocumentInfoItem::GetCmisPropertiesSeq() const +{ + Sequence< document::CmisProperty > aPropertiesSeq( m_aCmisProperties.size() ); + sal_Int32 i = 0; + std::vector< CmisProperty* >::const_iterator pIter; + for ( pIter = m_aCmisProperties.begin(); + pIter != m_aCmisProperties.end(); ++pIter, ++i ) + { + CmisProperty* aProp = *pIter; + aPropertiesSeq[i].Id = aProp->m_sId; + aPropertiesSeq[i].Name = aProp->m_sName; + aPropertiesSeq[i].Updatable = aProp->m_bUpdatable; + aPropertiesSeq[i].Required = aProp->m_bRequired; + aPropertiesSeq[i].MultiValued = aProp->m_bMultiValued; + aPropertiesSeq[i].OpenChoice = aProp->m_bOpenChoice; + aPropertiesSeq[i].Choices = aProp->m_aChoices; + aPropertiesSeq[i].Value = aProp->m_aValue; + } + + return aPropertiesSeq; +} + void SfxDocumentInfoItem::ClearCmisProperties() { for ( sal_uInt32 i = 0; i < m_aCmisProperties.size(); i++ ) diff --git a/sfx2/source/doc/objserv.cxx b/sfx2/source/doc/objserv.cxx index f7b7a7fc4a4e..b89343ec7440 100644 --- a/sfx2/source/doc/objserv.cxx +++ b/sfx2/source/doc/objserv.cxx @@ -518,10 +518,13 @@ void SfxObjectShell::ExecFile_Impl(SfxRequest &rReq) { // user has done some changes to DocumentInfo pDocInfoItem->UpdateDocumentInfo(getDocProperties()); + uno::Sequence< document::CmisProperty > aNewCmisProperties = + pDocInfoItem->GetCmisPropertiesSeq( ); + xCmisDoc->updateCmisProperties( aNewCmisProperties ); SetUseUserData( ((const SfxDocumentInfoItem *)pDocInfoItem)->IsUseUserData() ); // add data from dialog for possible recording purpose rReq.AppendItem( SfxDocumentInfoItem( GetTitle(), - getDocProperties(), aCmisProperties, IsUseUserData() ) ); + getDocProperties(), aNewCmisProperties, IsUseUserData() ) ); } rReq.Done(); diff --git a/sfx2/source/doc/sfxbasemodel.cxx b/sfx2/source/doc/sfxbasemodel.cxx index 8ee40854fe21..1fc65d2279af 100644 --- a/sfx2/source/doc/sfxbasemodel.cxx +++ b/sfx2/source/doc/sfxbasemodel.cxx @@ -2474,6 +2474,29 @@ void SAL_CALL SfxBaseModel::setCmisProperties( const Sequence< document::CmisPro m_pData->m_cmisProperties = _cmisproperties; } +void SAL_CALL SfxBaseModel::updateCmisProperties( const Sequence< document::CmisProperty >& aProperties ) + throw ( RuntimeException ) +{ + SfxMedium* pMedium = m_pData->m_pObjectShell->GetMedium(); + if ( pMedium ) + { + try + { + ::ucbhelper::Content aContent( pMedium->GetName( ), + Reference(), + comphelper::getProcessComponentContext() );\ + + aContent.executeCommand( "updateProperties", uno::makeAny( aProperties ) ); + loadCmisProperties( ); + } + catch (const Exception & e) + { + throw RuntimeException( e.Message, e.Context ); + } + } + +} + void SAL_CALL SfxBaseModel::checkOut( ) throw ( RuntimeException ) { SfxMedium* pMedium = m_pData->m_pObjectShell->GetMedium(); -- cgit