summaryrefslogtreecommitdiff
path: root/framework/inc/classes/servicemanager.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'framework/inc/classes/servicemanager.hxx')
-rw-r--r--framework/inc/classes/servicemanager.hxx280
1 files changed, 280 insertions, 0 deletions
diff --git a/framework/inc/classes/servicemanager.hxx b/framework/inc/classes/servicemanager.hxx
new file mode 100644
index 000000000000..233987768b82
--- /dev/null
+++ b/framework/inc/classes/servicemanager.hxx
@@ -0,0 +1,280 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef __FRAMEWORK_CLASSES_SERVICEMANAGER_HXX_
+#define __FRAMEWORK_CLASSES_SERVICEMANAGER_HXX_
+
+//_________________________________________________________________________________________________________________
+// my own includes
+//_________________________________________________________________________________________________________________
+
+#include <macros/debug.hxx>
+
+//_________________________________________________________________________________________________________________
+// interface includes
+//_________________________________________________________________________________________________________________
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+
+//_________________________________________________________________________________________________________________
+// other includes
+//_________________________________________________________________________________________________________________
+#include <com/sun/star/uno/Reference.hxx>
+#include <rtl/ustring.hxx>
+#include <osl/mutex.hxx>
+
+//_________________________________________________________________________________________________________________
+// namespace
+//_________________________________________________________________________________________________________________
+
+namespace framework{
+
+#define REFERENCE ::com::sun::star::uno::Reference
+#define XMULTISERVICEFACTORY ::com::sun::star::lang::XMultiServiceFactory
+#define OUSTRING ::rtl::OUString
+#define MUTEX ::osl::Mutex
+
+//_________________________________________________________________________________________________________________
+// exported const
+//_________________________________________________________________________________________________________________
+
+//_________________________________________________________________________________________________________________
+// exported definitions
+//_________________________________________________________________________________________________________________
+
+/*-************************************************************************************************************//**
+ @short create a new global servicemanager
+ @descr A global servicemanager is neccessary to instanciate UNO-services. To do this, you need
+ a factory to create new objects with special type. That's the reason for a servicemanager.
+
+ @implements -
+ @base -
+
+ @devstatus ready to use
+*//*-*************************************************************************************************************/
+
+class ServiceManager
+{
+ //-------------------------------------------------------------------------------------------------------------
+ // public methods
+ //-------------------------------------------------------------------------------------------------------------
+
+ public:
+
+ //---------------------------------------------------------------------------------------------------------
+ // constructor / destructor
+ //---------------------------------------------------------------------------------------------------------
+
+ /*-****************************************************************************************************//**
+ @short standard constructor
+ @descr This method don't initialize the new global servicemanager!
+ But we increase an internal ref count. These is needed in dtor to release
+ all created static references to created service mamanger!
+
+ @seealso dtor
+
+ @param -
+ @return -
+
+ @onerror -
+ *//*-*****************************************************************************************************/
+
+ ServiceManager();
+
+ /*-****************************************************************************************************//**
+ @short standard destructor to delete instance
+ @descr Here is a good place to destroy the global manager instances!
+
+ @seealso ctor
+
+ @param -
+ @return -
+
+ @onerror -
+ *//*-*****************************************************************************************************/
+
+ virtual ~ServiceManager();
+
+ /*-****************************************************************************************************//**
+ @short initialize global uno service manager and return it
+ @descr This method create a new manager only at first call. We confiscate this with a static
+ pointer, which will be initialized only, if it NULL!
+ Then you can call this method everytime to get a reference to the manager.
+ If you will initialize an uno application you must set returned reference in ::comphelper::setProcessServiceFactory()!
+ The created manager use "applicat.rdb" and "userXX.rdb" automaticly.
+
+ @seealso -
+
+ @param -
+ @return A reference to the global servicemanager. It can be NULL!
+
+ @onerror We return a null-reference.
+ *//*-*****************************************************************************************************/
+
+ REFERENCE< XMULTISERVICEFACTORY > getGlobalUNOServiceManager();
+
+ /*-****************************************************************************************************//**
+ @short initialize global uno service manager and return it
+ @descr Do the same like getGlobalUNOServiceManager() before, but use "applicat.rdb" only!
+
+ @seealso -
+
+ @param -
+ @return A reference to the global servicemanager. It can be NULL!
+
+ @onerror We return a null-reference.
+ *//*-*****************************************************************************************************/
+
+ REFERENCE< XMULTISERVICEFACTORY > getSimpleGlobalUNOServiceManager();
+
+ /*-****************************************************************************************************//**
+ @short return a reference to a uno servicemanager instance which use your specified user registry file
+ @descr This do the same like method before - but instead of "userXX.rdb" we use your file.
+ These is neccessary, if you will run more then one uno application at the same time in same environment!
+ All created servicemanager use the same "applicat.rdb" but different user registries.
+
+ @ATTENTION Given file name must be a full qualified system file name. If file not already exist we create a new one!
+ "applicat.rdb", "userXX.rdb" are not valid values!
+
+ @seealso method generateGlobalUNOServiceManager()
+ @seealso method generatePrivateUNOServiceManager()
+
+ @param "sUserRegistryFile", full qualified system file name of user registry
+ @return A reference to the created servicemanager. It can be NULL!
+
+ @onerror We return a null-reference.
+ *//*-*****************************************************************************************************/
+
+ REFERENCE< XMULTISERVICEFACTORY > getSharedUNOServiceManager( const OUSTRING& sUserRegistryFile );
+
+ /*-****************************************************************************************************//**
+ @short return a reference to a uno servicemanager instance which use your specified user registry file only
+ @descr This do the same like methods before - but use your file as the only one registry.
+ "applicat.rdb" is used here!
+
+ @ATTENTION Given file name must be a full qualified system file name. If file not already exist we create a new one!
+ "applicat.rdb", "userXX.rdb" are not valid values!
+ If file was new created - you must register services at runtime himself.
+ Otherwise no service could be created by these manager ...
+
+ @seealso method generateGlobalUNOServiceManager()
+ @seealso method generateSharedUNOServiceManager()
+
+ @param "sUserRegistryFile", full qualified system file name of user registry
+ @return A reference to the created servicemanager. It can be NULL!
+
+ @onerror We return a null-reference.
+ *//*-*****************************************************************************************************/
+
+ REFERENCE< XMULTISERVICEFACTORY > getPrivateUNOServiceManager( const OUSTRING& sUserRegistryFile );
+
+ //-------------------------------------------------------------------------------------------------------------
+ // protected methods
+ //-------------------------------------------------------------------------------------------------------------
+
+ protected:
+
+ //-------------------------------------------------------------------------------------------------------------
+ // private methods
+ //-------------------------------------------------------------------------------------------------------------
+
+ private:
+
+ /*-****************************************************************************************************//**
+ @short create our own global mutex to prevent us against multithreaded problems
+ @descr We use some static member. For correct access to it we must use the global osl mutex ...
+ but its not fine to do so! These block ALL other operations, which need these mutex too.
+ That's the reason to create our own static mutex. Only first creation is protected
+ by the global mutex, using isn't it!
+
+ @seealso using
+
+ @param -
+ @return reference to created static own global mutex
+
+ @onerror No error should occure.
+ *//*-*****************************************************************************************************/
+
+ MUTEX& impl_getOwnGlobalMutex();
+
+ /*-****************************************************************************************************//**
+ @short create a new global servicemanager instance
+ @descr Is a helper-method for getManager().
+
+ @seealso method getManager()
+
+ @param "sRegistryFile", file name of user registry.
+ @return A reference to a new initialized servicemanager with a valid registry.
+ It can be NULL, if an error occured.
+
+ @onerror Return a NULL-reference.
+ *//*-*****************************************************************************************************/
+
+ REFERENCE< XMULTISERVICEFACTORY > impl_createManager( const OUSTRING& sRegistryFile );
+
+ //-------------------------------------------------------------------------------------------------------------
+ // debug methods
+ // (should be private everyway!)
+ //-------------------------------------------------------------------------------------------------------------
+
+ /*-****************************************************************************************************//**
+ @short debug-method to check incoming parameter of some other mehods of this class
+ @descr The following methods are used to check parameters for other methods
+ of this class. The return value is used directly for an ASSERT(...).
+
+ @seealso ASSERTs in implementation!
+
+ @param references to checking variables
+ @return sal_False on invalid parameter<BR>
+ sal_True otherway
+
+ @onerror -
+ *//*-*****************************************************************************************************/
+
+ #ifdef ENABLE_ASSERTIONS
+
+ private:
+
+ #endif // #ifdef ENABLE_ASSERTIONS
+
+ //-------------------------------------------------------------------------------------------------------------
+ // private variables
+ // (should be private everyway!)
+ //-------------------------------------------------------------------------------------------------------------
+
+ private:
+
+ static REFERENCE< XMULTISERVICEFACTORY >* m_pGlobalServiceManager ;
+ static REFERENCE< XMULTISERVICEFACTORY >* m_pSimpleGlobalServiceManager ;
+ static REFERENCE< XMULTISERVICEFACTORY >* m_pSharedServiceManager ;
+ static REFERENCE< XMULTISERVICEFACTORY >* m_pPrivateServiceManager ;
+ static sal_Int32 m_nRefCount ;
+
+}; // class ServiceManager
+
+} // namespace framework
+
+#endif // #ifndef __FRAMEWORK_CLASSES_SERVICEMANAGER_HXX_