1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir #include "ModuleHelper.hxx"
28*cdf0e10cSrcweir #include <comphelper/configurationhelper.hxx>
29*cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
30*cdf0e10cSrcweir #include <osl/thread.h>
31*cdf0e10cSrcweir #include <com/sun/star/util/XMacroExpander.hpp>
32*cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
33*cdf0e10cSrcweir #include <com/sun/star/uno/XComponentContext.hpp>
34*cdf0e10cSrcweir #include <rtl/uri.hxx>
35*cdf0e10cSrcweir #include <tools/debug.hxx>
36*cdf0e10cSrcweir #ifndef _SOLAR_HRC
37*cdf0e10cSrcweir #include <svl/solar.hrc>
38*cdf0e10cSrcweir #endif
39*cdf0e10cSrcweir 
40*cdf0e10cSrcweir #define EXPAND_PROTOCOL     "vnd.sun.star.expand:"
41*cdf0e10cSrcweir #define ENTER_MOD_METHOD()	\
42*cdf0e10cSrcweir 	::osl::MutexGuard aGuard(s_aMutex);	\
43*cdf0e10cSrcweir 	ensureImpl()
44*cdf0e10cSrcweir 
45*cdf0e10cSrcweir //.........................................................................
46*cdf0e10cSrcweir namespace formula
47*cdf0e10cSrcweir {
48*cdf0e10cSrcweir //.........................................................................
49*cdf0e10cSrcweir     using namespace ::com::sun::star;
50*cdf0e10cSrcweir //=========================================================================
51*cdf0e10cSrcweir //= OModuleImpl
52*cdf0e10cSrcweir //=========================================================================
53*cdf0e10cSrcweir /** implementation for <type>OModule</type>. not threadsafe, has to be guarded by it's owner
54*cdf0e10cSrcweir */
55*cdf0e10cSrcweir class OModuleImpl
56*cdf0e10cSrcweir {
57*cdf0e10cSrcweir 	ResMgr*	m_pRessources;
58*cdf0e10cSrcweir 
59*cdf0e10cSrcweir public:
60*cdf0e10cSrcweir 	/// ctor
61*cdf0e10cSrcweir 	OModuleImpl();
62*cdf0e10cSrcweir 	~OModuleImpl();
63*cdf0e10cSrcweir 
64*cdf0e10cSrcweir 	/// get the manager for the ressources of the module
65*cdf0e10cSrcweir 	ResMgr*	getResManager();
66*cdf0e10cSrcweir };
67*cdf0e10cSrcweir 
68*cdf0e10cSrcweir DBG_NAME( rpt_OModuleImpl )
69*cdf0e10cSrcweir //-------------------------------------------------------------------------
70*cdf0e10cSrcweir OModuleImpl::OModuleImpl()
71*cdf0e10cSrcweir 	:m_pRessources(NULL)
72*cdf0e10cSrcweir {
73*cdf0e10cSrcweir     DBG_CTOR( rpt_OModuleImpl,NULL);
74*cdf0e10cSrcweir 
75*cdf0e10cSrcweir }
76*cdf0e10cSrcweir 
77*cdf0e10cSrcweir //-------------------------------------------------------------------------
78*cdf0e10cSrcweir OModuleImpl::~OModuleImpl()
79*cdf0e10cSrcweir {
80*cdf0e10cSrcweir 	if (m_pRessources)
81*cdf0e10cSrcweir 		delete m_pRessources;
82*cdf0e10cSrcweir 
83*cdf0e10cSrcweir     DBG_DTOR( rpt_OModuleImpl,NULL);
84*cdf0e10cSrcweir }
85*cdf0e10cSrcweir 
86*cdf0e10cSrcweir //-------------------------------------------------------------------------
87*cdf0e10cSrcweir ResMgr*	OModuleImpl::getResManager()
88*cdf0e10cSrcweir {
89*cdf0e10cSrcweir 	// note that this method is not threadsafe, which counts for the whole class !
90*cdf0e10cSrcweir 
91*cdf0e10cSrcweir 	if (!m_pRessources)
92*cdf0e10cSrcweir 	{
93*cdf0e10cSrcweir 		// create a manager with a fixed prefix
94*cdf0e10cSrcweir         rtl::OString sName = rtl::OString( "forui" );
95*cdf0e10cSrcweir 		m_pRessources = ResMgr::CreateResMgr(sName);
96*cdf0e10cSrcweir 	}
97*cdf0e10cSrcweir 	return m_pRessources;
98*cdf0e10cSrcweir }
99*cdf0e10cSrcweir 
100*cdf0e10cSrcweir //=========================================================================
101*cdf0e10cSrcweir //= OModule
102*cdf0e10cSrcweir //=========================================================================
103*cdf0e10cSrcweir ::osl::Mutex	OModule::s_aMutex;
104*cdf0e10cSrcweir sal_Int32		OModule::s_nClients = 0;
105*cdf0e10cSrcweir OModuleImpl*	OModule::s_pImpl = NULL;
106*cdf0e10cSrcweir //-------------------------------------------------------------------------
107*cdf0e10cSrcweir ResMgr*	OModule::getResManager()
108*cdf0e10cSrcweir {
109*cdf0e10cSrcweir 	ENTER_MOD_METHOD();
110*cdf0e10cSrcweir 	return s_pImpl->getResManager();
111*cdf0e10cSrcweir }
112*cdf0e10cSrcweir 
113*cdf0e10cSrcweir //-------------------------------------------------------------------------
114*cdf0e10cSrcweir void OModule::registerClient()
115*cdf0e10cSrcweir {
116*cdf0e10cSrcweir 	::osl::MutexGuard aGuard(s_aMutex);
117*cdf0e10cSrcweir 	++s_nClients;
118*cdf0e10cSrcweir }
119*cdf0e10cSrcweir 
120*cdf0e10cSrcweir //-------------------------------------------------------------------------
121*cdf0e10cSrcweir void OModule::revokeClient()
122*cdf0e10cSrcweir {
123*cdf0e10cSrcweir 	::osl::MutexGuard aGuard(s_aMutex);
124*cdf0e10cSrcweir 	if (!--s_nClients && s_pImpl)
125*cdf0e10cSrcweir 	{
126*cdf0e10cSrcweir 		delete s_pImpl;
127*cdf0e10cSrcweir 		s_pImpl = NULL;
128*cdf0e10cSrcweir 	}
129*cdf0e10cSrcweir }
130*cdf0e10cSrcweir 
131*cdf0e10cSrcweir //-------------------------------------------------------------------------
132*cdf0e10cSrcweir void OModule::ensureImpl()
133*cdf0e10cSrcweir {
134*cdf0e10cSrcweir 	if (s_pImpl)
135*cdf0e10cSrcweir 		return;
136*cdf0e10cSrcweir 	s_pImpl = new OModuleImpl();
137*cdf0e10cSrcweir }
138*cdf0e10cSrcweir 
139*cdf0e10cSrcweir //.........................................................................
140*cdf0e10cSrcweir }	// namespace formula
141*cdf0e10cSrcweir //.........................................................................
142*cdf0e10cSrcweir 
143