1*b5088357SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*b5088357SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*b5088357SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*b5088357SAndrew Rist * distributed with this work for additional information 6*b5088357SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*b5088357SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*b5088357SAndrew Rist * "License"); you may not use this file except in compliance 9*b5088357SAndrew Rist * with the License. You may obtain a copy of the License at 10*b5088357SAndrew Rist * 11*b5088357SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*b5088357SAndrew Rist * 13*b5088357SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*b5088357SAndrew Rist * software distributed under the License is distributed on an 15*b5088357SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b5088357SAndrew Rist * KIND, either express or implied. See the License for the 17*b5088357SAndrew Rist * specific language governing permissions and limitations 18*b5088357SAndrew Rist * under the License. 19*b5088357SAndrew Rist * 20*b5088357SAndrew Rist *************************************************************/ 21*b5088357SAndrew Rist 22*b5088357SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_unotools.hxx" 26cdf0e10cSrcweir #include <unotools/componentresmodule.hxx> 27cdf0e10cSrcweir 28cdf0e10cSrcweir /** === begin UNO includes === **/ 29cdf0e10cSrcweir /** === end UNO includes === **/ 30cdf0e10cSrcweir #include <tools/resmgr.hxx> 31cdf0e10cSrcweir #include <osl/diagnose.h> 32cdf0e10cSrcweir 33cdf0e10cSrcweir //........................................................................ 34cdf0e10cSrcweir namespace utl 35cdf0e10cSrcweir { 36cdf0e10cSrcweir //........................................................................ 37cdf0e10cSrcweir 38cdf0e10cSrcweir //==================================================================== 39cdf0e10cSrcweir //= OComponentResModuleImpl 40cdf0e10cSrcweir //==================================================================== 41cdf0e10cSrcweir /** PIMPL-class for OComponentResourceModule 42cdf0e10cSrcweir 43cdf0e10cSrcweir not threadsafe! 44cdf0e10cSrcweir */ 45cdf0e10cSrcweir class OComponentResModuleImpl 46cdf0e10cSrcweir { 47cdf0e10cSrcweir private: 48cdf0e10cSrcweir ResMgr* m_pRessources; 49cdf0e10cSrcweir bool m_bInitialized; 50cdf0e10cSrcweir ::rtl::OString m_sResFilePrefix; 51cdf0e10cSrcweir 52cdf0e10cSrcweir public: OComponentResModuleImpl(const::rtl::OString & _rResFilePrefix)53cdf0e10cSrcweir OComponentResModuleImpl( const ::rtl::OString& _rResFilePrefix ) 54cdf0e10cSrcweir :m_pRessources( NULL ) 55cdf0e10cSrcweir ,m_bInitialized( false ) 56cdf0e10cSrcweir ,m_sResFilePrefix( _rResFilePrefix ) 57cdf0e10cSrcweir { 58cdf0e10cSrcweir } 59cdf0e10cSrcweir ~OComponentResModuleImpl()60cdf0e10cSrcweir ~OComponentResModuleImpl() 61cdf0e10cSrcweir { 62cdf0e10cSrcweir freeResManager(); 63cdf0e10cSrcweir } 64cdf0e10cSrcweir 65cdf0e10cSrcweir /** releases our resource manager 66cdf0e10cSrcweir */ 67cdf0e10cSrcweir void freeResManager(); 68cdf0e10cSrcweir 69cdf0e10cSrcweir /** retrieves our resource manager 70cdf0e10cSrcweir */ 71cdf0e10cSrcweir ResMgr* getResManager(); 72cdf0e10cSrcweir 73cdf0e10cSrcweir private: 74cdf0e10cSrcweir OComponentResModuleImpl(); // never implemented 75cdf0e10cSrcweir OComponentResModuleImpl( const OComponentResModuleImpl& ); // never implemented 76cdf0e10cSrcweir OComponentResModuleImpl& operator=( const OComponentResModuleImpl& ); // never implemented 77cdf0e10cSrcweir }; 78cdf0e10cSrcweir 79cdf0e10cSrcweir //-------------------------------------------------------------------- freeResManager()80cdf0e10cSrcweir void OComponentResModuleImpl::freeResManager() 81cdf0e10cSrcweir { 82cdf0e10cSrcweir delete m_pRessources, m_pRessources = NULL; 83cdf0e10cSrcweir m_bInitialized = false; 84cdf0e10cSrcweir } 85cdf0e10cSrcweir 86cdf0e10cSrcweir //-------------------------------------------------------------------- getResManager()87cdf0e10cSrcweir ResMgr* OComponentResModuleImpl::getResManager() 88cdf0e10cSrcweir { 89cdf0e10cSrcweir if ( !m_pRessources && !m_bInitialized ) 90cdf0e10cSrcweir { 91cdf0e10cSrcweir // create a manager with a fixed prefix 92cdf0e10cSrcweir ByteString aMgrName = m_sResFilePrefix; 93cdf0e10cSrcweir 94cdf0e10cSrcweir m_pRessources = ResMgr::CreateResMgr( aMgrName.GetBuffer() ); 95cdf0e10cSrcweir OSL_ENSURE( m_pRessources, 96cdf0e10cSrcweir ( ByteString( "OModuleImpl::getResManager: could not create the resource manager (file name: " ) 97cdf0e10cSrcweir += aMgrName 98cdf0e10cSrcweir += ByteString( ")!" ) ).GetBuffer() ); 99cdf0e10cSrcweir 100cdf0e10cSrcweir m_bInitialized = sal_True; 101cdf0e10cSrcweir } 102cdf0e10cSrcweir return m_pRessources; 103cdf0e10cSrcweir } 104cdf0e10cSrcweir 105cdf0e10cSrcweir //==================================================================== 106cdf0e10cSrcweir //= OComponentResourceModule 107cdf0e10cSrcweir //==================================================================== 108cdf0e10cSrcweir //-------------------------------------------------------------------- OComponentResourceModule(const::rtl::OString & _rResFilePrefix)109cdf0e10cSrcweir OComponentResourceModule::OComponentResourceModule( const ::rtl::OString& _rResFilePrefix ) 110cdf0e10cSrcweir :BaseClass() 111cdf0e10cSrcweir ,m_pImpl( new OComponentResModuleImpl( _rResFilePrefix ) ) 112cdf0e10cSrcweir { 113cdf0e10cSrcweir } 114cdf0e10cSrcweir 115cdf0e10cSrcweir //-------------------------------------------------------------------- ~OComponentResourceModule()116cdf0e10cSrcweir OComponentResourceModule::~OComponentResourceModule() 117cdf0e10cSrcweir { 118cdf0e10cSrcweir } 119cdf0e10cSrcweir 120cdf0e10cSrcweir //------------------------------------------------------------------------- getResManager()121cdf0e10cSrcweir ResMgr* OComponentResourceModule::getResManager() 122cdf0e10cSrcweir { 123cdf0e10cSrcweir ::osl::MutexGuard aGuard( m_aMutex ); 124cdf0e10cSrcweir return m_pImpl->getResManager(); 125cdf0e10cSrcweir } 126cdf0e10cSrcweir 127cdf0e10cSrcweir //-------------------------------------------------------------------------- onFirstClient()128cdf0e10cSrcweir void OComponentResourceModule::onFirstClient() 129cdf0e10cSrcweir { 130cdf0e10cSrcweir BaseClass::onFirstClient(); 131cdf0e10cSrcweir } 132cdf0e10cSrcweir 133cdf0e10cSrcweir //-------------------------------------------------------------------------- onLastClient()134cdf0e10cSrcweir void OComponentResourceModule::onLastClient() 135cdf0e10cSrcweir { 136cdf0e10cSrcweir m_pImpl->freeResManager(); 137cdf0e10cSrcweir BaseClass::onLastClient(); 138cdf0e10cSrcweir } 139cdf0e10cSrcweir 140cdf0e10cSrcweir //........................................................................ 141cdf0e10cSrcweir } // namespace utl 142cdf0e10cSrcweir //........................................................................ 143