#112923# storage switching for OOo embedded object
This commit is contained in:
@@ -2,9 +2,9 @@
|
|||||||
*
|
*
|
||||||
* $RCSfile: persistence.cxx,v $
|
* $RCSfile: persistence.cxx,v $
|
||||||
*
|
*
|
||||||
* $Revision: 1.3 $
|
* $Revision: 1.4 $
|
||||||
*
|
*
|
||||||
* last change: $Author: mav $ $Date: 2003-11-14 15:24:24 $
|
* last change: $Author: mav $ $Date: 2003-11-25 13:21:47 $
|
||||||
*
|
*
|
||||||
* The Contents of this file are made available subject to the terms of
|
* The Contents of this file are made available subject to the terms of
|
||||||
* either of the following licenses
|
* either of the following licenses
|
||||||
@@ -213,6 +213,38 @@ uno::Reference< io::XInputStream > createTempInpStreamFromStor(
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------
|
||||||
|
void OCommonEmbeddedObject::SwitchOwnPersistence( const uno::Reference< embed::XStorage >& xNewParentStorage,
|
||||||
|
const uno::Reference< embed::XStorage >& xNewObjectStorage,
|
||||||
|
const ::rtl::OUString& aNewName )
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
uno::Reference< lang::XComponent > xComponent( m_xObjectStorage, uno::UNO_QUERY );
|
||||||
|
OSL_ENSURE( xComponent.is(), "Wrong storage implementation!" );
|
||||||
|
if ( xComponent.is() )
|
||||||
|
xComponent->dispose();
|
||||||
|
}
|
||||||
|
catch ( uno::Exception& )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
m_xObjectStorage = xNewObjectStorage;
|
||||||
|
m_xParentStorage = xNewParentStorage;
|
||||||
|
m_aEntryName = aNewName;
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------
|
||||||
|
void OCommonEmbeddedObject::SwitchOwnPersistence( const uno::Reference< embed::XStorage >& xNewParentStorage,
|
||||||
|
const ::rtl::OUString& aNewName )
|
||||||
|
{
|
||||||
|
sal_Int32 nStorageMode = m_bReadOnly ? embed::ElementModes::ELEMENT_READ : embed::ElementModes::ELEMENT_READWRITE;
|
||||||
|
|
||||||
|
uno::Reference< embed::XStorage > xNewOwnStorage = xNewParentStorage->openStorageElement( aNewName, nStorageMode );
|
||||||
|
OSL_ENSURE( xNewOwnStorage.is(), "The method can not return empty reference!" );
|
||||||
|
|
||||||
|
SwitchOwnPersistence( xNewParentStorage, xNewOwnStorage, aNewName );
|
||||||
|
}
|
||||||
|
|
||||||
//------------------------------------------------------
|
//------------------------------------------------------
|
||||||
uno::Reference< frame::XModel > OCommonEmbeddedObject::InitNewDocument_Impl()
|
uno::Reference< frame::XModel > OCommonEmbeddedObject::InitNewDocument_Impl()
|
||||||
{
|
{
|
||||||
@@ -565,9 +597,7 @@ void SAL_CALL OCommonEmbeddedObject::setPersistentEntry(
|
|||||||
|
|
||||||
sal_Int32 nStorageMode = m_bReadOnly ? embed::ElementModes::ELEMENT_READ : embed::ElementModes::ELEMENT_READWRITE;
|
sal_Int32 nStorageMode = m_bReadOnly ? embed::ElementModes::ELEMENT_READ : embed::ElementModes::ELEMENT_READWRITE;
|
||||||
|
|
||||||
m_xObjectStorage = xStorage->openStorageElement( sEntName, nStorageMode );
|
SwitchOwnPersistence( xStorage, sEntName );
|
||||||
m_xParentStorage = xStorage;
|
|
||||||
m_aEntryName = sEntName;
|
|
||||||
|
|
||||||
if ( nEntryConnectionMode == embed::EntryInitModes::ENTRY_DEFAULT_INIT )
|
if ( nEntryConnectionMode == embed::EntryInitModes::ENTRY_DEFAULT_INIT )
|
||||||
{
|
{
|
||||||
@@ -800,11 +830,16 @@ void SAL_CALL OCommonEmbeddedObject::saveCompleted( sal_Bool bUseNew )
|
|||||||
if ( bUseNew )
|
if ( bUseNew )
|
||||||
{
|
{
|
||||||
// the link object is not linked any more
|
// the link object is not linked any more
|
||||||
|
// TODO: the link will have own persistence, so the link will stay the link
|
||||||
m_bIsLink = sal_False;
|
m_bIsLink = sal_False;
|
||||||
m_aLinkURL = ::rtl::OUString();
|
m_aLinkURL = ::rtl::OUString();
|
||||||
|
|
||||||
|
SwitchOwnPersistence( m_xNewParentStorage, m_xNewObjectStorage, m_aNewEntryName );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
try {
|
try {
|
||||||
uno::Reference< lang::XComponent > xComponent( m_xObjectStorage, uno::UNO_QUERY );
|
uno::Reference< lang::XComponent > xComponent( m_xNewObjectStorage, uno::UNO_QUERY );
|
||||||
OSL_ENSURE( xComponent.is(), "Wrong storage implementation!" );
|
OSL_ENSURE( xComponent.is(), "Wrong storage implementation!" );
|
||||||
if ( xComponent.is() )
|
if ( xComponent.is() )
|
||||||
xComponent->dispose();
|
xComponent->dispose();
|
||||||
@@ -812,10 +847,6 @@ void SAL_CALL OCommonEmbeddedObject::saveCompleted( sal_Bool bUseNew )
|
|||||||
catch ( uno::Exception& )
|
catch ( uno::Exception& )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
m_xObjectStorage = m_xNewObjectStorage;
|
|
||||||
m_xParentStorage = m_xNewParentStorage;
|
|
||||||
m_aEntryName = m_aNewEntryName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_xNewObjectStorage = uno::Reference< embed::XStorage >();
|
m_xNewObjectStorage = uno::Reference< embed::XStorage >();
|
||||||
@@ -979,9 +1010,8 @@ void SAL_CALL OCommonEmbeddedObject::breakLink( const uno::Reference< embed::XSt
|
|||||||
m_bReadOnly = sal_False;
|
m_bReadOnly = sal_False;
|
||||||
sal_Int32 nStorageMode = embed::ElementModes::ELEMENT_READWRITE;
|
sal_Int32 nStorageMode = embed::ElementModes::ELEMENT_READWRITE;
|
||||||
|
|
||||||
m_xObjectStorage = xStorage->openStorageElement( sEntName, nStorageMode );
|
if ( m_xParentStorage != xStorage || !m_aEntryName.equals( sEntName ) )
|
||||||
m_xParentStorage = xStorage;
|
SwitchOwnPersistence( xStorage, sEntName );
|
||||||
m_aEntryName = sEntName;
|
|
||||||
|
|
||||||
// for linked object it means that it becomes embedded object
|
// for linked object it means that it becomes embedded object
|
||||||
// the document must switch it's persistence also
|
// the document must switch it's persistence also
|
||||||
|
@@ -2,9 +2,9 @@
|
|||||||
*
|
*
|
||||||
* $RCSfile: commonembobj.hxx,v $
|
* $RCSfile: commonembobj.hxx,v $
|
||||||
*
|
*
|
||||||
* $Revision: 1.6 $
|
* $Revision: 1.7 $
|
||||||
*
|
*
|
||||||
* last change: $Author: mav $ $Date: 2003-11-18 12:47:08 $
|
* last change: $Author: mav $ $Date: 2003-11-25 13:21:46 $
|
||||||
*
|
*
|
||||||
* The Contents of this file are made available subject to the terms of
|
* The Contents of this file are made available subject to the terms of
|
||||||
* either of the following licenses
|
* either of the following licenses
|
||||||
@@ -191,6 +191,15 @@ class OCommonEmbeddedObject : public ::com::sun::star::embed::XEmbeddedObject
|
|||||||
private:
|
private:
|
||||||
void CommonInit_Impl();
|
void CommonInit_Impl();
|
||||||
|
|
||||||
|
void SwitchOwnPersistence(
|
||||||
|
const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xNewParentStorage,
|
||||||
|
const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xNewObjectStorage,
|
||||||
|
const ::rtl::OUString& aNewName );
|
||||||
|
|
||||||
|
void SwitchOwnPersistence(
|
||||||
|
const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xNewParentStorage,
|
||||||
|
const ::rtl::OUString& aNewName );
|
||||||
|
|
||||||
::rtl::OUString GetDocumentServiceName() { return m_aDocServiceName; }
|
::rtl::OUString GetDocumentServiceName() { return m_aDocServiceName; }
|
||||||
|
|
||||||
::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > StoreDocumentToTempStream_Impl();
|
::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > StoreDocumentToTempStream_Impl();
|
||||||
|
Reference in New Issue
Block a user