INTEGRATION: CWS leanobjects (1.2.32); FILE MERGED
2004/11/23 13:54:56 mba 1.2.32.5: #i37278#: wrong return value 2004/11/22 09:19:40 mba 1.2.32.4: #i37278#: some problems with moving and copying objects 2004/11/19 14:57:27 mba 1.2.32.3: #i37278#: allow to load objects on demand 2004/11/18 16:48:10 mba 1.2.32.2: #i37278#: make objects loadable on demand 2004/11/18 10:58:40 mba 1.2.32.1: #i37278#: make objects loadable on demand
This commit is contained in:
parent
3bd4732adc
commit
67490613ca
@ -2,9 +2,9 @@
|
|||||||
*
|
*
|
||||||
* $RCSfile: embeddedobjectcontainer.cxx,v $
|
* $RCSfile: embeddedobjectcontainer.cxx,v $
|
||||||
*
|
*
|
||||||
* $Revision: 1.3 $
|
* $Revision: 1.4 $
|
||||||
*
|
*
|
||||||
* last change: $Author: obo $ $Date: 2004-11-17 15:35:58 $
|
* last change: $Author: rt $ $Date: 2004-11-26 17:12:29 $
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@ -205,6 +205,27 @@ EmbeddedObjectContainer::~EmbeddedObjectContainer()
|
|||||||
delete pImpl;
|
delete pImpl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EmbeddedObjectContainer::CloseEmbeddedObjects()
|
||||||
|
{
|
||||||
|
EmbeddedObjectContainerNameMap::iterator aIt = pImpl->maObjectContainer.begin();
|
||||||
|
while ( aIt != pImpl->maObjectContainer.end() )
|
||||||
|
{
|
||||||
|
uno::Reference < util::XCloseable > xClose( (*aIt).second, uno::UNO_QUERY );
|
||||||
|
if ( xClose.is() )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
xClose->close( sal_True );
|
||||||
|
}
|
||||||
|
catch ( uno::Exception& )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
aIt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
::rtl::OUString EmbeddedObjectContainer::CreateUniqueObjectName()
|
::rtl::OUString EmbeddedObjectContainer::CreateUniqueObjectName()
|
||||||
{
|
{
|
||||||
::rtl::OUString aPersistName = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Object ") );
|
::rtl::OUString aPersistName = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Object ") );
|
||||||
@ -319,10 +340,6 @@ uno::Reference < embed::XEmbeddedObject > EmbeddedObjectContainer::GetEmbeddedOb
|
|||||||
// insert object into my list
|
// insert object into my list
|
||||||
AddEmbeddedObject( xObj, rName );
|
AddEmbeddedObject( xObj, rName );
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO/LATER: necessary optimization: running state should not be required
|
|
||||||
if ( xObj.is() && xObj->getCurrentState() == embed::EmbedStates::LOADED )
|
|
||||||
xObj->changeState( embed::EmbedStates::RUNNING );
|
|
||||||
}
|
}
|
||||||
catch ( uno::Exception& )
|
catch ( uno::Exception& )
|
||||||
{
|
{
|
||||||
@ -351,7 +368,7 @@ uno::Reference < embed::XEmbeddedObject > EmbeddedObjectContainer::CreateEmbedde
|
|||||||
|
|
||||||
AddEmbeddedObject( xObj, rNewName );
|
AddEmbeddedObject( xObj, rNewName );
|
||||||
|
|
||||||
// TODO/LATER: necessary optimization: running state should not be required
|
// a freshly created object should be running always
|
||||||
if ( xObj.is() && xObj->getCurrentState() == embed::EmbedStates::LOADED )
|
if ( xObj.is() && xObj->getCurrentState() == embed::EmbedStates::LOADED )
|
||||||
xObj->changeState( embed::EmbedStates::RUNNING );
|
xObj->changeState( embed::EmbedStates::RUNNING );
|
||||||
}
|
}
|
||||||
@ -512,9 +529,12 @@ uno::Reference < embed::XEmbeddedObject > EmbeddedObjectContainer::InsertEmbedde
|
|||||||
uno::Reference < embed::XEmbeddedObject > xRet = GetEmbeddedObject( rNewName );
|
uno::Reference < embed::XEmbeddedObject > xRet = GetEmbeddedObject( rNewName );
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if ( xRet.is() )
|
||||||
// no object could be created, so withdraw insertion
|
// no object could be created, so withdraw insertion
|
||||||
if ( !xRet.is() )
|
|
||||||
pImpl->mxStorage->removeElement( rNewName );
|
pImpl->mxStorage->removeElement( rNewName );
|
||||||
|
else
|
||||||
|
// freshly created objects always should be running!
|
||||||
|
xRet->changeState( embed::EmbedStates::RUNNING );
|
||||||
}
|
}
|
||||||
catch ( uno::Exception& )
|
catch ( uno::Exception& )
|
||||||
{
|
{
|
||||||
@ -537,6 +557,9 @@ uno::Reference < embed::XEmbeddedObject > EmbeddedObjectContainer::InsertEmbedde
|
|||||||
pImpl->mxStorage, rNewName, aMedium, uno::Sequence < beans::PropertyValue >() ), uno::UNO_QUERY );
|
pImpl->mxStorage, rNewName, aMedium, uno::Sequence < beans::PropertyValue >() ), uno::UNO_QUERY );
|
||||||
uno::Reference < embed::XEmbedPersist > xPersist( xObj, uno::UNO_QUERY );
|
uno::Reference < embed::XEmbedPersist > xPersist( xObj, uno::UNO_QUERY );
|
||||||
|
|
||||||
|
// freshly created objects always should be running!
|
||||||
|
xObj->changeState( embed::EmbedStates::RUNNING );
|
||||||
|
|
||||||
// possible optimization: store later!
|
// possible optimization: store later!
|
||||||
if ( xPersist.is())
|
if ( xPersist.is())
|
||||||
xPersist->storeOwn();
|
xPersist->storeOwn();
|
||||||
@ -563,7 +586,7 @@ uno::Reference < embed::XEmbeddedObject > EmbeddedObjectContainer::InsertEmbedde
|
|||||||
xObj = uno::Reference < embed::XEmbeddedObject >( xFactory->createInstanceLink(
|
xObj = uno::Reference < embed::XEmbeddedObject >( xFactory->createInstanceLink(
|
||||||
pImpl->mxStorage, rNewName, aMedium, uno::Sequence < beans::PropertyValue >() ), uno::UNO_QUERY );
|
pImpl->mxStorage, rNewName, aMedium, uno::Sequence < beans::PropertyValue >() ), uno::UNO_QUERY );
|
||||||
|
|
||||||
// TODO/LATER: necessary optimization: running state should not be required
|
// a freshly created object should be in running state
|
||||||
if ( xObj.is() && xObj->getCurrentState() == embed::EmbedStates::LOADED )
|
if ( xObj.is() && xObj->getCurrentState() == embed::EmbedStates::LOADED )
|
||||||
{
|
{
|
||||||
uno::Sequence< sal_Int32 > aSupportedStates = xObj->getReachableStates();
|
uno::Sequence< sal_Int32 > aSupportedStates = xObj->getReachableStates();
|
||||||
@ -584,16 +607,59 @@ uno::Reference < embed::XEmbeddedObject > EmbeddedObjectContainer::InsertEmbedde
|
|||||||
return xObj;
|
return xObj;
|
||||||
}
|
}
|
||||||
|
|
||||||
uno::Reference < embed::XEmbeddedObject > EmbeddedObjectContainer::CopyEmbeddedObject( const uno::Reference < embed::XEmbeddedObject >& xObj, ::rtl::OUString& rName )
|
sal_Bool EmbeddedObjectContainer::CopyEmbeddedObject( const uno::Reference < embed::XEmbeddedObject >& xObj, ::rtl::OUString& rName )
|
||||||
{
|
{
|
||||||
uno::Reference < embed::XEmbeddedObject > xRet;
|
|
||||||
if ( !rName.getLength() )
|
if ( !rName.getLength() )
|
||||||
rName = CreateUniqueObjectName();
|
rName = CreateUniqueObjectName();
|
||||||
|
|
||||||
if ( StoreEmbeddedObject( xObj, rName, sal_True ) )
|
return StoreEmbeddedObject( xObj, rName, sal_True );
|
||||||
// create an object from it
|
}
|
||||||
xRet = GetEmbeddedObject( rName );
|
|
||||||
return xRet;
|
sal_Bool EmbeddedObjectContainer::MoveEmbeddedObject( EmbeddedObjectContainer& rSrc, const uno::Reference < embed::XEmbeddedObject >& xObj, ::rtl::OUString& rName )
|
||||||
|
{
|
||||||
|
// get the object name before(!) it is assigned to a new storage
|
||||||
|
uno::Reference < embed::XEmbedPersist > xPersist( xObj, uno::UNO_QUERY );
|
||||||
|
::rtl::OUString aName;
|
||||||
|
if ( xPersist.is() )
|
||||||
|
aName = xPersist->getEntryName();
|
||||||
|
|
||||||
|
// now move the object to the new container; the returned name is the new persist name in this container
|
||||||
|
sal_Bool bRet = InsertEmbeddedObject( xObj, rName );
|
||||||
|
if ( bRet )
|
||||||
|
{
|
||||||
|
// now remove the object from the former container
|
||||||
|
bRet = sal_False;
|
||||||
|
EmbeddedObjectContainerNameMap::iterator aIt = rSrc.pImpl->maObjectContainer.begin();
|
||||||
|
while ( aIt != rSrc.pImpl->maObjectContainer.end() )
|
||||||
|
{
|
||||||
|
if ( (*aIt).second == xObj )
|
||||||
|
{
|
||||||
|
rSrc.pImpl->maObjectContainer.erase( aIt );
|
||||||
|
bRet = sal_True;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
aIt++;
|
||||||
|
}
|
||||||
|
|
||||||
|
OSL_ENSURE( bRet, "Object not found for removal!" );
|
||||||
|
if ( xPersist.is() )
|
||||||
|
{
|
||||||
|
// now it's time to remove the storage from the container storage
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if ( xPersist.is() )
|
||||||
|
rSrc.pImpl->mxStorage->removeElement( aName );
|
||||||
|
}
|
||||||
|
catch ( uno::Exception& )
|
||||||
|
{
|
||||||
|
OSL_ENSURE( sal_False, "Failed to remove object from storage!" );
|
||||||
|
bRet = sal_False;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return bRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
sal_Bool EmbeddedObjectContainer::RemoveEmbeddedObject( const ::rtl::OUString& rName, sal_Bool bClose )
|
sal_Bool EmbeddedObjectContainer::RemoveEmbeddedObject( const ::rtl::OUString& rName, sal_Bool bClose )
|
||||||
@ -637,8 +703,9 @@ sal_Bool EmbeddedObjectContainer::MoveEmbeddedObject( const ::rtl::OUString& rNa
|
|||||||
uno::Reference < embed::XStorage > xOld = pImpl->mxStorage->openStorageElement( rName, embed::ElementModes::READ );
|
uno::Reference < embed::XStorage > xOld = pImpl->mxStorage->openStorageElement( rName, embed::ElementModes::READ );
|
||||||
uno::Reference < embed::XStorage > xNew = rCnt.pImpl->mxStorage->openStorageElement( rName, embed::ElementModes::READWRITE );
|
uno::Reference < embed::XStorage > xNew = rCnt.pImpl->mxStorage->openStorageElement( rName, embed::ElementModes::READWRITE );
|
||||||
xOld->copyToStorage( xNew );
|
xOld->copyToStorage( xNew );
|
||||||
return sal_True;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return sal_True;
|
||||||
}
|
}
|
||||||
catch ( uno::Exception& )
|
catch ( uno::Exception& )
|
||||||
{
|
{
|
||||||
@ -739,9 +806,6 @@ sal_Bool EmbeddedObjectContainer::RemoveEmbeddedObject( const uno::Reference < e
|
|||||||
else
|
else
|
||||||
// objects without persistence need to stay in running state if they shall not be closed
|
// objects without persistence need to stay in running state if they shall not be closed
|
||||||
xObj->changeState( embed::EmbedStates::RUNNING );
|
xObj->changeState( embed::EmbedStates::RUNNING );
|
||||||
|
|
||||||
// remove replacement image (if there is one)
|
|
||||||
RemoveGraphicStream( aName );
|
|
||||||
}
|
}
|
||||||
catch ( uno::Exception& )
|
catch ( uno::Exception& )
|
||||||
{
|
{
|
||||||
@ -749,18 +813,6 @@ sal_Bool EmbeddedObjectContainer::RemoveEmbeddedObject( const uno::Reference < e
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// now it's time to remove the storage from the container storage
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if ( xPersist.is() )
|
|
||||||
pImpl->mxStorage->removeElement( aName );
|
|
||||||
}
|
|
||||||
catch ( uno::Exception& )
|
|
||||||
{
|
|
||||||
return sal_False;
|
|
||||||
}
|
|
||||||
|
|
||||||
// forget object
|
|
||||||
sal_Bool bFound = sal_False;
|
sal_Bool bFound = sal_False;
|
||||||
EmbeddedObjectContainerNameMap::iterator aIt = pImpl->maObjectContainer.begin();
|
EmbeddedObjectContainerNameMap::iterator aIt = pImpl->maObjectContainer.begin();
|
||||||
while ( aIt != pImpl->maObjectContainer.end() )
|
while ( aIt != pImpl->maObjectContainer.end() )
|
||||||
@ -771,11 +823,28 @@ sal_Bool EmbeddedObjectContainer::RemoveEmbeddedObject( const uno::Reference < e
|
|||||||
bFound = sal_True;
|
bFound = sal_True;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
aIt++;
|
aIt++;
|
||||||
}
|
}
|
||||||
|
|
||||||
OSL_ENSURE( bFound, "Removing unknown object!" );
|
OSL_ENSURE( bFound, "Object not found for removal!" );
|
||||||
|
if ( xPersist.is() )
|
||||||
|
{
|
||||||
|
// remove replacement image (if there is one)
|
||||||
|
RemoveGraphicStream( aName );
|
||||||
|
|
||||||
|
// now it's time to remove the storage from the container storage
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if ( xPersist.is() )
|
||||||
|
pImpl->mxStorage->removeElement( aName );
|
||||||
|
}
|
||||||
|
catch ( uno::Exception& )
|
||||||
|
{
|
||||||
|
OSL_ENSURE( sal_False, "Failed to remove object from storage!" );
|
||||||
|
return sal_False;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return sal_True;
|
return sal_True;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user