1*bfd08df8SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*bfd08df8SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*bfd08df8SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*bfd08df8SAndrew Rist * distributed with this work for additional information 6*bfd08df8SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*bfd08df8SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*bfd08df8SAndrew Rist * "License"); you may not use this file except in compliance 9*bfd08df8SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*bfd08df8SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*bfd08df8SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*bfd08df8SAndrew Rist * software distributed under the License is distributed on an 15*bfd08df8SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*bfd08df8SAndrew Rist * KIND, either express or implied. See the License for the 17*bfd08df8SAndrew Rist * specific language governing permissions and limitations 18*bfd08df8SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*bfd08df8SAndrew Rist *************************************************************/ 21*bfd08df8SAndrew Rist 22*bfd08df8SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #include "precompiled_embeddedobj.hxx" 25cdf0e10cSrcweir #include <com/sun/star/embed/EmbedStates.hpp> 26cdf0e10cSrcweir #include <com/sun/star/embed/EmbedVerbs.hpp> 27cdf0e10cSrcweir #include <com/sun/star/embed/EmbedUpdateModes.hpp> 28cdf0e10cSrcweir #include <com/sun/star/embed/XEmbeddedClient.hpp> 29cdf0e10cSrcweir #include <com/sun/star/embed/XInplaceClient.hpp> 30cdf0e10cSrcweir #include <com/sun/star/embed/XWindowSupplier.hpp> 31cdf0e10cSrcweir #include <com/sun/star/embed/StateChangeInProgressException.hpp> 32cdf0e10cSrcweir #include <com/sun/star/embed/EmbedStates.hpp> 33cdf0e10cSrcweir #include <com/sun/star/embed/Aspects.hpp> 34cdf0e10cSrcweir #include <com/sun/star/embed/EmbedMapUnits.hpp> 35cdf0e10cSrcweir #include <com/sun/star/embed/EntryInitModes.hpp> 36cdf0e10cSrcweir #include <com/sun/star/embed/NoVisualAreaSizeException.hpp> 37cdf0e10cSrcweir #include <com/sun/star/lang/DisposedException.hpp> 38cdf0e10cSrcweir 39cdf0e10cSrcweir #include <cppuhelper/interfacecontainer.h> 40cdf0e10cSrcweir 41cdf0e10cSrcweir #include <dummyobject.hxx> 42cdf0e10cSrcweir 43cdf0e10cSrcweir 44cdf0e10cSrcweir using namespace ::com::sun::star; 45cdf0e10cSrcweir 46cdf0e10cSrcweir //---------------------------------------------- 47cdf0e10cSrcweir void ODummyEmbeddedObject::CheckInit() 48cdf0e10cSrcweir { 49cdf0e10cSrcweir if ( m_bDisposed ) 50cdf0e10cSrcweir throw lang::DisposedException(); 51cdf0e10cSrcweir 52cdf0e10cSrcweir if ( m_nObjectState == -1 ) 53cdf0e10cSrcweir throw embed::WrongStateException( ::rtl::OUString::createFromAscii( "The object has no persistence!\n" ), 54cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 55cdf0e10cSrcweir } 56cdf0e10cSrcweir 57cdf0e10cSrcweir //---------------------------------------------- 58cdf0e10cSrcweir void ODummyEmbeddedObject::PostEvent_Impl( const ::rtl::OUString& aEventName, 59cdf0e10cSrcweir const uno::Reference< uno::XInterface >& /*xSource*/ ) 60cdf0e10cSrcweir { 61cdf0e10cSrcweir if ( m_pInterfaceContainer ) 62cdf0e10cSrcweir { 63cdf0e10cSrcweir ::cppu::OInterfaceContainerHelper* pIC = m_pInterfaceContainer->getContainer( 64cdf0e10cSrcweir ::getCppuType((const uno::Reference< document::XEventListener >*)0) ); 65cdf0e10cSrcweir if( pIC ) 66cdf0e10cSrcweir { 67cdf0e10cSrcweir document::EventObject aEvent; 68cdf0e10cSrcweir aEvent.EventName = aEventName; 69cdf0e10cSrcweir aEvent.Source = uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >( this ) ); 70cdf0e10cSrcweir // For now all the events are sent as object events 71cdf0e10cSrcweir // aEvent.Source = ( xSource.is() ? xSource 72cdf0e10cSrcweir // : uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >( this ) ) ); 73cdf0e10cSrcweir ::cppu::OInterfaceIteratorHelper aIt( *pIC ); 74cdf0e10cSrcweir while( aIt.hasMoreElements() ) 75cdf0e10cSrcweir { 76cdf0e10cSrcweir try 77cdf0e10cSrcweir { 78cdf0e10cSrcweir ((document::XEventListener *)aIt.next())->notifyEvent( aEvent ); 79cdf0e10cSrcweir } 80cdf0e10cSrcweir catch( uno::RuntimeException& ) 81cdf0e10cSrcweir { 82cdf0e10cSrcweir aIt.remove(); 83cdf0e10cSrcweir } 84cdf0e10cSrcweir 85cdf0e10cSrcweir // the listener could dispose the object. 86cdf0e10cSrcweir if ( m_bDisposed ) 87cdf0e10cSrcweir return; 88cdf0e10cSrcweir } 89cdf0e10cSrcweir } 90cdf0e10cSrcweir } 91cdf0e10cSrcweir } 92cdf0e10cSrcweir 93cdf0e10cSrcweir //---------------------------------------------- 94cdf0e10cSrcweir ODummyEmbeddedObject::~ODummyEmbeddedObject() 95cdf0e10cSrcweir { 96cdf0e10cSrcweir } 97cdf0e10cSrcweir 98cdf0e10cSrcweir //---------------------------------------------- 99cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::changeState( sal_Int32 nNewState ) 100cdf0e10cSrcweir throw ( embed::UnreachableStateException, 101cdf0e10cSrcweir embed::WrongStateException, 102cdf0e10cSrcweir uno::Exception, 103cdf0e10cSrcweir uno::RuntimeException ) 104cdf0e10cSrcweir { 105cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 106cdf0e10cSrcweir CheckInit(); 107cdf0e10cSrcweir 108cdf0e10cSrcweir if ( nNewState == embed::EmbedStates::LOADED ) 109cdf0e10cSrcweir return; 110cdf0e10cSrcweir 111cdf0e10cSrcweir throw embed::UnreachableStateException(); 112cdf0e10cSrcweir } 113cdf0e10cSrcweir 114cdf0e10cSrcweir //---------------------------------------------- 115cdf0e10cSrcweir uno::Sequence< sal_Int32 > SAL_CALL ODummyEmbeddedObject::getReachableStates() 116cdf0e10cSrcweir throw ( embed::WrongStateException, 117cdf0e10cSrcweir uno::RuntimeException ) 118cdf0e10cSrcweir { 119cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 120cdf0e10cSrcweir CheckInit(); 121cdf0e10cSrcweir 122cdf0e10cSrcweir uno::Sequence< sal_Int32 > aResult( 1 ); 123cdf0e10cSrcweir aResult[0] = embed::EmbedStates::LOADED; 124cdf0e10cSrcweir 125cdf0e10cSrcweir return aResult; 126cdf0e10cSrcweir } 127cdf0e10cSrcweir 128cdf0e10cSrcweir //---------------------------------------------- 129cdf0e10cSrcweir sal_Int32 SAL_CALL ODummyEmbeddedObject::getCurrentState() 130cdf0e10cSrcweir throw ( embed::WrongStateException, 131cdf0e10cSrcweir uno::RuntimeException ) 132cdf0e10cSrcweir { 133cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 134cdf0e10cSrcweir CheckInit(); 135cdf0e10cSrcweir 136cdf0e10cSrcweir return m_nObjectState; 137cdf0e10cSrcweir } 138cdf0e10cSrcweir 139cdf0e10cSrcweir //---------------------------------------------- 140cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::doVerb( sal_Int32 ) 141cdf0e10cSrcweir throw ( lang::IllegalArgumentException, 142cdf0e10cSrcweir embed::WrongStateException, 143cdf0e10cSrcweir embed::UnreachableStateException, 144cdf0e10cSrcweir uno::Exception, 145cdf0e10cSrcweir uno::RuntimeException ) 146cdf0e10cSrcweir { 147cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 148cdf0e10cSrcweir CheckInit(); 149cdf0e10cSrcweir 150cdf0e10cSrcweir // no supported verbs 151cdf0e10cSrcweir } 152cdf0e10cSrcweir 153cdf0e10cSrcweir //---------------------------------------------- 154cdf0e10cSrcweir uno::Sequence< embed::VerbDescriptor > SAL_CALL ODummyEmbeddedObject::getSupportedVerbs() 155cdf0e10cSrcweir throw ( embed::WrongStateException, 156cdf0e10cSrcweir uno::RuntimeException ) 157cdf0e10cSrcweir { 158cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 159cdf0e10cSrcweir CheckInit(); 160cdf0e10cSrcweir 161cdf0e10cSrcweir return uno::Sequence< embed::VerbDescriptor >(); 162cdf0e10cSrcweir } 163cdf0e10cSrcweir 164cdf0e10cSrcweir //---------------------------------------------- 165cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::setClientSite( 166cdf0e10cSrcweir const uno::Reference< embed::XEmbeddedClient >& xClient ) 167cdf0e10cSrcweir throw ( embed::WrongStateException, 168cdf0e10cSrcweir uno::RuntimeException ) 169cdf0e10cSrcweir { 170cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 171cdf0e10cSrcweir CheckInit(); 172cdf0e10cSrcweir 173cdf0e10cSrcweir m_xClientSite = xClient; 174cdf0e10cSrcweir } 175cdf0e10cSrcweir 176cdf0e10cSrcweir //---------------------------------------------- 177cdf0e10cSrcweir uno::Reference< embed::XEmbeddedClient > SAL_CALL ODummyEmbeddedObject::getClientSite() 178cdf0e10cSrcweir throw ( embed::WrongStateException, 179cdf0e10cSrcweir uno::RuntimeException ) 180cdf0e10cSrcweir { 181cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 182cdf0e10cSrcweir CheckInit(); 183cdf0e10cSrcweir 184cdf0e10cSrcweir return m_xClientSite; 185cdf0e10cSrcweir } 186cdf0e10cSrcweir 187cdf0e10cSrcweir //---------------------------------------------- 188cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::update() 189cdf0e10cSrcweir throw ( embed::WrongStateException, 190cdf0e10cSrcweir uno::Exception, 191cdf0e10cSrcweir uno::RuntimeException ) 192cdf0e10cSrcweir { 193cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 194cdf0e10cSrcweir CheckInit(); 195cdf0e10cSrcweir } 196cdf0e10cSrcweir 197cdf0e10cSrcweir //---------------------------------------------- 198cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::setUpdateMode( sal_Int32 ) 199cdf0e10cSrcweir throw ( embed::WrongStateException, 200cdf0e10cSrcweir uno::RuntimeException ) 201cdf0e10cSrcweir { 202cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 203cdf0e10cSrcweir CheckInit(); 204cdf0e10cSrcweir } 205cdf0e10cSrcweir 206cdf0e10cSrcweir //---------------------------------------------- 207cdf0e10cSrcweir sal_Int64 SAL_CALL ODummyEmbeddedObject::getStatus( sal_Int64 ) 208cdf0e10cSrcweir throw ( embed::WrongStateException, 209cdf0e10cSrcweir uno::RuntimeException ) 210cdf0e10cSrcweir { 211cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 212cdf0e10cSrcweir CheckInit(); 213cdf0e10cSrcweir 214cdf0e10cSrcweir return 0; 215cdf0e10cSrcweir } 216cdf0e10cSrcweir 217cdf0e10cSrcweir //---------------------------------------------- 218cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::setContainerName( const ::rtl::OUString& ) 219cdf0e10cSrcweir throw ( uno::RuntimeException ) 220cdf0e10cSrcweir { 221cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 222cdf0e10cSrcweir CheckInit(); 223cdf0e10cSrcweir } 224cdf0e10cSrcweir 225cdf0e10cSrcweir //---------------------------------------------- 226cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::setVisualAreaSize( sal_Int64 nAspect, const awt::Size& aSize ) 227cdf0e10cSrcweir throw ( lang::IllegalArgumentException, 228cdf0e10cSrcweir embed::WrongStateException, 229cdf0e10cSrcweir uno::Exception, 230cdf0e10cSrcweir uno::RuntimeException ) 231cdf0e10cSrcweir { 232cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 233cdf0e10cSrcweir CheckInit(); 234cdf0e10cSrcweir 235cdf0e10cSrcweir OSL_ENSURE( nAspect != embed::Aspects::MSOLE_ICON, "For iconified objects no graphical replacement is required!\n" ); 236cdf0e10cSrcweir if ( nAspect == embed::Aspects::MSOLE_ICON ) 237cdf0e10cSrcweir // no representation can be retrieved 238cdf0e10cSrcweir throw embed::WrongStateException( ::rtl::OUString::createFromAscii( "Illegal call!\n" ), 239cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 240cdf0e10cSrcweir 241cdf0e10cSrcweir m_nCachedAspect = nAspect; 242cdf0e10cSrcweir m_aCachedSize = aSize; 243cdf0e10cSrcweir m_bHasCachedSize = sal_True; 244cdf0e10cSrcweir } 245cdf0e10cSrcweir 246cdf0e10cSrcweir //---------------------------------------------- 247cdf0e10cSrcweir awt::Size SAL_CALL ODummyEmbeddedObject::getVisualAreaSize( sal_Int64 nAspect ) 248cdf0e10cSrcweir throw ( lang::IllegalArgumentException, 249cdf0e10cSrcweir embed::WrongStateException, 250cdf0e10cSrcweir uno::Exception, 251cdf0e10cSrcweir uno::RuntimeException ) 252cdf0e10cSrcweir { 253cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 254cdf0e10cSrcweir CheckInit(); 255cdf0e10cSrcweir 256cdf0e10cSrcweir OSL_ENSURE( nAspect != embed::Aspects::MSOLE_ICON, "For iconified objects no graphical replacement is required!\n" ); 257cdf0e10cSrcweir if ( nAspect == embed::Aspects::MSOLE_ICON ) 258cdf0e10cSrcweir // no representation can be retrieved 259cdf0e10cSrcweir throw embed::WrongStateException( ::rtl::OUString::createFromAscii( "Illegal call!\n" ), 260cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 261cdf0e10cSrcweir 262cdf0e10cSrcweir if ( !m_bHasCachedSize || m_nCachedAspect != nAspect ) 263cdf0e10cSrcweir throw embed::NoVisualAreaSizeException( 264cdf0e10cSrcweir ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "No size available!\n" ) ), 265cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 266cdf0e10cSrcweir 267cdf0e10cSrcweir return m_aCachedSize; 268cdf0e10cSrcweir } 269cdf0e10cSrcweir 270cdf0e10cSrcweir //---------------------------------------------- 271cdf0e10cSrcweir sal_Int32 SAL_CALL ODummyEmbeddedObject::getMapUnit( sal_Int64 nAspect ) 272cdf0e10cSrcweir throw ( uno::Exception, 273cdf0e10cSrcweir uno::RuntimeException) 274cdf0e10cSrcweir { 275cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 276cdf0e10cSrcweir CheckInit(); 277cdf0e10cSrcweir 278cdf0e10cSrcweir OSL_ENSURE( nAspect != embed::Aspects::MSOLE_ICON, "For iconified objects no graphical replacement is required!\n" ); 279cdf0e10cSrcweir if ( nAspect == embed::Aspects::MSOLE_ICON ) 280cdf0e10cSrcweir // no representation can be retrieved 281cdf0e10cSrcweir throw embed::WrongStateException( ::rtl::OUString::createFromAscii( "Illegal call!\n" ), 282cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 283cdf0e10cSrcweir 284cdf0e10cSrcweir return embed::EmbedMapUnits::ONE_100TH_MM; 285cdf0e10cSrcweir } 286cdf0e10cSrcweir 287cdf0e10cSrcweir //---------------------------------------------- 288cdf0e10cSrcweir embed::VisualRepresentation SAL_CALL ODummyEmbeddedObject::getPreferredVisualRepresentation( sal_Int64 ) 289cdf0e10cSrcweir throw ( lang::IllegalArgumentException, 290cdf0e10cSrcweir embed::WrongStateException, 291cdf0e10cSrcweir uno::Exception, 292cdf0e10cSrcweir uno::RuntimeException ) 293cdf0e10cSrcweir { 294cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 295cdf0e10cSrcweir CheckInit(); 296cdf0e10cSrcweir 297cdf0e10cSrcweir // no representation can be retrieved 298cdf0e10cSrcweir throw embed::WrongStateException( ::rtl::OUString::createFromAscii( "Illegal call!\n" ), 299cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 300cdf0e10cSrcweir } 301cdf0e10cSrcweir 302cdf0e10cSrcweir //---------------------------------------------- 303cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::setPersistentEntry( 304cdf0e10cSrcweir const uno::Reference< embed::XStorage >& xStorage, 305cdf0e10cSrcweir const ::rtl::OUString& sEntName, 306cdf0e10cSrcweir sal_Int32 nEntryConnectionMode, 307cdf0e10cSrcweir const uno::Sequence< beans::PropertyValue >& /* lArguments */, 308cdf0e10cSrcweir const uno::Sequence< beans::PropertyValue >& /* lObjArgs */ ) 309cdf0e10cSrcweir throw ( lang::IllegalArgumentException, 310cdf0e10cSrcweir embed::WrongStateException, 311cdf0e10cSrcweir io::IOException, 312cdf0e10cSrcweir uno::Exception, 313cdf0e10cSrcweir uno::RuntimeException ) 314cdf0e10cSrcweir { 315cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 316cdf0e10cSrcweir if ( m_bDisposed ) 317cdf0e10cSrcweir throw lang::DisposedException(); // TODO 318cdf0e10cSrcweir 319cdf0e10cSrcweir if ( !xStorage.is() ) 320cdf0e10cSrcweir throw lang::IllegalArgumentException( ::rtl::OUString::createFromAscii( "No parent storage is provided!\n" ), 321cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ), 322cdf0e10cSrcweir 1 ); 323cdf0e10cSrcweir 324cdf0e10cSrcweir if ( !sEntName.getLength() ) 325cdf0e10cSrcweir throw lang::IllegalArgumentException( ::rtl::OUString::createFromAscii( "Empty element name is provided!\n" ), 326cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ), 327cdf0e10cSrcweir 2 ); 328cdf0e10cSrcweir 329cdf0e10cSrcweir if ( ( m_nObjectState != -1 || nEntryConnectionMode == embed::EntryInitModes::NO_INIT ) 330cdf0e10cSrcweir && ( m_nObjectState == -1 || nEntryConnectionMode != embed::EntryInitModes::NO_INIT ) ) 331cdf0e10cSrcweir { 332cdf0e10cSrcweir throw embed::WrongStateException( 333cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "Can't change persistant representation of activated object!\n" ), 334cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 335cdf0e10cSrcweir } 336cdf0e10cSrcweir 337cdf0e10cSrcweir if ( m_bWaitSaveCompleted ) 338cdf0e10cSrcweir { 339cdf0e10cSrcweir if ( nEntryConnectionMode == embed::EntryInitModes::NO_INIT ) 340cdf0e10cSrcweir saveCompleted( ( m_xParentStorage != xStorage || !m_aEntryName.equals( sEntName ) ) ); 341cdf0e10cSrcweir else 342cdf0e10cSrcweir throw embed::WrongStateException( 343cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "The object waits for saveCompleted() call!\n" ), 344cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 345cdf0e10cSrcweir } 346cdf0e10cSrcweir 347cdf0e10cSrcweir if ( nEntryConnectionMode == embed::EntryInitModes::DEFAULT_INIT 348cdf0e10cSrcweir || nEntryConnectionMode == embed::EntryInitModes::NO_INIT ) 349cdf0e10cSrcweir { 350cdf0e10cSrcweir if ( xStorage->hasByName( sEntName ) ) 351cdf0e10cSrcweir 352cdf0e10cSrcweir { 353cdf0e10cSrcweir m_xParentStorage = xStorage; 354cdf0e10cSrcweir m_aEntryName = sEntName; 355cdf0e10cSrcweir m_nObjectState = embed::EmbedStates::LOADED; 356cdf0e10cSrcweir } 357cdf0e10cSrcweir else 358cdf0e10cSrcweir throw lang::IllegalArgumentException( ::rtl::OUString::createFromAscii( "Wrong entry is provided!\n" ), 359cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ), 360cdf0e10cSrcweir 2 ); 361cdf0e10cSrcweir 362cdf0e10cSrcweir } 363cdf0e10cSrcweir else 364cdf0e10cSrcweir throw lang::IllegalArgumentException( ::rtl::OUString::createFromAscii( "Wrong connection mode is provided!\n" ), 365cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ), 366cdf0e10cSrcweir 3 ); 367cdf0e10cSrcweir } 368cdf0e10cSrcweir 369cdf0e10cSrcweir //------------------------------------------------------ 370cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::storeToEntry( const uno::Reference< embed::XStorage >& xStorage, 371cdf0e10cSrcweir const ::rtl::OUString& sEntName, 372cdf0e10cSrcweir const uno::Sequence< beans::PropertyValue >& /* lArguments */, 373cdf0e10cSrcweir const uno::Sequence< beans::PropertyValue >& /* lObjArgs */ ) 374cdf0e10cSrcweir throw ( lang::IllegalArgumentException, 375cdf0e10cSrcweir embed::WrongStateException, 376cdf0e10cSrcweir io::IOException, 377cdf0e10cSrcweir uno::Exception, 378cdf0e10cSrcweir uno::RuntimeException ) 379cdf0e10cSrcweir { 380cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 381cdf0e10cSrcweir CheckInit(); 382cdf0e10cSrcweir 383cdf0e10cSrcweir if ( m_bWaitSaveCompleted ) 384cdf0e10cSrcweir throw embed::WrongStateException( 385cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "The object waits for saveCompleted() call!\n" ), 386cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 387cdf0e10cSrcweir 388cdf0e10cSrcweir m_xParentStorage->copyElementTo( m_aEntryName, xStorage, sEntName ); 389cdf0e10cSrcweir } 390cdf0e10cSrcweir 391cdf0e10cSrcweir //------------------------------------------------------ 392cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::storeAsEntry( const uno::Reference< embed::XStorage >& xStorage, 393cdf0e10cSrcweir const ::rtl::OUString& sEntName, 394cdf0e10cSrcweir const uno::Sequence< beans::PropertyValue >& /* lArguments */, 395cdf0e10cSrcweir const uno::Sequence< beans::PropertyValue >& /* lObjArgs */ ) 396cdf0e10cSrcweir throw ( lang::IllegalArgumentException, 397cdf0e10cSrcweir embed::WrongStateException, 398cdf0e10cSrcweir io::IOException, 399cdf0e10cSrcweir uno::Exception, 400cdf0e10cSrcweir uno::RuntimeException ) 401cdf0e10cSrcweir { 402cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 403cdf0e10cSrcweir CheckInit(); 404cdf0e10cSrcweir 405cdf0e10cSrcweir if ( m_bWaitSaveCompleted ) 406cdf0e10cSrcweir throw embed::WrongStateException( 407cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "The object waits for saveCompleted() call!\n" ), 408cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 409cdf0e10cSrcweir 410cdf0e10cSrcweir PostEvent_Impl( ::rtl::OUString::createFromAscii( "OnSaveAs" ), 411cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< cppu::OWeakObject* >( this ) ) ); 412cdf0e10cSrcweir 413cdf0e10cSrcweir m_xParentStorage->copyElementTo( m_aEntryName, xStorage, sEntName ); 414cdf0e10cSrcweir 415cdf0e10cSrcweir m_bWaitSaveCompleted = sal_True; 416cdf0e10cSrcweir m_xNewParentStorage = xStorage; 417cdf0e10cSrcweir m_aNewEntryName = sEntName; 418cdf0e10cSrcweir } 419cdf0e10cSrcweir 420cdf0e10cSrcweir //------------------------------------------------------ 421cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::saveCompleted( sal_Bool bUseNew ) 422cdf0e10cSrcweir throw ( embed::WrongStateException, 423cdf0e10cSrcweir uno::Exception, 424cdf0e10cSrcweir uno::RuntimeException ) 425cdf0e10cSrcweir { 426cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 427cdf0e10cSrcweir CheckInit(); 428cdf0e10cSrcweir 429cdf0e10cSrcweir // it is allowed to call saveCompleted( false ) for nonstored objects 430cdf0e10cSrcweir if ( !m_bWaitSaveCompleted && !bUseNew ) 431cdf0e10cSrcweir return; 432cdf0e10cSrcweir 433cdf0e10cSrcweir OSL_ENSURE( m_bWaitSaveCompleted, "Unexpected saveCompleted() call!\n" ); 434cdf0e10cSrcweir if ( !m_bWaitSaveCompleted ) 435cdf0e10cSrcweir throw io::IOException(); // TODO: illegal call 436cdf0e10cSrcweir 437cdf0e10cSrcweir OSL_ENSURE( m_xNewParentStorage.is() , "Internal object information is broken!\n" ); 438cdf0e10cSrcweir if ( !m_xNewParentStorage.is() ) 439cdf0e10cSrcweir throw uno::RuntimeException(); // TODO: broken internal information 440cdf0e10cSrcweir 441cdf0e10cSrcweir if ( bUseNew ) 442cdf0e10cSrcweir { 443cdf0e10cSrcweir m_xParentStorage = m_xNewParentStorage; 444cdf0e10cSrcweir m_aEntryName = m_aNewEntryName; 445cdf0e10cSrcweir 446cdf0e10cSrcweir PostEvent_Impl( ::rtl::OUString::createFromAscii( "OnSaveAsDone" ), 447cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< cppu::OWeakObject* >( this ) ) ); 448cdf0e10cSrcweir } 449cdf0e10cSrcweir 450cdf0e10cSrcweir m_xNewParentStorage = uno::Reference< embed::XStorage >(); 451cdf0e10cSrcweir m_aNewEntryName = ::rtl::OUString(); 452cdf0e10cSrcweir m_bWaitSaveCompleted = sal_False; 453cdf0e10cSrcweir } 454cdf0e10cSrcweir 455cdf0e10cSrcweir //------------------------------------------------------ 456cdf0e10cSrcweir sal_Bool SAL_CALL ODummyEmbeddedObject::hasEntry() 457cdf0e10cSrcweir throw ( embed::WrongStateException, 458cdf0e10cSrcweir uno::RuntimeException ) 459cdf0e10cSrcweir { 460cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 461cdf0e10cSrcweir CheckInit(); 462cdf0e10cSrcweir 463cdf0e10cSrcweir if ( m_bWaitSaveCompleted ) 464cdf0e10cSrcweir throw embed::WrongStateException( 465cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "The object waits for saveCompleted() call!\n" ), 466cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 467cdf0e10cSrcweir 468cdf0e10cSrcweir if ( m_aEntryName.getLength() ) 469cdf0e10cSrcweir return sal_True; 470cdf0e10cSrcweir 471cdf0e10cSrcweir return sal_False; 472cdf0e10cSrcweir } 473cdf0e10cSrcweir 474cdf0e10cSrcweir //------------------------------------------------------ 475cdf0e10cSrcweir ::rtl::OUString SAL_CALL ODummyEmbeddedObject::getEntryName() 476cdf0e10cSrcweir throw ( embed::WrongStateException, 477cdf0e10cSrcweir uno::RuntimeException ) 478cdf0e10cSrcweir { 479cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 480cdf0e10cSrcweir CheckInit(); 481cdf0e10cSrcweir 482cdf0e10cSrcweir if ( m_bWaitSaveCompleted ) 483cdf0e10cSrcweir throw embed::WrongStateException( 484cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "The object waits for saveCompleted() call!\n" ), 485cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 486cdf0e10cSrcweir 487cdf0e10cSrcweir return m_aEntryName; 488cdf0e10cSrcweir } 489cdf0e10cSrcweir 490cdf0e10cSrcweir //------------------------------------------------------ 491cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::storeOwn() 492cdf0e10cSrcweir throw ( embed::WrongStateException, 493cdf0e10cSrcweir io::IOException, 494cdf0e10cSrcweir uno::Exception, 495cdf0e10cSrcweir uno::RuntimeException ) 496cdf0e10cSrcweir { 497cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 498cdf0e10cSrcweir CheckInit(); 499cdf0e10cSrcweir 500cdf0e10cSrcweir if ( m_bWaitSaveCompleted ) 501cdf0e10cSrcweir throw embed::WrongStateException( 502cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "The object waits for saveCompleted() call!\n" ), 503cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 504cdf0e10cSrcweir 505cdf0e10cSrcweir // the object can not be activated or changed 506cdf0e10cSrcweir return; 507cdf0e10cSrcweir } 508cdf0e10cSrcweir 509cdf0e10cSrcweir //------------------------------------------------------ 510cdf0e10cSrcweir sal_Bool SAL_CALL ODummyEmbeddedObject::isReadonly() 511cdf0e10cSrcweir throw ( embed::WrongStateException, 512cdf0e10cSrcweir uno::RuntimeException ) 513cdf0e10cSrcweir { 514cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 515cdf0e10cSrcweir CheckInit(); 516cdf0e10cSrcweir 517cdf0e10cSrcweir if ( m_bWaitSaveCompleted ) 518cdf0e10cSrcweir throw embed::WrongStateException( 519cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "The object waits for saveCompleted() call!\n" ), 520cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 521cdf0e10cSrcweir 522cdf0e10cSrcweir // this object can not be changed 523cdf0e10cSrcweir return sal_True; 524cdf0e10cSrcweir } 525cdf0e10cSrcweir 526cdf0e10cSrcweir //------------------------------------------------------ 527cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::reload( 528cdf0e10cSrcweir const uno::Sequence< beans::PropertyValue >& /* lArguments */, 529cdf0e10cSrcweir const uno::Sequence< beans::PropertyValue >& /* lObjArgs */ ) 530cdf0e10cSrcweir throw ( lang::IllegalArgumentException, 531cdf0e10cSrcweir embed::WrongStateException, 532cdf0e10cSrcweir io::IOException, 533cdf0e10cSrcweir uno::Exception, 534cdf0e10cSrcweir uno::RuntimeException ) 535cdf0e10cSrcweir { 536cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 537cdf0e10cSrcweir CheckInit(); 538cdf0e10cSrcweir 539cdf0e10cSrcweir if ( m_bWaitSaveCompleted ) 540cdf0e10cSrcweir throw embed::WrongStateException( 541cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "The object waits for saveCompleted() call!\n" ), 542cdf0e10cSrcweir uno::Reference< uno::XInterface >( static_cast< ::cppu::OWeakObject* >(this) ) ); 543cdf0e10cSrcweir 544cdf0e10cSrcweir // nothing to reload 545cdf0e10cSrcweir } 546cdf0e10cSrcweir 547cdf0e10cSrcweir //------------------------------------------------------ 548cdf0e10cSrcweir uno::Sequence< sal_Int8 > SAL_CALL ODummyEmbeddedObject::getClassID() 549cdf0e10cSrcweir throw ( uno::RuntimeException ) 550cdf0e10cSrcweir { 551cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 552cdf0e10cSrcweir CheckInit(); 553cdf0e10cSrcweir 554cdf0e10cSrcweir // currently the class ID is empty 555cdf0e10cSrcweir // TODO/LATER: should a special class ID be used in this case? 556cdf0e10cSrcweir return uno::Sequence< sal_Int8 >(); 557cdf0e10cSrcweir } 558cdf0e10cSrcweir 559cdf0e10cSrcweir //------------------------------------------------------ 560cdf0e10cSrcweir ::rtl::OUString SAL_CALL ODummyEmbeddedObject::getClassName() 561cdf0e10cSrcweir throw ( uno::RuntimeException ) 562cdf0e10cSrcweir { 563cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 564cdf0e10cSrcweir if ( m_bDisposed ) 565cdf0e10cSrcweir throw lang::DisposedException(); // TODO 566cdf0e10cSrcweir 567cdf0e10cSrcweir return ::rtl::OUString(); 568cdf0e10cSrcweir } 569cdf0e10cSrcweir 570cdf0e10cSrcweir //------------------------------------------------------ 571cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::setClassInfo( 572cdf0e10cSrcweir const uno::Sequence< sal_Int8 >& /*aClassID*/, const ::rtl::OUString& /*aClassName*/ ) 573cdf0e10cSrcweir throw ( lang::NoSupportException, 574cdf0e10cSrcweir uno::RuntimeException ) 575cdf0e10cSrcweir { 576cdf0e10cSrcweir throw lang::NoSupportException(); 577cdf0e10cSrcweir } 578cdf0e10cSrcweir 579cdf0e10cSrcweir //------------------------------------------------------ 580cdf0e10cSrcweir uno::Reference< util::XCloseable > SAL_CALL ODummyEmbeddedObject::getComponent() 581cdf0e10cSrcweir throw ( uno::RuntimeException ) 582cdf0e10cSrcweir { 583cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 584cdf0e10cSrcweir CheckInit(); 585cdf0e10cSrcweir 586cdf0e10cSrcweir return uno::Reference< util::XCloseable >(); 587cdf0e10cSrcweir } 588cdf0e10cSrcweir 589cdf0e10cSrcweir //---------------------------------------------- 590cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::addStateChangeListener( const uno::Reference< embed::XStateChangeListener >& xListener ) 591cdf0e10cSrcweir throw ( uno::RuntimeException ) 592cdf0e10cSrcweir { 593cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 594cdf0e10cSrcweir if ( m_bDisposed ) 595cdf0e10cSrcweir return; 596cdf0e10cSrcweir 597cdf0e10cSrcweir if ( !m_pInterfaceContainer ) 598cdf0e10cSrcweir m_pInterfaceContainer = new ::cppu::OMultiTypeInterfaceContainerHelper( m_aMutex ); 599cdf0e10cSrcweir 600cdf0e10cSrcweir m_pInterfaceContainer->addInterface( ::getCppuType( (const uno::Reference< embed::XStateChangeListener >*)0 ), 601cdf0e10cSrcweir xListener ); 602cdf0e10cSrcweir } 603cdf0e10cSrcweir 604cdf0e10cSrcweir //---------------------------------------------- 605cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::removeStateChangeListener( 606cdf0e10cSrcweir const uno::Reference< embed::XStateChangeListener >& xListener ) 607cdf0e10cSrcweir throw (uno::RuntimeException) 608cdf0e10cSrcweir { 609cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 610cdf0e10cSrcweir if ( m_pInterfaceContainer ) 611cdf0e10cSrcweir m_pInterfaceContainer->removeInterface( ::getCppuType( (const uno::Reference< embed::XStateChangeListener >*)0 ), 612cdf0e10cSrcweir xListener ); 613cdf0e10cSrcweir } 614cdf0e10cSrcweir 615cdf0e10cSrcweir //---------------------------------------------- 616cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::close( sal_Bool bDeliverOwnership ) 617cdf0e10cSrcweir throw ( util::CloseVetoException, 618cdf0e10cSrcweir uno::RuntimeException ) 619cdf0e10cSrcweir { 620cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 621cdf0e10cSrcweir if ( m_bDisposed ) 622cdf0e10cSrcweir throw lang::DisposedException(); // TODO 623cdf0e10cSrcweir 624cdf0e10cSrcweir uno::Reference< uno::XInterface > xSelfHold( static_cast< ::cppu::OWeakObject* >( this ) ); 625cdf0e10cSrcweir lang::EventObject aSource( static_cast< ::cppu::OWeakObject* >( this ) ); 626cdf0e10cSrcweir 627cdf0e10cSrcweir if ( m_pInterfaceContainer ) 628cdf0e10cSrcweir { 629cdf0e10cSrcweir ::cppu::OInterfaceContainerHelper* pContainer = 630cdf0e10cSrcweir m_pInterfaceContainer->getContainer( ::getCppuType( ( const uno::Reference< util::XCloseListener >*) NULL ) ); 631cdf0e10cSrcweir if ( pContainer != NULL ) 632cdf0e10cSrcweir { 633cdf0e10cSrcweir ::cppu::OInterfaceIteratorHelper pIterator(*pContainer); 634cdf0e10cSrcweir while (pIterator.hasMoreElements()) 635cdf0e10cSrcweir { 636cdf0e10cSrcweir try 637cdf0e10cSrcweir { 638cdf0e10cSrcweir ((util::XCloseListener*)pIterator.next())->queryClosing( aSource, bDeliverOwnership ); 639cdf0e10cSrcweir } 640cdf0e10cSrcweir catch( uno::RuntimeException& ) 641cdf0e10cSrcweir { 642cdf0e10cSrcweir pIterator.remove(); 643cdf0e10cSrcweir } 644cdf0e10cSrcweir } 645cdf0e10cSrcweir } 646cdf0e10cSrcweir 647cdf0e10cSrcweir pContainer = m_pInterfaceContainer->getContainer( 648cdf0e10cSrcweir ::getCppuType( ( const uno::Reference< util::XCloseListener >*) NULL ) ); 649cdf0e10cSrcweir if ( pContainer != NULL ) 650cdf0e10cSrcweir { 651cdf0e10cSrcweir ::cppu::OInterfaceIteratorHelper pCloseIterator(*pContainer); 652cdf0e10cSrcweir while (pCloseIterator.hasMoreElements()) 653cdf0e10cSrcweir { 654cdf0e10cSrcweir try 655cdf0e10cSrcweir { 656cdf0e10cSrcweir ((util::XCloseListener*)pCloseIterator.next())->notifyClosing( aSource ); 657cdf0e10cSrcweir } 658cdf0e10cSrcweir catch( uno::RuntimeException& ) 659cdf0e10cSrcweir { 660cdf0e10cSrcweir pCloseIterator.remove(); 661cdf0e10cSrcweir } 662cdf0e10cSrcweir } 663cdf0e10cSrcweir } 664cdf0e10cSrcweir 665cdf0e10cSrcweir m_pInterfaceContainer->disposeAndClear( aSource ); 666cdf0e10cSrcweir } 667cdf0e10cSrcweir 668cdf0e10cSrcweir m_bDisposed = sal_True; // the object is disposed now for outside 669cdf0e10cSrcweir } 670cdf0e10cSrcweir 671cdf0e10cSrcweir //---------------------------------------------- 672cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::addCloseListener( const uno::Reference< util::XCloseListener >& xListener ) 673cdf0e10cSrcweir throw ( uno::RuntimeException ) 674cdf0e10cSrcweir { 675cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 676cdf0e10cSrcweir if ( m_bDisposed ) 677cdf0e10cSrcweir return; 678cdf0e10cSrcweir 679cdf0e10cSrcweir if ( !m_pInterfaceContainer ) 680cdf0e10cSrcweir m_pInterfaceContainer = new ::cppu::OMultiTypeInterfaceContainerHelper( m_aMutex ); 681cdf0e10cSrcweir 682cdf0e10cSrcweir m_pInterfaceContainer->addInterface( ::getCppuType( (const uno::Reference< util::XCloseListener >*)0 ), xListener ); 683cdf0e10cSrcweir } 684cdf0e10cSrcweir 685cdf0e10cSrcweir //---------------------------------------------- 686cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::removeCloseListener( const uno::Reference< util::XCloseListener >& xListener ) 687cdf0e10cSrcweir throw (uno::RuntimeException) 688cdf0e10cSrcweir { 689cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 690cdf0e10cSrcweir if ( m_pInterfaceContainer ) 691cdf0e10cSrcweir m_pInterfaceContainer->removeInterface( ::getCppuType( (const uno::Reference< util::XCloseListener >*)0 ), 692cdf0e10cSrcweir xListener ); 693cdf0e10cSrcweir } 694cdf0e10cSrcweir 695cdf0e10cSrcweir //------------------------------------------------------ 696cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::addEventListener( const uno::Reference< document::XEventListener >& xListener ) 697cdf0e10cSrcweir throw ( uno::RuntimeException ) 698cdf0e10cSrcweir { 699cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 700cdf0e10cSrcweir if ( m_bDisposed ) 701cdf0e10cSrcweir return; 702cdf0e10cSrcweir 703cdf0e10cSrcweir if ( !m_pInterfaceContainer ) 704cdf0e10cSrcweir m_pInterfaceContainer = new ::cppu::OMultiTypeInterfaceContainerHelper( m_aMutex ); 705cdf0e10cSrcweir 706cdf0e10cSrcweir m_pInterfaceContainer->addInterface( ::getCppuType( (const uno::Reference< document::XEventListener >*)0 ), xListener ); 707cdf0e10cSrcweir } 708cdf0e10cSrcweir 709cdf0e10cSrcweir //------------------------------------------------------ 710cdf0e10cSrcweir void SAL_CALL ODummyEmbeddedObject::removeEventListener( const uno::Reference< document::XEventListener >& xListener ) 711cdf0e10cSrcweir throw ( uno::RuntimeException ) 712cdf0e10cSrcweir { 713cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 714cdf0e10cSrcweir if ( m_pInterfaceContainer ) 715cdf0e10cSrcweir m_pInterfaceContainer->removeInterface( ::getCppuType( (const uno::Reference< document::XEventListener >*)0 ), 716cdf0e10cSrcweir xListener ); 717cdf0e10cSrcweir } 718cdf0e10cSrcweir 719