summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Bolte <obo@openoffice.org>2006-03-29 11:42:32 +0000
committerOliver Bolte <obo@openoffice.org>2006-03-29 11:42:32 +0000
commitca4f05b0ea5ee8c196e17eb355f2d27b9fb824bb (patch)
tree6c6df908f3d78e016adced8dbfe1add29b883ddd
parentcf4be47a4141b6e2942953120131bce546366525 (diff)
INTEGRATION: CWS dba203a (1.1.2); FILE ADDED
2006/03/17 11:12:04 fs 1.1.2.1: outsourced service registration/creation from resource.cxx
-rw-r--r--extensions/source/resource/res_services.cxx138
-rw-r--r--extensions/source/resource/res_services.hxx81
2 files changed, 219 insertions, 0 deletions
diff --git a/extensions/source/resource/res_services.cxx b/extensions/source/resource/res_services.cxx
new file mode 100644
index 000000000..1a70659c0
--- /dev/null
+++ b/extensions/source/resource/res_services.cxx
@@ -0,0 +1,138 @@
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: res_services.cxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: obo $ $Date: 2006-03-29 12:42:21 $
+ *
+ * The Contents of this file are made available subject to
+ * the terms of GNU Lesser General Public License Version 2.1.
+ *
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2005 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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 for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ************************************************************************/
+
+#ifndef EXTENSIONS_RESOURCE_SERVICES_HXX
+#include "res_services.hxx"
+#endif
+
+/** === begin UNO includes === **/
+#ifndef _COM_SUN_STAR_REGISTRY_XREGISTRYKEY_HPP_
+#include <com/sun/star/registry/XRegistryKey.hpp>
+#endif
+/** === end UNO includes === **/
+
+/** === begin UNO using === **/
+using ::com::sun::star::registry::XRegistryKey;
+using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::Sequence;
+using ::com::sun::star::uno::Exception;
+using ::com::sun::star::lang::XMultiServiceFactory;
+using ::com::sun::star::lang::XSingleServiceFactory;
+using ::com::sun::star::uno::UNO_QUERY;
+/** === end UNO using === **/
+
+#include <vector>
+
+namespace res
+{
+ ::std::vector< ComponentInfo > getComponentInfos()
+ {
+ ::std::vector< ::res::ComponentInfo > aComponentInfos;
+ aComponentInfos.push_back( getComponentInfo_VclStringResourceLoader() );
+ aComponentInfos.push_back( getComponentInfo_OpenOfficeResourceLoader() );
+ return aComponentInfos;
+ }
+}
+
+extern "C" {
+
+void SAL_CALL component_getImplementationEnvironment(
+ const sal_Char ** ppEnvTypeName, uno_Environment ** /*ppEnv*/ )
+{
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+}
+
+sal_Bool SAL_CALL component_writeInfo( void * /*pServiceManager*/, XRegistryKey * pRegistryKey )
+{
+ try
+ {
+ ::std::vector< ::res::ComponentInfo > aComponentInfos( ::res::getComponentInfos() );
+ for ( ::std::vector< ::res::ComponentInfo >::const_iterator loop = aComponentInfos.begin();
+ loop != aComponentInfos.end();
+ ++loop
+ )
+ {
+ Reference< XRegistryKey > xNewKey =
+ pRegistryKey->createKey( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/") )
+ + loop->sImplementationName + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/UNO/SERVICES" ) ) );
+
+ for( sal_Int32 i = 0; i < loop->aSupportedServices.getLength(); ++i )
+ xNewKey->createKey( loop->aSupportedServices.getConstArray()[i]);
+
+ if ( loop->sSingletonName.getLength() )
+ {
+ OSL_ENSURE( loop->aSupportedServices.getLength() == 1, "singletons must support exactly one service!" );
+ xNewKey = pRegistryKey->createKey( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/") )
+ + loop->sImplementationName + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "/UNO/SINGLETONS/" ) )
+ + loop->sSingletonName );
+ xNewKey->setStringValue( loop->aSupportedServices[ 0 ] );
+ }
+ }
+
+ return sal_True;
+ }
+ catch (Exception &)
+ {
+ // not allowed to throw an exception over the c function.
+ //OSL_ENSURE( sal_False, "Exception cannot register component!" );
+ return sal_False;
+ }
+}
+
+void * SAL_CALL component_getFactory(
+ const sal_Char * pImplName, XMultiServiceFactory * /*pServiceManager*/, void * /*pRegistryKey*/ )
+{
+ void * pRet = 0;
+ ::std::vector< ::res::ComponentInfo > aComponentInfos( ::res::getComponentInfos() );
+ for ( ::std::vector< ::res::ComponentInfo >::const_iterator loop = aComponentInfos.begin();
+ loop != aComponentInfos.end();
+ ++loop
+ )
+ {
+ if ( 0 == loop->sImplementationName.compareToAscii( pImplName ) )
+ {
+ // create the factory
+ Reference< XSingleServiceFactory > xFactory( ::cppu::createSingleComponentFactory(
+ loop->pFactory, loop->sImplementationName, loop->aSupportedServices ),
+ UNO_QUERY );
+ // acquire, because we return an interface pointer instead of a reference
+ xFactory->acquire();
+ pRet = xFactory.get();
+ }
+ }
+ return pRet;
+}
+
+} // extern "C"
diff --git a/extensions/source/resource/res_services.hxx b/extensions/source/resource/res_services.hxx
new file mode 100644
index 000000000..45fe4a5e1
--- /dev/null
+++ b/extensions/source/resource/res_services.hxx
@@ -0,0 +1,81 @@
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: res_services.hxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: obo $ $Date: 2006-03-29 12:42:32 $
+ *
+ * The Contents of this file are made available subject to
+ * the terms of GNU Lesser General Public License Version 2.1.
+ *
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2005 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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 for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ************************************************************************/
+
+#ifndef EXTENSIONS_RESOURCE_SERVICES_HXX
+#define EXTENSIONS_RESOURCE_SERVICES_HXX
+
+/** === begin UNO includes === **/
+#ifndef _COM_SUN_STAR_UNO_SEQUENCE_HXX_
+#include <com/sun/star/uno/Sequence.hxx>
+#endif
+#ifndef _COM_SUN_STAR_UNO_REFERENCE_HXX_
+#include <com/sun/star/uno/Reference.hxx>
+#endif
+#ifndef _COM_SUN_STAR_UNO_XINTERFACE_HPP_
+#include <com/sun/star/uno/XInterface.hpp>
+#endif
+/** === end UNO includes === **/
+
+#ifndef _CPPUHELPER_FACTORY_HXX_
+#include <cppuhelper/factory.hxx>
+#endif
+
+//........................................................................
+namespace res
+{
+//........................................................................
+
+ struct ComponentInfo
+ {
+ /// services supported by the component
+ ::com::sun::star::uno::Sequence< ::rtl::OUString > aSupportedServices;
+ /// implementation name of the component
+ ::rtl::OUString sImplementationName;
+ /** name of the singleton instance of the component, if it is a singleton, empty otherwise
+ If the component is a singleton, aSupportedServices must contain exactly one element.
+ */
+ ::rtl::OUString sSingletonName;
+ /// factory for creating the component
+ ::cppu::ComponentFactoryFunc pFactory;
+ };
+
+ ComponentInfo getComponentInfo_VclStringResourceLoader();
+ ComponentInfo getComponentInfo_OpenOfficeResourceLoader();
+
+//........................................................................
+} // namespace res
+//........................................................................
+
+#endif // EXTENSIONS_RESOURCE_SERVICES_HXX