summaryrefslogtreecommitdiff
path: root/stoc/source
diff options
context:
space:
mode:
Diffstat (limited to 'stoc/source')
-rw-r--r--stoc/source/bootstrap/bootstrap.xml358
-rw-r--r--stoc/source/bootstrap/makefile.mk50
-rw-r--r--stoc/source/bootstrap/services.cxx137
-rw-r--r--stoc/source/corereflection/base.hxx453
-rw-r--r--stoc/source/corereflection/corefl.xml44
-rw-r--r--stoc/source/corereflection/crarray.cxx234
-rw-r--r--stoc/source/corereflection/crbase.cxx293
-rw-r--r--stoc/source/corereflection/crcomp.cxx407
-rw-r--r--stoc/source/corereflection/crefl.cxx491
-rw-r--r--stoc/source/corereflection/crenum.cxx249
-rw-r--r--stoc/source/corereflection/criface.cxx995
-rw-r--r--stoc/source/corereflection/lrucache.hxx247
-rw-r--r--stoc/source/corereflection/makefile.mk82
-rw-r--r--stoc/source/corereflection/reflection.component35
-rw-r--r--stoc/source/cppumaker.mk41
-rw-r--r--stoc/source/defaultregistry/defaultregistry.cxx1401
-rw-r--r--stoc/source/defaultregistry/makefile.mk46
-rw-r--r--stoc/source/implementationregistration/implreg.cxx1893
-rw-r--r--stoc/source/implementationregistration/makefile.mk47
-rw-r--r--stoc/source/implementationregistration/mergekeys.cxx189
-rw-r--r--stoc/source/implementationregistration/mergekeys.hxx55
-rw-r--r--stoc/source/inspect/insp.xml59
-rw-r--r--stoc/source/inspect/introspection.component34
-rw-r--r--stoc/source/inspect/introspection.cxx3072
-rw-r--r--stoc/source/inspect/makefile.mk73
-rw-r--r--stoc/source/invocation/inv.xml77
-rw-r--r--stoc/source/invocation/invocation.component34
-rw-r--r--stoc/source/invocation/invocation.cxx1234
-rw-r--r--stoc/source/invocation/makefile.mk71
-rw-r--r--stoc/source/invocation_adapterfactory/iafactory.cxx1002
-rw-r--r--stoc/source/invocation_adapterfactory/invadp.xml41
-rw-r--r--stoc/source/invocation_adapterfactory/invocadapt.component34
-rw-r--r--stoc/source/invocation_adapterfactory/makefile.mk73
-rw-r--r--stoc/source/javaloader/javaloader.component35
-rw-r--r--stoc/source/javaloader/javaloader.cxx455
-rw-r--r--stoc/source/javaloader/javaloader.xml39
-rw-r--r--stoc/source/javaloader/makefile.mk79
-rw-r--r--stoc/source/javavm/interact.cxx128
-rw-r--r--stoc/source/javavm/interact.hxx78
-rw-r--r--stoc/source/javavm/javavm.component35
-rw-r--r--stoc/source/javavm/javavm.cxx1772
-rw-r--r--stoc/source/javavm/javavm.hxx175
-rw-r--r--stoc/source/javavm/jen.xml70
-rw-r--r--stoc/source/javavm/jvmargs.cxx68
-rw-r--r--stoc/source/javavm/jvmargs.hxx61
-rw-r--r--stoc/source/javavm/makefile.mk94
-rw-r--r--stoc/source/loader/dllcomponentloader.cxx259
-rw-r--r--stoc/source/loader/makefile.mk47
-rw-r--r--stoc/source/module-description.dtd54
-rw-r--r--stoc/source/namingservice/makefile.mk73
-rw-r--r--stoc/source/namingservice/namingservice.component34
-rw-r--r--stoc/source/namingservice/namingservice.cxx223
-rw-r--r--stoc/source/namingservice/namingservice.xml37
-rw-r--r--stoc/source/proxy_factory/makefile.mk73
-rw-r--r--stoc/source/proxy_factory/proxyfac.component34
-rw-r--r--stoc/source/proxy_factory/proxyfac.cxx533
-rw-r--r--stoc/source/proxy_factory/proxyfac.xml37
-rw-r--r--stoc/source/registry_tdprovider/base.hxx649
-rw-r--r--stoc/source/registry_tdprovider/functiondescription.cxx118
-rw-r--r--stoc/source/registry_tdprovider/functiondescription.hxx89
-rw-r--r--stoc/source/registry_tdprovider/makefile.mk61
-rw-r--r--stoc/source/registry_tdprovider/methoddescription.cxx147
-rw-r--r--stoc/source/registry_tdprovider/methoddescription.hxx85
-rw-r--r--stoc/source/registry_tdprovider/rdbtdp_tdenumeration.cxx634
-rw-r--r--stoc/source/registry_tdprovider/rdbtdp_tdenumeration.hxx118
-rw-r--r--stoc/source/registry_tdprovider/structtypedescription.cxx142
-rw-r--r--stoc/source/registry_tdprovider/structtypedescription.hxx108
-rw-r--r--stoc/source/registry_tdprovider/td.cxx82
-rw-r--r--stoc/source/registry_tdprovider/tdcomp.cxx189
-rw-r--r--stoc/source/registry_tdprovider/tdconsts.cxx113
-rw-r--r--stoc/source/registry_tdprovider/tdef.cxx84
-rw-r--r--stoc/source/registry_tdprovider/tdenum.cxx137
-rw-r--r--stoc/source/registry_tdprovider/tdiface.cxx588
-rw-r--r--stoc/source/registry_tdprovider/tdmodule.cxx128
-rw-r--r--stoc/source/registry_tdprovider/tdprop.cxx71
-rw-r--r--stoc/source/registry_tdprovider/tdprovider.cxx612
-rw-r--r--stoc/source/registry_tdprovider/tdservice.cxx569
-rw-r--r--stoc/source/registry_tdprovider/tdsingleton.cxx135
-rw-r--r--stoc/source/security/access_controller.cxx1066
-rw-r--r--stoc/source/security/file_policy.cxx604
-rw-r--r--stoc/source/security/lru_cache.h282
-rw-r--r--stoc/source/security/makefile.mk62
-rw-r--r--stoc/source/security/permissions.cxx669
-rw-r--r--stoc/source/security/permissions.h105
-rw-r--r--stoc/source/servicemanager/makefile.mk47
-rw-r--r--stoc/source/servicemanager/servicemanager.cxx2004
-rw-r--r--stoc/source/simpleregistry/makefile.mk47
-rw-r--r--stoc/source/simpleregistry/simpleregistry.cxx1322
-rw-r--r--stoc/source/simpleregistry/textualservices.cxx1255
-rw-r--r--stoc/source/simpleregistry/textualservices.hxx67
-rw-r--r--stoc/source/stocservices/makefile.mk49
-rw-r--r--stoc/source/stocservices/stocserv.xml98
-rw-r--r--stoc/source/stocservices/stocservices.cxx107
-rw-r--r--stoc/source/tdmanager/lrucache.hxx250
-rw-r--r--stoc/source/tdmanager/makefile.mk49
-rw-r--r--stoc/source/tdmanager/tdmgr.cxx1142
-rw-r--r--stoc/source/tdmanager/tdmgr_check.cxx559
-rw-r--r--stoc/source/tdmanager/tdmgr_common.hxx63
-rw-r--r--stoc/source/tdmanager/tdmgr_tdenumeration.cxx187
-rw-r--r--stoc/source/tdmanager/tdmgr_tdenumeration.hxx91
-rw-r--r--stoc/source/typeconv/convert.cxx947
-rw-r--r--stoc/source/typeconv/makefile.mk48
-rw-r--r--stoc/source/uriproc/ExternalUriReferenceTranslator.cxx243
-rw-r--r--stoc/source/uriproc/ExternalUriReferenceTranslator.hxx62
-rw-r--r--stoc/source/uriproc/UriReference.cxx209
-rw-r--r--stoc/source/uriproc/UriReference.hxx111
-rw-r--r--stoc/source/uriproc/UriReferenceFactory.cxx727
-rw-r--r--stoc/source/uriproc/UriReferenceFactory.hxx62
-rw-r--r--stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTexpand.cxx271
-rw-r--r--stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTexpand.hxx65
-rw-r--r--stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.cxx488
-rw-r--r--stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.hxx64
-rw-r--r--stoc/source/uriproc/VndSunStarPkgUrlReferenceFactory.cxx170
-rw-r--r--stoc/source/uriproc/VndSunStarPkgUrlReferenceFactory.hxx62
-rw-r--r--stoc/source/uriproc/makefile.mk53
-rw-r--r--stoc/source/uriproc/supportsService.cxx54
-rw-r--r--stoc/source/uriproc/supportsService.hxx46
117 files changed, 0 insertions, 36710 deletions
diff --git a/stoc/source/bootstrap/bootstrap.xml b/stoc/source/bootstrap/bootstrap.xml
deleted file mode 100644
index ac5fb2db1..000000000
--- a/stoc/source/bootstrap/bootstrap.xml
+++ /dev/null
@@ -1,358 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name> bootstrap.uno </module-name>
- <component-description>
- <author> Juergen Schmidt </author>
- <name> com.sun.star.comp.stoc.DLLComponentLoader </name>
- <description>
- This component provides a mechanism to load an external compoment implemented as
- a shared library.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> c++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.loader.SharedLibrary </supported-service>
- <type> com.sun.star.util.XMacroExpander </type>
- <type> com.sun.star.loader.XImplementationLoader </type>
- <type> com.sun.star.lang.IllegalArgumentException </type>
- <type> com.sun.star.lang.XInitialization </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.beans.XPropertySet </type>
- <type> com.sun.star.container.XSet </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XComponentContext </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.uno.DeploymentException </type>
- </component-description>
- <component-description>
- <author> Juergen Schmidt </author>
- <name> com.sun.star.comp.stoc.NestedRegistry </name>
- <description>
- This component provides access to a simple hierachical registry. The registry based on
- two registry file.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> c++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.registry.NestedRegistry </supported-service>
- <reference-docu xlink:href="http://www.sun.com" xlink:type="simple"/>
- <service-dependency> com.sun.star.registry.SimpleRegistry </service-dependency>
- <type> com.sun.star.lang.XInitialization </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.registry.XSimpleRegistry </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.uno.XComponentContext </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.container.XEnumerationAccess </type>
- </component-description>
- <component-description>
- <author> Juergen Schmidt </author>
- <name> com.sun.star.comp.stoc.ImplementationRegistration </name>
- <description>
- This component provides a mechanism to register or deregister an external component
- to the current uno environment or better to the current service manager.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> c++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.registry.ImplementationRegistration </supported-service>
- <service-dependency> com.sun.star.registry.SimpleRegistry </service-dependency>
- <service-dependency> com.sun.star.loader.SharedLibrary </service-dependency>
- <service-dependency> com.sun.star.loader.Java </service-dependency>
- <type> com.sun.star.loader.XImplementationLoader </type>
- <type> com.sun.star.lang.XInitialization </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.registry.XSimpleRegistry </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.registry.XImplementationRegistration2 </type>
- <type> com.sun.star.beans.XPropertySet </type>
- <type> com.sun.star.container.XSet </type>
- <type> com.sun.star.container.XHierarchicalNameAccess </type>
- <type> com.sun.star.reflection.XServiceTypeDescription </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.uno.XComponentContext </type>
- </component-description>
- <component-description>
- <author> Daniel Boelzle </author>
- <name> com.sun.star.comp.stoc.RegistryTypeDescriptionProvider </name>
- <description>
-This provider service supports the XHierarchicalNameAccess interface to read type descriptions
-and constants from a registry source.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> C++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.reflection.TypeDescriptionProvider </supported-service>
- <service-dependency>com.sun.star.reflection.TypeDescriptionManager</service-dependency>
- <type> com.sun.star.reflection.XTypeDescription </type>
- <type> com.sun.star.reflection.XConstantsTypeDescription </type>
- <type> com.sun.star.reflection.XEnumTypeDescription </type>
- <type> com.sun.star.reflection.XIndirectTypeDescription </type>
- <type> com.sun.star.reflection.XInterfaceMemberTypeDescription </type>
- <type> com.sun.star.reflection.XInterfaceAttributeTypeDescription2 </type>
- <type> com.sun.star.reflection.XMethodParameter </type>
- <type> com.sun.star.reflection.XModuleTypeDescription </type>
- <type> com.sun.star.reflection.XInterfaceMethodTypeDescription </type>
- <type> com.sun.star.reflection.XInterfaceTypeDescription </type>
- <type> com.sun.star.reflection.XInterfaceTypeDescription2 </type>
- <type> com.sun.star.reflection.XCompoundTypeDescription </type>
- <type> com.sun.star.reflection.XServiceConstructorDescription </type>
- <type> com.sun.star.reflection.XServiceTypeDescription </type>
- <type> com.sun.star.reflection.XServiceTypeDescription2 </type>
- <type> com.sun.star.reflection.XSingletonTypeDescription2 </type>
- <type> com.sun.star.reflection.XTypeDescriptionEnumerationAccess </type>
- <type> com.sun.star.reflection.XParameter </type>
- <type> com.sun.star.reflection.XPublished</type>
- <type> com.sun.star.reflection.XStructTypeDescription</type>
- <type> com.sun.star.lang.DisposedException </type>
- <type> com.sun.star.lang.XComponent </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.lang.XMultiComponentFactory </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.lang.XInitialization </type>
- <type> com.sun.star.registry.XSimpleRegistry </type>
- <type> com.sun.star.beans.PropertyAttribute </type>
- <type> com.sun.star.beans.XPropertySet </type>
- <type> com.sun.star.container.NoSuchElementException </type>
- <type> com.sun.star.container.XHierarchicalNameAccess </type>
- <type> com.sun.star.container.XSet </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XComponentContext </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.XInterface </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.uno.RuntimeException </type>
- </component-description>
- <component-description>
- <author>boelzle@sun.com</author>
- <name>com.sun.star.security.comp.stoc.AccessController</name>
-<description>
-This service is an implementation of the com.sun.star.security.AccessController service.
-</description>
- <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
- <language>C++</language>
- <status value="under construction"/>
- <supported-service>com.sun.star.security.AccessController</supported-service>
- <service-dependency> unknown, because of used policy </service-dependency>
- <type>com.sun.star.security.XAccessController</type>
- <type>com.sun.star.security.XPolicy</type>
- <type>com.sun.star.security.RuntimePermission</type>
- <type>com.sun.star.security.AllPermission</type>
- <type>com.sun.star.io.FilePermission</type>
- <type>com.sun.star.connection.SocketPermission</type>
- <type>com.sun.star.registry.XRegistryKey</type>
- <type>com.sun.star.lang.DisposedException</type>
- <type>com.sun.star.lang.XTypeProvider</type>
- <type>com.sun.star.lang.XComponent</type>
- <type>com.sun.star.lang.XServiceInfo</type>
- <type>com.sun.star.lang.XSingleComponentFactory</type>
- <type>com.sun.star.lang.XSingleServiceFactory</type>
- <type>com.sun.star.lang.XMultiComponentFactory</type>
- <type>com.sun.star.lang.XMultiServiceFactory</type>
- <type>com.sun.star.lang.XInitialization</type>
- <type>com.sun.star.uno.XWeak</type>
- <type>com.sun.star.uno.XAggregation</type>
- <type>com.sun.star.uno.DeploymentException</type>
- <type>com.sun.star.uno.XCurrentContext</type>
- <type>com.sun.star.uno.XComponentContext</type>
- <type>com.sun.star.uno.TypeClass</type>
- </component-description>
- <component-description>
- <author>boelzle@sun.com</author>
- <name>com.sun.star.security.comp.stoc.FilePolicy</name>
-<description>
-This service is an implementation of the com.sun.star.security.Policy service.
-</description>
- <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
- <language>C++</language>
- <status value="under construction"/>
- <supported-service>com.sun.star.security.Policy</supported-service>
- <type>com.sun.star.security.XAccessController</type>
- <type>com.sun.star.security.XPolicy</type>
- <type>com.sun.star.security.RuntimePermission</type>
- <type>com.sun.star.security.AllPermission</type>
- <type>com.sun.star.io.FilePermission</type>
- <type>com.sun.star.connection.SocketPermission</type>
- <type>com.sun.star.registry.XRegistryKey</type>
- <type>com.sun.star.lang.XTypeProvider</type>
- <type>com.sun.star.lang.XComponent</type>
- <type>com.sun.star.lang.XServiceInfo</type>
- <type>com.sun.star.lang.XSingleComponentFactory</type>
- <type>com.sun.star.lang.XSingleServiceFactory</type>
- <type>com.sun.star.lang.XMultiComponentFactory</type>
- <type>com.sun.star.lang.XMultiServiceFactory</type>
- <type>com.sun.star.uno.XWeak</type>
- <type>com.sun.star.uno.XAggregation</type>
- <type>com.sun.star.uno.XCurrentContext</type>
- <type>com.sun.star.uno.XComponentContext</type>
- <type>com.sun.star.uno.TypeClass</type>
- </component-description>
- <component-description>
- <author> Juergen Schmidt </author>
- <name> com.sun.star.comp.stoc.SimpleRegistry </name>
- <description>
- This component provides access to a simple hierachical registry. The registry based on
- one registry file.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> c++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.registry.SimpleRegistry </supported-service>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.lang.XMultiComponentFactory </type>
- <type> com.sun.star.registry.XSimpleRegistry </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.uno.XComponentContext </type>
- </component-description>
- <component-description>
- <author> Juergen Schmidt </author>
- <name> com.sun.star.comp.stoc.OServiceManager </name>
- <description>
- This component provides an administration object which manages
- factories for many services. The services could be accessed with
- the service name by using createInstance or createInstanceWithArguments.
- To support the servicemanager with the needed information about a
- service implementation, for e.g. which component implements the service,
- two ways are possible:
- - register a component persistent in a registry on which the servicemanager
- works, using the com.sun.star.registry.ImplementationRegistration service.
- - insert a corresponding factory for the service directly using the
- interface XSet.
-
- For creating an object of a requested service the service manager checks
- if a factory for this service is avaible, if not the registry will be
- searched for information about this service. If there is an appropriate
- entry, the component is loaded, a factory is created and announced to the
- service manager. Finding a factory the service manager calls the factory
- for creating new objects.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> c++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.lang.MultiServiceFactory </supported-service>
- <supported-service> com.sun.star.lang.ServiceManager </supported-service>
- <type> com.sun.star.lang.XUnoTunnel </type>
- <type> com.sun.star.lang.XComponent </type>
- <type> com.sun.star.lang.XEventListener </type>
- <type> com.sun.star.lang.XInitialization </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.lang.DisposedException </type>
- <type> com.sun.star.registry.XSimpleRegistry </type>
- <type> com.sun.star.beans.XPropertySet </type>
- <type> com.sun.star.container.XSet </type>
- <type> com.sun.star.container.XEnumeration </type>
- <type> com.sun.star.container.XContentEnumerationAccess </type>
- <type> com.sun.star.container.XHierarchicalNameAccess </type>
- <type> com.sun.star.uno.XComponentContext </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.uno.XUnloadingPreference </type>
- <type> com.sun.star.beans.PropertyAttribute </type>
- </component-description>
- <component-description>
- <author> Daniel Boelzle </author>
- <name> com.sun.star.comp.stoc.TypeDescriptionManager </name>
- <description>
-This service is the central manager supporting the XHierarchicalNameAccess interface.
-At runtime there will only be at most a single instance of the service.
-A manager instance is hooked into the C UNO runtime typelib and lives until the service manager
-is going down.
-You can manually add a provider by inserting it via the XSet interface.
-At startup of this service, you must call an initialization, adding all known
-providers.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> C++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.reflection.TypeDescriptionManager </supported-service>
- <service-dependency> ... </service-dependency>
- <type> com.sun.star.beans.PropertyAttribute </type>
- <type> com.sun.star.reflection.XTypeDescription </type>
- <type> com.sun.star.reflection.XEnumTypeDescription </type>
- <type> com.sun.star.reflection.XArrayTypeDescription </type>
- <type> com.sun.star.reflection.XIndirectTypeDescription </type>
- <type> com.sun.star.reflection.XInterfaceMemberTypeDescription </type>
- <type> com.sun.star.reflection.XInterfaceAttributeTypeDescription </type>
- <type> com.sun.star.reflection.XInterfaceAttributeTypeDescription2 </type>
- <type> com.sun.star.reflection.XMethodParameter </type>
- <type> com.sun.star.reflection.XInterfaceMethodTypeDescription </type>
- <type> com.sun.star.reflection.XInterfaceTypeDescription2 </type>
- <type> com.sun.star.reflection.XStructTypeDescription </type>
- <type> com.sun.star.reflection.XServiceTypeDescription </type>
- <type> com.sun.star.reflection.XServiceTypeDescription2 </type>
- <type> com.sun.star.reflection.XPropertyTypeDescription </type>
- <type> com.sun.star.reflection.XConstantTypeDescription </type>
- <type> com.sun.star.reflection.XConstantsTypeDescription </type>
- <type> com.sun.star.reflection.XSingletonTypeDescription </type>
- <type> com.sun.star.reflection.XSingletonTypeDescription2 </type>
- <type> com.sun.star.reflection.XUnionTypeDescription </type>
- <type> com.sun.star.reflection.XTypeDescriptionEnumerationAccess </type>
- <type> com.sun.star.lang.DisposedException </type>
- <type> com.sun.star.lang.XComponent </type>
- <type> com.sun.star.lang.XEventListener </type>
- <type> com.sun.star.lang.XInitialization </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.lang.XMultiComponentFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.container.XSet </type>
- <type> com.sun.star.container.XHierarchicalNameAccess </type>
- <type> com.sun.star.container.XContentEnumerationAccess </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.XComponentContext </type>
- <type> com.sun.star.uno.TypeClass </type>
- </component-description>
- <project-build-dependency> cppuhelper </project-build-dependency>
- <project-build-dependency> cppu </project-build-dependency>
- <project-build-dependency> sal </project-build-dependency>
- <project-build-dependency> registry </project-build-dependency>
- <project-build-dependency> store </project-build-dependency>
- <project-build-dependency> salhelper </project-build-dependency>
- <runtime-module-dependency> cppuhelper3$(COM) </runtime-module-dependency>
- <runtime-module-dependency> cppu3 </runtime-module-dependency>
- <runtime-module-dependency> sal3 </runtime-module-dependency>
- <runtime-module-dependency> reg3 </runtime-module-dependency>
- <runtime-module-dependency> store3 </runtime-module-dependency>
- <runtime-module-dependency> reg3 </runtime-module-dependency>
- <runtime-module-dependency> store3 </runtime-module-dependency>
- <runtime-module-dependency> salhelper3(COM) </runtime-module-dependency>
- <runtime-module-dependency> salhelper3(COM) </runtime-module-dependency>
-</module-description>
diff --git a/stoc/source/bootstrap/makefile.mk b/stoc/source/bootstrap/makefile.mk
deleted file mode 100644
index 9eb1a11cb..000000000
--- a/stoc/source/bootstrap/makefile.mk
+++ /dev/null
@@ -1,50 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME= stoc
-TARGET = bootstrap
-ENABLE_EXCEPTIONS=TRUE
-BOOTSTRAP_SERVICE=TRUE
-COMP1TYPELIST = bootstrap
-
-# --- openoffice.org.orig/Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-
-# ------------------------------------------------------------------
-
-.INCLUDE : ..$/cppumaker.mk
-
-# --- openoffice.org.orig/Files ------------------------------------------------------
-
-SLOFILES= \
- $(SLO)$/services.obj
-
-# --- openoffice.org.orig/Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
diff --git a/stoc/source/bootstrap/services.cxx b/stoc/source/bootstrap/services.cxx
deleted file mode 100644
index 32f7a401b..000000000
--- a/stoc/source/bootstrap/services.cxx
+++ /dev/null
@@ -1,137 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "bootstrapservices.hxx"
-
-#include "cppuhelper/factory.hxx"
-#include "cppuhelper/implementationentry.hxx"
-#include "sal/types.h"
-#include "uno/environment.h"
-#include "uno/lbnames.h"
-
-#include <stdio.h>
-
-using namespace com::sun::star;
-using namespace com::sun::star::uno;
-using namespace cppu;
-using namespace osl;
-
-extern rtl_StandardModuleCount g_moduleCount;
-
-using namespace stoc_bootstrap;
-
-static struct ImplementationEntry g_entries[] =
-{
- //servicemanager
- {
- OServiceManager_CreateInstance, smgr_getImplementationName,
- smgr_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt , 0
- },
- {
- ORegistryServiceManager_CreateInstance, regsmgr_getImplementationName,
- regsmgr_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt , 0
- },
- {
- OServiceManagerWrapper_CreateInstance, smgr_wrapper_getImplementationName,
- smgr_wrapper_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt , 0
- },
- //security
- {
- ac_create, ac_getImplementationName,
- ac_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt, 0
- },
- {
- filepolicy_create, filepolicy_getImplementationName,
- filepolicy_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt, 0
- },
- //simpleregistry
- {
- SimpleRegistry_CreateInstance, simreg_getImplementationName,
- simreg_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt , 0
- },
- //defaultregistry
- {
- NestedRegistry_CreateInstance, defreg_getImplementationName,
- defreg_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt , 0
- },
- //implementationregistry
- {
- ImplementationRegistration_CreateInstance, impreg_getImplementationName,
- impreg_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt , 0
- },
- //loader
- {
- DllComponentLoader_CreateInstance, loader_getImplementationName,
- loader_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt , 0
- },
- //registry_tdprovider
- {
- ProviderImpl_create, rdbtdp_getImplementationName,
- rdbtdp_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt , 0
- },
- //tdmanager
- {
- ManagerImpl_create, tdmgr_getImplementationName,
- tdmgr_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt , 0
- },
- //end
- { 0, 0, 0, 0, 0, 0 }
-};
-
-extern "C"
-{
-
-sal_Bool SAL_CALL component_canUnload( TimeValue *pTime )
-{
- return g_moduleCount.canUnload( &g_moduleCount , pTime );
-}
-
-//==================================================================================================
-SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
- const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey )
-{
- return component_getFactoryHelper( pImplName, pServiceManager, pRegistryKey , g_entries );
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/corereflection/base.hxx b/stoc/source/corereflection/base.hxx
deleted file mode 100644
index be4cc792b..000000000
--- a/stoc/source/corereflection/base.hxx
+++ /dev/null
@@ -1,453 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-// #define TEST_LIST_CLASSES
-
-#include <osl/diagnose.h>
-#include <osl/mutex.hxx>
-#include <uno/mapping.hxx>
-#include <uno/dispatcher.h>
-#include <cppuhelper/weak.hxx>
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/component.hxx>
-#include <cppuhelper/typeprovider.hxx>
-
-#include "lrucache.hxx"
-
-#ifdef TEST_LIST_CLASSES
-#include <list>
-#include <algorithm>
-#endif
-#include <boost/unordered_map.hpp>
-
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
-
-#include <com/sun/star/reflection/XIdlClass.hpp>
-#include <com/sun/star/reflection/XIdlReflection.hpp>
-#include <com/sun/star/reflection/XIdlField.hpp>
-#include <com/sun/star/reflection/XIdlField2.hpp>
-#include <com/sun/star/reflection/XIdlMethod.hpp>
-
-using namespace std;
-using namespace osl;
-using namespace cppu;
-using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::reflection;
-using namespace com::sun::star::container;
-using ::rtl::OUString;
-
-
-namespace stoc_corefl
-{
-
-#ifdef TEST_LIST_CLASSES
-typedef list< OUString > ClassNameList;
-extern ClassNameList g_aClassNames;
-#endif
-
-//--------------------------------------------------------------------------------------------------
-Mutex & getMutexAccess();
-
-//--------------------------------------------------------------------------------------------------
-inline bool td_equals( typelib_TypeDescription * pTD, typelib_TypeDescriptionReference * pType )
-{
- return (pTD->pWeakRef == pType ||
- (pTD->pTypeName->length == pType->pTypeName->length &&
- rtl_ustr_compare( pTD->pTypeName->buffer, pType->pTypeName->buffer ) == 0));
-}
-//--------------------------------------------------------------------------------------------------
-inline typelib_TypeDescription * getTypeByName( const OUString & rName )
-{
- typelib_TypeDescription * pTypeDescr = 0;
- typelib_typedescription_getByName( &pTypeDescr, rName.pData );
- if (! pTypeDescr->bComplete)
- typelib_typedescription_complete( &pTypeDescr );
- return pTypeDescr;
-}
-
-typedef boost::unordered_map< OUString, WeakReference< XIdlField >,
- FctHashOUString, equal_to< OUString > > OUString2Field;
-typedef boost::unordered_map< OUString, WeakReference< XIdlMethod >,
- FctHashOUString, equal_to< OUString > > OUString2Method;
-
-//==================================================================================================
-class IdlReflectionServiceImpl
- : public OComponentHelper
- , public XIdlReflection
- , public XHierarchicalNameAccess
- , public XServiceInfo
-{
- Mutex _aComponentMutex;
- Reference< XMultiServiceFactory > _xMgr;
- Reference< XHierarchicalNameAccess > _xTDMgr;
-
- // caching
- LRU_CacheAnyByOUString _aElements;
-
- Mapping _aCpp2Uno;
- Mapping _aUno2Cpp;
-
- inline Reference< XIdlClass > constructClass( typelib_TypeDescription * pTypeDescr );
-public:
- Reference< XHierarchicalNameAccess > getTDMgr() const
- { return _xTDMgr; }
- Reference< XMultiServiceFactory > getSMgr() const
- { return _xMgr; }
-
- const Mapping & getCpp2Uno() throw(::com::sun::star::uno::RuntimeException);
- const Mapping & getUno2Cpp() throw(::com::sun::star::uno::RuntimeException);
- uno_Interface * mapToUno( const Any & rObj, typelib_InterfaceTypeDescription * pTo ) throw(::com::sun::star::uno::RuntimeException);
-
- // ctor/ dtor
- IdlReflectionServiceImpl( const Reference< XComponentContext > & xContext );
- virtual ~IdlReflectionServiceImpl();
-
- // XInterface
- virtual Any SAL_CALL queryInterface( const Type & rType ) throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL acquire() throw();
- virtual void SAL_CALL release() throw();
-
- // some XComponent part from OComponentHelper
- virtual void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException);
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL supportsService( const OUString & rServiceName ) throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException);
-
- // XTypeProvider
- virtual Sequence< Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException);
- virtual Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException);
-
- // XIdlReflection
- virtual Reference< XIdlClass > SAL_CALL forName( const OUString & rTypeName ) throw(::com::sun::star::uno::RuntimeException);
- virtual Reference< XIdlClass > SAL_CALL getType( const Any & rObj ) throw(::com::sun::star::uno::RuntimeException);
-
- // XHierarchicalNameAccess
- virtual Any SAL_CALL getByHierarchicalName( const OUString & rName ) throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL hasByHierarchicalName( const OUString & rName ) throw(::com::sun::star::uno::RuntimeException);
-
- Reference< XIdlClass > forType( typelib_TypeDescription * pTypeDescr ) throw(::com::sun::star::uno::RuntimeException);
- Reference< XIdlClass > forType( typelib_TypeDescriptionReference * pRef ) throw(::com::sun::star::uno::RuntimeException);
-};
-
-//==================================================================================================
-class IdlClassImpl
- : public WeakImplHelper1< XIdlClass >
-{
- IdlReflectionServiceImpl * _pReflection;
-
- OUString _aName;
- TypeClass _eTypeClass;
-
- typelib_TypeDescription * _pTypeDescr;
-
-public:
- typelib_TypeDescription * getTypeDescr() const
- { return _pTypeDescr; }
- IdlReflectionServiceImpl * getReflection() const
- { return _pReflection; }
- Reference< XMultiServiceFactory > getSMgr() const
- { return _pReflection->getSMgr(); }
- Reference< XHierarchicalNameAccess > getTDMgr() const
- { return getReflection()->getTDMgr(); }
-
- // Ctor
- IdlClassImpl( IdlReflectionServiceImpl * pReflection,
- const OUString & rName, typelib_TypeClass eTypeClass,
- typelib_TypeDescription * pTypeDescr );
- virtual ~IdlClassImpl();
-
- // XIdlClassImpl default implementation
- virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL equals( const Reference< XIdlClass >& xType ) throw(::com::sun::star::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isAssignableFrom( const Reference< XIdlClass > & xType ) throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL createObject( Any & rObj ) throw(::com::sun::star::uno::RuntimeException);
-
- // def impl ????
- virtual Sequence< Reference< XIdlClass > > SAL_CALL getClasses() throw(::com::sun::star::uno::RuntimeException);
- virtual Reference< XIdlClass > SAL_CALL getClass( const OUString & rName ) throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< Reference< XIdlClass > > SAL_CALL getInterfaces() throw(::com::sun::star::uno::RuntimeException);
-
- // structs, interfaces
- virtual Sequence< Reference< XIdlClass > > SAL_CALL getSuperclasses() throw(::com::sun::star::uno::RuntimeException);
- // structs
- virtual Reference< XIdlField > SAL_CALL getField( const OUString & rName ) throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< Reference< XIdlField > > SAL_CALL getFields() throw(::com::sun::star::uno::RuntimeException);
- // interfaces
- virtual Uik SAL_CALL getUik() throw(::com::sun::star::uno::RuntimeException);
- virtual Reference< XIdlMethod > SAL_CALL getMethod( const OUString & rName ) throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< Reference< XIdlMethod > > SAL_CALL getMethods() throw(::com::sun::star::uno::RuntimeException);
- // array
- virtual Reference< XIdlClass > SAL_CALL getComponentType() throw(::com::sun::star::uno::RuntimeException);
- virtual Reference< XIdlArray > SAL_CALL getArray() throw(::com::sun::star::uno::RuntimeException);
-};
-
-//==================================================================================================
-class InterfaceIdlClassImpl
- : public IdlClassImpl
-{
- typedef pair< OUString, typelib_TypeDescription * > MemberInit;
-
- Sequence< Reference< XIdlClass > > _xSuperClasses;
-
- MemberInit * _pSortedMemberInit; // first methods, then attributes
- OUString2Field _aName2Field;
- OUString2Method _aName2Method;
- sal_Int32 _nMethods;
- sal_Int32 _nAttributes;
-
- void initMembers();
-
-public:
- typelib_InterfaceTypeDescription * getTypeDescr() const
- { return (typelib_InterfaceTypeDescription *)IdlClassImpl::getTypeDescr(); }
-
- // ctor/ dtor
- InterfaceIdlClassImpl( IdlReflectionServiceImpl * pReflection,
- const OUString & rName, typelib_TypeClass eTypeClass,
- typelib_TypeDescription * pTypeDescr )
- : IdlClassImpl( pReflection, rName, eTypeClass, pTypeDescr )
- , _pSortedMemberInit( 0 )
- , _nMethods( 0 )
- , _nAttributes( 0 )
- {}
- virtual ~InterfaceIdlClassImpl();
-
- // IdlClassImpl modifications
- virtual sal_Bool SAL_CALL isAssignableFrom( const Reference< XIdlClass > & xType ) throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< Reference< XIdlClass > > SAL_CALL getSuperclasses() throw(::com::sun::star::uno::RuntimeException);
- virtual Uik SAL_CALL getUik() throw(::com::sun::star::uno::RuntimeException);
- virtual Reference< XIdlMethod > SAL_CALL getMethod( const OUString & rName ) throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< Reference< XIdlMethod > > SAL_CALL getMethods() throw(::com::sun::star::uno::RuntimeException);
- virtual Reference< XIdlField > SAL_CALL getField( const OUString & rName ) throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< Reference< XIdlField > > SAL_CALL getFields() throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL createObject( Any & rObj ) throw(::com::sun::star::uno::RuntimeException);
-};
-
-//==================================================================================================
-class CompoundIdlClassImpl
- : public IdlClassImpl
-{
- Reference< XIdlClass > _xSuperClass;
-
- Sequence< Reference< XIdlField > > * _pFields;
- OUString2Field _aName2Field;
-
-public:
- typelib_CompoundTypeDescription * getTypeDescr() const
- { return (typelib_CompoundTypeDescription *)IdlClassImpl::getTypeDescr(); }
-
- // ctor/ dtor
- CompoundIdlClassImpl( IdlReflectionServiceImpl * pReflection,
- const OUString & rName, typelib_TypeClass eTypeClass,
- typelib_TypeDescription * pTypeDescr )
- : IdlClassImpl( pReflection, rName, eTypeClass, pTypeDescr )
- , _pFields( 0 )
- {}
- virtual ~CompoundIdlClassImpl();
-
- // IdlClassImpl modifications
- virtual sal_Bool SAL_CALL isAssignableFrom( const Reference< XIdlClass > & xType ) throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< Reference< XIdlClass > > SAL_CALL getSuperclasses() throw(::com::sun::star::uno::RuntimeException);
- virtual Reference< XIdlField > SAL_CALL getField( const OUString & rName ) throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< Reference< XIdlField > > SAL_CALL getFields() throw(::com::sun::star::uno::RuntimeException);
-};
-
-//==================================================================================================
-class ArrayIdlClassImpl
- : public IdlClassImpl
- , public XIdlArray
-{
-public:
- typelib_IndirectTypeDescription * getTypeDescr() const
- { return (typelib_IndirectTypeDescription *)IdlClassImpl::getTypeDescr(); }
-
- // ctor
- ArrayIdlClassImpl( IdlReflectionServiceImpl * pReflection,
- const OUString & rName, typelib_TypeClass eTypeClass,
- typelib_TypeDescription * pTypeDescr )
- : IdlClassImpl( pReflection, rName, eTypeClass, pTypeDescr )
- {}
-
- virtual Any SAL_CALL queryInterface( const Type & rType ) throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL acquire() throw();
- virtual void SAL_CALL release() throw();
-
- // XTypeProvider
- virtual Sequence< Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException);
- virtual Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException);
-
- // IdlClassImpl modifications
- virtual sal_Bool SAL_CALL isAssignableFrom( const Reference< XIdlClass > & xType ) throw(::com::sun::star::uno::RuntimeException);
- virtual Reference< XIdlClass > SAL_CALL getComponentType() throw(::com::sun::star::uno::RuntimeException);
- virtual Reference< XIdlArray > SAL_CALL getArray() throw(::com::sun::star::uno::RuntimeException);
-
- // XIdlArray
- virtual void SAL_CALL realloc( Any & rArray, sal_Int32 nLen ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
- virtual sal_Int32 SAL_CALL getLen( const Any & rArray ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
- virtual Any SAL_CALL get( const Any & rArray, sal_Int32 nIndex ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::ArrayIndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL set( Any & rArray, sal_Int32 nIndex, const Any & rNewValue ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::ArrayIndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException);
-};
-
-//==================================================================================================
-class EnumIdlClassImpl
- : public IdlClassImpl
-{
- Sequence< Reference< XIdlField > > * _pFields;
- OUString2Field _aName2Field;
-
-public:
- typelib_EnumTypeDescription * getTypeDescr() const
- { return (typelib_EnumTypeDescription *)IdlClassImpl::getTypeDescr(); }
-
- // ctor/ dtor
- EnumIdlClassImpl( IdlReflectionServiceImpl * pReflection,
- const OUString & rName, typelib_TypeClass eTypeClass,
- typelib_TypeDescription * pTypeDescr )
- : IdlClassImpl( pReflection, rName, eTypeClass, pTypeDescr )
- , _pFields( 0 )
- {}
- virtual ~EnumIdlClassImpl();
-
- // IdlClassImpl modifications
- virtual Reference< XIdlField > SAL_CALL getField( const OUString & rName ) throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< Reference< XIdlField > > SAL_CALL getFields() throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL createObject( Any & rObj ) throw(::com::sun::star::uno::RuntimeException);
-};
-
-//==================================================================================================
-class IdlMemberImpl
- : public WeakImplHelper1< XIdlMember >
-{
- IdlReflectionServiceImpl * _pReflection;
- OUString _aName;
-
- typelib_TypeDescription * _pTypeDescr;
- typelib_TypeDescription * _pDeclTypeDescr;
-
-protected:
- Reference< XIdlClass > _xDeclClass;
-
-public:
- IdlReflectionServiceImpl * getReflection() const
- { return _pReflection; }
- Reference< XMultiServiceFactory > getSMgr() const
- { return _pReflection->getSMgr(); }
- typelib_TypeDescription * getTypeDescr() const
- { return _pTypeDescr; }
- typelib_TypeDescription * getDeclTypeDescr() const
- { return _pDeclTypeDescr; }
-
- // ctor/ dtor
- IdlMemberImpl( IdlReflectionServiceImpl * pReflection, const OUString & rName,
- typelib_TypeDescription * pTypeDescr, typelib_TypeDescription * pDeclTypeDescr );
- virtual ~IdlMemberImpl();
-
- // XIdlMember
- virtual Reference< XIdlClass > SAL_CALL getDeclaringClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
-};
-
-//--------------------------------------------------------------------------------------------------
-// coerces to type descr pTo else queries for it: the interface pointer is returned via rDest
-// ## type to XidlClass coercion possible
-inline sal_Bool extract(
- const Any & rObj, typelib_InterfaceTypeDescription * pTo,
- Reference< XInterface > & rDest,
- IdlReflectionServiceImpl * pRefl )
-{
- rDest.clear();
- if (0 != pTo)
- {
- if (! rObj.hasValue())
- return sal_True;
- if (rObj.getValueTypeClass() == TypeClass_INTERFACE)
- {
- return ::uno_type_assignData(
- &rDest, ((typelib_TypeDescription *)pTo)->pWeakRef,
- const_cast< void * >( rObj.getValue() ), rObj.getValueTypeRef(),
- reinterpret_cast< uno_QueryInterfaceFunc >(cpp_queryInterface),
- reinterpret_cast< uno_AcquireFunc >(cpp_acquire),
- reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
- }
- else if (rObj.getValueTypeClass() == TypeClass_TYPE)
- {
- rDest = pRefl->forType( reinterpret_cast< const Type * >( rObj.getValue() )->getTypeLibType() );
- return rDest.is();
- }
- }
- return sal_False;
-}
-//--------------------------------------------------------------------------------------------------
-inline sal_Bool coerce_assign(
- void * pDest, typelib_TypeDescription * pTD, const Any & rSource,
- IdlReflectionServiceImpl * pRefl )
-{
- if (pTD->eTypeClass == typelib_TypeClass_INTERFACE)
- {
- Reference< XInterface > xVal;
- if (extract( rSource, (typelib_InterfaceTypeDescription *)pTD, xVal, pRefl ))
- {
- if (*(XInterface **)pDest)
- (*(XInterface **)pDest)->release();
- *(XInterface **)pDest = xVal.get();
- if (*(XInterface **)pDest)
- (*(XInterface **)pDest)->acquire();
- return sal_True;
- }
- return sal_False;
- }
- else if (pTD->eTypeClass == typelib_TypeClass_ANY)
- {
- return uno_assignData(
- pDest, pTD,
- (void *)&rSource, pTD,
- reinterpret_cast< uno_QueryInterfaceFunc >(cpp_queryInterface),
- reinterpret_cast< uno_AcquireFunc >(cpp_acquire),
- reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
- }
- else
- {
- return uno_type_assignData(
- pDest, pTD->pWeakRef,
- (void *)rSource.getValue(), rSource.getValueTypeRef(),
- reinterpret_cast< uno_QueryInterfaceFunc >(cpp_queryInterface),
- reinterpret_cast< uno_AcquireFunc >(cpp_acquire),
- reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
- }
-}
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/corereflection/corefl.xml b/stoc/source/corereflection/corefl.xml
deleted file mode 100644
index 2d06b2b7f..000000000
--- a/stoc/source/corereflection/corefl.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name> corereflection.uno </module-name>
- <component-description>
- <author> Daniel Boelzle </author>
- <name> com.sun.star.comp.stoc.CoreReflection </name>
- <description>
-This service is the implementation of XIdlClassProvider.
-The service provides reflection and access to all uno types
-(interfaces, structs, enums, ...).
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> C++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.reflection.CoreReflection </supported-service>
- <service-dependency> ... </service-dependency>
- <type>com.sun.star.lang.DisposedException</type>
- <type> com.sun.star.reflection.XTypeDescription </type>
- <type> com.sun.star.reflection.XIdlReflection </type>
- <type> com.sun.star.reflection.XIdlClass </type>
- <type> com.sun.star.reflection.XIdlField2 </type>
- <type> com.sun.star.container.XHierarchicalNameAccess </type>
- <type> com.sun.star.lang.XComponent </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.lang.XMultiComponentFactory </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.lang.WrappedTargetRuntimeException </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.uno.XComponentContext </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.TypeClass </type>
- </component-description>
- <project-build-dependency> cppuhelper </project-build-dependency>
- <project-build-dependency> cppu </project-build-dependency>
- <project-build-dependency> sal </project-build-dependency>
- <runtime-module-dependency> cppuhelper3$(COM) </runtime-module-dependency>
- <runtime-module-dependency> cppu3 </runtime-module-dependency>
- <runtime-module-dependency> sal3 </runtime-module-dependency>
-</module-description>
diff --git a/stoc/source/corereflection/crarray.cxx b/stoc/source/corereflection/crarray.cxx
deleted file mode 100644
index bec266ebd..000000000
--- a/stoc/source/corereflection/crarray.cxx
+++ /dev/null
@@ -1,234 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <typelib/typedescription.h>
-#include <uno/data.h>
-
-#include "base.hxx"
-
-
-namespace stoc_corefl
-{
-
-// XInterface
-//__________________________________________________________________________________________________
-Any ArrayIdlClassImpl::queryInterface( const Type & rType )
- throw(::com::sun::star::uno::RuntimeException)
-{
- Any aRet( ::cppu::queryInterface( rType, static_cast< XIdlArray * >( this ) ) );
- return (aRet.hasValue() ? aRet : IdlClassImpl::queryInterface( rType ));
-}
-//__________________________________________________________________________________________________
-void ArrayIdlClassImpl::acquire() throw()
-{
- IdlClassImpl::acquire();
-}
-//__________________________________________________________________________________________________
-void ArrayIdlClassImpl::release() throw()
-{
- IdlClassImpl::release();
-}
-
-// XTypeProvider
-//__________________________________________________________________________________________________
-Sequence< Type > ArrayIdlClassImpl::getTypes()
- throw (::com::sun::star::uno::RuntimeException)
-{
- static OTypeCollection * s_pTypes = 0;
- if (! s_pTypes)
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! s_pTypes)
- {
- static OTypeCollection s_aTypes(
- ::getCppuType( (const Reference< XIdlArray > *)0 ),
- IdlClassImpl::getTypes() );
- s_pTypes = &s_aTypes;
- }
- }
- return s_pTypes->getTypes();
-}
-//__________________________________________________________________________________________________
-Sequence< sal_Int8 > ArrayIdlClassImpl::getImplementationId()
- throw (::com::sun::star::uno::RuntimeException)
-{
- static OImplementationId * s_pId = 0;
- if (! s_pId)
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! s_pId)
- {
- static OImplementationId s_aId;
- s_pId = &s_aId;
- }
- }
- return s_pId->getImplementationId();
-}
-
-// XIdlArray
-//__________________________________________________________________________________________________
-void ArrayIdlClassImpl::realloc( Any & rArray, sal_Int32 nLen )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
-{
- TypeClass eTC = rArray.getValueTypeClass();
- if (eTC != TypeClass_SEQUENCE && eTC != TypeClass_ARRAY)
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("no sequence given!") ),
- (XWeak *)(OWeakObject *)this, 0 );
- }
- if (nLen < 0)
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("illegal length given!") ),
- (XWeak *)(OWeakObject *)this, 1 );
- }
-
- uno_Sequence ** ppSeq = (uno_Sequence **)rArray.getValue();
- uno_sequence_realloc( ppSeq, (typelib_TypeDescription *)getTypeDescr(),
- nLen,
- reinterpret_cast< uno_AcquireFunc >(cpp_acquire),
- reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
- rArray.pData = ppSeq;
-}
-//__________________________________________________________________________________________________
-sal_Int32 ArrayIdlClassImpl::getLen( const Any & rArray )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
-{
- TypeClass eTC = rArray.getValueTypeClass();
- if (eTC != TypeClass_SEQUENCE && eTC != TypeClass_ARRAY)
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("no sequence given!") ),
- (XWeak *)(OWeakObject *)this, 0 );
- }
-
- return (*(uno_Sequence **)rArray.getValue())->nElements;
-}
-//__________________________________________________________________________________________________
-Any ArrayIdlClassImpl::get( const Any & rArray, sal_Int32 nIndex )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::ArrayIndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException)
-{
- TypeClass eTC = rArray.getValueTypeClass();
- if (eTC != TypeClass_SEQUENCE && eTC != TypeClass_ARRAY)
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("no sequence given!") ),
- (XWeak *)(OWeakObject *)this, 0 );
- }
-
- uno_Sequence * pSeq = *(uno_Sequence **)rArray.getValue();
- if (pSeq->nElements <= nIndex)
- {
- throw ArrayIndexOutOfBoundsException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("illegal index given!") ),
- (XWeak *)(OWeakObject *)this );
- }
-
- Any aRet;
- typelib_TypeDescription * pElemTypeDescr = 0;
- TYPELIB_DANGER_GET( &pElemTypeDescr, getTypeDescr()->pType );
- uno_any_destruct( &aRet, reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
- uno_any_construct( &aRet, &pSeq->elements[nIndex * pElemTypeDescr->nSize],
- pElemTypeDescr,
- reinterpret_cast< uno_AcquireFunc >(cpp_acquire) );
- TYPELIB_DANGER_RELEASE( pElemTypeDescr );
- return aRet;
-}
-
-//__________________________________________________________________________________________________
-void ArrayIdlClassImpl::set( Any & rArray, sal_Int32 nIndex, const Any & rNewValue )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::ArrayIndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException)
-{
- TypeClass eTC = rArray.getValueTypeClass();
- if (eTC != TypeClass_SEQUENCE && eTC != TypeClass_ARRAY)
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("no sequence given!") ),
- (XWeak *)(OWeakObject *)this, 0 );
- }
-
- uno_Sequence * pSeq = *(uno_Sequence **)rArray.getValue();
- if (pSeq->nElements <= nIndex)
- {
- throw ArrayIndexOutOfBoundsException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("illegal index given!") ),
- (XWeak *)(OWeakObject *)this );
- }
-
- uno_Sequence ** ppSeq = (uno_Sequence **)rArray.getValue();
- uno_sequence_reference2One(
- ppSeq, (typelib_TypeDescription *)getTypeDescr(),
- reinterpret_cast< uno_AcquireFunc >(cpp_acquire),
- reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
- rArray.pData = ppSeq;
- pSeq = *ppSeq;
-
- typelib_TypeDescription * pElemTypeDescr = 0;
- TYPELIB_DANGER_GET( &pElemTypeDescr, getTypeDescr()->pType );
-
- if (! coerce_assign( &pSeq->elements[nIndex * pElemTypeDescr->nSize],
- pElemTypeDescr, rNewValue, getReflection() ))
- {
- TYPELIB_DANGER_RELEASE( pElemTypeDescr );
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("sequence element is not assignable by given value!") ),
- (XWeak *)(OWeakObject *)this, 2 );
- }
- TYPELIB_DANGER_RELEASE( pElemTypeDescr );
-}
-
-// ArrayIdlClassImpl
-//__________________________________________________________________________________________________
-sal_Bool ArrayIdlClassImpl::isAssignableFrom( const Reference< XIdlClass > & xType )
- throw(::com::sun::star::uno::RuntimeException)
-{
- return (xType.is() &&
- (equals( xType ) ||
- (xType->getTypeClass() == getTypeClass() && // must be sequence|array
- getComponentType()->isAssignableFrom( xType->getComponentType() ))));
-}
-//__________________________________________________________________________________________________
-Reference< XIdlClass > ArrayIdlClassImpl::getComponentType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return getReflection()->forType( getTypeDescr()->pType );
-}
-//__________________________________________________________________________________________________
-Reference< XIdlArray > ArrayIdlClassImpl::getArray()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return this;
-}
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/corereflection/crbase.cxx b/stoc/source/corereflection/crbase.cxx
deleted file mode 100644
index 874e1c203..000000000
--- a/stoc/source/corereflection/crbase.cxx
+++ /dev/null
@@ -1,293 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <cppuhelper/queryinterface.hxx>
-#include <uno/any2.h>
-
-#include "base.hxx"
-
-namespace stoc_corefl
-{
-
-#ifdef TEST_LIST_CLASSES
-ClassNameList g_aClassNames;
-#endif
-
-//--------------------------------------------------------------------------------------------------
-Mutex & getMutexAccess()
-{
- static Mutex * s_pMutex = 0;
- if (! s_pMutex)
- {
- MutexGuard aGuard( Mutex::getGlobalMutex() );
- if (! s_pMutex)
- {
- static Mutex s_aMutex;
- s_pMutex = &s_aMutex;
- }
- }
- return *s_pMutex;
-}
-
-//__________________________________________________________________________________________________
-IdlClassImpl::IdlClassImpl( IdlReflectionServiceImpl * pReflection,
- const OUString & rName, typelib_TypeClass eTypeClass,
- typelib_TypeDescription * pTypeDescr )
- : _pReflection( pReflection )
- , _aName( rName )
- , _eTypeClass( (TypeClass)eTypeClass )
- , _pTypeDescr( pTypeDescr )
-{
- if (_pReflection)
- _pReflection->acquire();
- if (_pTypeDescr)
- {
- typelib_typedescription_acquire( _pTypeDescr );
- if (! _pTypeDescr->bComplete)
- typelib_typedescription_complete( &_pTypeDescr );
- }
-
-#ifdef TEST_LIST_CLASSES
- ClassNameList::const_iterator iFind( find( g_aClassNames.begin(), g_aClassNames.end(), _aName ) );
- OSL_ENSURE( iFind == g_aClassNames.end(), "### idl class already exists!" );
- g_aClassNames.push_front( _aName );
-#endif
-}
-//__________________________________________________________________________________________________
-IdlClassImpl::~IdlClassImpl()
-{
- if (_pTypeDescr)
- typelib_typedescription_release( _pTypeDescr );
- if (_pReflection)
- _pReflection->release();
-
-#ifdef TEST_LIST_CLASSES
- ClassNameList::iterator iFind( find( g_aClassNames.begin(), g_aClassNames.end(), _aName ) );
- OSL_ENSURE( iFind != g_aClassNames.end(), "### idl class does not exist!" );
- g_aClassNames.erase( iFind );
-#endif
-}
-
-// XIdlClassImpl default implementation
-//__________________________________________________________________________________________________
-TypeClass IdlClassImpl::getTypeClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _eTypeClass;
-}
-//__________________________________________________________________________________________________
-OUString IdlClassImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _aName;
-}
-//__________________________________________________________________________________________________
-sal_Bool IdlClassImpl::equals( const Reference< XIdlClass >& xType )
- throw(::com::sun::star::uno::RuntimeException)
-{
- return (xType.is() &&
- (xType->getTypeClass() == _eTypeClass) && (xType->getName() == _aName));
-}
-
-static sal_Bool s_aAssignableFromTab[11][11] =
-{
- /* from CH,BO,BY,SH,US,LO,UL,HY,UH,FL,DO */
-/* TypeClass_CHAR */ { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
-/* TypeClass_BOOLEAN */ { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
-/* TypeClass_BYTE */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
-/* TypeClass_SHORT */ { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0 },
-/* TypeClass_UNSIGNED_SHORT */ { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0 },
-/* TypeClass_LONG */ { 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0 },
-/* TypeClass_UNSIGNED_LONG */ { 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0 },
-/* TypeClass_HYPER */ { 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
-/* TypeClass_UNSIGNED_HYPER */ { 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0 },
-/* TypeClass_FLOAT */ { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0 },
-/* TypeClass_DOUBLE */ { 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
-};
-//__________________________________________________________________________________________________
-sal_Bool IdlClassImpl::isAssignableFrom( const Reference< XIdlClass > & xType )
- throw(::com::sun::star::uno::RuntimeException)
-{
- TypeClass eAssign = getTypeClass();
- if (equals( xType ) || eAssign == TypeClass_ANY) // default shot
- {
- return sal_True;
- }
- else
- {
- TypeClass eFrom = xType->getTypeClass();
- if (eAssign > TypeClass_VOID && eAssign < TypeClass_STRING &&
- eFrom > TypeClass_VOID && eFrom < TypeClass_STRING)
- {
- return s_aAssignableFromTab[eAssign-1][eFrom-1];
- }
- }
- return sal_False;
-}
-//__________________________________________________________________________________________________
-void IdlClassImpl::createObject( Any & rObj )
- throw(::com::sun::star::uno::RuntimeException)
-{
- rObj.clear();
- uno_any_destruct( &rObj, reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
- uno_any_construct( &rObj, 0, getTypeDescr(), 0 );
-}
-
-// what TODO ????
-//__________________________________________________________________________________________________
-Sequence< Reference< XIdlClass > > IdlClassImpl::getClasses()
- throw(::com::sun::star::uno::RuntimeException)
-{
- OSL_FAIL( "### unexpected use!" );
- return Sequence< Reference< XIdlClass > >();
-}
-//__________________________________________________________________________________________________
-Reference< XIdlClass > IdlClassImpl::getClass( const OUString & )
- throw(::com::sun::star::uno::RuntimeException)
-{
- OSL_FAIL( "### unexpected use!" );
- return Reference< XIdlClass >();
-}
-//__________________________________________________________________________________________________
-Sequence< Reference< XIdlClass > > IdlClassImpl::getInterfaces()
- throw(::com::sun::star::uno::RuntimeException)
-{
-// OSL_FAIL( "### unexpected use!" );
- return Sequence< Reference< XIdlClass > >();
-}
-
-// structs, interfaces
-//__________________________________________________________________________________________________
-Sequence< Reference< XIdlClass > > IdlClassImpl::getSuperclasses() throw(::com::sun::star::uno::RuntimeException)
-{
- return Sequence< Reference< XIdlClass > >();
-}
-// structs
-//__________________________________________________________________________________________________
-Reference< XIdlField > IdlClassImpl::getField( const OUString & )
- throw(::com::sun::star::uno::RuntimeException)
-{
- return Reference< XIdlField >();
-}
-//__________________________________________________________________________________________________
-Sequence< Reference< XIdlField > > IdlClassImpl::getFields()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return Sequence< Reference< XIdlField > >();
-}
-// interfaces
-//__________________________________________________________________________________________________
-Uik IdlClassImpl::getUik()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return Uik();
-}
-//__________________________________________________________________________________________________
-Reference< XIdlMethod > IdlClassImpl::getMethod( const OUString & )
- throw(::com::sun::star::uno::RuntimeException)
-{
- return Reference< XIdlMethod >();
-}
-//__________________________________________________________________________________________________
-Sequence< Reference< XIdlMethod > > IdlClassImpl::getMethods()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return Sequence< Reference< XIdlMethod > >();
-}
-// array
-//__________________________________________________________________________________________________
-Reference< XIdlClass > IdlClassImpl::getComponentType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return Reference< XIdlClass >();
-}
-//__________________________________________________________________________________________________
-Reference< XIdlArray > IdlClassImpl::getArray()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return Reference< XIdlArray >();
-}
-
-
-//##################################################################################################
-//##################################################################################################
-//##################################################################################################
-
-
-//__________________________________________________________________________________________________
-IdlMemberImpl::IdlMemberImpl( IdlReflectionServiceImpl * pReflection, const OUString & rName,
- typelib_TypeDescription * pTypeDescr,
- typelib_TypeDescription * pDeclTypeDescr )
- : _pReflection( pReflection )
- , _aName( rName )
- , _pTypeDescr( pTypeDescr )
- , _pDeclTypeDescr( pDeclTypeDescr )
-{
- _pReflection->acquire();
- typelib_typedescription_acquire( _pTypeDescr );
- if (! _pTypeDescr->bComplete)
- typelib_typedescription_complete( &_pTypeDescr );
- typelib_typedescription_acquire( _pDeclTypeDescr );
- if (! _pDeclTypeDescr->bComplete)
- typelib_typedescription_complete( &_pDeclTypeDescr );
-}
-//__________________________________________________________________________________________________
-IdlMemberImpl::~IdlMemberImpl()
-{
- typelib_typedescription_release( _pDeclTypeDescr );
- typelib_typedescription_release( _pTypeDescr );
- _pReflection->release();
-}
-
-// XIdlMember
-//__________________________________________________________________________________________________
-Reference< XIdlClass > IdlMemberImpl::getDeclaringClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _xDeclClass.is())
- {
- Reference< XIdlClass > xDeclClass( getReflection()->forType( getDeclTypeDescr() ) );
- MutexGuard aGuard( getMutexAccess() );
- if (! _xDeclClass.is())
- _xDeclClass = xDeclClass;
- }
- return _xDeclClass;
-}
-//__________________________________________________________________________________________________
-OUString IdlMemberImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _aName;
-}
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/corereflection/crcomp.cxx b/stoc/source/corereflection/crcomp.cxx
deleted file mode 100644
index c44c50537..000000000
--- a/stoc/source/corereflection/crcomp.cxx
+++ /dev/null
@@ -1,407 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <rtl/strbuf.hxx>
-
-#include <com/sun/star/reflection/XIdlField.hpp>
-#include <com/sun/star/reflection/XIdlField2.hpp>
-#include "com/sun/star/uno/TypeClass.hpp"
-
-#include "base.hxx"
-
-
-namespace stoc_corefl
-{
-
-//==================================================================================================
-class IdlCompFieldImpl
- : public IdlMemberImpl
- , public XIdlField
- , public XIdlField2
-{
- sal_Int32 _nOffset;
-
-public:
- IdlCompFieldImpl( IdlReflectionServiceImpl * pReflection, const OUString & rName,
- typelib_TypeDescription * pTypeDescr, typelib_TypeDescription * pDeclTypeDescr,
- sal_Int32 nOffset )
- : IdlMemberImpl( pReflection, rName, pTypeDescr, pDeclTypeDescr )
- , _nOffset( nOffset )
- {}
-
- // XInterface
- virtual Any SAL_CALL queryInterface( const Type & rType ) throw (::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL acquire() throw ();
- virtual void SAL_CALL release() throw ();
-
- // XTypeProvider
- virtual Sequence< Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException);
- virtual Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException);
-
- // XIdlMember
- virtual Reference< XIdlClass > SAL_CALL getDeclaringClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
- // XIdlField
- virtual Reference< XIdlClass > SAL_CALL getType() throw(::com::sun::star::uno::RuntimeException);
- virtual FieldAccessMode SAL_CALL getAccessMode() throw(::com::sun::star::uno::RuntimeException);
- virtual Any SAL_CALL get( const Any & rObj ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL set( const Any & rObj, const Any & rValue ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException);
- // XIdlField2: getType, getAccessMode and get are equal to XIdlField
- virtual void SAL_CALL set( Any & rObj, const Any & rValue ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException);
-};
-
-// XInterface
-//__________________________________________________________________________________________________
-Any IdlCompFieldImpl::queryInterface( const Type & rType )
- throw(::com::sun::star::uno::RuntimeException)
-{
- Any aRet( ::cppu::queryInterface( rType,
- static_cast< XIdlField * >( this ),
- static_cast< XIdlField2 * >( this ) ) );
- return (aRet.hasValue() ? aRet : IdlMemberImpl::queryInterface( rType ));
-}
-//__________________________________________________________________________________________________
-void IdlCompFieldImpl::acquire() throw()
-{
- IdlMemberImpl::acquire();
-}
-//__________________________________________________________________________________________________
-void IdlCompFieldImpl::release() throw()
-{
- IdlMemberImpl::release();
-}
-
-// XTypeProvider
-//__________________________________________________________________________________________________
-Sequence< Type > IdlCompFieldImpl::getTypes()
- throw (::com::sun::star::uno::RuntimeException)
-{
- static OTypeCollection * s_pTypes = 0;
- if (! s_pTypes)
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! s_pTypes)
- {
- static OTypeCollection s_aTypes(
- ::getCppuType( (const Reference< XIdlField2 > *)0 ),
- ::getCppuType( (const Reference< XIdlField > *)0 ),
- IdlMemberImpl::getTypes() );
- s_pTypes = &s_aTypes;
- }
- }
- return s_pTypes->getTypes();
-}
-//__________________________________________________________________________________________________
-Sequence< sal_Int8 > IdlCompFieldImpl::getImplementationId()
- throw (::com::sun::star::uno::RuntimeException)
-{
- static OImplementationId * s_pId = 0;
- if (! s_pId)
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! s_pId)
- {
- static OImplementationId s_aId;
- s_pId = &s_aId;
- }
- }
- return s_pId->getImplementationId();
-}
-
-// XIdlMember
-//__________________________________________________________________________________________________
-Reference< XIdlClass > IdlCompFieldImpl::getDeclaringClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _xDeclClass.is())
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! _xDeclClass.is())
- {
- typelib_CompoundTypeDescription * pTD =
- (typelib_CompoundTypeDescription *)getDeclTypeDescr();
- while (pTD)
- {
- typelib_TypeDescriptionReference ** ppTypeRefs = pTD->ppTypeRefs;
- for ( sal_Int32 nPos = pTD->nMembers; nPos--; )
- {
- if (td_equals( (typelib_TypeDescription *)getTypeDescr(), ppTypeRefs[nPos] ))
- {
- _xDeclClass = getReflection()->forType( (typelib_TypeDescription *)pTD );
- return _xDeclClass;
- }
- }
- pTD = pTD->pBaseTypeDescription;
- }
- }
- }
- return _xDeclClass;
-}
-//__________________________________________________________________________________________________
-OUString IdlCompFieldImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return IdlMemberImpl::getName();
-}
-
-// XIdlField
-//__________________________________________________________________________________________________
-Reference< XIdlClass > IdlCompFieldImpl::getType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return getReflection()->forType( getTypeDescr() );
-}
-//__________________________________________________________________________________________________
-FieldAccessMode IdlCompFieldImpl::getAccessMode()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return FieldAccessMode_READWRITE;
-}
-//__________________________________________________________________________________________________
-Any IdlCompFieldImpl::get( const Any & rObj )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
-{
- if (rObj.getValueTypeClass() == com::sun::star::uno::TypeClass_STRUCT ||
- rObj.getValueTypeClass() == com::sun::star::uno::TypeClass_EXCEPTION)
- {
- typelib_TypeDescription * pObjTD = 0;
- TYPELIB_DANGER_GET( &pObjTD, rObj.getValueTypeRef() );
-
- typelib_TypeDescription * pTD = pObjTD;
- typelib_TypeDescription * pDeclTD = getDeclTypeDescr();
- while (pTD && !typelib_typedescription_equals( pTD, pDeclTD ))
- pTD = (typelib_TypeDescription *)((typelib_CompoundTypeDescription *)pTD)->pBaseTypeDescription;
-
- OSL_ENSURE( pTD, "### illegal object type!" );
- if (pTD)
- {
- TYPELIB_DANGER_RELEASE( pObjTD );
- Any aRet;
- uno_any_destruct(
- &aRet, reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
- uno_any_construct(
- &aRet, (char *)rObj.getValue() + _nOffset, getTypeDescr(),
- reinterpret_cast< uno_AcquireFunc >(cpp_acquire) );
- return aRet;
- }
- TYPELIB_DANGER_RELEASE( pObjTD );
- }
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("illegal object given!") ),
- (XWeak *)(OWeakObject *)this, 0 );
-}
-//__________________________________________________________________________________________________
-void IdlCompFieldImpl::set( const Any & rObj, const Any & rValue )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException)
-{
- if (rObj.getValueTypeClass() == com::sun::star::uno::TypeClass_STRUCT ||
- rObj.getValueTypeClass() == com::sun::star::uno::TypeClass_EXCEPTION)
- {
- typelib_TypeDescription * pObjTD = 0;
- TYPELIB_DANGER_GET( &pObjTD, rObj.getValueTypeRef() );
-
- typelib_TypeDescription * pTD = pObjTD;
- typelib_TypeDescription * pDeclTD = getDeclTypeDescr();
- while (pTD && !typelib_typedescription_equals( pTD, pDeclTD ))
- pTD = (typelib_TypeDescription *)((typelib_CompoundTypeDescription *)pTD)->pBaseTypeDescription;
-
- OSL_ENSURE( pTD, "### illegal object type!" );
- if (pTD)
- {
- TYPELIB_DANGER_RELEASE( pObjTD );
- if (coerce_assign( (char *)rObj.getValue() + _nOffset, getTypeDescr(), rValue, getReflection() ))
- {
- return;
- }
- else
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("illegal value given!") ),
- (XWeak *)(OWeakObject *)this, 1 );
- }
- }
- TYPELIB_DANGER_RELEASE( pObjTD );
- }
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("illegal object given!") ),
- (XWeak *)(OWeakObject *)this, 0 );
-}
-
-//__________________________________________________________________________________________________
-void IdlCompFieldImpl::set( Any & rObj, const Any & rValue )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException)
-{
- if (rObj.getValueTypeClass() == com::sun::star::uno::TypeClass_STRUCT ||
- rObj.getValueTypeClass() == com::sun::star::uno::TypeClass_EXCEPTION)
- {
- typelib_TypeDescription * pObjTD = 0;
- TYPELIB_DANGER_GET( &pObjTD, rObj.getValueTypeRef() );
-
- typelib_TypeDescription * pTD = pObjTD;
- typelib_TypeDescription * pDeclTD = getDeclTypeDescr();
- while (pTD && !typelib_typedescription_equals( pTD, pDeclTD ))
- pTD = (typelib_TypeDescription *)((typelib_CompoundTypeDescription *)pTD)->pBaseTypeDescription;
-
- OSL_ENSURE( pTD, "### illegal object type!" );
- if (pTD)
- {
- TYPELIB_DANGER_RELEASE( pObjTD );
- if (coerce_assign( (char *)rObj.getValue() + _nOffset, getTypeDescr(), rValue, getReflection() ))
- {
- return;
- }
- else
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("illegal value given!") ),
- (XWeak *)(OWeakObject *)this, 1 );
- }
- }
- TYPELIB_DANGER_RELEASE( pObjTD );
- }
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("illegal object given!") ),
- (XWeak *)(OWeakObject *)this, 0 );
-}
-
-//##################################################################################################
-//##################################################################################################
-//##################################################################################################
-
-
-//__________________________________________________________________________________________________
-CompoundIdlClassImpl::~CompoundIdlClassImpl()
-{
- delete _pFields;
-}
-
-//__________________________________________________________________________________________________
-sal_Bool CompoundIdlClassImpl::isAssignableFrom( const Reference< XIdlClass > & xType )
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (xType.is())
- {
- TypeClass eTC = xType->getTypeClass();
- if (eTC == TypeClass_STRUCT || eTC == TypeClass_EXCEPTION)
- {
- if (equals( xType ))
- return sal_True;
- else
- {
- const Sequence< Reference< XIdlClass > > & rSeq = xType->getSuperclasses();
- if (rSeq.getLength())
- {
- OSL_ENSURE( rSeq.getLength() == 1, "### unexpected len of super classes!" );
- return isAssignableFrom( rSeq[0] );
- }
- }
- }
- }
- return sal_False;
-}
-//__________________________________________________________________________________________________
-Sequence< Reference< XIdlClass > > CompoundIdlClassImpl::getSuperclasses()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _xSuperClass.is())
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! _xSuperClass.is())
- {
- typelib_CompoundTypeDescription * pCompTypeDescr = getTypeDescr()->pBaseTypeDescription;
- if (pCompTypeDescr)
- _xSuperClass = getReflection()->forType( (typelib_TypeDescription *)pCompTypeDescr );
- }
- }
- if (_xSuperClass.is())
- return Sequence< Reference< XIdlClass > >( &_xSuperClass, 1 );
- else
- return Sequence< Reference< XIdlClass > >();
-}
-//__________________________________________________________________________________________________
-Reference< XIdlField > CompoundIdlClassImpl::getField( const OUString & rName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _pFields)
- getFields(); // init fields
-
- const OUString2Field::const_iterator iFind( _aName2Field.find( rName ) );
- if (iFind != _aName2Field.end())
- return Reference< XIdlField >( (*iFind).second );
- else
- return Reference< XIdlField >();
-}
-//__________________________________________________________________________________________________
-Sequence< Reference< XIdlField > > CompoundIdlClassImpl::getFields()
- throw(::com::sun::star::uno::RuntimeException)
-{
- MutexGuard aGuard( getMutexAccess() );
- if (! _pFields)
- {
- sal_Int32 nAll = 0;
- typelib_CompoundTypeDescription * pCompTypeDescr = getTypeDescr();
- for ( ; pCompTypeDescr; pCompTypeDescr = pCompTypeDescr->pBaseTypeDescription )
- nAll += pCompTypeDescr->nMembers;
-
- Sequence< Reference< XIdlField > > * pFields =
- new Sequence< Reference< XIdlField > >( nAll );
- Reference< XIdlField > * pSeq = pFields->getArray();
-
- for ( pCompTypeDescr = getTypeDescr(); pCompTypeDescr;
- pCompTypeDescr = pCompTypeDescr->pBaseTypeDescription )
- {
- typelib_TypeDescriptionReference ** ppTypeRefs = pCompTypeDescr->ppTypeRefs;
- rtl_uString ** ppNames = pCompTypeDescr->ppMemberNames;
- sal_Int32 * pMemberOffsets = pCompTypeDescr->pMemberOffsets;
-
- for ( sal_Int32 nPos = pCompTypeDescr->nMembers; nPos--; )
- {
- typelib_TypeDescription * pTD = 0;
- TYPELIB_DANGER_GET( &pTD, ppTypeRefs[nPos] );
- OSL_ENSURE( pTD, "### cannot get field in struct!" );
- if (pTD)
- {
- OUString aName( ppNames[nPos] );
- _aName2Field[aName] = pSeq[--nAll] = new IdlCompFieldImpl(
- getReflection(), aName, pTD, IdlClassImpl::getTypeDescr(), pMemberOffsets[nPos] );
- TYPELIB_DANGER_RELEASE( pTD );
- }
- }
- }
-
- _pFields = pFields;
- }
- return *_pFields;
-}
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/corereflection/crefl.cxx b/stoc/source/corereflection/crefl.cxx
deleted file mode 100644
index 4d242471f..000000000
--- a/stoc/source/corereflection/crefl.cxx
+++ /dev/null
@@ -1,491 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <cppuhelper/queryinterface.hxx>
-#include <cppuhelper/implementationentry.hxx>
-
-#include <com/sun/star/lang/XComponent.hpp>
-#include <com/sun/star/reflection/XTypeDescription.hpp>
-#include "com/sun/star/uno/RuntimeException.hpp"
-
-using namespace com::sun::star;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::registry;
-using namespace cppu;
-using namespace osl;
-
-using ::rtl::OUString;
-using ::rtl::OUStringToOString;
-using ::rtl::OString;
-
-#include "base.hxx"
-
-
-namespace stoc_corefl
-{
-
-static const sal_Int32 CACHE_SIZE = 256;
-
-#define SERVICENAME "com.sun.star.reflection.CoreReflection"
-#define IMPLNAME "com.sun.star.comp.stoc.CoreReflection"
-
-// can be static, as every client of the core reflection keeps a reference to the
-// core reflection, so refcounting can be done here.
-static rtl_StandardModuleCount g_moduleCount = MODULE_COUNT_INIT;
-
-static Sequence< OUString > core_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] = OUString( RTL_CONSTASCII_USTRINGPARAM(SERVICENAME) );
- return seqNames;
-}
-
-static OUString core_getImplementationName()
-{
- return OUString(RTL_CONSTASCII_USTRINGPARAM(IMPLNAME));
-}
-//__________________________________________________________________________________________________
-IdlReflectionServiceImpl::IdlReflectionServiceImpl(
- const Reference< XComponentContext > & xContext )
- : OComponentHelper( _aComponentMutex )
- , _xMgr( xContext->getServiceManager(), UNO_QUERY )
- , _aElements( CACHE_SIZE )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- xContext->getValueByName( OUString( RTL_CONSTASCII_USTRINGPARAM(
- "/singletons/com.sun.star.reflection.theTypeDescriptionManager") ) ) >>= _xTDMgr;
- OSL_ENSURE( _xTDMgr.is(), "### cannot get singleton \"TypeDescriptionManager\" from context!" );
-}
-//__________________________________________________________________________________________________
-IdlReflectionServiceImpl::~IdlReflectionServiceImpl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XInterface
-//__________________________________________________________________________________________________
-Any IdlReflectionServiceImpl::queryInterface( const Type & rType )
- throw(::com::sun::star::uno::RuntimeException)
-{
- Any aRet( ::cppu::queryInterface(
- rType,
- static_cast< XIdlReflection * >( this ),
- static_cast< XHierarchicalNameAccess * >( this ),
- static_cast< XServiceInfo * >( this ) ) );
-
- return (aRet.hasValue() ? aRet : OComponentHelper::queryInterface( rType ));
-}
-//__________________________________________________________________________________________________
-void IdlReflectionServiceImpl::acquire() throw()
-{
- OComponentHelper::acquire();
-}
-//__________________________________________________________________________________________________
-void IdlReflectionServiceImpl::release() throw()
-{
- OComponentHelper::release();
-}
-
-// XTypeProvider
-//__________________________________________________________________________________________________
-Sequence< Type > IdlReflectionServiceImpl::getTypes()
- throw (::com::sun::star::uno::RuntimeException)
-{
- static OTypeCollection * s_pTypes = 0;
- if (! s_pTypes)
- {
- MutexGuard aGuard( _aComponentMutex );
- if (! s_pTypes)
- {
- static OTypeCollection s_aTypes(
- ::getCppuType( (const Reference< XIdlReflection > *)0 ),
- ::getCppuType( (const Reference< XHierarchicalNameAccess > *)0 ),
- ::getCppuType( (const Reference< XServiceInfo > *)0 ),
- OComponentHelper::getTypes() );
- s_pTypes = &s_aTypes;
- }
- }
- return s_pTypes->getTypes();
-}
-//__________________________________________________________________________________________________
-Sequence< sal_Int8 > IdlReflectionServiceImpl::getImplementationId()
- throw (::com::sun::star::uno::RuntimeException)
-{
- static OImplementationId * s_pId = 0;
- if (! s_pId)
- {
- MutexGuard aGuard( _aComponentMutex );
- if (! s_pId)
- {
- static OImplementationId s_aId;
- s_pId = &s_aId;
- }
- }
- return s_pId->getImplementationId();
-}
-
-// XComponent
-//__________________________________________________________________________________________________
-void IdlReflectionServiceImpl::dispose()
- throw(::com::sun::star::uno::RuntimeException)
-{
- OComponentHelper::dispose();
-
- MutexGuard aGuard( _aComponentMutex );
- _aElements.clear();
-#ifdef TEST_LIST_CLASSES
- OSL_ENSURE( g_aClassNames.size() == 0, "### idl classes still alive!" );
- ClassNameList::const_iterator iPos( g_aClassNames.begin() );
- while (iPos != g_aClassNames.end())
- {
- OUString aName( *iPos );
- ++iPos;
- }
-#endif
-}
-
-// XServiceInfo
-//__________________________________________________________________________________________________
-OUString IdlReflectionServiceImpl::getImplementationName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return core_getImplementationName();
-}
-//__________________________________________________________________________________________________
-sal_Bool IdlReflectionServiceImpl::supportsService( const OUString & rServiceName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- const Sequence< OUString > & rSNL = getSupportedServiceNames();
- const OUString * pArray = rSNL.getConstArray();
- for ( sal_Int32 nPos = rSNL.getLength(); nPos--; )
- {
- if (pArray[nPos] == rServiceName)
- return sal_True;
- }
- return sal_False;
-}
-//__________________________________________________________________________________________________
-Sequence< OUString > IdlReflectionServiceImpl::getSupportedServiceNames()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return core_getSupportedServiceNames();
-}
-
-// XIdlReflection
-//__________________________________________________________________________________________________
-Reference< XIdlClass > IdlReflectionServiceImpl::getType( const Any & rObj )
- throw(::com::sun::star::uno::RuntimeException)
-{
- return (rObj.hasValue() ? forType( rObj.getValueTypeRef() ) : Reference< XIdlClass >());
-}
-
-//__________________________________________________________________________________________________
-inline Reference< XIdlClass > IdlReflectionServiceImpl::constructClass(
- typelib_TypeDescription * pTypeDescr )
-{
- OSL_ENSURE( pTypeDescr->eTypeClass != typelib_TypeClass_TYPEDEF, "### unexpected typedef!" );
-
- switch (pTypeDescr->eTypeClass)
- {
- case typelib_TypeClass_VOID:
- case typelib_TypeClass_CHAR:
- case typelib_TypeClass_BOOLEAN:
- case typelib_TypeClass_BYTE:
- case typelib_TypeClass_SHORT:
- case typelib_TypeClass_UNSIGNED_SHORT:
- case typelib_TypeClass_LONG:
- case typelib_TypeClass_UNSIGNED_LONG:
- case typelib_TypeClass_HYPER:
- case typelib_TypeClass_UNSIGNED_HYPER:
- case typelib_TypeClass_FLOAT:
- case typelib_TypeClass_DOUBLE:
- case typelib_TypeClass_STRING:
- case typelib_TypeClass_ANY:
- return new IdlClassImpl( this, pTypeDescr->pTypeName, pTypeDescr->eTypeClass, pTypeDescr );
-
- case TypeClass_ENUM:
- return new EnumIdlClassImpl( this, pTypeDescr->pTypeName, pTypeDescr->eTypeClass, pTypeDescr );
-
- case typelib_TypeClass_STRUCT:
- case typelib_TypeClass_UNION:
- case typelib_TypeClass_EXCEPTION:
- return new CompoundIdlClassImpl( this, pTypeDescr->pTypeName, pTypeDescr->eTypeClass, pTypeDescr );
-
- case typelib_TypeClass_ARRAY:
- case typelib_TypeClass_SEQUENCE:
- return new ArrayIdlClassImpl( this, pTypeDescr->pTypeName, pTypeDescr->eTypeClass, pTypeDescr );
-
- case typelib_TypeClass_INTERFACE:
- return new InterfaceIdlClassImpl( this, pTypeDescr->pTypeName, pTypeDescr->eTypeClass, pTypeDescr );
-
- case typelib_TypeClass_TYPE:
- return new IdlClassImpl( this, pTypeDescr->pTypeName, pTypeDescr->eTypeClass, pTypeDescr );
-
- default:
-#if OSL_DEBUG_LEVEL > 1
- OSL_TRACE( "### corereflection type unsupported: " );
- OString aName( OUStringToOString( pTypeDescr->pTypeName, RTL_TEXTENCODING_ASCII_US ) );
- OSL_TRACE( "%s", aName.getStr() );
- OSL_TRACE( "\n" );
-#endif
- return Reference< XIdlClass >();
- }
-}
-//__________________________________________________________________________________________________
-Reference< XIdlClass > IdlReflectionServiceImpl::forName( const OUString & rTypeName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- Reference< XIdlClass > xRet;
- Any aAny( _aElements.getValue( rTypeName ) );
-
- if (aAny.hasValue())
- {
- if (aAny.getValueTypeClass() == TypeClass_INTERFACE)
- xRet = *(const Reference< XIdlClass > *)aAny.getValue();
- }
- else
- {
- // try to get _type_ by name
- typelib_TypeDescription * pTD = 0;
- typelib_typedescription_getByName( &pTD, rTypeName.pData );
- if (pTD)
- {
- if ((xRet = constructClass( pTD )).is())
- _aElements.setValue( rTypeName, makeAny( xRet ) ); // update
- typelib_typedescription_release( pTD );
- }
- }
-
- return xRet;
-}
-
-// XHierarchicalNameAccess
-//__________________________________________________________________________________________________
-Any IdlReflectionServiceImpl::getByHierarchicalName( const OUString & rName )
- throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException)
-{
- Any aRet( _aElements.getValue( rName ) );
- if (! aRet.hasValue())
- {
- // first look for constants exclusivly!
- aRet = _xTDMgr->getByHierarchicalName( rName );
- if (aRet.getValueTypeClass() == TypeClass_INTERFACE) // if no constant,
- // i.e. XTypeDescription for a type
- {
- // type retrieved from tdmgr
- OSL_ASSERT( (*(Reference< XInterface > *)aRet.getValue())->queryInterface(
- ::getCppuType( (const Reference< XTypeDescription > *)0 ) ).hasValue() );
-
- // if you are interested in a type then CALL forName()!!!
- // this way is NOT recommended for types, because this method looks for constants first
-
- // if td manager found some type, it will be in the cache (hopefully.. we just got it)
- // so the second retrieving via c typelib callback chain should succeed...
-
- // try to get _type_ by name
- typelib_TypeDescription * pTD = 0;
- typelib_typedescription_getByName( &pTD, rName.pData );
-
- aRet.clear(); // kick XTypeDescription interface
-
- if (pTD)
- {
- Reference< XIdlClass > xIdlClass( constructClass( pTD ) );
- aRet.setValue( &xIdlClass, ::getCppuType( (const Reference< XIdlClass > *)0 ) );
- typelib_typedescription_release( pTD );
- }
- }
- // else is constant
-
- // update
- if (aRet.hasValue())
- _aElements.setValue( rName, aRet );
- else
- {
- throw NoSuchElementException( rName, Reference< XInterface >() );
- }
- }
- return aRet;
-}
-//__________________________________________________________________________________________________
-sal_Bool IdlReflectionServiceImpl::hasByHierarchicalName( const OUString & rName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- try
- {
- return getByHierarchicalName( rName ).hasValue();
- }
- catch (NoSuchElementException &)
- {
- }
- return sal_False;
-}
-
-//__________________________________________________________________________________________________
-Reference< XIdlClass > IdlReflectionServiceImpl::forType( typelib_TypeDescription * pTypeDescr )
- throw(::com::sun::star::uno::RuntimeException)
-{
- Reference< XIdlClass > xRet;
- OUString aName( pTypeDescr->pTypeName );
- Any aAny( _aElements.getValue( aName ) );
-
- if (aAny.hasValue())
- {
- if (aAny.getValueTypeClass() == TypeClass_INTERFACE)
- xRet = *(const Reference< XIdlClass > *)aAny.getValue();
- }
- else
- {
- if (pTypeDescr && (xRet = constructClass( pTypeDescr )).is())
- _aElements.setValue( aName, makeAny( xRet ) ); // update
- }
-
- return xRet;
-}
-//__________________________________________________________________________________________________
-Reference< XIdlClass > IdlReflectionServiceImpl::forType( typelib_TypeDescriptionReference * pRef )
- throw(::com::sun::star::uno::RuntimeException)
-{
- typelib_TypeDescription * pTD = 0;
- TYPELIB_DANGER_GET( &pTD, pRef );
- if (pTD)
- {
- Reference< XIdlClass > xRet = forType( pTD );
- TYPELIB_DANGER_RELEASE( pTD );
- return xRet;
- }
- throw RuntimeException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("IdlReflectionServiceImpl::forType() failed!") ),
- (XWeak *)(OWeakObject *)this );
-}
-
-//__________________________________________________________________________________________________
-const Mapping & IdlReflectionServiceImpl::getCpp2Uno()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _aCpp2Uno.is())
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! _aCpp2Uno.is())
- {
- _aCpp2Uno = Mapping(
- OUString( RTL_CONSTASCII_USTRINGPARAM(CPPU_CURRENT_LANGUAGE_BINDING_NAME) ),
- OUString( RTL_CONSTASCII_USTRINGPARAM(UNO_LB_UNO) ) );
- OSL_ENSURE( _aCpp2Uno.is(), "### cannot get c++ to uno mapping!" );
- if (! _aCpp2Uno.is())
- {
- throw RuntimeException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("cannot get c++ to uno mapping!") ),
- (XWeak *)(OWeakObject *)this );
- }
- }
- }
- return _aCpp2Uno;
-}
-//__________________________________________________________________________________________________
-const Mapping & IdlReflectionServiceImpl::getUno2Cpp()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _aUno2Cpp.is())
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! _aUno2Cpp.is())
- {
- _aUno2Cpp = Mapping(
- OUString( RTL_CONSTASCII_USTRINGPARAM(UNO_LB_UNO) ),
- OUString( RTL_CONSTASCII_USTRINGPARAM(CPPU_CURRENT_LANGUAGE_BINDING_NAME) ) );
- OSL_ENSURE( _aUno2Cpp.is(), "### cannot get uno to c++ mapping!" );
- if (! _aUno2Cpp.is())
- {
- throw RuntimeException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("cannot get uno to c++ mapping!") ),
- (XWeak *)(OWeakObject *)this );
- }
- }
- }
- return _aUno2Cpp;
-}
-//__________________________________________________________________________________________________
-uno_Interface * IdlReflectionServiceImpl::mapToUno(
- const Any & rObj, typelib_InterfaceTypeDescription * pTo )
- throw(::com::sun::star::uno::RuntimeException)
-{
- Reference< XInterface > xObj;
- if (extract( rObj, pTo, xObj, this ))
- return (uno_Interface *)getCpp2Uno().mapInterface( xObj.get(), pTo );
-
- throw RuntimeException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("illegal object given!") ),
- (XWeak *)(OWeakObject *)this );
-}
-
-//==================================================================================================
-Reference< XInterface > SAL_CALL IdlReflectionServiceImpl_create(
- const Reference< XComponentContext > & xContext )
- throw(::com::sun::star::uno::Exception)
-{
- return Reference< XInterface >( (XWeak *)(OWeakObject *)new IdlReflectionServiceImpl( xContext ) );
-}
-
-}
-
-
-//##################################################################################################
-//##################################################################################################
-//##################################################################################################
-
-using namespace stoc_corefl;
-
-static struct ImplementationEntry g_entries[] =
-{
- {
- IdlReflectionServiceImpl_create, core_getImplementationName,
- core_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt , 0
- },
- { 0, 0, 0, 0, 0, 0 }
-};
-
-extern "C"
-{
-sal_Bool SAL_CALL component_canUnload( TimeValue *pTime )
-{
- return g_moduleCount.canUnload( &g_moduleCount , pTime );
-}
-
-//==================================================================================================
-SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
- const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey )
-{
- return component_getFactoryHelper( pImplName, pServiceManager, pRegistryKey , g_entries );
-}
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/corereflection/crenum.cxx b/stoc/source/corereflection/crenum.cxx
deleted file mode 100644
index 319b2cbf9..000000000
--- a/stoc/source/corereflection/crenum.cxx
+++ /dev/null
@@ -1,249 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "base.hxx"
-
-namespace stoc_corefl
-{
-
-//==================================================================================================
-class IdlEnumFieldImpl
- : public IdlMemberImpl
- , public XIdlField
- , public XIdlField2
-{
- sal_Int32 _nValue;
-
-public:
- IdlEnumFieldImpl( IdlReflectionServiceImpl * pReflection, const OUString & rName,
- typelib_TypeDescription * pTypeDescr, sal_Int32 nValue )
- : IdlMemberImpl( pReflection, rName, pTypeDescr, pTypeDescr )
- , _nValue( nValue )
- {}
- virtual ~IdlEnumFieldImpl();
-
- // XInterface
- virtual Any SAL_CALL queryInterface( const Type & rType ) throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL acquire() throw();
- virtual void SAL_CALL release() throw();
-
- // XTypeProvider
- virtual Sequence< Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException);
- virtual Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException);
-
- // XIdlMember
- virtual Reference< XIdlClass > SAL_CALL getDeclaringClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
- // XIdlField
- virtual Reference< XIdlClass > SAL_CALL getType() throw(::com::sun::star::uno::RuntimeException);
- virtual FieldAccessMode SAL_CALL getAccessMode() throw(::com::sun::star::uno::RuntimeException);
- virtual Any SAL_CALL get( const Any & rObj ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL set( const Any & rObj, const Any & rValue ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException);
- // XIdlField2: getType, getAccessMode and get are equal to XIdlField
- virtual void SAL_CALL set( Any & rObj, const Any & rValue ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException);
-};
-//__________________________________________________________________________________________________
-IdlEnumFieldImpl::~IdlEnumFieldImpl()
-{
-}
-
-// XInterface
-//__________________________________________________________________________________________________
-Any IdlEnumFieldImpl::queryInterface( const Type & rType )
- throw(::com::sun::star::uno::RuntimeException)
-{
- Any aRet( ::cppu::queryInterface( rType,
- static_cast< XIdlField * >( this ),
- static_cast< XIdlField2 * >( this ) ) );
- return (aRet.hasValue() ? aRet : IdlMemberImpl::queryInterface( rType ));
-}
-//__________________________________________________________________________________________________
-void IdlEnumFieldImpl::acquire() throw()
-{
- IdlMemberImpl::acquire();
-}
-//__________________________________________________________________________________________________
-void IdlEnumFieldImpl::release() throw()
-{
- IdlMemberImpl::release();
-}
-
-// XTypeProvider
-//__________________________________________________________________________________________________
-Sequence< Type > IdlEnumFieldImpl::getTypes()
- throw (::com::sun::star::uno::RuntimeException)
-{
- static OTypeCollection * s_pTypes = 0;
- if (! s_pTypes)
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! s_pTypes)
- {
- static OTypeCollection s_aTypes(
- ::getCppuType( (const Reference< XIdlField2 > *)0 ),
- ::getCppuType( (const Reference< XIdlField > *)0 ),
- IdlMemberImpl::getTypes() );
- s_pTypes = &s_aTypes;
- }
- }
- return s_pTypes->getTypes();
-}
-//__________________________________________________________________________________________________
-Sequence< sal_Int8 > IdlEnumFieldImpl::getImplementationId()
- throw (::com::sun::star::uno::RuntimeException)
-{
- static OImplementationId * s_pId = 0;
- if (! s_pId)
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! s_pId)
- {
- static OImplementationId s_aId;
- s_pId = &s_aId;
- }
- }
- return s_pId->getImplementationId();
-}
-
-// XIdlMember
-//__________________________________________________________________________________________________
-Reference< XIdlClass > IdlEnumFieldImpl::getDeclaringClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return IdlMemberImpl::getDeclaringClass();
-}
-//__________________________________________________________________________________________________
-OUString IdlEnumFieldImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return IdlMemberImpl::getName();
-}
-
-// XIdlField
-//__________________________________________________________________________________________________
-Reference< XIdlClass > IdlEnumFieldImpl::getType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return getDeclaringClass();
-}
-//__________________________________________________________________________________________________
-FieldAccessMode IdlEnumFieldImpl::getAccessMode()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return FieldAccessMode_READONLY;
-}
-//__________________________________________________________________________________________________
-Any IdlEnumFieldImpl::get( const Any & )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
-{
- return Any( &_nValue, getTypeDescr() );
-}
-//__________________________________________________________________________________________________
-void IdlEnumFieldImpl::set( const Any &, const Any & )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException)
-{
- throw IllegalAccessException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("enum field is constant!") ),
- (XWeak *)(OWeakObject *)this );
-}
-//__________________________________________________________________________________________________
-void IdlEnumFieldImpl::set( Any &, const Any & )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException)
-{
- throw IllegalAccessException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("enum field is constant!") ),
- (XWeak *)(OWeakObject *)this );
-}
-
-//##################################################################################################
-//##################################################################################################
-//##################################################################################################
-
-
-//__________________________________________________________________________________________________
-EnumIdlClassImpl::~EnumIdlClassImpl()
-{
- delete _pFields;
-}
-
-// IdlClassImpl modifications
-//__________________________________________________________________________________________________
-Reference< XIdlField > EnumIdlClassImpl::getField( const OUString & rName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _pFields)
- getFields(); // init members
-
- const OUString2Field::const_iterator iFind( _aName2Field.find( rName ) );
- if (iFind != _aName2Field.end())
- return (*iFind).second;
- else
- return Reference< XIdlField >();
-}
-//__________________________________________________________________________________________________
-Sequence< Reference< XIdlField > > EnumIdlClassImpl::getFields()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _pFields)
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! _pFields)
- {
- sal_Int32 nFields = getTypeDescr()->nEnumValues;
- Sequence< Reference< XIdlField > > * pFields =
- new Sequence< Reference< XIdlField > >( nFields );
- Reference< XIdlField > * pSeq = pFields->getArray();
-
- while (nFields--)
- {
- OUString aName( getTypeDescr()->ppEnumNames[nFields] );
- _aName2Field[aName] = pSeq[nFields] = new IdlEnumFieldImpl(
- getReflection(), aName, IdlClassImpl::getTypeDescr(), getTypeDescr()->pEnumValues[nFields] );
- }
-
- _pFields = pFields;
- }
- }
- return *_pFields;
-}
-//__________________________________________________________________________________________________
-void EnumIdlClassImpl::createObject( Any & rObj )
- throw(::com::sun::star::uno::RuntimeException)
-{
- sal_Int32 eVal =
- ((typelib_EnumTypeDescription *)IdlClassImpl::getTypeDescr())->nDefaultEnumValue;
- rObj.setValue( &eVal, IdlClassImpl::getTypeDescr() );
-}
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/corereflection/criface.cxx b/stoc/source/corereflection/criface.cxx
deleted file mode 100644
index 692e45ae1..000000000
--- a/stoc/source/corereflection/criface.cxx
+++ /dev/null
@@ -1,995 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include <sal/config.h>
-#ifdef SAL_UNX
-#include <sal/alloca.h>
-#endif
-#if !(defined(MACOSX) || defined(IOS) || defined(FREEBSD))
-#include <malloc.h>
-#endif
-#include <rtl/alloc.h>
-#include <typelib/typedescription.hxx>
-#include <uno/data.h>
-
-#include "base.hxx"
-
-#include "com/sun/star/lang/WrappedTargetRuntimeException.hpp"
-#include "com/sun/star/uno/RuntimeException.hpp"
-#include "cppuhelper/exc_hlp.hxx"
-
-namespace stoc_corefl
-{
-
-//==================================================================================================
-class IdlAttributeFieldImpl
- : public IdlMemberImpl
- , public XIdlField
- , public XIdlField2
-{
-public:
- typelib_InterfaceAttributeTypeDescription * getAttributeTypeDescr()
- { return (typelib_InterfaceAttributeTypeDescription *)getTypeDescr(); }
-
- IdlAttributeFieldImpl( IdlReflectionServiceImpl * pReflection, const OUString & rName,
- typelib_TypeDescription * pTypeDescr, typelib_TypeDescription * pDeclTypeDescr )
- : IdlMemberImpl( pReflection, rName, pTypeDescr, pDeclTypeDescr )
- {}
-
- // XInterface
- virtual Any SAL_CALL queryInterface( const Type & rType ) throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL acquire() throw();
- virtual void SAL_CALL release() throw();
-
- // XTypeProvider
- virtual Sequence< Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException);
- virtual Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException);
-
- // XIdlMember
- virtual Reference< XIdlClass > SAL_CALL getDeclaringClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
- // XIdlField
- virtual Reference< XIdlClass > SAL_CALL getType() throw(::com::sun::star::uno::RuntimeException);
- virtual FieldAccessMode SAL_CALL getAccessMode() throw(::com::sun::star::uno::RuntimeException);
- virtual Any SAL_CALL get( const Any & rObj ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL set( const Any & rObj, const Any & rValue ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException);
- // XIdlField2: getType, getAccessMode and get are equal to XIdlField
- virtual void SAL_CALL set( Any & rObj, const Any & rValue ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException);
-
-private:
- void checkException(
- uno_Any * exception, Reference< XInterface > const & context);
-};
-
-// XInterface
-//__________________________________________________________________________________________________
-Any IdlAttributeFieldImpl::queryInterface( const Type & rType )
- throw(::com::sun::star::uno::RuntimeException)
-{
- Any aRet( ::cppu::queryInterface( rType,
- static_cast< XIdlField * >( this ),
- static_cast< XIdlField2 * >( this ) ) );
- return (aRet.hasValue() ? aRet : IdlMemberImpl::queryInterface( rType ));
-}
-//__________________________________________________________________________________________________
-void IdlAttributeFieldImpl::acquire() throw()
-{
- IdlMemberImpl::acquire();
-}
-//__________________________________________________________________________________________________
-void IdlAttributeFieldImpl::release() throw()
-{
- IdlMemberImpl::release();
-}
-
-// XTypeProvider
-//__________________________________________________________________________________________________
-Sequence< Type > IdlAttributeFieldImpl::getTypes()
- throw (::com::sun::star::uno::RuntimeException)
-{
- static OTypeCollection * s_pTypes = 0;
- if (! s_pTypes)
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! s_pTypes)
- {
- static OTypeCollection s_aTypes(
- ::getCppuType( (const Reference< XIdlField2 > *)0 ),
- ::getCppuType( (const Reference< XIdlField > *)0 ),
- IdlMemberImpl::getTypes() );
- s_pTypes = &s_aTypes;
- }
- }
- return s_pTypes->getTypes();
-}
-//__________________________________________________________________________________________________
-Sequence< sal_Int8 > IdlAttributeFieldImpl::getImplementationId()
- throw (::com::sun::star::uno::RuntimeException)
-{
- static OImplementationId * s_pId = 0;
- if (! s_pId)
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! s_pId)
- {
- static OImplementationId s_aId;
- s_pId = &s_aId;
- }
- }
- return s_pId->getImplementationId();
-}
-
-// XIdlMember
-//__________________________________________________________________________________________________
-Reference< XIdlClass > IdlAttributeFieldImpl::getDeclaringClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _xDeclClass.is())
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! _xDeclClass.is())
- {
- rtl::OUString aName(getAttributeTypeDescr()->aBase.aBase.pTypeName);
- sal_Int32 i = aName.indexOf(':');
- OSL_ASSERT(i >= 0);
- _xDeclClass = getReflection()->forName(aName.copy(0, i));
- }
- }
- return _xDeclClass;
-}
-//__________________________________________________________________________________________________
-OUString IdlAttributeFieldImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return IdlMemberImpl::getName();
-}
-
-// XIdlField
-//__________________________________________________________________________________________________
-Reference< XIdlClass > IdlAttributeFieldImpl::getType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return getReflection()->forType(
- getAttributeTypeDescr()->pAttributeTypeRef );
-}
-//__________________________________________________________________________________________________
-FieldAccessMode IdlAttributeFieldImpl::getAccessMode()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return (((typelib_InterfaceAttributeTypeDescription *)getAttributeTypeDescr())->bReadOnly
- ? FieldAccessMode_READONLY : FieldAccessMode_READWRITE);
-}
-//__________________________________________________________________________________________________
-Any IdlAttributeFieldImpl::get( const Any & rObj )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
-{
- uno_Interface * pUnoI = getReflection()->mapToUno(
- rObj, (typelib_InterfaceTypeDescription *)getDeclTypeDescr() );
- OSL_ENSURE( pUnoI, "### illegal destination object given!" );
- if (pUnoI)
- {
- TypeDescription aTD( getAttributeTypeDescr()->pAttributeTypeRef );
- typelib_TypeDescription * pTD = aTD.get();
-
- uno_Any aExc;
- uno_Any * pExc = &aExc;
- void * pReturn = alloca( pTD->nSize );
-
- (*pUnoI->pDispatcher)( pUnoI, getTypeDescr(), pReturn, 0, &pExc );
- (*pUnoI->release)( pUnoI );
-
- checkException(
- pExc,
- *static_cast< Reference< XInterface > const * >(rObj.getValue()));
- Any aRet;
- uno_any_destruct(
- &aRet, reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
- uno_any_constructAndConvert( &aRet, pReturn, pTD, getReflection()->getUno2Cpp().get() );
- uno_destructData( pReturn, pTD, 0 );
- return aRet;
- }
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("illegal object given!") ),
- (XWeak *)(OWeakObject *)this, 0 );
-}
-//__________________________________________________________________________________________________
-void IdlAttributeFieldImpl::set( Any & rObj, const Any & rValue )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException)
-{
- if (getAttributeTypeDescr()->bReadOnly)
- {
- throw IllegalAccessException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("cannot set readonly attribute!") ),
- (XWeak *)(OWeakObject *)this );
- }
-
- uno_Interface * pUnoI = getReflection()->mapToUno(
- rObj, (typelib_InterfaceTypeDescription *)getDeclTypeDescr() );
- OSL_ENSURE( pUnoI, "### illegal destination object given!" );
- if (pUnoI)
- {
- TypeDescription aTD( getAttributeTypeDescr()->pAttributeTypeRef );
- typelib_TypeDescription * pTD = aTD.get();
-
- // construct uno value to be set
- void * pArgs[1];
- void * pArg = pArgs[0] = alloca( pTD->nSize );
-
- sal_Bool bAssign;
- if (pTD->eTypeClass == typelib_TypeClass_ANY)
- {
- uno_copyAndConvertData( pArg, SAL_CONST_CAST( Any *, &rValue ),
- pTD, getReflection()->getCpp2Uno().get() );
- bAssign = sal_True;
- }
- else if (typelib_typedescriptionreference_equals( rValue.getValueTypeRef(), pTD->pWeakRef ))
- {
- uno_copyAndConvertData( pArg, SAL_CONST_CAST( void *, rValue.getValue() ),
- pTD, getReflection()->getCpp2Uno().get() );
- bAssign = sal_True;
- }
- else if (pTD->eTypeClass == typelib_TypeClass_INTERFACE)
- {
- Reference< XInterface > xObj;
- bAssign = extract(
- rValue, (typelib_InterfaceTypeDescription *)pTD, xObj,
- getReflection() );
- if (bAssign)
- {
- *(void **)pArg = getReflection()->getCpp2Uno().mapInterface(
- xObj.get(), (typelib_InterfaceTypeDescription *)pTD );
- }
- }
- else
- {
- typelib_TypeDescription * pValueTD = 0;
- TYPELIB_DANGER_GET( &pValueTD, rValue.getValueTypeRef() );
- // construct temp uno val to do proper assignment: todo opt
- void * pTemp = alloca( pValueTD->nSize );
- uno_copyAndConvertData(
- pTemp, (void *)rValue.getValue(), pValueTD, getReflection()->getCpp2Uno().get() );
- uno_constructData(
- pArg, pTD );
- // assignment does simple conversion
- bAssign = uno_assignData(
- pArg, pTD, pTemp, pValueTD, 0, 0, 0 );
- uno_destructData(
- pTemp, pValueTD, 0 );
- TYPELIB_DANGER_RELEASE( pValueTD );
- }
-
- if (bAssign)
- {
- uno_Any aExc;
- uno_Any * pExc = &aExc;
- (*pUnoI->pDispatcher)( pUnoI, getTypeDescr(), 0, pArgs, &pExc );
- (*pUnoI->release)( pUnoI );
-
- uno_destructData( pArg, pTD, 0 );
- checkException(
- pExc,
- *static_cast< Reference< XInterface > const * >(
- rObj.getValue()));
- return;
- }
- (*pUnoI->release)( pUnoI );
-
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("illegal value given!") ),
- *(const Reference< XInterface > *)rObj.getValue(), 1 );
- }
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("illegal destination object given!") ),
- (XWeak *)(OWeakObject *)this, 0 );
-}
-//__________________________________________________________________________________________________
-void IdlAttributeFieldImpl::set( const Any & rObj, const Any & rValue )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IllegalAccessException, ::com::sun::star::uno::RuntimeException)
-{
- IdlAttributeFieldImpl::set( const_cast< Any & >( rObj ), rValue );
-}
-
-void IdlAttributeFieldImpl::checkException(
- uno_Any * exception, Reference< XInterface > const & context)
-{
- if (exception != 0) {
- Any e;
- uno_any_destruct(&e, reinterpret_cast< uno_ReleaseFunc >(cpp_release));
- uno_type_any_constructAndConvert(
- &e, exception->pData, exception->pType,
- getReflection()->getUno2Cpp().get());
- uno_any_destruct(exception, 0);
- if (e.isExtractableTo(
- getCppuType(static_cast< RuntimeException const * >(0))))
- {
- cppu::throwException(e);
- } else {
- throw WrappedTargetRuntimeException(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "non-RuntimeException occurred when accessing an"
- " interface type attribute")),
- context, e);
- }
- }
-}
-
-//##################################################################################################
-//##################################################################################################
-//##################################################################################################
-
-
-//==================================================================================================
-class IdlInterfaceMethodImpl
- : public IdlMemberImpl
- , public XIdlMethod
-{
- Sequence< Reference< XIdlClass > > * _pExceptionTypes;
- Sequence< Reference< XIdlClass > > * _pParamTypes;
- Sequence< ParamInfo > * _pParamInfos;
-
-public:
- typelib_InterfaceMethodTypeDescription * getMethodTypeDescr()
- { return (typelib_InterfaceMethodTypeDescription *)getTypeDescr(); }
-
- IdlInterfaceMethodImpl( IdlReflectionServiceImpl * pReflection, const OUString & rName,
- typelib_TypeDescription * pTypeDescr, typelib_TypeDescription * pDeclTypeDescr )
- : IdlMemberImpl( pReflection, rName, pTypeDescr, pDeclTypeDescr )
- , _pExceptionTypes( 0 )
- , _pParamTypes( 0 )
- , _pParamInfos( 0 )
- {}
- virtual ~IdlInterfaceMethodImpl();
-
- // XInterface
- virtual Any SAL_CALL queryInterface( const Type & rType ) throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL acquire() throw();
- virtual void SAL_CALL release() throw();
-
- // XTypeProvider
- virtual Sequence< Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException);
- virtual Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException);
-
- // XIdlMember
- virtual Reference< XIdlClass > SAL_CALL getDeclaringClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
- // XIdlMethod
- virtual Reference< XIdlClass > SAL_CALL getReturnType() throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< Reference< XIdlClass > > SAL_CALL getParameterTypes() throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< ParamInfo > SAL_CALL getParameterInfos() throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< Reference< XIdlClass > > SAL_CALL getExceptionTypes() throw(::com::sun::star::uno::RuntimeException);
- virtual MethodMode SAL_CALL getMode() throw(::com::sun::star::uno::RuntimeException);
- virtual Any SAL_CALL invoke( const Any & rObj, Sequence< Any > & rArgs ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::reflection::InvocationTargetException, ::com::sun::star::uno::RuntimeException);
-};
-//__________________________________________________________________________________________________
-IdlInterfaceMethodImpl::~IdlInterfaceMethodImpl()
-{
- delete _pParamInfos;
- delete _pParamTypes;
- delete _pExceptionTypes;
-}
-
-// XInterface
-//__________________________________________________________________________________________________
-Any IdlInterfaceMethodImpl::queryInterface( const Type & rType )
- throw(::com::sun::star::uno::RuntimeException)
-{
- Any aRet( ::cppu::queryInterface( rType, static_cast< XIdlMethod * >( this ) ) );
- return (aRet.hasValue() ? aRet : IdlMemberImpl::queryInterface( rType ));
-}
-//__________________________________________________________________________________________________
-void IdlInterfaceMethodImpl::acquire() throw()
-{
- IdlMemberImpl::acquire();
-}
-//__________________________________________________________________________________________________
-void IdlInterfaceMethodImpl::release() throw()
-{
- IdlMemberImpl::release();
-}
-
-// XTypeProvider
-//__________________________________________________________________________________________________
-Sequence< Type > IdlInterfaceMethodImpl::getTypes()
- throw (::com::sun::star::uno::RuntimeException)
-{
- static OTypeCollection * s_pTypes = 0;
- if (! s_pTypes)
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! s_pTypes)
- {
- static OTypeCollection s_aTypes(
- ::getCppuType( (const Reference< XIdlMethod > *)0 ),
- IdlMemberImpl::getTypes() );
- s_pTypes = &s_aTypes;
- }
- }
- return s_pTypes->getTypes();
-}
-//__________________________________________________________________________________________________
-Sequence< sal_Int8 > IdlInterfaceMethodImpl::getImplementationId()
- throw (::com::sun::star::uno::RuntimeException)
-{
- static OImplementationId * s_pId = 0;
- if (! s_pId)
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! s_pId)
- {
- static OImplementationId s_aId;
- s_pId = &s_aId;
- }
- }
- return s_pId->getImplementationId();
-}
-
-// XIdlMember
-//__________________________________________________________________________________________________
-Reference< XIdlClass > IdlInterfaceMethodImpl::getDeclaringClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _xDeclClass.is())
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! _xDeclClass.is())
- {
- rtl::OUString aName(getMethodTypeDescr()->aBase.aBase.pTypeName);
- sal_Int32 i = aName.indexOf(':');
- OSL_ASSERT(i >= 0);
- _xDeclClass = getReflection()->forName(aName.copy(0, i));
- }
- }
- return _xDeclClass;
-}
-//__________________________________________________________________________________________________
-OUString IdlInterfaceMethodImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return IdlMemberImpl::getName();
-}
-
-// XIdlMethod
-//__________________________________________________________________________________________________
-Reference< XIdlClass > SAL_CALL IdlInterfaceMethodImpl::getReturnType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return getReflection()->forType( getMethodTypeDescr()->pReturnTypeRef );
-}
-//__________________________________________________________________________________________________
-Sequence< Reference< XIdlClass > > IdlInterfaceMethodImpl::getExceptionTypes()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _pExceptionTypes)
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! _pExceptionTypes)
- {
- sal_Int32 nExc = getMethodTypeDescr()->nExceptions;
- Sequence< Reference< XIdlClass > > * pTempExceptionTypes =
- new Sequence< Reference< XIdlClass > >( nExc );
- Reference< XIdlClass > * pExceptionTypes = pTempExceptionTypes->getArray();
-
- typelib_TypeDescriptionReference ** ppExc =
- getMethodTypeDescr()->ppExceptions;
- IdlReflectionServiceImpl * pRefl = getReflection();
-
- while (nExc--)
- pExceptionTypes[nExc] = pRefl->forType( ppExc[nExc] );
-
- _pExceptionTypes = pTempExceptionTypes;
- }
- }
- return *_pExceptionTypes;
-}
-//__________________________________________________________________________________________________
-Sequence< Reference< XIdlClass > > IdlInterfaceMethodImpl::getParameterTypes()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _pParamTypes)
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! _pParamTypes)
- {
- sal_Int32 nParams = getMethodTypeDescr()->nParams;
- Sequence< Reference< XIdlClass > > * pTempParamTypes =
- new Sequence< Reference< XIdlClass > >( nParams );
- Reference< XIdlClass > * pParamTypes = pTempParamTypes->getArray();
-
- typelib_MethodParameter * pTypelibParams =
- getMethodTypeDescr()->pParams;
- IdlReflectionServiceImpl * pRefl = getReflection();
-
- while (nParams--)
- pParamTypes[nParams] = pRefl->forType( pTypelibParams[nParams].pTypeRef );
-
- _pParamTypes = pTempParamTypes;
- }
- }
- return *_pParamTypes;
-}
-//__________________________________________________________________________________________________
-Sequence< ParamInfo > IdlInterfaceMethodImpl::getParameterInfos()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _pParamInfos)
- {
- MutexGuard aGuard( getMutexAccess() );
- if (! _pParamInfos)
- {
- sal_Int32 nParams = getMethodTypeDescr()->nParams;
- Sequence< ParamInfo > * pTempParamInfos = new Sequence< ParamInfo >( nParams );
- ParamInfo * pParamInfos = pTempParamInfos->getArray();
-
- typelib_MethodParameter * pTypelibParams =
- getMethodTypeDescr()->pParams;
-
- if (_pParamTypes) // use param types
- {
- const Reference< XIdlClass > * pParamTypes = _pParamTypes->getConstArray();
-
- while (nParams--)
- {
- const typelib_MethodParameter & rParam = pTypelibParams[nParams];
- ParamInfo & rInfo = pParamInfos[nParams];
- rInfo.aName = rParam.pName;
- if (rParam.bIn)
- rInfo.aMode = (rParam.bOut ? ParamMode_INOUT : ParamMode_IN);
- else
- rInfo.aMode = ParamMode_OUT;
- rInfo.aType = pParamTypes[nParams];
- }
- }
- else // make also param types sequence if not already initialized
- {
- Sequence< Reference< XIdlClass > > * pTempParamTypes =
- new Sequence< Reference< XIdlClass > >( nParams );
- Reference< XIdlClass > * pParamTypes = pTempParamTypes->getArray();
-
- IdlReflectionServiceImpl * pRefl = getReflection();
-
- while (nParams--)
- {
- const typelib_MethodParameter & rParam = pTypelibParams[nParams];
- ParamInfo & rInfo = pParamInfos[nParams];
- rInfo.aName = rParam.pName;
- if (rParam.bIn)
- rInfo.aMode = (rParam.bOut ? ParamMode_INOUT : ParamMode_IN);
- else
- rInfo.aMode = ParamMode_OUT;
- rInfo.aType = pParamTypes[nParams] = pRefl->forType( rParam.pTypeRef );
- }
-
- _pParamTypes = pTempParamTypes;
- }
-
- _pParamInfos = pTempParamInfos;
- }
- }
- return *_pParamInfos;
-}
-//__________________________________________________________________________________________________
-MethodMode SAL_CALL IdlInterfaceMethodImpl::getMode()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return
- getMethodTypeDescr()->bOneWay ? MethodMode_ONEWAY : MethodMode_TWOWAY;
-}
-//__________________________________________________________________________________________________
-Any SAL_CALL IdlInterfaceMethodImpl::invoke( const Any & rObj, Sequence< Any > & rArgs )
- throw(::com::sun::star::lang::IllegalArgumentException,
- ::com::sun::star::reflection::InvocationTargetException,
- ::com::sun::star::uno::RuntimeException)
-{
- if (rObj.getValueTypeClass() == TypeClass_INTERFACE)
- {
- // acquire()/ release()
- if (rtl_ustr_ascii_compare( getTypeDescr()->pTypeName->buffer,
- "com.sun.star.uno.XInterface::acquire" ) == 0)
- {
- (*(const Reference< XInterface > *)rObj.getValue())->acquire();
- return Any();
- }
- else if (rtl_ustr_ascii_compare( getTypeDescr()->pTypeName->buffer,
- "com.sun.star.uno.XInterface::release" ) == 0)
- {
- (*(const Reference< XInterface > *)rObj.getValue())->release();
- return Any();
- }
- }
-
- uno_Interface * pUnoI = getReflection()->mapToUno(
- rObj, (typelib_InterfaceTypeDescription *)getDeclTypeDescr() );
- OSL_ENSURE( pUnoI, "### illegal destination object given!" );
- if (pUnoI)
- {
- sal_Int32 nParams = getMethodTypeDescr()->nParams;
- if (rArgs.getLength() != nParams)
- {
- (*pUnoI->release)( pUnoI );
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("arguments len differ!") ),
- *(const Reference< XInterface > *)rObj.getValue(), 1 );
- }
-
- Any * pCppArgs = rArgs.getArray();
- typelib_MethodParameter * pParams = getMethodTypeDescr()->pParams;
- typelib_TypeDescription * pReturnType = 0;
- TYPELIB_DANGER_GET(
- &pReturnType, getMethodTypeDescr()->pReturnTypeRef );
-
- void * pUnoReturn = alloca( pReturnType->nSize );
- void ** ppUnoArgs = (void **)alloca( sizeof(void *) * nParams *2 );
- typelib_TypeDescription ** ppParamTypes = (typelib_TypeDescription **)(ppUnoArgs + nParams);
-
- // convert arguments
- for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
- {
- ppParamTypes[nPos] = 0;
- TYPELIB_DANGER_GET( ppParamTypes + nPos, pParams[nPos].pTypeRef );
- typelib_TypeDescription * pTD = ppParamTypes[nPos];
-
- ppUnoArgs[nPos] = alloca( pTD->nSize );
- if (pParams[nPos].bIn)
- {
- sal_Bool bAssign;
- if (typelib_typedescriptionreference_equals(
- pCppArgs[nPos].getValueTypeRef(), pTD->pWeakRef ))
- {
- uno_type_copyAndConvertData(
- ppUnoArgs[nPos], (void *)pCppArgs[nPos].getValue(),
- pCppArgs[nPos].getValueTypeRef(), getReflection()->getCpp2Uno().get() );
- bAssign = sal_True;
- }
- else if (pTD->eTypeClass == typelib_TypeClass_ANY)
- {
- uno_type_any_constructAndConvert(
- (uno_Any *)ppUnoArgs[nPos], (void *)pCppArgs[nPos].getValue(),
- pCppArgs[nPos].getValueTypeRef(), getReflection()->getCpp2Uno().get() );
- bAssign = sal_True;
- }
- else if (pTD->eTypeClass == typelib_TypeClass_INTERFACE)
- {
- Reference< XInterface > xDest;
- bAssign = extract(
- pCppArgs[nPos], (typelib_InterfaceTypeDescription *)pTD,
- xDest, getReflection() );
- if (bAssign)
- {
- *(void **)ppUnoArgs[nPos] = getReflection()->getCpp2Uno().mapInterface(
- xDest.get(), (typelib_InterfaceTypeDescription *)pTD );
- }
- }
- else
- {
- typelib_TypeDescription * pValueTD = 0;
- TYPELIB_DANGER_GET( &pValueTD, pCppArgs[nPos].getValueTypeRef() );
- // construct temp uno val to do proper assignment: todo opt
- void * pTemp = alloca( pValueTD->nSize );
- uno_copyAndConvertData(
- pTemp, (void *)pCppArgs[nPos].getValue(), pValueTD,
- getReflection()->getCpp2Uno().get() );
- uno_constructData(
- ppUnoArgs[nPos], pTD );
- // assignment does simple conversion
- bAssign = uno_assignData(
- ppUnoArgs[nPos], pTD, pTemp, pValueTD, 0, 0, 0 );
- uno_destructData(
- pTemp, pValueTD, 0 );
- TYPELIB_DANGER_RELEASE( pValueTD );
- }
-
- if (! bAssign)
- {
- IllegalArgumentException aExc(
- OUString( RTL_CONSTASCII_USTRINGPARAM("cannot coerce argument type during corereflection call!") ),
- *(const Reference< XInterface > *)rObj.getValue(), (sal_Int16)nPos );
-
- // cleanup
- while (nPos--)
- {
- if (pParams[nPos].bIn)
- uno_destructData( ppUnoArgs[nPos], ppParamTypes[nPos], 0 );
- TYPELIB_DANGER_RELEASE( ppParamTypes[nPos] );
- }
- TYPELIB_DANGER_RELEASE( pReturnType );
- (*pUnoI->release)( pUnoI );
-
- throw aExc;
- }
- }
- }
-
- uno_Any aUnoExc;
- uno_Any * pUnoExc = &aUnoExc;
-
- (*pUnoI->pDispatcher)(
- pUnoI, getTypeDescr(), pUnoReturn, ppUnoArgs, &pUnoExc );
- (*pUnoI->release)( pUnoI );
-
- Any aRet;
- if (pUnoExc)
- {
- // cleanup
- while (nParams--)
- {
- if (pParams[nParams].bIn)
- uno_destructData( ppUnoArgs[nParams], ppParamTypes[nParams], 0 );
- TYPELIB_DANGER_RELEASE( ppParamTypes[nParams] );
- }
- TYPELIB_DANGER_RELEASE( pReturnType );
-
- InvocationTargetException aExc;
- aExc.Context = *(const Reference< XInterface > *)rObj.getValue();
- aExc.Message = OUString( RTL_CONSTASCII_USTRINGPARAM("exception occurred during invocation!") );
- uno_any_destruct(
- &aExc.TargetException,
- reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
- uno_type_copyAndConvertData(
- &aExc.TargetException, pUnoExc, ::getCppuType( (const Any *)0 ).getTypeLibType(),
- getReflection()->getUno2Cpp().get() );
- uno_any_destruct( pUnoExc, 0 );
- throw aExc;
- }
- else
- {
- // reconvert arguments and cleanup
- while (nParams--)
- {
- if (pParams[nParams].bOut) // write back
- {
- uno_any_destruct(
- &pCppArgs[nParams],
- reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
- uno_any_constructAndConvert(
- &pCppArgs[nParams], ppUnoArgs[nParams], ppParamTypes[nParams],
- getReflection()->getUno2Cpp().get() );
- }
- uno_destructData( ppUnoArgs[nParams], ppParamTypes[nParams], 0 );
- TYPELIB_DANGER_RELEASE( ppParamTypes[nParams] );
- }
- uno_any_destruct(
- &aRet, reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
- uno_any_constructAndConvert(
- &aRet, pUnoReturn, pReturnType,
- getReflection()->getUno2Cpp().get() );
- uno_destructData( pUnoReturn, pReturnType, 0 );
- TYPELIB_DANGER_RELEASE( pReturnType );
- }
- return aRet;
- }
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("illegal destination object given!") ),
- (XWeak *)(OWeakObject *)this, 0 );
-}
-
-
-//##################################################################################################
-//##################################################################################################
-//##################################################################################################
-
-
-//__________________________________________________________________________________________________
-InterfaceIdlClassImpl::~InterfaceIdlClassImpl()
-{
- for ( sal_Int32 nPos = _nMethods + _nAttributes; nPos--; )
- typelib_typedescription_release( _pSortedMemberInit[nPos].second );
-
- delete [] _pSortedMemberInit;
-}
-
-//__________________________________________________________________________________________________
-Sequence< Reference< XIdlClass > > InterfaceIdlClassImpl::getSuperclasses()
- throw(::com::sun::star::uno::RuntimeException)
-{
- MutexGuard aGuard(getMutexAccess());
- if (_xSuperClasses.getLength() == 0) {
- typelib_InterfaceTypeDescription * pType = getTypeDescr();
- _xSuperClasses.realloc(pType->nBaseTypes);
- for (sal_Int32 i = 0; i < pType->nBaseTypes; ++i) {
- _xSuperClasses[i] = getReflection()->forType(
- &pType->ppBaseTypes[i]->aBase);
- OSL_ASSERT(_xSuperClasses[i].is());
- }
- }
- return Sequence< Reference< XIdlClass > >(_xSuperClasses);
-}
-//__________________________________________________________________________________________________
-void InterfaceIdlClassImpl::initMembers()
-{
- sal_Int32 nAll = getTypeDescr()->nAllMembers;
- MemberInit * pSortedMemberInit = new MemberInit[nAll];
- typelib_TypeDescriptionReference ** ppAllMembers = getTypeDescr()->ppAllMembers;
-
- for ( sal_Int32 nPos = 0; nPos < nAll; ++nPos )
- {
- sal_Int32 nIndex;
- if (ppAllMembers[nPos]->eTypeClass == typelib_TypeClass_INTERFACE_METHOD)
- {
- // methods to front
- nIndex = _nMethods;
- ++_nMethods;
- }
- else
- {
- ++_nAttributes;
- nIndex = (nAll - _nAttributes);
- // attributes at the back
- }
-
- typelib_TypeDescription * pTD = 0;
- typelib_typedescriptionreference_getDescription( &pTD, ppAllMembers[nPos] );
- OSL_ENSURE( pTD, "### cannot get type description!" );
- pSortedMemberInit[nIndex].first = ((typelib_InterfaceMemberTypeDescription *)pTD)->pMemberName;
- pSortedMemberInit[nIndex].second = pTD;
- }
-
- _pSortedMemberInit = pSortedMemberInit;
-}
-//__________________________________________________________________________________________________
-sal_Bool InterfaceIdlClassImpl::isAssignableFrom( const Reference< XIdlClass > & xType )
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (xType.is() && xType->getTypeClass() == TypeClass_INTERFACE)
- {
- if (equals( xType ))
- return sal_True;
- else
- {
- const Sequence< Reference< XIdlClass > > & rSeq = xType->getSuperclasses();
- for (sal_Int32 i = 0; i < rSeq.getLength(); ++i) {
- if (isAssignableFrom(rSeq[i])) {
- return true;
- }
- }
- }
- }
- return sal_False;
-}
-//__________________________________________________________________________________________________
-Uik InterfaceIdlClassImpl::getUik()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return Uik(0, 0, 0, 0, 0);
- // Uiks are deprecated and this function must not be called
-}
-//__________________________________________________________________________________________________
-Sequence< Reference< XIdlMethod > > InterfaceIdlClassImpl::getMethods()
- throw(::com::sun::star::uno::RuntimeException)
-{
- MutexGuard aGuard( getMutexAccess() );
- if (! _pSortedMemberInit)
- initMembers();
-
- // create methods sequence
- Sequence< Reference< XIdlMethod > > aRet( _nMethods );
- Reference< XIdlMethod > * pRet = aRet.getArray();
- for ( sal_Int32 nPos = _nMethods; nPos--; )
- {
-
- /*_aName2Method[_pSortedMemberInit[nPos].first] = */pRet[nPos] = new IdlInterfaceMethodImpl(
- getReflection(), _pSortedMemberInit[nPos].first,
- _pSortedMemberInit[nPos].second, IdlClassImpl::getTypeDescr() );
- }
- return aRet;
-}
-//__________________________________________________________________________________________________
-Sequence< Reference< XIdlField > > InterfaceIdlClassImpl::getFields()
- throw(::com::sun::star::uno::RuntimeException)
-{
- MutexGuard aGuard( getMutexAccess() );
- if (! _pSortedMemberInit)
- initMembers();
-
- // create fields sequence
- Sequence< Reference< XIdlField > > aRet( _nAttributes );
- Reference< XIdlField > * pRet = aRet.getArray();
- for ( sal_Int32 nPos = _nAttributes; nPos--; )
- {
- /*_aName2Field[_pSortedMemberInit[_nMethods+nPos].first] = */pRet[_nAttributes-nPos-1] =
- new IdlAttributeFieldImpl(
- getReflection(), _pSortedMemberInit[_nMethods+nPos].first,
- _pSortedMemberInit[_nMethods+nPos].second, IdlClassImpl::getTypeDescr() );
- }
- return aRet;
-}
-//__________________________________________________________________________________________________
-Reference< XIdlMethod > InterfaceIdlClassImpl::getMethod( const OUString & rName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- MutexGuard aGuard( getMutexAccess() );
- if (! _pSortedMemberInit)
- initMembers();
-
- Reference< XIdlMethod > xRet;
-
- // try weak map
- const OUString2Method::const_iterator iFind( _aName2Method.find( rName ) );
- if (iFind != _aName2Method.end())
- xRet = (*iFind).second; // harden ref
-
- if (! xRet.is())
- {
- for ( sal_Int32 nPos = _nMethods; nPos--; )
- {
- if (_pSortedMemberInit[nPos].first == rName)
- {
- _aName2Method[rName] = xRet = new IdlInterfaceMethodImpl(
- getReflection(), rName,
- _pSortedMemberInit[nPos].second, IdlClassImpl::getTypeDescr() );
- break;
- }
- }
- }
- return xRet;
-}
-//__________________________________________________________________________________________________
-Reference< XIdlField > InterfaceIdlClassImpl::getField( const OUString & rName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- MutexGuard aGuard( getMutexAccess() );
- if (! _pSortedMemberInit)
- initMembers();
-
- Reference< XIdlField > xRet;
-
- // try weak map
- const OUString2Field::const_iterator iFind( _aName2Field.find( rName ) );
- if (iFind != _aName2Field.end())
- xRet = (*iFind).second; // harden ref
-
- if (! xRet.is())
- {
- for ( sal_Int32 nPos = _nAttributes; nPos--; )
- {
- if (_pSortedMemberInit[_nMethods+nPos].first == rName)
- {
- _aName2Field[rName] = xRet = new IdlAttributeFieldImpl(
- getReflection(), rName,
- _pSortedMemberInit[_nMethods+nPos].second, IdlClassImpl::getTypeDescr() );
- break;
- }
- }
- }
- return xRet;
-}
-//__________________________________________________________________________________________________
-void InterfaceIdlClassImpl::createObject( Any & rObj )
- throw(::com::sun::star::uno::RuntimeException)
-{
- // interfaces cannot be constructed
- rObj.clear();
-}
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/corereflection/lrucache.hxx b/stoc/source/corereflection/lrucache.hxx
deleted file mode 100644
index b58e9845f..000000000
--- a/stoc/source/corereflection/lrucache.hxx
+++ /dev/null
@@ -1,247 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 _LRU_CACHE_HXX_
-#define _LRU_CACHE_HXX_
-
-// __CACHE_DIAGNOSE forces cache size to 4 and works only for OUString keys
-// #define __CACHE_DIAGNOSE 1
-
-#include <osl/mutex.hxx>
-#include "rtl/ustring.hxx"
-
-#include <boost/unordered_map.hpp>
-
-/** Implementation of a least recently used (lru) cache.
- <br>
- @author Daniel Boelzle
-*/
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-class LRU_Cache
-{
- struct CacheEntry
- {
- t_Key aKey;
- t_Val aVal;
- CacheEntry * pPred;
- CacheEntry * pSucc;
- };
- typedef ::boost::unordered_map< t_Key, CacheEntry *, t_KeyHash, t_KeyEqual > t_Key2Element;
-
- mutable ::osl::Mutex _aCacheMutex;
- sal_Int32 _nCachedElements;
- t_Key2Element _aKey2Element;
-
- CacheEntry * _pBlock;
- mutable CacheEntry * _pHead;
- mutable CacheEntry * _pTail;
- inline void toFront( CacheEntry * pEntry ) const;
-
-public:
- /** Constructor:
- <br>
- @param nCachedElements number of elements to be cached; default param set to 128
- */
- inline LRU_Cache( sal_Int32 nCachedElements = 128 );
- /** Destructor: releases all cached elements and keys.
- <br>
- */
- inline ~LRU_Cache();
-
- /** Retrieves a value from the cache. Returns default constructed value,
- if none was found.
- <br>
- @param rKey a key
- @return value
- */
- inline t_Val getValue( const t_Key & rKey ) const;
- /** Sets a value to be cached for given key.
- <br>
- @param rKey a key
- @param rValue a value
- */
- inline void setValue( const t_Key & rKey, const t_Val & rValue );
- /** Tests whether a value is cached for given key.
- <br>
- @param rKey a key
- @return true, if value is cached
- */
- inline sal_Bool hasValue( const t_Key & rKey ) const;
- /** Clears the cache, thus releasing all cached elements and keys.
- <br>
- */
- inline void clear();
-};
-//__________________________________________________________________________________________________
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-inline LRU_Cache< t_Key, t_Val, t_KeyHash, t_KeyEqual >::LRU_Cache( sal_Int32 nCachedElements )
-#ifdef __CACHE_DIAGNOSE
- : _nCachedElements( 4 )
-#else
- : _nCachedElements( nCachedElements )
-#endif
- , _pBlock( 0 )
-{
- if (_nCachedElements > 0)
- {
- _pBlock = new CacheEntry[_nCachedElements];
- _pHead = _pBlock;
- _pTail = _pBlock + _nCachedElements -1;
- for ( sal_Int32 nPos = _nCachedElements; nPos--; )
- {
- _pBlock[nPos].pPred = _pBlock + nPos -1;
- _pBlock[nPos].pSucc = _pBlock + nPos +1;
- }
- }
-}
-//__________________________________________________________________________________________________
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-inline LRU_Cache< t_Key, t_Val, t_KeyHash, t_KeyEqual >::~LRU_Cache()
-{
- delete [] _pBlock;
-}
-//__________________________________________________________________________________________________
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-inline void LRU_Cache< t_Key, t_Val, t_KeyHash, t_KeyEqual >::toFront( CacheEntry * pEntry ) const
-{
- if (pEntry != _pHead)
- {
- // cut out element
- if (pEntry == _pTail)
- {
- _pTail = pEntry->pPred;
- }
- else
- {
- pEntry->pSucc->pPred = pEntry->pPred;
- pEntry->pPred->pSucc = pEntry->pSucc;
- }
- // push to front
- _pHead->pPred = pEntry;
- pEntry->pSucc = _pHead;
- _pHead = pEntry;
- }
-}
-//__________________________________________________________________________________________________
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-inline sal_Bool LRU_Cache< t_Key, t_Val, t_KeyHash, t_KeyEqual >::hasValue( const t_Key & rKey ) const
-{
- ::osl::MutexGuard aGuard( _aCacheMutex );
- const typename t_Key2Element::const_iterator iFind( _aKey2Element.find( rKey ) );
- return (iFind != _aKey2Element.end());
-}
-//__________________________________________________________________________________________________
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-inline t_Val LRU_Cache< t_Key, t_Val, t_KeyHash, t_KeyEqual >::getValue( const t_Key & rKey ) const
-{
- ::osl::MutexGuard aGuard( _aCacheMutex );
- const typename t_Key2Element::const_iterator iFind( _aKey2Element.find( rKey ) );
- if (iFind != _aKey2Element.end())
- {
- CacheEntry * pEntry = (*iFind).second;
- toFront( pEntry );
-#ifdef __CACHE_DIAGNOSE
- OSL_TRACE( "> retrieved element \"" );
- OSL_TRACE( "%s", ::rtl::OUStringToOString( pEntry->aKey, RTL_TEXTENCODING_ASCII_US ).getStr() );
- OSL_TRACE( "\" from cache <\n" );
-#endif
- return pEntry->aVal;
- }
- return t_Val();
-}
-//__________________________________________________________________________________________________
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-inline void LRU_Cache< t_Key, t_Val, t_KeyHash, t_KeyEqual >::setValue(
- const t_Key & rKey, const t_Val & rValue )
-{
- ::osl::MutexGuard aGuard( _aCacheMutex );
- if (_nCachedElements > 0)
- {
- const typename t_Key2Element::const_iterator iFind( _aKey2Element.find( rKey ) );
-
- CacheEntry * pEntry;
- if (iFind == _aKey2Element.end())
- {
- pEntry = _pTail; // erase last element
-#ifdef __CACHE_DIAGNOSE
- if (pEntry->aKey.getLength())
- {
- OSL_TRACE( "> kicking element \"" );
- OSL_TRACE( "%s", ::rtl::OUStringToOString( pEntry->aKey, RTL_TEXTENCODING_ASCII_US ).getStr() );
- OSL_TRACE( "\" from cache <\n" );
- }
-#endif
- _aKey2Element.erase( pEntry->aKey );
- _aKey2Element[ pEntry->aKey = rKey ] = pEntry;
- }
- else
- {
- pEntry = (*iFind).second;
-#ifdef __CACHE_DIAGNOSE
- OSL_TRACE( "> replacing element \"" );
- OSL_TRACE( "%s", ::rtl::OUStringToOString( pEntry->aKey, RTL_TEXTENCODING_ASCII_US ).getStr() );
- OSL_TRACE( "\" in cache <\n" );
-#endif
- }
- pEntry->aVal = rValue;
- toFront( pEntry );
- }
-}
-//__________________________________________________________________________________________________
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-inline void LRU_Cache< t_Key, t_Val, t_KeyHash, t_KeyEqual >::clear()
-{
- ::osl::MutexGuard aGuard( _aCacheMutex );
- _aKey2Element.clear();
- for ( sal_Int32 nPos = _nCachedElements; nPos--; )
- {
- _pBlock[nPos].aKey = t_Key();
- _pBlock[nPos].aVal = t_Val();
- }
- _nCachedElements = 0;
-#ifdef __CACHE_DIAGNOSE
- OSL_TRACE( "> cleared cache <\n" );
-#endif
-}
-
-//==================================================================================================
-struct FctHashOUString : public ::std::unary_function< const ::rtl::OUString &, size_t >
-{
- size_t operator()( const ::rtl::OUString & rKey ) const
- { return rKey.hashCode(); }
-};
-
-/** Template instance for OUString keys, Any values.<br>
-*/
-typedef LRU_Cache< ::rtl::OUString, ::com::sun::star::uno::Any,
- FctHashOUString, ::std::equal_to< ::rtl::OUString > >
- LRU_CacheAnyByOUString;
-
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/corereflection/makefile.mk b/stoc/source/corereflection/makefile.mk
deleted file mode 100644
index 7156f6d63..000000000
--- a/stoc/source/corereflection/makefile.mk
+++ /dev/null
@@ -1,82 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME= stoc
-TARGET = reflection.uno
-ENABLE_EXCEPTIONS=TRUE
-COMP1TYPELIST = corefl
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-DLLPRE =
-
-# ------------------------------------------------------------------
-
-.INCLUDE : ..$/cppumaker.mk
-
-SLOFILES= \
- $(SLO)$/crefl.obj \
- $(SLO)$/crbase.obj \
- $(SLO)$/crarray.obj \
- $(SLO)$/crcomp.obj \
- $(SLO)$/criface.obj \
- $(SLO)$/crenum.obj
-
-# internal compiler error with Forte 6 update 1 (x86)
-# to be reconsidered after compiler upgrade
-.IF "$(OS)$(CPU)"=="SOLARISI"
-NOOPTFILES += $(SLO)$/criface.obj
-.ENDIF
-
-SHL1TARGET= $(TARGET)
-SHL1VERSIONMAP = $(SOLARENV)/src/unloadablecomponent.map
-SHL1STDLIBS= \
- $(CPPULIB) \
- $(CPPUHELPERLIB) \
- $(SALLIB)
-
-SHL1DEPN=
-SHL1IMPLIB= i$(TARGET)
-SHL1LIBS= $(SLB)$/$(TARGET).lib
-SHL1DEF= $(MISC)$/$(SHL1TARGET).def
-SHL1RPATH= URELIB
-
-DEF1NAME= $(SHL1TARGET)
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
-ALLTAR : $(MISC)/reflection.component
-
-$(MISC)/reflection.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \
- reflection.component
- $(XSLTPROC) --nonet --stringparam uri \
- '$(COMPONENTPREFIX_URE_NATIVE)$(SHL1TARGETN:f)' -o $@ \
- $(SOLARENV)/bin/createcomponent.xslt reflection.component
diff --git a/stoc/source/corereflection/reflection.component b/stoc/source/corereflection/reflection.component
deleted file mode 100644
index 00772a448..000000000
--- a/stoc/source/corereflection/reflection.component
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--**********************************************************************
-*
-* 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.
-*
-**********************************************************************-->
-
-<component loader="com.sun.star.loader.SharedLibrary"
- xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.comp.stoc.CoreReflection">
- <service name="com.sun.star.reflection.CoreReflection"/>
- <singleton name="com.sun.star.reflection.theCoreReflection"/>
- </implementation>
-</component>
diff --git a/stoc/source/cppumaker.mk b/stoc/source/cppumaker.mk
deleted file mode 100644
index 899c43292..000000000
--- a/stoc/source/cppumaker.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-
-.IF "$(BOOTSTRAP_SERVICE)" != ""
-# fully functional C++-UNO (no bridging); no types.rdb needed at runtime
-CPPUMAKERFLAGS =
-.ENDIF
-
-.IF "$(debug)" != ""
-
-# MSVC++: no inlining
-.IF "$(COM)" == "MSC"
-CFLAGS += -Ob0
-.ENDIF
-
-.ENDIF
-
diff --git a/stoc/source/defaultregistry/defaultregistry.cxx b/stoc/source/defaultregistry/defaultregistry.cxx
deleted file mode 100644
index 5ab668405..000000000
--- a/stoc/source/defaultregistry/defaultregistry.cxx
+++ /dev/null
@@ -1,1401 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <osl/mutex.hxx>
-#include <osl/diagnose.h>
-#include <cppuhelper/queryinterface.hxx>
-#include <cppuhelper/weak.hxx>
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/implbase1.hxx>
-#include <cppuhelper/implbase4.hxx>
-#include <cppuhelper/implbase3.hxx>
-#include <cppuhelper/implementationentry.hxx>
-#include <registry/registry.hxx>
-
-#include <com/sun/star/registry/XSimpleRegistry.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XTypeProvider.hpp>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/container/XEnumerationAccess.hpp>
-
-#include <bootstrapservices.hxx>
-
-using namespace com::sun::star::uno;
-using namespace com::sun::star::registry;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::container;
-using namespace cppu;
-using namespace osl;
-using ::rtl::OUString;
-
-#define SERVICENAME "com.sun.star.registry.NestedRegistry"
-#define IMPLNAME "com.sun.star.comp.stoc.NestedRegistry"
-
-extern rtl_StandardModuleCount g_moduleCount;
-
-namespace stoc_bootstrap
-{
-Sequence< OUString > defreg_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] = OUString(RTL_CONSTASCII_USTRINGPARAM(SERVICENAME));
- return seqNames;
-}
-
-OUString defreg_getImplementationName()
-{
- return OUString(RTL_CONSTASCII_USTRINGPARAM(IMPLNAME));
-}
-}
-
-namespace stoc_defreg
-{
-//*************************************************************************
-// NestedRegistryImpl
-//*************************************************************************
-class NestedKeyImpl;
-
-class NestedRegistryImpl : public WeakAggImplHelper4 < XSimpleRegistry, XInitialization, XServiceInfo, XEnumerationAccess >
-{
-public:
- NestedRegistryImpl( );
-
- ~NestedRegistryImpl();
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName( ) throw(RuntimeException);
- virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(RuntimeException);
- virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(RuntimeException);
-
- // XInitialization
- virtual void SAL_CALL initialize( const Sequence< Any >& aArguments )
- throw(Exception, RuntimeException);
-
- // XSimpleRegistry
- virtual OUString SAL_CALL getURL() throw(RuntimeException);
- virtual void SAL_CALL open( const OUString& rURL, sal_Bool bReadOnly, sal_Bool bCreate ) throw(InvalidRegistryException, RuntimeException);
- virtual sal_Bool SAL_CALL isValid( ) throw(RuntimeException);
- virtual void SAL_CALL close( ) throw(InvalidRegistryException, RuntimeException);
- virtual void SAL_CALL destroy( ) throw(InvalidRegistryException, RuntimeException);
- virtual Reference< XRegistryKey > SAL_CALL getRootKey( ) throw(InvalidRegistryException, RuntimeException);
- virtual sal_Bool SAL_CALL isReadOnly( ) throw(InvalidRegistryException, RuntimeException);
- virtual void SAL_CALL mergeKey( const OUString& aKeyName, const OUString& aUrl ) throw(InvalidRegistryException, MergeConflictException, RuntimeException);
-
- // XEnumerationAccess
- virtual Reference< XEnumeration > SAL_CALL createEnumeration( ) throw (RuntimeException);
- virtual Type SAL_CALL getElementType( ) throw (RuntimeException);
- virtual sal_Bool SAL_CALL hasElements( ) throw (RuntimeException);
-
- friend class NestedKeyImpl;
-protected:
- Mutex m_mutex;
- sal_uInt32 m_state;
- Reference<XSimpleRegistry> m_localReg;
- Reference<XSimpleRegistry> m_defaultReg;
-
-};
-
-//*************************************************************************
-// class NestedKeyImpl the implenetation of interface XRegistryKey
-//*************************************************************************
-class NestedKeyImpl : public WeakImplHelper1< XRegistryKey >
-{
-public:
- NestedKeyImpl( NestedRegistryImpl* pDefaultRegistry,
- Reference<XRegistryKey>& localKey,
- Reference<XRegistryKey>& defaultKey);
-
- NestedKeyImpl( const OUString& aKeyName,
- NestedKeyImpl* pKey);
-
- ~NestedKeyImpl();
-
- // XRegistryKey
- virtual OUString SAL_CALL getKeyName() throw(RuntimeException);
- virtual sal_Bool SAL_CALL isReadOnly( ) throw(InvalidRegistryException, RuntimeException);
- virtual sal_Bool SAL_CALL isValid( ) throw(RuntimeException);
- virtual RegistryKeyType SAL_CALL getKeyType( const OUString& rKeyName ) throw(InvalidRegistryException, RuntimeException);
- virtual RegistryValueType SAL_CALL getValueType( ) throw(InvalidRegistryException, RuntimeException);
- virtual sal_Int32 SAL_CALL getLongValue( ) throw(InvalidRegistryException, InvalidValueException, RuntimeException);
- virtual void SAL_CALL setLongValue( sal_Int32 value ) throw(InvalidRegistryException, RuntimeException);
- virtual Sequence< sal_Int32 > SAL_CALL getLongListValue( ) throw(InvalidRegistryException, InvalidValueException, RuntimeException);
- virtual void SAL_CALL setLongListValue( const ::com::sun::star::uno::Sequence< sal_Int32 >& seqValue ) throw(InvalidRegistryException, RuntimeException);
- virtual OUString SAL_CALL getAsciiValue( ) throw(InvalidRegistryException, InvalidValueException, RuntimeException);
- virtual void SAL_CALL setAsciiValue( const OUString& value ) throw(InvalidRegistryException, RuntimeException);
- virtual Sequence< OUString > SAL_CALL getAsciiListValue( ) throw(InvalidRegistryException, InvalidValueException, RuntimeException);
- virtual void SAL_CALL setAsciiListValue( const ::com::sun::star::uno::Sequence< OUString >& seqValue ) throw(InvalidRegistryException, RuntimeException);
- virtual OUString SAL_CALL getStringValue( ) throw(InvalidRegistryException, InvalidValueException, RuntimeException);
- virtual void SAL_CALL setStringValue( const OUString& value ) throw(InvalidRegistryException, RuntimeException);
- virtual Sequence< OUString > SAL_CALL getStringListValue( ) throw(InvalidRegistryException, InvalidValueException, RuntimeException);
- virtual void SAL_CALL setStringListValue( const ::com::sun::star::uno::Sequence< OUString >& seqValue ) throw(InvalidRegistryException, RuntimeException);
- virtual Sequence< sal_Int8 > SAL_CALL getBinaryValue( ) throw(InvalidRegistryException, InvalidValueException, RuntimeException);
- virtual void SAL_CALL setBinaryValue( const ::com::sun::star::uno::Sequence< sal_Int8 >& value ) throw(InvalidRegistryException, RuntimeException);
- virtual Reference< XRegistryKey > SAL_CALL openKey( const OUString& aKeyName ) throw(InvalidRegistryException, RuntimeException);
- virtual Reference< XRegistryKey > SAL_CALL createKey( const OUString& aKeyName ) throw(InvalidRegistryException, RuntimeException);
- virtual void SAL_CALL closeKey( ) throw(InvalidRegistryException, RuntimeException);
- virtual void SAL_CALL deleteKey( const OUString& rKeyName ) throw(InvalidRegistryException, RuntimeException);
- virtual Sequence< Reference< XRegistryKey > > SAL_CALL openKeys( ) throw(InvalidRegistryException, RuntimeException);
- virtual Sequence< OUString > SAL_CALL getKeyNames( ) throw(InvalidRegistryException, RuntimeException);
- virtual sal_Bool SAL_CALL createLink( const OUString& aLinkName, const OUString& aLinkTarget ) throw(InvalidRegistryException, RuntimeException);
- virtual void SAL_CALL deleteLink( const OUString& rLinkName ) throw(InvalidRegistryException, RuntimeException);
- virtual OUString SAL_CALL getLinkTarget( const OUString& rLinkName ) throw(InvalidRegistryException, RuntimeException);
- virtual OUString SAL_CALL getResolvedName( const OUString& aKeyName ) throw(InvalidRegistryException, RuntimeException);
-
-protected:
- void computeChanges();
- OUString computeName(const OUString& name);
-
- OUString m_name;
- sal_uInt32 m_state;
- NestedRegistryImpl* m_pRegistry;
- Reference<XRegistryKey> m_localKey;
- Reference<XRegistryKey> m_defaultKey;
-};
-
-
-//*************************************************************************
-NestedKeyImpl::NestedKeyImpl( NestedRegistryImpl* pDefaultRegistry,
- Reference<XRegistryKey>& localKey,
- Reference<XRegistryKey>& defaultKey )
- : m_pRegistry(pDefaultRegistry)
-{
- m_pRegistry->acquire();
-
- m_localKey = localKey;
- m_defaultKey = defaultKey;
-
- if (m_localKey.is())
- {
- m_name = m_localKey->getKeyName();
- } else
- if (m_defaultKey.is())
- {
- m_name = m_defaultKey->getKeyName();
- }
-
- m_state = m_pRegistry->m_state;
-}
-
-//*************************************************************************
-NestedKeyImpl::NestedKeyImpl( const OUString& rKeyName,
- NestedKeyImpl* pKey)
- : m_pRegistry(pKey->m_pRegistry)
-{
- m_pRegistry->acquire();
-
- if (pKey->m_localKey.is() && pKey->m_localKey->isValid())
- {
- m_localKey = pKey->m_localKey->openKey(rKeyName);
- }
- if (pKey->m_defaultKey.is() && pKey->m_defaultKey->isValid())
- {
- m_defaultKey = pKey->m_defaultKey->openKey(rKeyName);
- }
-
- if (m_localKey.is())
- {
- m_name = m_localKey->getKeyName();
- } else
- if (m_defaultKey.is())
- {
- m_name = m_defaultKey->getKeyName();
- }
-
- m_state = m_pRegistry->m_state;
-}
-
-//*************************************************************************
-NestedKeyImpl::~NestedKeyImpl()
-{
- if ( m_pRegistry )
- m_pRegistry->release();
-}
-
-//*************************************************************************
-void NestedKeyImpl::computeChanges()
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- if ( m_state != m_pRegistry->m_state )
- {
- Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey());
-
- Reference<XRegistryKey> tmpKey = rootKey->openKey(m_name);
-
- if ( tmpKey.is() )
- {
- m_localKey = rootKey->openKey(m_name);
- }
-
- m_state = m_pRegistry->m_state;
- }
-}
-
-//*************************************************************************
-// NestedKey_Impl::computeName()
-//
-OUString NestedKeyImpl::computeName(const OUString& name)
-{
- OUString resLocalName, resDefaultName;
-
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- try
- {
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- resLocalName = m_localKey->getResolvedName(name);
- } else
- {
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- return m_defaultKey->getResolvedName(name);
- }
-
- if ( resLocalName.getLength() > 0 && m_pRegistry->m_defaultReg->isValid() )
- {
- Reference<XRegistryKey> localRoot(m_pRegistry->m_localReg->getRootKey());
- Reference<XRegistryKey> defaultRoot(m_pRegistry->m_defaultReg->getRootKey());
-
- resDefaultName = defaultRoot->getResolvedName(resLocalName);
-
- sal_uInt32 count = 100;
-
- while (resLocalName != resDefaultName && count > 0)
- {
- count--;
-
- if (resLocalName.getLength() == 0 || resDefaultName.getLength() == 0)
- throw InvalidRegistryException();
-
- resLocalName = localRoot->getResolvedName(resDefaultName);
- resDefaultName = defaultRoot->getResolvedName(resLocalName);
- }
- }
- }
- catch(InvalidRegistryException& )
- {
- }
-
- return resLocalName;
-}
-
-//*************************************************************************
-OUString SAL_CALL NestedKeyImpl::getKeyName() throw(RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- return m_name;
-}
-
-//*************************************************************************
-sal_Bool SAL_CALL NestedKeyImpl::isReadOnly( )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- return m_localKey->isReadOnly();
- else
- throw InvalidRegistryException();
-}
-
-//*************************************************************************
-sal_Bool SAL_CALL NestedKeyImpl::isValid( ) throw(RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- return ((m_localKey.is() && m_localKey->isValid()) ||
- (m_defaultKey.is() && m_defaultKey->isValid()) );
-}
-
-//*************************************************************************
-RegistryKeyType SAL_CALL NestedKeyImpl::getKeyType( const OUString& rKeyName )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- return m_localKey->getKeyType(rKeyName);
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- return m_defaultKey->getKeyType(rKeyName);
- }
-
- return RegistryKeyType_KEY;
-}
-
-//*************************************************************************
-RegistryValueType SAL_CALL NestedKeyImpl::getValueType( )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- return m_localKey->getValueType();
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- return m_defaultKey->getValueType();
- }
-
- return RegistryValueType_NOT_DEFINED;
-}
-
-//*************************************************************************
-sal_Int32 SAL_CALL NestedKeyImpl::getLongValue( )
- throw(InvalidRegistryException, InvalidValueException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- return m_localKey->getLongValue();
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- return m_defaultKey->getLongValue();
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-void SAL_CALL NestedKeyImpl::setLongValue( sal_Int32 value )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- m_localKey->setLongValue(value);
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey());
- m_localKey = rootKey->createKey(m_name);
- m_localKey->setLongValue(value);
- m_state = m_pRegistry->m_state++;
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-Sequence< sal_Int32 > SAL_CALL NestedKeyImpl::getLongListValue( )
- throw(InvalidRegistryException, InvalidValueException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- return m_localKey->getLongListValue();
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- return m_defaultKey->getLongListValue();
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-void SAL_CALL NestedKeyImpl::setLongListValue( const Sequence< sal_Int32 >& seqValue )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- m_localKey->setLongListValue(seqValue);
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey());
- m_localKey = rootKey->createKey(m_name);
- m_localKey->setLongListValue(seqValue);
- m_state = m_pRegistry->m_state++;
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-OUString SAL_CALL NestedKeyImpl::getAsciiValue( )
- throw(InvalidRegistryException, InvalidValueException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- return m_localKey->getAsciiValue();
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- return m_defaultKey->getAsciiValue();
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-void SAL_CALL NestedKeyImpl::setAsciiValue( const OUString& value )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- m_localKey->setAsciiValue(value);
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey());
- m_localKey = rootKey->createKey(m_name);
- m_localKey->setAsciiValue(value);
- m_state = m_pRegistry->m_state++;
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-Sequence< OUString > SAL_CALL NestedKeyImpl::getAsciiListValue( )
- throw(InvalidRegistryException, InvalidValueException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- return m_localKey->getAsciiListValue();
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- return m_defaultKey->getAsciiListValue();
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-void SAL_CALL NestedKeyImpl::setAsciiListValue( const Sequence< OUString >& seqValue )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- m_localKey->setAsciiListValue(seqValue);
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey());
- m_localKey = rootKey->createKey(m_name);
- m_localKey->setAsciiListValue(seqValue);
- m_state = m_pRegistry->m_state++;
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-OUString SAL_CALL NestedKeyImpl::getStringValue( )
- throw(InvalidRegistryException, InvalidValueException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- return m_localKey->getStringValue();
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- return m_defaultKey->getStringValue();
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-void SAL_CALL NestedKeyImpl::setStringValue( const OUString& value )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- m_localKey->setStringValue(value);
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey());
- m_localKey = rootKey->createKey(m_name);
- m_localKey->setStringValue(value);
- m_state = m_pRegistry->m_state++;
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-Sequence< OUString > SAL_CALL NestedKeyImpl::getStringListValue( )
- throw(InvalidRegistryException, InvalidValueException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- return m_localKey->getStringListValue();
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- return m_defaultKey->getStringListValue();
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-void SAL_CALL NestedKeyImpl::setStringListValue( const Sequence< OUString >& seqValue )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- m_localKey->setStringListValue(seqValue);
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey());
- m_localKey = rootKey->createKey(m_name);
- m_localKey->setStringListValue(seqValue);
- m_state = m_pRegistry->m_state++;
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-Sequence< sal_Int8 > SAL_CALL NestedKeyImpl::getBinaryValue( )
- throw(InvalidRegistryException, InvalidValueException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- return m_localKey->getBinaryValue();
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- return m_defaultKey->getBinaryValue();
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-void SAL_CALL NestedKeyImpl::setBinaryValue( const Sequence< sal_Int8 >& value )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- computeChanges();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- m_localKey->setBinaryValue(value);
- } else
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey());
- m_localKey = rootKey->createKey(m_name);
- m_localKey->setBinaryValue(value);
- m_state = m_pRegistry->m_state++;
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-Reference< XRegistryKey > SAL_CALL NestedKeyImpl::openKey( const OUString& aKeyName )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- if ( !m_localKey.is() && !m_defaultKey.is() )
- {
- throw InvalidRegistryException();
- }
-
- OUString resolvedName = computeName(aKeyName);
-
- if ( resolvedName.getLength() == 0 )
- throw InvalidRegistryException();
-
- Reference<XRegistryKey> localKey, defaultKey;
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- localKey = m_pRegistry->m_localReg->getRootKey()->openKey(resolvedName);
- }
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- defaultKey = m_pRegistry->m_defaultReg->getRootKey()->openKey(resolvedName);
- }
-
- if ( localKey.is() || defaultKey.is() )
- {
- return ((XRegistryKey*)new NestedKeyImpl(m_pRegistry, localKey, defaultKey));
- } else
- {
- return Reference<XRegistryKey>();
- }
-}
-
-//*************************************************************************
-Reference< XRegistryKey > SAL_CALL NestedKeyImpl::createKey( const OUString& aKeyName )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- if ( (!m_localKey.is() && !m_defaultKey.is()) ||
- (m_localKey.is() && m_localKey->isReadOnly()) )
- {
- throw InvalidRegistryException();
- }
-
- OUString resolvedName = computeName(aKeyName);
-
- if ( resolvedName.getLength() == 0 )
- throw InvalidRegistryException();
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- Reference<XRegistryKey> localKey, defaultKey;
-
- localKey = m_pRegistry->m_localReg->getRootKey()->createKey(resolvedName);
- if ( localKey.is() )
- {
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- defaultKey = m_pRegistry->m_defaultReg->getRootKey()->openKey(resolvedName);
- }
-
- m_state = m_pRegistry->m_state++;
-
- return ((XRegistryKey*)new NestedKeyImpl(m_pRegistry, localKey, defaultKey));
- }
- } else
- {
- Reference<XRegistryKey> localKey, defaultKey;
-
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey());
- m_localKey = rootKey->createKey(m_name);
-
- localKey = m_pRegistry->m_localReg->getRootKey()->createKey(resolvedName);
-
- if ( localKey.is() )
- {
- defaultKey = m_pRegistry->m_defaultReg->getRootKey()->openKey(resolvedName);
-
- m_state = m_pRegistry->m_state++;
-
- return ((XRegistryKey*)new NestedKeyImpl(m_pRegistry, localKey, defaultKey));
- }
- }
- }
-
- return Reference<XRegistryKey>();
-}
-
-//*************************************************************************
-void SAL_CALL NestedKeyImpl::closeKey( )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- m_localKey->closeKey();
- }
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- m_defaultKey->closeKey();
- }
-}
-
-//*************************************************************************
-void SAL_CALL NestedKeyImpl::deleteKey( const OUString& rKeyName )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- if ( m_localKey.is() && m_localKey->isValid() &&
- !m_localKey->isReadOnly() )
- {
- OUString resolvedName = computeName(rKeyName);
-
- if ( resolvedName.getLength() == 0 )
- {
- throw InvalidRegistryException();
- }
-
- m_pRegistry->m_localReg->getRootKey()->deleteKey(resolvedName);
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-Sequence< Reference< XRegistryKey > > SAL_CALL NestedKeyImpl::openKeys( )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- if ( !m_localKey.is() && !m_defaultKey.is() )
- {
- throw InvalidRegistryException();
- }
-
- Sequence<OUString> localSeq, defaultSeq;
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- localSeq = m_localKey->getKeyNames();
- }
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- defaultSeq = m_defaultKey->getKeyNames();
- }
-
- sal_uInt32 local = localSeq.getLength();
- sal_uInt32 def = defaultSeq.getLength();
- sal_uInt32 len = 0;
-
- sal_uInt32 i, j;
- for (i=0; i < local; i++)
- {
- for (j=0 ; j < def; j++)
- {
- if ( localSeq.getConstArray()[i] == defaultSeq.getConstArray()[j] )
- {
- len++;
- break;
- }
- }
- }
-
- Sequence< Reference<XRegistryKey> > retSeq(local + def - len);
- sal_Bool insert = sal_True;
- OUString name;
- sal_Int32 lastIndex;
-
- for (i=0; i < local; i++)
- {
- name = localSeq.getConstArray()[i];
- lastIndex = name.lastIndexOf('/');
- name = name.copy(lastIndex);
- retSeq.getArray()[i] =
- (XRegistryKey*)new NestedKeyImpl(name, this);
- }
-
- sal_uInt32 k = local;
- for (i=0; i < def; i++)
- {
- insert = sal_True;
-
- for (j=0 ; j < local; j++)
- {
- if ( retSeq.getConstArray()[j]->getKeyName()
- == defaultSeq.getConstArray()[i] )
- {
- insert = sal_False;
- break;
- }
- }
-
- if ( insert )
- {
- name = defaultSeq.getConstArray()[i];
- lastIndex = name.lastIndexOf('/');
- name = name.copy(lastIndex);
- retSeq.getArray()[k++] =
- (XRegistryKey*)new NestedKeyImpl(name, this);
- }
- }
-
- return retSeq;
-}
-
-//*************************************************************************
-Sequence< OUString > SAL_CALL NestedKeyImpl::getKeyNames( )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- if ( !m_localKey.is() && !m_defaultKey.is() )
- {
- throw InvalidRegistryException();
- }
-
- Sequence<OUString> localSeq, defaultSeq;
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- localSeq = m_localKey->getKeyNames();
- }
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- defaultSeq = m_defaultKey->getKeyNames();
- }
-
- sal_uInt32 local = localSeq.getLength();
- sal_uInt32 def = defaultSeq.getLength();
- sal_uInt32 len = 0;
-
- sal_uInt32 i, j;
- for (i=0; i < local; i++)
- {
- for (j=0 ; j < def; j++)
- {
- if ( localSeq.getConstArray()[i] == defaultSeq.getConstArray()[j] )
- {
- len++;
- break;
- }
- }
- }
-
- Sequence<OUString> retSeq(local + def - len);
- sal_Bool insert = sal_True;
-
- for (i=0; i < local; i++)
- {
- retSeq.getArray()[i] = localSeq.getConstArray()[i];
- }
-
- sal_uInt32 k = local;
- for (i=0; i < def; i++)
- {
- insert = sal_True;
-
- for (j=0 ; j < local; j++)
- {
- if ( retSeq.getConstArray()[j] == defaultSeq.getConstArray()[i] )
- {
- insert = sal_False;
- break;
- }
- }
-
- if ( insert )
- retSeq.getArray()[k++] = defaultSeq.getConstArray()[i];
- }
-
- return retSeq;
-}
-
-//*************************************************************************
-sal_Bool SAL_CALL NestedKeyImpl::createLink( const OUString& aLinkName, const OUString& aLinkTarget )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
-
- sal_Bool isCreated = sal_False;
- if ( !m_localKey.is() && !m_defaultKey.is() )
- {
- throw InvalidRegistryException();
- }
-
- OUString linkName;
- OUString resolvedName;
- sal_Int32 lastIndex = aLinkName.lastIndexOf('/');
-
- if ( lastIndex > 0 )
- {
- linkName = aLinkName.copy(0, lastIndex);
-
- resolvedName = computeName(linkName);
-
- if ( resolvedName.getLength() == 0 )
- {
- throw InvalidRegistryException();
- }
-
- resolvedName = resolvedName + aLinkName.copy(lastIndex);
- } else
- {
- if ( lastIndex == 0 )
- resolvedName = m_name + aLinkName;
- else
- resolvedName = m_name + OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + aLinkName;
- }
-
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- isCreated = m_pRegistry->m_localReg->getRootKey()->createLink(resolvedName, aLinkTarget);
- } else
- {
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- {
- Reference<XRegistryKey> rootKey(m_pRegistry->m_localReg->getRootKey());
- m_localKey = rootKey->createKey(m_name);
-
- isCreated = m_pRegistry->m_localReg->getRootKey()->createLink(resolvedName, aLinkTarget);
- }
- }
-
- if ( isCreated )
- m_state = m_pRegistry->m_state++;
-
- return isCreated;
-}
-
-//*************************************************************************
-void SAL_CALL NestedKeyImpl::deleteLink( const OUString& rLinkName )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- if ( !m_localKey.is() && !m_defaultKey.is() )
- {
- throw InvalidRegistryException();
- }
-
- OUString linkName;
- OUString resolvedName;
- sal_Int32 lastIndex = rLinkName.lastIndexOf('/');
-
- if ( lastIndex > 0 )
- {
- linkName = rLinkName.copy(0, lastIndex);
-
- resolvedName = computeName(linkName);
-
- if ( resolvedName.getLength() == 0 )
- {
- throw InvalidRegistryException();
- }
-
- resolvedName = resolvedName + rLinkName.copy(lastIndex);
- } else
- {
- if ( lastIndex == 0 )
- resolvedName = m_name + rLinkName;
- else
- resolvedName = m_name + OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + rLinkName;
- }
-
- if ( m_localKey.is() && m_localKey->isValid() &&
- !m_localKey->isReadOnly() )
- {
- m_pRegistry->m_localReg->getRootKey()->deleteLink(resolvedName);
- } else
- {
- throw InvalidRegistryException();
- }
-}
-
-//*************************************************************************
-OUString SAL_CALL NestedKeyImpl::getLinkTarget( const OUString& rLinkName )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- if ( !m_localKey.is() && !m_defaultKey.is() )
- {
- throw InvalidRegistryException();
- }
-
- OUString linkName;
- OUString resolvedName;
- sal_Int32 lastIndex = rLinkName.lastIndexOf('/');
-
- if ( lastIndex > 0 )
- {
- linkName = rLinkName.copy(0, lastIndex);
-
- resolvedName = computeName(linkName);
-
- if ( resolvedName.getLength() == 0 )
- {
- throw InvalidRegistryException();
- }
-
- resolvedName = resolvedName + rLinkName.copy(lastIndex);
- } else
- {
- if ( lastIndex == 0 )
- resolvedName = m_name + rLinkName;
- else
- resolvedName = m_name + OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + rLinkName;
- }
-
- OUString linkTarget;
- if ( m_localKey.is() && m_localKey->isValid() )
- {
- try
- {
- linkTarget = m_pRegistry->m_localReg->getRootKey()->getLinkTarget(resolvedName);
- return linkTarget;
- }
- catch(InvalidRegistryException& )
- {
- }
- }
-
- if ( m_defaultKey.is() && m_defaultKey->isValid() )
- linkTarget = m_pRegistry->m_defaultReg->getRootKey()->getLinkTarget(resolvedName);
-
- return linkTarget;
-}
-
-//*************************************************************************
-OUString SAL_CALL NestedKeyImpl::getResolvedName( const OUString& aKeyName )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_pRegistry->m_mutex );
- if ( !m_localKey.is() && !m_defaultKey.is() )
- {
- throw InvalidRegistryException();
- }
-
- OUString resolvedName = computeName(aKeyName);
-
- if ( resolvedName.getLength() == 0 )
- {
- throw InvalidRegistryException();
- }
-
- return resolvedName;
-}
-
-//*************************************************************************
-//
-// DefaultRegistry Implementation
-//
-//*************************************************************************
-NestedRegistryImpl::NestedRegistryImpl( )
- : m_state(0)
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-}
-
-//*************************************************************************
-NestedRegistryImpl::~NestedRegistryImpl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-
-class RegistryEnumueration : public WeakImplHelper1< XEnumeration >
-{
-public:
- RegistryEnumueration(
- const Reference< XSimpleRegistry > &r1,
- const Reference< XSimpleRegistry > &r2 )
- : m_xReg1( r1 ) , m_xReg2( r2 )
- {}
-public:
- virtual sal_Bool SAL_CALL hasMoreElements( ) throw (RuntimeException);
- virtual Any SAL_CALL nextElement( ) throw (NoSuchElementException, WrappedTargetException, RuntimeException);
-
-private:
- Reference< XSimpleRegistry > m_xReg1;
- Reference< XSimpleRegistry > m_xReg2;
-};
-
-sal_Bool RegistryEnumueration::hasMoreElements( ) throw (RuntimeException)
-{
- return m_xReg1.is() || m_xReg2.is();
-}
-
-Any RegistryEnumueration::nextElement( )
- throw (NoSuchElementException, WrappedTargetException, RuntimeException)
-{
- Any a;
- if( m_xReg1.is() )
- {
- a <<= m_xReg1;
- m_xReg1.clear();
- }
- else if( m_xReg2.is() )
- {
- a <<= m_xReg2;
- m_xReg2.clear();
- }
- else
- {
- throw NoSuchElementException( OUString( RTL_CONSTASCII_USTRINGPARAM(
- "NestedRegistry: no nextElement() !" ) ),Reference< XInterface > () );
- }
- return a;
-}
-
-
-Reference< XEnumeration > NestedRegistryImpl::createEnumeration( ) throw (RuntimeException)
-{
- MutexGuard guard( m_mutex );
- return new RegistryEnumueration( m_localReg, m_defaultReg );
-}
-
-Type NestedRegistryImpl::getElementType( ) throw (RuntimeException)
-{
- return getCppuType( &m_localReg );
-}
-
-sal_Bool SAL_CALL NestedRegistryImpl::hasElements( ) throw (RuntimeException)
-{
- MutexGuard guard( m_mutex );
- return m_localReg.is() || m_defaultReg.is();
-}
-
-
-
-//*************************************************************************
-OUString SAL_CALL NestedRegistryImpl::getImplementationName( )
- throw(RuntimeException)
-{
- return stoc_bootstrap::defreg_getImplementationName();
-}
-
-//*************************************************************************
-sal_Bool SAL_CALL NestedRegistryImpl::supportsService( const OUString& ServiceName )
- throw(RuntimeException)
-{
- Guard< Mutex > aGuard( m_mutex );
- Sequence< OUString > aSNL = getSupportedServiceNames();
- const OUString * pArray = aSNL.getArray();
- for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
- if( pArray[i] == ServiceName )
- return sal_True;
- return sal_False;
-}
-
-//*************************************************************************
-Sequence<OUString> SAL_CALL NestedRegistryImpl::getSupportedServiceNames( )
- throw(RuntimeException)
-{
- return stoc_bootstrap::defreg_getSupportedServiceNames();
-}
-
-//*************************************************************************
-void SAL_CALL NestedRegistryImpl::initialize( const Sequence< Any >& aArguments )
- throw( Exception, RuntimeException )
-{
- Guard< Mutex > aGuard( m_mutex );
- if ( (aArguments.getLength() == 2) &&
- (aArguments[0].getValueType().getTypeClass() == TypeClass_INTERFACE) &&
- (aArguments[1].getValueType().getTypeClass() == TypeClass_INTERFACE) )
- {
- aArguments[0] >>= m_localReg;
- aArguments[1] >>= m_defaultReg;
- if ( m_localReg == m_defaultReg )
- m_defaultReg = Reference< XSimpleRegistry >();
- }
-}
-
-//*************************************************************************
-OUString SAL_CALL NestedRegistryImpl::getURL() throw(RuntimeException)
-{
- Guard< Mutex > aGuard( m_mutex );
- try
- {
- if ( m_localReg.is() && m_localReg->isValid() )
- return m_localReg->getURL();
- }
- catch(InvalidRegistryException& )
- {
- }
-
- return OUString();
-}
-
-//*************************************************************************
-void SAL_CALL NestedRegistryImpl::open( const OUString&, sal_Bool, sal_Bool )
- throw(InvalidRegistryException, RuntimeException)
-{
- throw InvalidRegistryException(
- OUString(RTL_CONSTASCII_USTRINGPARAM("the 'open' method is not specified for a nested registry")),
- Reference< XInterface >() );
-}
-
-//*************************************************************************
-sal_Bool SAL_CALL NestedRegistryImpl::isValid( ) throw(RuntimeException)
-{
- Guard< Mutex > aGuard( m_mutex );
- try
- {
- if ( (m_localReg.is() && m_localReg->isValid()) ||
- (m_defaultReg.is() && m_defaultReg->isValid()) )
- return sal_True;
- }
- catch(InvalidRegistryException& )
- {
- }
-
- return sal_False;
-}
-
-//*************************************************************************
-void SAL_CALL NestedRegistryImpl::close( )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_mutex );
- if ( m_localReg.is() && m_localReg->isValid() )
- {
- m_localReg->close();
- }
- if ( m_defaultReg.is() && m_defaultReg->isValid() )
- {
- m_defaultReg->close();
- }
-/*
- throw InvalidRegistryException(
- OUString(RTL_CONSTASCII_USTRINGPARAM("the 'close' method is not specified for a nested registry")),
- Reference< XInterface >() );
-*/
-}
-
-//*************************************************************************
-void SAL_CALL NestedRegistryImpl::destroy( )
- throw(InvalidRegistryException, RuntimeException)
-{
- throw InvalidRegistryException(
- OUString(RTL_CONSTASCII_USTRINGPARAM("the 'destroy' method is not specified for a nested registry")),
- Reference< XInterface >() );
-}
-
-//*************************************************************************
-Reference< XRegistryKey > SAL_CALL NestedRegistryImpl::getRootKey( )
- throw(InvalidRegistryException, RuntimeException)
-{
- Reference<XRegistryKey> tmpKey;
-
- Guard< Mutex > aGuard( m_mutex );
- if ( m_localReg.is() && m_localReg->isValid() )
- {
- Reference<XRegistryKey> localKey, defaultKey;
-
- localKey = m_localReg->getRootKey();
-
- if ( localKey.is() )
- {
- if ( m_defaultReg.is() && m_defaultReg->isValid() )
- {
- defaultKey = m_defaultReg->getRootKey();
- }
-
- return ((XRegistryKey*)new NestedKeyImpl(this, localKey, defaultKey));
- }
- } else
- {
- throw InvalidRegistryException();
- }
-
- return Reference<XRegistryKey>();
-}
-
-//*************************************************************************
-sal_Bool SAL_CALL NestedRegistryImpl::isReadOnly( )
- throw(InvalidRegistryException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_mutex );
- try
- {
- if ( m_localReg.is() && m_localReg->isValid() )
- return m_localReg->isReadOnly();
- }
- catch(InvalidRegistryException& )
- {
- }
-
- return sal_False;
-}
-
-//*************************************************************************
-void SAL_CALL NestedRegistryImpl::mergeKey( const OUString& aKeyName, const OUString& aUrl )
- throw(InvalidRegistryException, MergeConflictException, RuntimeException)
-{
- Guard< Mutex > aGuard( m_mutex );
- if ( m_localReg.is() && m_localReg->isValid() )
- {
- m_localReg->mergeKey(aKeyName, aUrl);
-
- m_state++;
- }
-}
-} // namespace stco_defreg
-
-namespace stoc_bootstrap
-{
-//*************************************************************************
-Reference<XInterface> SAL_CALL NestedRegistry_CreateInstance( const Reference<XComponentContext>& )
- throw(Exception)
-{
- Reference<XInterface> xRet;
- XSimpleRegistry *pRegistry = (XSimpleRegistry*) new stoc_defreg::NestedRegistryImpl;
-
- if (pRegistry)
- {
- xRet = Reference<XInterface>::query(pRegistry);
- }
-
- return xRet;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/defaultregistry/makefile.mk b/stoc/source/defaultregistry/makefile.mk
deleted file mode 100644
index 17f25999d..000000000
--- a/stoc/source/defaultregistry/makefile.mk
+++ /dev/null
@@ -1,46 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME= stoc
-TARGET = nestedreg
-ENABLE_EXCEPTIONS=TRUE
-UNOUCROUT= $(OUT)$/inc$/bootstrap
-BOOTSTRAP_SERVICE=TRUE
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-
-# ------------------------------------------------------------------
-
-SLOFILES= \
- $(SLO)$/defaultregistry.obj
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
diff --git a/stoc/source/implementationregistration/implreg.cxx b/stoc/source/implementationregistration/implreg.cxx
deleted file mode 100644
index 485b9c293..000000000
--- a/stoc/source/implementationregistration/implreg.cxx
+++ /dev/null
@@ -1,1893 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <stdlib.h>
-#include <string.h>
-#include <list>
-
-#include <unistd.h>
-#include <cppuhelper/queryinterface.hxx>
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/weak.hxx>
-#include <cppuhelper/servicefactory.hxx>
-#include <cppuhelper/implbase3.hxx>
-#include <cppuhelper/implementationentry.hxx>
-
-#include <uno/mapping.hxx>
-#include <osl/thread.h>
-
-#include <rtl/ustring.hxx>
-#include <rtl/ustrbuf.hxx>
-#include <rtl/strbuf.hxx>
-#include <osl/process.h>
-
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/loader/XImplementationLoader.hpp>
-#include <com/sun/star/registry/XImplementationRegistration2.hpp>
-#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
-#include <com/sun/star/reflection/XServiceTypeDescription.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include "com/sun/star/uno/RuntimeException.hpp"
-
-#include "mergekeys.hxx"
-
-#if defined(SAL_W32)
-#include <io.h>
-#endif
-
-#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
-
-
-using namespace com::sun::star;
-using namespace com::sun::star::uno;
-using namespace com::sun::star::loader;
-using namespace com::sun::star::beans;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::registry;
-using namespace cppu;
-using namespace osl;
-
-using ::rtl::OUString;
-using ::rtl::OUStringBuffer;
-#define IMPLNAME "com.sun.star.comp.stoc.ImplementationRegistration"
-#define SERVICENAME "com.sun.star.registry.ImplementationRegistration"
-namespace stoc_impreg
-{
-struct StringPool
-{
- OUString sImplementationName;
- OUString sServiceName;
- OUString TMP;
- OUString TEMP;
- OUString slash_UNO_slash_REGISTRY_LINKS;
- OUString slash_IMPLEMENTATIONS;
- OUString slash_UNO;
- OUString slash_UNO_slash_SERVICES;
- OUString slash_UNO_slash_SINGLETONS;
- OUString slash_SERVICES;
- OUString slash_UNO_slash_LOCATION;
- OUString slash_UNO_slash_ACTIVATOR;
- OUString colon_old;
- OUString com_sun_star_registry_SimpleRegistry;
- OUString Registry;
- StringPool()
- : sImplementationName( RTL_CONSTASCII_USTRINGPARAM( IMPLNAME ) )
- , sServiceName( RTL_CONSTASCII_USTRINGPARAM( SERVICENAME ) )
- , TMP( RTL_CONSTASCII_USTRINGPARAM( "TMP" ) )
- , TEMP( RTL_CONSTASCII_USTRINGPARAM( "TEMP" ) )
- , slash_UNO_slash_REGISTRY_LINKS( RTL_CONSTASCII_USTRINGPARAM("/UNO/REGISTRY_LINKS"))
- , slash_IMPLEMENTATIONS( RTL_CONSTASCII_USTRINGPARAM( "/IMPLEMENTATIONS" ) )
- , slash_UNO( RTL_CONSTASCII_USTRINGPARAM("/UNO"))
- , slash_UNO_slash_SERVICES( RTL_CONSTASCII_USTRINGPARAM("/UNO/SERVICES"))
- , slash_UNO_slash_SINGLETONS( RTL_CONSTASCII_USTRINGPARAM("/UNO/SINGLETONS"))
- , slash_SERVICES( RTL_CONSTASCII_USTRINGPARAM("/SERVICES/") )
- , slash_UNO_slash_LOCATION( RTL_CONSTASCII_USTRINGPARAM("/UNO/LOCATION") )
- , slash_UNO_slash_ACTIVATOR( RTL_CONSTASCII_USTRINGPARAM("/UNO/ACTIVATOR") )
- , colon_old( RTL_CONSTASCII_USTRINGPARAM(":old"))
- , com_sun_star_registry_SimpleRegistry(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.registry.SimpleRegistry") )
- , Registry( RTL_CONSTASCII_USTRINGPARAM("Registry") )
- {}
-private:
- StringPool( const StringPool & );
-};
-
-const StringPool &spool()
-{
- static StringPool *pPool = 0;
- if( ! pPool )
- {
- MutexGuard guard( Mutex::getGlobalMutex() );
- if( ! pPool )
- {
- static StringPool pool;
- pPool = &pool;
- }
- }
- return *pPool;
-}
-}
-
-extern rtl_StandardModuleCount g_moduleCount;
-
-namespace stoc_bootstrap
-{
-Sequence< OUString > impreg_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] = stoc_impreg::spool().sServiceName;
- return seqNames;
-}
-
-OUString impreg_getImplementationName()
-{
- return stoc_impreg::spool().sImplementationName;
-}
-}
-
-namespace stoc_impreg
-{
-//*************************************************************************
-// static deleteAllLinkReferences()
-//
-static void deleteAllLinkReferences(const Reference < XSimpleRegistry >& xReg,
- const Reference < XRegistryKey >& xSource)
- // throw ( InvalidRegistryException, RuntimeException )
-{
- Reference < XRegistryKey > xKey = xSource->openKey(
- spool().slash_UNO_slash_REGISTRY_LINKS );
-
- if (xKey.is() && (xKey->getValueType() == RegistryValueType_ASCIILIST))
- {
- Sequence<OUString> linkNames = xKey->getAsciiListValue();
-
- if (linkNames.getLength())
- {
- const OUString* pLinkNames = linkNames.getConstArray();
-
- OUString aLinkName;
- OUString aLinkParent;
- Reference < XRegistryKey > xLinkParent;
- const sal_Unicode* pTmpName = NULL;
- const sal_Unicode* pShortName = NULL;
- sal_Int32 sEnd = 0;
-
- for (sal_Int32 i = 0; i < linkNames.getLength(); i++)
- {
- aLinkName = pLinkNames[i];
-
- pTmpName = aLinkName.getStr();
-
- if (pTmpName[0] != L'/')
- continue;
-
- sal_Int32 nIndex = rtl_ustr_indexOfChar( pTmpName, '%' );
- if ( nIndex == -1 )
- pShortName = 0;
- else
- pShortName = pTmpName+nIndex;
-
- while (pShortName && pShortName[1] == L'%')
- {
- nIndex = rtl_ustr_indexOfChar( pShortName+2, '%' );
- if ( nIndex == -1 )
- pShortName = 0;
- else
- pShortName += nIndex+2;
- }
-
- if (pShortName)
- {
- aLinkName = aLinkName.copy(0, pShortName - pTmpName);
- }
-
- xReg->getRootKey()->deleteLink(aLinkName);
-
- sEnd = rtl_ustr_lastIndexOfChar( aLinkName.getStr(), '/' );
-
- aLinkParent = aLinkName.copy(0, sEnd);
-
- while(aLinkParent.getLength())
- {
- xLinkParent = xReg->getRootKey()->openKey(aLinkParent);
-
- if (xLinkParent.is() && (xLinkParent->getKeyNames().getLength() == 0))
- {
- aLinkName = aLinkParent;
-
- xReg->getRootKey()->deleteKey(aLinkParent);
-
- sEnd = rtl_ustr_lastIndexOfChar( aLinkName.getStr(), '/' );
-
- aLinkParent = aLinkName.copy(0, sEnd);
- } else
- {
- break;
- }
- }
- }
- }
- }
-}
-
-//*************************************************************************
-// static prepareLink
-//
-static void prepareLink( const Reference < XSimpleRegistry > & xDest,
- const Reference < XRegistryKey > & xSource,
- const OUString& link)
- // throw ( InvalidRegistryException, RuntimeException )
-{
- OUString linkRefName = xSource->getKeyName();
- OUString linkName(link);
- sal_Bool isRelativ = sal_False;
-
- const sal_Unicode* pTmpName = link.getStr();
- const sal_Unicode* pShortName;
- sal_Int32 nIndex = rtl_ustr_indexOfChar( pTmpName, '%' );
- if ( nIndex == -1 )
- pShortName = 0;
- else
- pShortName = pTmpName+nIndex;
-
- if (pTmpName[0] != L'/')
- isRelativ = sal_True;
-
- while (pShortName && pShortName[1] == L'%')
- {
- nIndex = rtl_ustr_indexOfChar( pShortName+2, '%' );
- if ( nIndex == -1 )
- pShortName = 0;
- else
- pShortName += nIndex+2;
- }
-
- if (pShortName)
- {
- linkRefName = linkRefName + link.copy(pShortName - pTmpName + 1);
- linkName = link.copy(0, pShortName - pTmpName);
- }
-
- if (isRelativ)
- xSource->createLink(linkName, linkRefName);
- else
- xDest->getRootKey()->createLink(linkName, linkRefName);
-}
-
-//*************************************************************************
-// static searchImplForLink
-//
-static OUString searchImplForLink(
- const Reference < XRegistryKey > & xRootKey,
- const OUString& linkName,
- const OUString& implName )
- // throw ( InvalidRegistryException, RuntimeException )
-{
- const StringPool & pool = spool();
- Reference < XRegistryKey > xKey = xRootKey->openKey( pool.slash_IMPLEMENTATIONS );
- if (xKey.is())
- {
- Sequence< Reference < XRegistryKey > > subKeys( xKey->openKeys() );
- const Reference < XRegistryKey > * pSubKeys = subKeys.getConstArray();
- OUString key_name( pool.slash_UNO + linkName );
-
- for (sal_Int32 i = 0; i < subKeys.getLength(); i++)
- {
- try
- {
- Reference < XRegistryKey > xImplKey( pSubKeys[i] );
- if (xImplKey->getKeyType( key_name ) == RegistryKeyType_LINK)
- {
- OUString oldImplName = xImplKey->getKeyName().copy(strlen("/IMPLEMENTATIONS/"));
- if (implName != oldImplName)
- {
- return oldImplName;
- }
- }
- }
- catch(InvalidRegistryException&)
- {
- }
- }
- }
-
- return OUString();
-}
-
-//*************************************************************************
-// static searchLinkTargetForImpl
-//
-static OUString searchLinkTargetForImpl(const Reference < XRegistryKey >& xRootKey,
- const OUString& linkName,
- const OUString& implName)
- // throw ( InvalidRegistryException, RuntimeException )
-{
- OUString ret;
-
-// try
-// {
- const StringPool & pool = spool();
- Reference < XRegistryKey > xKey = xRootKey->openKey( pool.slash_IMPLEMENTATIONS );
-
- if (xKey.is())
- {
- Sequence< Reference < XRegistryKey > > subKeys = xKey->openKeys();
-
- const Reference < XRegistryKey >* pSubKeys = subKeys.getConstArray();
- Reference < XRegistryKey > xImplKey;
-
- for (sal_Int32 i = 0; i < subKeys.getLength(); i++)
- {
- xImplKey = pSubKeys[i];
-
- OUString tmpImplName = xImplKey->getKeyName().copy(strlen("/IMPLEMENTATIONS/"));
- OUString qualifiedLinkName( pool.slash_UNO );
- qualifiedLinkName += linkName;
- if (tmpImplName == implName &&
- xImplKey->getKeyType( qualifiedLinkName ) == RegistryKeyType_LINK)
- {
- return xImplKey->getLinkTarget( qualifiedLinkName );
- }
- }
- }
-// }
-// catch(InvalidRegistryException&)
-// {
-// }
-
- return ret;
-}
-
-//*************************************************************************
-// static createUniqueSubEntry
-//
-static void createUniqueSubEntry(const Reference < XRegistryKey > & xSuperKey,
- const OUString& value)
- // throw ( InvalidRegistryException, RuntimeException )
-{
- if (xSuperKey.is())
- {
-// try
-// {
- if (xSuperKey->getValueType() == RegistryValueType_ASCIILIST)
- {
- sal_Int32 length = 0;
- sal_Bool bReady = sal_False;
-
- Sequence<OUString> implEntries = xSuperKey->getAsciiListValue();
- length = implEntries.getLength();
-
- for (sal_Int32 i = 0; !bReady && (i < length); i++)
- {
- bReady = (implEntries.getConstArray()[i] == value);
- }
-
- if (bReady)
- {
- Sequence<OUString> implEntriesNew(length);
- implEntriesNew.getArray()[0] = value;
-
- for (sal_Int32 i=0, j=1; i < length; i++)
- {
- if (implEntries.getConstArray()[i] != value)
- implEntriesNew.getArray()[j++] = implEntries.getConstArray()[i];
- }
- xSuperKey->setAsciiListValue(implEntriesNew);
- } else
- {
- Sequence<OUString> implEntriesNew(length+1);
- implEntriesNew.getArray()[0] = value;
-
- for (sal_Int32 i = 0; i < length; i++)
- {
- implEntriesNew.getArray()[i+1] = implEntries.getConstArray()[i];
- }
- xSuperKey->setAsciiListValue(implEntriesNew);
- }
- } else
- {
- Sequence<OUString> implEntriesNew(1);
-
- implEntriesNew.getArray()[0] = value;
-
- xSuperKey->setAsciiListValue(implEntriesNew);
- }
-// }
-// catch(InvalidRegistryException&)
-// {
-// }
- }
-}
-
-//*************************************************************************
-// static deleteSubEntry
-//
-static sal_Bool deleteSubEntry(const Reference < XRegistryKey >& xSuperKey, const OUString& value)
- // throw ( InvalidRegistryException, RuntimeException )
-{
- if (xSuperKey->getValueType() == RegistryValueType_ASCIILIST)
- {
- Sequence<OUString> implEntries = xSuperKey->getAsciiListValue();
- sal_Int32 length = implEntries.getLength();
- sal_Int32 equals = 0;
- sal_Bool hasNoImplementations = sal_False;
-
- for (sal_Int32 i = 0; i < length; i++)
- {
- if (implEntries.getConstArray()[i] == value)
- equals++;
- }
-
- if (equals == length)
- {
- hasNoImplementations = sal_True;
- } else
- {
- Sequence<OUString> implEntriesNew(length - equals);
-
- sal_Int32 j = 0;
- for (sal_Int32 i = 0; i < length; i++)
- {
- if (implEntries.getConstArray()[i] != value)
- {
- implEntriesNew.getArray()[j++] = implEntries.getConstArray()[i];
- }
- }
- xSuperKey->setAsciiListValue(implEntriesNew);
- }
-
- if (hasNoImplementations)
- {
- return sal_True;
- }
- }
- return sal_False;
-}
-
-//*************************************************************************
-// static prepareUserLink
-//
-static void prepareUserLink(const Reference < XSimpleRegistry >& xDest,
- const OUString& linkName,
- const OUString& linkTarget,
- const OUString& implName)
-{
- Reference < XRegistryKey > xRootKey;
-
- xRootKey = xDest->getRootKey();
-
- if (xRootKey->getKeyType(linkName) == RegistryKeyType_LINK)
- {
- OUString oldImplName(searchImplForLink(xRootKey, linkName, implName));
-
- if (oldImplName.getLength())
- {
- createUniqueSubEntry(xDest->getRootKey()->createKey(
- linkName + spool().colon_old ), oldImplName);
- }
- }
-
- if (xRootKey->isValid())
- xRootKey->createLink(linkName, linkTarget);
-}
-
-//*************************************************************************
-// static deleteUserLink
-//
-static void deletePathIfPossible(const Reference < XRegistryKey >& xRootKey,
- const OUString& path)
-{
- try
- {
- Sequence<OUString> keyNames(xRootKey->openKey(path)->getKeyNames());
-
- if (keyNames.getLength() == 0 &&
- xRootKey->openKey(path)->getValueType() == RegistryValueType_NOT_DEFINED)
- {
- xRootKey->deleteKey(path);
-
- OUString tmpPath(path);
- OUString newPath = tmpPath.copy(0, tmpPath.lastIndexOf('/'));
-
- if (newPath.getLength() > 1)
- deletePathIfPossible(xRootKey, newPath);
- }
- }
- catch(InvalidRegistryException&)
- {
- }
-}
-
-
-//*************************************************************************
-// static deleteUserLink
-//
-static void deleteUserLink(const Reference < XRegistryKey >& xRootKey,
- const OUString& linkName,
- const OUString& linkTarget,
- const OUString& implName)
- // throw ( InvalidRegistryException, RuntimeException )
-{
- sal_Bool bClean = sal_False;
-
- if (xRootKey->getKeyType(linkName) == RegistryKeyType_LINK)
- {
- OUString tmpTarget = xRootKey->getLinkTarget(linkName);
-
- if (tmpTarget == linkTarget)
- {
- xRootKey->deleteLink(linkName);
- }
- }
-
- Reference < XRegistryKey > xOldKey = xRootKey->openKey(
- linkName + spool().colon_old );
- if (xOldKey.is())
- {
- sal_Bool hasNoImplementations = sal_False;
-
- if (xOldKey->getValueType() == RegistryValueType_ASCIILIST)
- {
- Sequence<OUString> implEntries = xOldKey->getAsciiListValue();
- sal_Int32 length = implEntries.getLength();
- sal_Int32 equals = 0;
-
- for (sal_Int32 i = 0; i < length; i++)
- {
- if (implEntries.getConstArray()[i] == implName)
- equals++;
- }
-
- if (equals == length)
- {
- hasNoImplementations = sal_True;
- } else
- {
- OUString oldImpl;
-
- if (length > equals + 1)
- {
- Sequence<OUString> implEntriesNew(length - equals - 1);
-
- sal_Int32 j = 0;
- sal_Bool first = sal_True;
- for (sal_Int32 i = 0; i < length; i++)
- {
- if (implEntries.getConstArray()[i] != implName)
- {
- if (first)
- {
- oldImpl = implEntries.getConstArray()[i];
- first = sal_False;
- } else
- {
- implEntriesNew.getArray()[j++] = implEntries.getConstArray()[i];
- }
- }
- }
-
- xOldKey->setAsciiListValue(implEntriesNew);
- } else
- {
- oldImpl = implEntries.getConstArray()[0];
- rtl::OUString path(xOldKey->getKeyName());
- xOldKey->closeKey();
- xRootKey->deleteKey(path);
- }
-
- OUString oldTarget = searchLinkTargetForImpl(xRootKey, linkName, oldImpl);
- if (oldTarget.getLength())
- {
- xRootKey->createLink(linkName, oldTarget);
- }
- }
-
- if (hasNoImplementations)
- {
- bClean = sal_True;
- hasNoImplementations = sal_False;
- rtl::OUString path(xOldKey->getKeyName());
- xOldKey->closeKey();
- xRootKey->deleteKey(path);
- }
- }
- } else
- {
- bClean = sal_True;
- }
-
- if (bClean)
- {
- OUString tmpName(linkName);
- OUString path = tmpName.copy(0, tmpName.lastIndexOf('/'));
- deletePathIfPossible(xRootKey, path);
- }
-}
-
-//*************************************************************************
-// static prepareUserKeys
-//
-static void prepareUserKeys(const Reference < XSimpleRegistry >& xDest,
- const Reference < XRegistryKey >& xUnoKey,
- const Reference < XRegistryKey >& xKey,
- const OUString& implName,
- sal_Bool bRegister)
-{
- sal_Bool hasSubKeys = sal_False;
-
- Sequence<OUString> keyNames = xKey->getKeyNames();
-
- OUString relativKey;
- if (keyNames.getLength())
- relativKey = keyNames.getConstArray()[0].copy(xKey->getKeyName().getLength()+1);
-
- if (keyNames.getLength() == 1 &&
- xKey->getKeyType(relativKey) == RegistryKeyType_LINK)
- {
- hasSubKeys = sal_True;
-
- OUString linkTarget = xKey->getLinkTarget(relativKey);
- OUString linkName(xKey->getKeyName().copy(xUnoKey->getKeyName().getLength()));
-
- linkName = linkName + OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + relativKey;
-
- if (bRegister)
- {
- prepareUserLink(xDest, linkName, linkTarget, implName);
- } else
- {
- deleteUserLink(xDest->getRootKey(), linkName, linkTarget, implName);
- }
- } else
- {
- Sequence< Reference < XRegistryKey> > subKeys = xKey->openKeys();
-
- if (subKeys.getLength())
- {
- hasSubKeys = sal_True;
- const Reference < XRegistryKey > * pSubKeys = subKeys.getConstArray();
-
- for (sal_Int32 i = 0; i < subKeys.getLength(); i++)
- {
- prepareUserKeys(xDest, xUnoKey, pSubKeys[i], implName, bRegister);
- }
- }
- }
-
- if (! hasSubKeys)
- {
- OUString keyName(xKey->getKeyName().copy(xUnoKey->getKeyName().getLength()));
-
- Reference < XRegistryKey > xRootKey = xDest->getRootKey();
- if (bRegister)
- {
- createUniqueSubEntry(xRootKey->createKey(keyName), implName);
- }
- else
- {
- Reference< XRegistryKey > rKey = xRootKey->openKey(keyName);
- if( rKey.is() )
- {
- deleteSubEntry(rKey, implName);
- xRootKey->deleteKey(keyName);
- }
-
- OUString path = keyName.copy(0, keyName.lastIndexOf('/'));
- if( path.getLength() )
- {
- deletePathIfPossible(xRootKey, path);
- }
- }
- }
-}
-
-//*************************************************************************
-// static deleteAllImplementations
-//
-static void deleteAllImplementations( const Reference < XSimpleRegistry >& xReg,
- const Reference < XRegistryKey >& xSource,
- const OUString& locationUrl,
- std::list<OUString> & implNames)
- // throw (InvalidRegistryException, RuntimeException)
-{
- Sequence < Reference < XRegistryKey > > subKeys = xSource->openKeys();
-
- if (subKeys.getLength() > 0)
- {
- const Reference < XRegistryKey> * pSubKeys = subKeys.getConstArray();
- Reference < XRegistryKey > xImplKey;
- sal_Bool hasLocationUrl = sal_False;
-
- const StringPool &pool = spool();
- for (sal_Int32 i = 0; i < subKeys.getLength(); i++)
- {
- xImplKey = pSubKeys[i];
- Reference < XRegistryKey > xKey = xImplKey->openKey(
- pool.slash_UNO_slash_LOCATION );
-
- if (xKey.is() && (xKey->getValueType() == RegistryValueType_ASCII))
- {
- if (xKey->getAsciiValue() == locationUrl)
- {
- hasLocationUrl = sal_True;
-
- OUString implName(xImplKey->getKeyName().getStr() + 1);
- sal_Int32 firstDot = implName.indexOf('/');
-
- if (firstDot >= 0)
- implName = implName.copy(firstDot + 1);
-
- implNames.push_back(implName);
-
- deleteAllLinkReferences(xReg, xImplKey);
-
- xKey = xImplKey->openKey( pool.slash_UNO );
- if (xKey.is())
- {
- Sequence< Reference < XRegistryKey > > subKeys2 = xKey->openKeys();
-
- if (subKeys2.getLength())
- {
- const Reference < XRegistryKey > * pSubKeys2 = subKeys2.getConstArray();
-
- for (sal_Int32 j = 0; j < subKeys2.getLength(); j++)
- {
- if (pSubKeys2[j]->getKeyName() != (xImplKey->getKeyName() + pool.slash_UNO_slash_SERVICES ) &&
- pSubKeys2[j]->getKeyName() != (xImplKey->getKeyName() + pool.slash_UNO_slash_REGISTRY_LINKS ) &&
- pSubKeys2[j]->getKeyName() != (xImplKey->getKeyName() + pool.slash_UNO_slash_ACTIVATOR ) &&
- pSubKeys2[j]->getKeyName() != (xImplKey->getKeyName() + pool.slash_UNO_slash_SINGLETONS ) &&
- pSubKeys2[j]->getKeyName() != (xImplKey->getKeyName() + pool.slash_UNO_slash_LOCATION) )
- {
- prepareUserKeys(xReg, xKey, pSubKeys2[j], implName, sal_False);
- }
- }
- }
- }
- }
- }
-
- if (hasLocationUrl)
- {
- hasLocationUrl = sal_False;
- rtl::OUString path(xImplKey->getKeyName());
- xImplKey->closeKey();
- xReg->getRootKey()->deleteKey(path);
- }
- }
-
- subKeys = xSource->openKeys();
- if (subKeys.getLength() == 0)
- {
- rtl::OUString path(xSource->getKeyName());
- xSource->closeKey();
- xReg->getRootKey()->deleteKey(path);
- }
- } else
- {
- rtl::OUString path(xSource->getKeyName());
- xSource->closeKey();
- xReg->getRootKey()->deleteKey(path);
- }
-}
-
-//==================================================================================================
-static void delete_all_singleton_entries(
- Reference < registry::XRegistryKey > const & xSingletons_section,
- ::std::list< OUString > const & impl_names )
- // throw (InvalidRegistryException, RuntimeException)
-{
- Sequence< Reference< registry::XRegistryKey > > singletons( xSingletons_section->openKeys() );
- Reference< registry::XRegistryKey > const * subkeys = singletons.getConstArray();
- for ( sal_Int32 nPos = singletons.getLength(); nPos--; )
- {
- Reference< registry::XRegistryKey > const & xSingleton = subkeys[ nPos ];
- Reference< registry::XRegistryKey > xRegisteredImplNames(
- xSingleton->openKey( OUSTR("REGISTERED_BY") ) );
- if (xRegisteredImplNames.is() && xRegisteredImplNames->isValid())
- {
- Sequence< OUString > registered_implnames;
- try
- {
- registered_implnames = xRegisteredImplNames->getAsciiListValue();
- }
- catch (registry::InvalidValueException &)
- {
- }
- OUString const * p = registered_implnames.getConstArray();
- sal_Int32 nOrigRegLength = registered_implnames.getLength();
- sal_Int32 nNewLength = nOrigRegLength;
- for ( sal_Int32 n = nOrigRegLength; n--; )
- {
- OUString const & registered_implname = p[ n ];
-
- ::std::list< OUString >::const_iterator iPos( impl_names.begin() );
- ::std::list< OUString >::const_iterator const iEnd( impl_names.end() );
- for ( ; iPos != iEnd; ++iPos )
- {
- if (iPos->equals( registered_implname ))
- {
- registered_implnames[ n ] = p[ nNewLength -1 ];
- --nNewLength;
- }
- }
- }
-
- if (nNewLength != nOrigRegLength)
- {
- if (0 == nNewLength)
- {
- // remove whole entry
- xRegisteredImplNames->closeKey();
- xSingleton->deleteKey( OUSTR("REGISTERED_BY") );
- // registry key cannot provide its relative name, only absolute :(
- OUString abs( xSingleton->getKeyName() );
- xSingletons_section->deleteKey( abs.copy( abs.lastIndexOf( '/' ) +1 ) );
- }
- else
- {
- registered_implnames.realloc( nNewLength );
- xRegisteredImplNames->setAsciiListValue( registered_implnames );
- }
- }
- }
- }
-}
-
-//*************************************************************************
-// static deleteAllServiceEntries
-//
-static void deleteAllServiceEntries( const Reference < XSimpleRegistry >& xReg,
- const Reference < XRegistryKey >& xSource,
- const OUString& implName)
- // throw ( InvalidRegistryException, RuntimeException )
-{
- Sequence< Reference < XRegistryKey > > subKeys = xSource->openKeys();
-
- if (subKeys.getLength() > 0)
- {
- const Reference < XRegistryKey > * pSubKeys = subKeys.getConstArray();
- Reference < XRegistryKey > xServiceKey;
- sal_Bool hasNoImplementations = sal_False;
-
- for (sal_Int32 i = 0; i < subKeys.getLength(); i++)
- {
- xServiceKey = pSubKeys[i];
-
- if (xServiceKey->getValueType() == RegistryValueType_ASCIILIST)
- {
- Sequence<OUString> implEntries = xServiceKey->getAsciiListValue();
- sal_Int32 length = implEntries.getLength();
- sal_Int32 equals = 0;
-
- for (sal_Int32 j = 0; j < length; j++)
- {
- if (implEntries.getConstArray()[j] == implName)
- equals++;
- }
-
- if (equals == length)
- {
- hasNoImplementations = sal_True;
- } else
- {
- if (equals > 0)
- {
- Sequence<OUString> implEntriesNew(length-equals);
-
- sal_Int32 j = 0;
- for (sal_Int32 k = 0; k < length; k++)
- {
- if (implEntries.getConstArray()[k] != implName)
- {
- implEntriesNew.getArray()[j++] = implEntries.getConstArray()[k];
- }
- }
-
- xServiceKey->setAsciiListValue(implEntriesNew);
- }
- }
- }
-
- if (hasNoImplementations)
- {
- hasNoImplementations = sal_False;
- rtl::OUString path(xServiceKey->getKeyName());
- xServiceKey->closeKey();
- xReg->getRootKey()->deleteKey(path);
- }
- }
-
- subKeys = xSource->openKeys();
- if (subKeys.getLength() == 0)
- {
- rtl::OUString path(xSource->getKeyName());
- xSource->closeKey();
- xReg->getRootKey()->deleteKey(path);
- }
- } else
- {
- rtl::OUString path(xSource->getKeyName());
- xSource->closeKey();
- xReg->getRootKey()->deleteKey(path);
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-static bool is_supported_service(
- OUString const & service_name,
- Reference< reflection::XServiceTypeDescription > const & xService_td )
-{
- if (xService_td->getName().equals( service_name ))
- return true;
- Sequence< Reference< reflection::XServiceTypeDescription > > seq(
- xService_td->getMandatoryServices() );
- Reference< reflection::XServiceTypeDescription > const * p = seq.getConstArray();
- for ( sal_Int32 nPos = seq.getLength(); nPos--; )
- {
- if (is_supported_service( service_name, p[ nPos ] ))
- return true;
- }
- return false;
-}
-
-//--------------------------------------------------------------------------------------------------
-static void insert_singletons(
- Reference< registry::XSimpleRegistry > const & xDest,
- Reference< registry::XRegistryKey > const & xImplKey,
- Reference< XComponentContext > const & xContext )
- // throw( registry::InvalidRegistryException, registry::CannotRegisterImplementationException, RuntimeException )
-{
- // singletons
- Reference< registry::XRegistryKey > xKey( xImplKey->openKey( OUSTR("UNO/SINGLETONS") ) );
- if (xKey.is() && xKey->isValid())
- {
- OUString implname( xImplKey->getKeyName().copy( sizeof ("/IMPLEMENTATIONS/") -1 ) );
- // singleton entries
- Sequence< Reference< registry::XRegistryKey > > xSingletons_section( xKey->openKeys() );
- Reference< registry::XRegistryKey > const * p = xSingletons_section.getConstArray();
- for ( sal_Int32 nPos = xSingletons_section.getLength(); nPos--; )
- {
- Reference< registry::XRegistryKey > const & xSingleton = p[ nPos ];
- OUString singleton_name(
- xSingleton->getKeyName().copy(
- implname.getLength() + sizeof ("/IMPLEMENTATIONS//UNO/SINGLETONS/") -1 ) );
- OUString service_name( xSingleton->getStringValue() );
-
- OUString keyname( OUSTR("/SINGLETONS/") + singleton_name );
- Reference< registry::XRegistryKey > xKey2( xDest->getRootKey()->openKey( keyname ) );
- if (xKey2.is() && xKey2->isValid())
- {
- try
- {
- OUString existing_name( xKey2->getStringValue() );
- if (! existing_name.equals( service_name ))
- {
- Reference< container::XHierarchicalNameAccess > xTDMgr;
- OUString the_tdmgr =
- OUSTR("/singletons/com.sun.star.reflection.theTypeDescriptionManager");
- xContext->getValueByName( the_tdmgr ) >>= xTDMgr;
- if (! xTDMgr.is())
- {
- throw RuntimeException(
- OUSTR("cannot get singleton ") + the_tdmgr,
- Reference< XInterface >() );
- }
- try
- {
- Reference< reflection::XServiceTypeDescription > xExistingService_td;
- xTDMgr->getByHierarchicalName( existing_name ) >>= xExistingService_td;
- if (! xExistingService_td.is())
- {
- throw RuntimeException(
- OUSTR("cannot get service type description: ") + existing_name,
- Reference< XInterface >() );
- }
-
- // everything's fine if existing service entry supports the one
- // to be registered
- if (! is_supported_service( service_name, xExistingService_td ))
- {
- OUStringBuffer buf( 64 );
- buf.appendAscii(
- RTL_CONSTASCII_STRINGPARAM("existing singleton service (") );
- buf.append( singleton_name );
- buf.append( (sal_Unicode)'=' );
- buf.append( existing_name );
- buf.appendAscii(
- RTL_CONSTASCII_STRINGPARAM(") does not support given one: ") );
- buf.append( service_name );
- throw registry::CannotRegisterImplementationException(
- buf.makeStringAndClear(), Reference< XInterface >() );
- }
- }
- catch (container::NoSuchElementException & exc)
- {
- throw RuntimeException(
- OUSTR("cannot get service type description: ") + exc.Message,
- Reference< XInterface >() );
- }
- }
- }
- catch (registry::InvalidValueException &)
- {
- // repair
- xKey2->setStringValue( service_name );
- }
- }
- else
- {
- // insert singleton entry
- xKey2 = xDest->getRootKey()->createKey( keyname );
- xKey2->setStringValue( service_name );
- }
-
- Reference< registry::XRegistryKey > xRegisteredImplNames(
- xKey2->openKey( OUSTR("REGISTERED_BY") ) );
- if (!xRegisteredImplNames.is() || !xRegisteredImplNames->isValid())
- {
- // create
- xRegisteredImplNames = xKey2->createKey( OUSTR("REGISTERED_BY") );
- }
-
- Sequence< OUString > implnames;
- try
- {
- implnames = xRegisteredImplNames->getAsciiListValue();
- }
- catch (registry::InvalidValueException &)
- {
- }
- // check implname is already in
- sal_Int32 nPos_implnames = implnames.getLength();
- OUString const * pImplnames = implnames.getConstArray();
- while (nPos_implnames--)
- {
- if (implname.equals( pImplnames[ nPos_implnames ] ))
- break;
- }
- if (nPos_implnames < 0)
- {
- // append and write back
- implnames.realloc( implnames.getLength() +1 );
- implnames[ implnames.getLength() -1 ] = implname;
- xRegisteredImplNames->setAsciiListValue( implnames );
- }
- }
- }
-}
-
-
-//*************************************************************************
-// static prepareRegistry
-//
-static void prepareRegistry(
- const Reference < XSimpleRegistry >& xDest,
- const Reference < XRegistryKey >& xSource,
- const OUString& implementationLoaderUrl,
- const OUString& locationUrl,
- Reference< XComponentContext > const & xContext )
- // throw ( InvalidRegistryException, CannotRegisterImplementationException, RuntimeException )
-{
- Sequence< Reference < XRegistryKey > > subKeys = xSource->openKeys();
-
- if (!subKeys.getLength())
- {
- throw InvalidRegistryException(
- OUString( RTL_CONSTASCII_USTRINGPARAM( "prepareRegistry(): source registry is empty" ) ),
- Reference< XInterface > () );
- }
-
- const StringPool & pool = spool();
-
- const Reference < XRegistryKey >* pSubKeys = subKeys.getConstArray();
- Reference < XRegistryKey > xImplKey;
-
- for (sal_Int32 i = 0; i < subKeys.getLength(); i++)
- {
- xImplKey = pSubKeys[i];
-
- Reference < XRegistryKey > xKey = xImplKey->openKey(
- pool.slash_UNO_slash_SERVICES );
-
- if (xKey.is())
- {
- // update entries in SERVICES section
- Sequence< Reference < XRegistryKey > > serviceKeys = xKey->openKeys();
- const Reference < XRegistryKey > * pServiceKeys = serviceKeys.getConstArray();
-
- OUString implName = OUString(xImplKey->getKeyName().getStr() + 1);
- sal_Int32 firstDot = implName.indexOf('/');
-
- if (firstDot >= 0)
- implName = implName.copy(firstDot + 1);
-
- sal_Int32 offset = xKey->getKeyName().getLength() + 1;
-
- for (sal_Int32 j = 0; j < serviceKeys.getLength(); j++)
- {
- OUString serviceName = pServiceKeys[j]->getKeyName().copy(offset);
-
- createUniqueSubEntry(
- xDest->getRootKey()->createKey(
- pool.slash_SERVICES + serviceName ),
- implName);
- }
-
- xKey = xImplKey->openKey( pool.slash_UNO );
- if (xKey.is())
- {
- Sequence< Reference < XRegistryKey > > subKeys2 = xKey->openKeys();
-
- if (subKeys2.getLength())
- {
- const Reference < XRegistryKey > * pSubKeys2 = subKeys2.getConstArray();
-
- for (sal_Int32 j = 0; j < subKeys2.getLength(); j++)
- {
- if (pSubKeys2[j]->getKeyName() != (xImplKey->getKeyName() + pool.slash_UNO_slash_SERVICES) &&
- pSubKeys2[j]->getKeyName() != (xImplKey->getKeyName() + pool.slash_UNO_slash_REGISTRY_LINKS ) &&
- pSubKeys2[j]->getKeyName() != (xImplKey->getKeyName() + pool.slash_UNO_slash_SINGLETONS ))
- {
- prepareUserKeys(xDest, xKey, pSubKeys2[j], implName, sal_True);
- }
- }
- }
- }
- }
-
- // update LOCATION entry
- xKey = xImplKey->createKey( pool.slash_UNO_slash_LOCATION );
-
- if (xKey.is())
- {
- xKey->setAsciiValue(locationUrl);
- }
-
- // update ACTIVATOR entry
- xKey = xImplKey->createKey( pool.slash_UNO_slash_ACTIVATOR );
-
- if (xKey.is())
- {
- xKey->setAsciiValue(implementationLoaderUrl);
- }
-
- xKey = xImplKey->openKey( pool.slash_UNO_slash_SERVICES );
-
- if (xKey.is() && (xKey->getValueType() == RegistryValueType_ASCIILIST))
- {
- // update link entries in REGISTRY_LINKS section
- Sequence<OUString> linkNames = xKey->getAsciiListValue();
-
- if (linkNames.getLength())
- {
- const OUString* pLinkNames = linkNames.getConstArray();
-
- for (sal_Int32 j = 0; j < linkNames.getLength(); j++)
- {
- prepareLink(xDest, xImplKey, pLinkNames[j]);
- }
- }
- }
-
- insert_singletons( xDest, xImplKey, xContext );
- }
-}
-
-
-static void findImplementations( const Reference < XRegistryKey > & xSource,
- std::list <OUString>& implNames)
-{
- sal_Bool isImplKey = sal_False;
-
- try
- {
- Reference < XRegistryKey > xKey = xSource->openKey(
- spool().slash_UNO_slash_SERVICES );
-
- if (xKey.is() && (xKey->getKeyNames().getLength() > 0))
- {
- isImplKey = sal_True;
-
- OUString implName = OUString(xSource->getKeyName().getStr() + 1).replace('/', '.').getStr();
- sal_Int32 firstDot = implName.indexOf('.');
-
- if (firstDot >= 0)
- implName = implName.copy(firstDot + 1);
-
- implNames.push_back(implName);
- }
- }
- catch(InvalidRegistryException&)
- {
- }
-
- if (isImplKey) return;
-
- try
- {
- Sequence< Reference < XRegistryKey > > subKeys = xSource->openKeys();
-
- if (subKeys.getLength() > 0)
- {
- const Reference < XRegistryKey >* pSubKeys = subKeys.getConstArray();
-
- for (sal_Int32 i = 0; i < subKeys.getLength(); i++)
- {
- findImplementations(pSubKeys[i], implNames);
- }
-
- }
- }
- catch(InvalidRegistryException&)
- {
- }
-}
-
-
-class ImplementationRegistration
- : public WeakImplHelper3< XImplementationRegistration2, XServiceInfo, XInitialization >
-{
-public:
- ImplementationRegistration( const Reference < XComponentContext > & rSMgr );
- ~ImplementationRegistration();
-
- // XServiceInfo
- OUString SAL_CALL getImplementationName() throw(RuntimeException);
- sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw(RuntimeException);
- Sequence< OUString > SAL_CALL getSupportedServiceNames(void) throw(RuntimeException);
-
- // XImplementationRegistration
- virtual void SAL_CALL registerImplementation(
- const OUString& implementationLoader,
- const OUString& location,
- const Reference < XSimpleRegistry > & xReg)
- throw( CannotRegisterImplementationException, RuntimeException );
-
- virtual sal_Bool SAL_CALL revokeImplementation(
- const OUString& location,
- const Reference < XSimpleRegistry >& xReg)
- throw( RuntimeException );
-
- virtual Sequence< OUString > SAL_CALL getImplementations(
- const OUString& implementationLoader,
- const OUString& location)
- throw( RuntimeException );
- virtual Sequence< OUString > SAL_CALL checkInstantiation(
- const OUString& implementationName)
- throw( RuntimeException );
-
- // XImplementationRegistration2
- virtual void SAL_CALL registerImplementationWithLocation(
- const OUString& implementationLoader,
- const OUString& location,
- const OUString& registeredLocation,
- const Reference < XSimpleRegistry > & xReg)
- throw( CannotRegisterImplementationException, RuntimeException );
-
- // XInitialization
- virtual void SAL_CALL initialize(
- const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments )
- throw( ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
-
-private: // helper methods
- void prepareRegister(
- const OUString& implementationLoader,
- const OUString& location,
- const OUString& registeredLocation,
- const Reference < XSimpleRegistry > & xReg);
- // throw( CannotRegisterImplementationException, RuntimeException )
-
- static void doRegister( const Reference < XMultiComponentFactory >& xSMgr,
- const Reference < XComponentContext > &xCtx,
- const Reference < XImplementationLoader >& xAct,
- const Reference < XSimpleRegistry >& xDest,
- const OUString& implementationLoaderUrl,
- const OUString& locationUrl,
- const OUString& registeredLocationUrl);
- /* throw ( InvalidRegistryException,
- MergeConflictException,
- CannotRegisterImplementationException, RuntimeException ) */
-
- static void doRevoke( const Reference < XSimpleRegistry >& xDest,
- const OUString& locationUrl );
- // throw( InvalidRegistryException, RuntimeException )
- Reference< XSimpleRegistry > getRegistryFromServiceManager();
-
- static Reference< XSimpleRegistry > createTemporarySimpleRegistry(
- const Reference< XMultiComponentFactory > &rSMgr,
- const Reference < XComponentContext > & rCtx );
-
-private: // members
- Reference < XMultiComponentFactory > m_xSMgr;
- Reference < XComponentContext > m_xCtx;
-};
-
-//*************************************************************************
-// ImplementationRegistration()
-//
-ImplementationRegistration::ImplementationRegistration( const Reference < XComponentContext > & xCtx )
- : m_xSMgr( xCtx->getServiceManager() )
- , m_xCtx( xCtx )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-}
-
-//*************************************************************************
-// ~ImplementationRegistration()
-//
-ImplementationRegistration::~ImplementationRegistration()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-
-// XServiceInfo
-OUString ImplementationRegistration::getImplementationName() throw(RuntimeException)
-{
- return stoc_bootstrap::impreg_getImplementationName();
-}
-
-// XServiceInfo
-sal_Bool ImplementationRegistration::supportsService(const OUString& ServiceName) throw(RuntimeException)
-{
- Sequence< OUString > aSNL = getSupportedServiceNames();
- const OUString * pArray = aSNL.getConstArray();
- for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
- if( pArray[i] == ServiceName )
- return sal_True;
- return sal_False;
-}
-
-// XServiceInfo
-Sequence< OUString > ImplementationRegistration::getSupportedServiceNames(void) throw(RuntimeException)
-{
- return stoc_bootstrap::impreg_getSupportedServiceNames();
-}
-
-Reference< XSimpleRegistry > ImplementationRegistration::getRegistryFromServiceManager()
-{
- Reference < XPropertySet > xPropSet( m_xSMgr, UNO_QUERY );
- Reference < XSimpleRegistry > xRegistry;
-
- if( xPropSet.is() ) {
-
- try { // the implementation does not support XIntrospectionAccess !
-
- Any aAny = xPropSet->getPropertyValue( spool().Registry );
-
- if( aAny.getValueType().getTypeClass() == TypeClass_INTERFACE ) {
- aAny >>= xRegistry;
- }
- }
- catch( UnknownPropertyException & ) {
- // empty reference is error signal !
- }
- }
-
- return xRegistry;
-}
-
-
-//************************************************************************
-// XInitialization
-//
-void ImplementationRegistration::initialize(
- const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArgs )
- throw( ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
-{
-
- if( aArgs.getLength() != 4 ) {
- OUStringBuffer buf;
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(
- "ImplementationRegistration::initialize() expects 4 parameters, got "));
- buf.append( (sal_Int32) aArgs.getLength() );
- throw IllegalArgumentException( buf.makeStringAndClear(),
- Reference<XInterface > (),
- 0 );
- }
-
- Reference< XImplementationLoader > rLoader;
- OUString loaderServiceName;
- OUString locationUrl;
- Reference< XSimpleRegistry > rReg;
-
- // 1st argument : An instance of an implementation loader
- if( aArgs.getConstArray()[0].getValueType().getTypeClass() == TypeClass_INTERFACE ) {
- aArgs.getConstArray()[0] >>= rLoader;
- }
- if( !rLoader.is()) {
- OUStringBuffer buf;
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(
- "ImplementationRegistration::initialize() invalid first parameter,"
- "expected " ) );
- buf.append( getCppuType( &rLoader ).getTypeName() );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM( ", got " ) );
- buf.append( aArgs.getConstArray()[0].getValueTypeName() );
- throw IllegalArgumentException( buf.makeStringAndClear(),
- Reference< XInterface > (),
- 0 );
- }
-
- // 2nd argument : The service name of the loader. This name is written into the registry
- if( aArgs.getConstArray()[1].getValueType().getTypeClass() == TypeClass_STRING ) {
- aArgs.getConstArray()[1] >>= loaderServiceName;
- }
- if( ! loaderServiceName.getLength() ) {
- OUStringBuffer buf;
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(
- "ImplementationRegistration::initialize() invalid second parameter,"
- "expected string, got " ) );
- buf.append( aArgs.getConstArray()[1].getValueTypeName() );
- throw IllegalArgumentException( buf.makeStringAndClear(),
- Reference< XInterface > (),
- 0 );
- }
-
- // 3rd argument : The file name of the dll, that contains the loader
- if( aArgs.getConstArray()[2].getValueType().getTypeClass() == TypeClass_STRING ) {
- aArgs.getConstArray()[2] >>= locationUrl;
- }
- if( ! locationUrl.getLength() ) {
- OUStringBuffer buf;
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(
- "ImplementationRegistration::initialize() invalid third parameter,"
- "expected string, got " ) );
- buf.append( aArgs.getConstArray()[2].getValueTypeName() );
- throw IllegalArgumentException( buf.makeStringAndClear(),
- Reference< XInterface > (),
- 0 );
- }
-
- // 4th argument : The registry, the service should be written to
- if( aArgs.getConstArray()[3].getValueType().getTypeClass() == TypeClass_INTERFACE ) {
- aArgs.getConstArray()[3] >>= rReg;
- }
-
- if( !rReg.is() ) {
- rReg = getRegistryFromServiceManager();
- if( !rReg.is() ) {
- OUStringBuffer buf;
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(
- "ImplementationRegistration::initialize() invalid fourth parameter,"
- "expected " ));
- buf.append( getCppuType( &rReg ).getTypeName() );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(", got " ) );
- buf.append( aArgs.getConstArray()[3].getValueTypeName() );
- throw IllegalArgumentException( buf.makeStringAndClear(),
- Reference< XInterface > (),
- 0 );
- }
- }
-
- doRegister(m_xSMgr, m_xCtx, rLoader , rReg, loaderServiceName , locationUrl, locationUrl);
-}
-
-
-
-//*************************************************************************
-// virtual function registerImplementationWithLocation of XImplementationRegistration2
-//
-void ImplementationRegistration::registerImplementationWithLocation(
- const OUString& implementationLoaderUrl,
- const OUString& locationUrl,
- const OUString& registeredLocationUrl,
- const Reference < XSimpleRegistry > & xReg)
- throw( CannotRegisterImplementationException, RuntimeException )
-{
- prepareRegister(
- implementationLoaderUrl, locationUrl, registeredLocationUrl, xReg);
-}
-
-// helper function
-void ImplementationRegistration::prepareRegister(
- const OUString& implementationLoaderUrl,
- const OUString& locationUrl,
- const OUString& registeredLocationUrl,
- const Reference < XSimpleRegistry > & xReg)
- // throw( CannotRegisterImplementationException, RuntimeException )
-{
- OUString implLoaderUrl(implementationLoaderUrl);
- OUString activatorName;
-
- if (implementationLoaderUrl.getLength() > 0)
- {
- OUString tmpActivator(implementationLoaderUrl);
- sal_Int32 nIndex = 0;
- activatorName = tmpActivator.getToken(0, ':', nIndex );
- } else
- {
- // check locationUrl to find out what kind of loader is needed
- // set iimplLoaderUrl
- }
-
- if( m_xSMgr.is() ) {
- try
- {
- Reference < XImplementationLoader > xAct(
- m_xSMgr->createInstanceWithContext(activatorName, m_xCtx) , UNO_QUERY );
- if (xAct.is())
- {
- Reference < XSimpleRegistry > xRegistry;
-
- if (xReg.is())
- {
- // registry supplied by user
- xRegistry = xReg;
- }
- else
- {
- xRegistry = getRegistryFromServiceManager();
- }
-
- if ( xRegistry.is())
- {
- doRegister(m_xSMgr, m_xCtx, xAct, xRegistry, implLoaderUrl,
- locationUrl, registeredLocationUrl);
- }
- }
- else
- {
- OUStringBuffer buf( 128 );
- buf.appendAscii( "ImplementationRegistration::registerImplementation() - The service " );
- buf.append( activatorName );
- buf.appendAscii( " cannot be instantiated\n" );
- throw CannotRegisterImplementationException(
- buf.makeStringAndClear(), Reference< XInterface > () );
- }
- }
- catch( CannotRegisterImplementationException & )
- {
- throw;
- }
- catch( InvalidRegistryException & e )
- {
- OUStringBuffer buf;
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(
- "ImplementationRegistration::registerImplementation() "
- "InvalidRegistryException during registration (" ));
- buf.append( e.Message );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM( ")" ) );
- throw CannotRegisterImplementationException(
- buf.makeStringAndClear(), Reference< XInterface > () );
- }
- catch( MergeConflictException & e )
- {
- OUStringBuffer buf;
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(
- "ImplementationRegistration::registerImplementation() "
- "MergeConflictException during registration (" ));
- buf.append( e.Message );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM( ")" ) );
- throw CannotRegisterImplementationException(
- buf.makeStringAndClear(), Reference< XInterface > () );
- }
- }
- else
- {
- throw CannotRegisterImplementationException(
- OUString(RTL_CONSTASCII_USTRINGPARAM(
- "ImplementationRegistration::registerImplementation() "
- "no componentcontext available to instantiate loader")),
- Reference< XInterface > () );
- }
-}
-
-//*************************************************************************
-// virtual function registerImplementation of XImplementationRegistration
-//
-void ImplementationRegistration::registerImplementation(
- const OUString& implementationLoaderUrl,
- const OUString& locationUrl,
- const Reference < XSimpleRegistry > & xReg)
- throw( CannotRegisterImplementationException, RuntimeException )
-{
- prepareRegister(implementationLoaderUrl, locationUrl, locationUrl, xReg);
-}
-
-
-//*************************************************************************
-// virtual function revokeImplementation of XImplementationRegistration
-//
-sal_Bool ImplementationRegistration::revokeImplementation(const OUString& location,
- const Reference < XSimpleRegistry >& xReg)
- throw ( RuntimeException )
-{
- sal_Bool ret = sal_False;
-
- Reference < XSimpleRegistry > xRegistry;
-
- if (xReg.is()) {
- xRegistry = xReg;
- }
- else {
- Reference < XPropertySet > xPropSet = Reference< XPropertySet >::query( m_xSMgr );
- if( xPropSet.is() ) {
- try {
- Any aAny = xPropSet->getPropertyValue( spool().Registry );
-
- if( aAny.getValueType().getTypeClass() == TypeClass_INTERFACE )
- {
- aAny >>= xRegistry;
- }
- }
- catch ( UnknownPropertyException & ) {
- }
- }
- }
-
- if (xRegistry.is())
- {
- try
- {
- doRevoke(xRegistry, location);
- ret = sal_True;
- }
- catch( InvalidRegistryException & )
- {
- // no way to transport the error, as no exception is specified and a runtime
- // exception is not appropriate.
- OSL_FAIL( "InvalidRegistryException during revokeImplementation" );
- }
- }
-
- return ret;
-}
-
-//*************************************************************************
-// virtual function getImplementations of XImplementationRegistration
-//
-Sequence< OUString > ImplementationRegistration::getImplementations(
- const OUString & implementationLoaderUrl,
- const OUString & locationUrl)
- throw ( RuntimeException )
-{
- OUString implLoaderUrl(implementationLoaderUrl);
- OUString activatorName;
-
- if (implementationLoaderUrl.getLength() > 0)
- {
- OUString tmpActivator(implementationLoaderUrl);
- sal_Int32 nIndex = 0;
- activatorName = tmpActivator.getToken(0, ':', nIndex );
- } else
- {
- // check locationUrl to find out what kind of loader is needed
- // set implLoaderUrl
- }
-
- if( m_xSMgr.is() ) {
-
- Reference < XImplementationLoader > xAct(
- m_xSMgr->createInstanceWithContext( activatorName, m_xCtx ), UNO_QUERY );
-
- if (xAct.is())
- {
-
- Reference < XSimpleRegistry > xReg =
- createTemporarySimpleRegistry( m_xSMgr, m_xCtx);
-
- if (xReg.is())
- {
- try
- {
- xReg->open(OUString() /* in mem */, sal_False, sal_True);
- Reference < XRegistryKey > xImpl;
-
- { // only necessary for deleting the temporary variable of rootkey
- xImpl = xReg->getRootKey()->createKey( spool().slash_IMPLEMENTATIONS );
- }
- if (xAct->writeRegistryInfo(xImpl, implementationLoaderUrl, locationUrl))
- {
- std::list <OUString> implNames;
-
- findImplementations(xImpl, implNames);
-
- if (!implNames.empty())
- {
- std::list<OUString>::const_iterator iter = implNames.begin();
-
- Sequence<OUString> seqImpl(implNames.size());
- OUString *pImplNames = seqImpl.getArray();
-
- sal_Int32 index = 0;
- while (iter != implNames.end())
- {
- pImplNames[index] = *iter;
- index++;
- ++iter;
- }
-
- xImpl->closeKey();
- return seqImpl;
- }
- }
-
- xImpl->closeKey();
- }
- catch(MergeConflictException&)
- {
- }
- catch(InvalidRegistryException&)
- {
- }
- }
- }
- }
-
- return Sequence<OUString>();
-}
-
-//*************************************************************************
-// virtual function checkInstantiation of XImplementationRegistration
-//
-Sequence< OUString > ImplementationRegistration::checkInstantiation(const OUString&)
- throw ( RuntimeException )
-{
- OSL_FAIL( "ImplementationRegistration::checkInstantiation not implemented" );
- return Sequence<OUString>();
-}
-
-//*************************************************************************
-// helper function doRegistration
-//
-
-void ImplementationRegistration::doRevoke(
- const Reference < XSimpleRegistry >& xDest,
- const OUString& locationUrl)
- // throw ( InvalidRegistryException, RuntimeException )
-{
- if( xDest.is() )
- {
- std::list<OUString> aNames;
-
- const StringPool &pool = spool();
- Reference < XRegistryKey > xRootKey( xDest->getRootKey() );
-
- Reference < XRegistryKey > xKey =
- xRootKey->openKey( pool.slash_IMPLEMENTATIONS );
- if (xKey.is() && xKey->isValid())
- {
- deleteAllImplementations(xDest, xKey, locationUrl, aNames);
- }
-
- xKey = xRootKey->openKey( pool.slash_SERVICES );
- if (xKey.is())
- {
- std::list<OUString>::const_iterator iter = aNames.begin();
-
- while (iter != aNames.end())
- {
- deleteAllServiceEntries(xDest, xKey, *iter);
- ++iter;
- }
- }
-
- xKey = xRootKey->openKey( OUSTR("/SINGLETONS") );
- if (xKey.is() && xKey->isValid())
- {
- delete_all_singleton_entries( xKey, aNames );
- }
-
- if (xRootKey.is())
- xRootKey->closeKey();
- if (xKey.is() && xKey->isValid() )
- xKey->closeKey();
- }
-}
-
-void ImplementationRegistration::doRegister(
- const Reference< XMultiComponentFactory > & xSMgr,
- const Reference< XComponentContext > &xCtx,
- const Reference < XImplementationLoader > & xAct,
- const Reference < XSimpleRegistry >& xDest,
- const OUString& implementationLoaderUrl,
- const OUString& locationUrl,
- const OUString& registeredLocationUrl)
- /* throw ( InvalidRegistryException,
- MergeConflictException,
- CannotRegisterImplementationException, RuntimeException ) */
-{
- Reference < XSimpleRegistry > xReg =
- createTemporarySimpleRegistry( xSMgr, xCtx );
- Reference < XRegistryKey > xSourceKey;
-
- if (xAct.is() && xReg.is() && xDest.is())
- {
- try
- {
- xReg->open(OUString() /* in mem */, sal_False, sal_True);
-
- { // only necessary for deleting the temporary variable of rootkey
- xSourceKey = xReg->getRootKey()->createKey( spool().slash_IMPLEMENTATIONS );
- }
-
- sal_Bool bSuccess =
- xAct->writeRegistryInfo(xSourceKey, implementationLoaderUrl, locationUrl);
- if ( bSuccess )
- {
- prepareRegistry(xDest, xSourceKey, implementationLoaderUrl, registeredLocationUrl, xCtx);
-
- xSourceKey->closeKey();
-
- xSourceKey = xReg->getRootKey();
- Reference < XRegistryKey > xDestKey = xDest->getRootKey();
- mergeKeys( xDestKey, xSourceKey );
- xDestKey->closeKey();
- xSourceKey->closeKey();
- }
- else
- {
- throw CannotRegisterImplementationException(
- OUString( RTL_CONSTASCII_USTRINGPARAM( "ImplementationRegistration::doRegistration() component registration signaled failure" ) ),
- Reference< XInterface > () );
- }
-
- // Cleanup Source registry.
- if ( xSourceKey->isValid() )
- xSourceKey->closeKey();
- }
- catch(CannotRegisterImplementationException&)
- {
- if ( xSourceKey->isValid() )
- xSourceKey->closeKey();
- // and throw again
- throw;
- }
- }
-}
-
-
-
-Reference< XSimpleRegistry > ImplementationRegistration::createTemporarySimpleRegistry(
- const Reference< XMultiComponentFactory > &rSMgr,
- const Reference < XComponentContext > & xCtx)
-{
-
- Reference < XSimpleRegistry > xReg(
- rSMgr->createInstanceWithContext(
- spool().com_sun_star_registry_SimpleRegistry, xCtx ),
- UNO_QUERY);
- OSL_ASSERT( xReg.is() );
- return xReg;
-}
-}
-
-namespace stoc_bootstrap
-{
-//*************************************************************************
-Reference<XInterface> SAL_CALL ImplementationRegistration_CreateInstance(
- const Reference<XComponentContext> & xCtx ) // throw(Exception)
-{
- return (XImplementationRegistration *)new stoc_impreg::ImplementationRegistration(xCtx);
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/implementationregistration/makefile.mk b/stoc/source/implementationregistration/makefile.mk
deleted file mode 100644
index 2de7fe91c..000000000
--- a/stoc/source/implementationregistration/makefile.mk
+++ /dev/null
@@ -1,47 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME= stoc
-TARGET = implreg
-ENABLE_EXCEPTIONS=TRUE
-BOOTSTRAP_SERVICE=TRUE
-UNOUCROUT= $(OUT)$/inc$/bootstrap
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-
-# ------------------------------------------------------------------
-
-SLOFILES= \
- $(SLO)$/mergekeys.obj \
- $(SLO)$/implreg.obj
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
diff --git a/stoc/source/implementationregistration/mergekeys.cxx b/stoc/source/implementationregistration/mergekeys.cxx
deleted file mode 100644
index 6c76e1b0e..000000000
--- a/stoc/source/implementationregistration/mergekeys.cxx
+++ /dev/null
@@ -1,189 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include <vector>
-
-#include <com/sun/star/registry/XRegistryKey.hpp>
-#include <com/sun/star/registry/MergeConflictException.hpp>
-
-#include "mergekeys.hxx"
-
-#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
-
-using namespace ::rtl;
-using namespace ::osl;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star;
-
-namespace stoc_impreg
-{
-
-struct Link
-{
- OUString m_name;
- OUString m_target;
-
- inline Link( OUString const & name, OUString const & target )
- : m_name( name )
- , m_target( target )
- {}
-};
-typedef ::std::vector< Link > t_links;
-
-//==================================================================================================
-static void mergeKeys(
- Reference< registry::XRegistryKey > const & xDest,
- Reference< registry::XRegistryKey > const & xSource,
- t_links & links )
- // throw( registry::InvalidRegistryException, registry::MergeConflictException, RuntimeException )
-{
- if (!xSource.is() || !xSource->isValid()) {
- throw registry::InvalidRegistryException(
- OUSTR("source key is null or invalid!"),
- Reference<XInterface>() );
- }
- if (!xDest.is() || !xDest->isValid()) {
- throw registry::InvalidRegistryException(
- OUSTR("destination key is null or invalid!"),
- Reference<XInterface>() );
- }
-
- // write value
- switch (xSource->getValueType())
- {
- case registry::RegistryValueType_NOT_DEFINED:
- break;
- case registry::RegistryValueType_LONG:
- xDest->setLongValue( xSource->getLongValue() );
- break;
- case registry::RegistryValueType_ASCII:
- xDest->setAsciiValue( xSource->getAsciiValue() );
- break;
- case registry::RegistryValueType_STRING:
- xDest->setStringValue( xSource->getStringValue() );
- break;
- case registry::RegistryValueType_BINARY:
- xDest->setBinaryValue( xSource->getBinaryValue() );
- break;
- case registry::RegistryValueType_LONGLIST:
- xDest->setLongListValue( xSource->getLongListValue() );
- break;
- case registry::RegistryValueType_ASCIILIST:
- xDest->setAsciiListValue( xSource->getAsciiListValue() );
- break;
- case registry::RegistryValueType_STRINGLIST:
- xDest->setStringListValue( xSource->getStringListValue() );
- break;
- default:
- OSL_ASSERT(false);
- break;
- }
-
- // sub keys
- Sequence< OUString > sourceKeys( xSource->getKeyNames() );
- OUString const * pSourceKeys = sourceKeys.getConstArray();
- for ( sal_Int32 nPos = sourceKeys.getLength(); nPos--; )
- {
- // key name
- OUString name( pSourceKeys[ nPos ] );
- sal_Int32 nSlash = name.lastIndexOf( '/' );
- if (nSlash >= 0)
- {
- name = name.copy( nSlash +1 );
- }
-
- if (xSource->getKeyType( name ) == registry::RegistryKeyType_KEY)
- {
- // try to open exisiting dest key or create new one
- Reference< registry::XRegistryKey > xDestKey( xDest->createKey( name ) );
- Reference< registry::XRegistryKey > xSourceKey( xSource->openKey( name ) );
- mergeKeys( xDestKey, xSourceKey, links );
- xSourceKey->closeKey();
- xDestKey->closeKey();
- }
- else // link
- {
- // remove existing key
- Reference< registry::XRegistryKey > xDestKey( xDest->openKey( name ) );
- if (xDestKey.is() && xDestKey->isValid()) // something to remove
- {
- xDestKey->closeKey();
- if (xDest->getKeyType( name ) == registry::RegistryKeyType_LINK)
- {
- xDest->deleteLink( name );
- }
- else
- {
- xDest->deleteKey( name );
- }
- }
-
- links.push_back( Link(
- pSourceKeys[ nPos ], // abs path
- xSource->getResolvedName( name ) // abs resolved name
- ) );
- }
- }
-}
-
-//==================================================================================================
-void mergeKeys(
- Reference< registry::XRegistryKey > const & xDest,
- Reference< registry::XRegistryKey > const & xSource )
- // throw( registry::InvalidRegistryException, registry::MergeConflictException, RuntimeException )
-{
- if (!xDest.is() || !xDest->isValid()) {
- throw registry::InvalidRegistryException(
- OUSTR("destination key is null or invalid!"),
- Reference<XInterface>() );
- }
- if (xDest->isReadOnly())
- {
- throw registry::InvalidRegistryException(
- OUString( RTL_CONSTASCII_USTRINGPARAM(
- "destination registry is read-only! cannot merge!") ),
- Reference< XInterface >() );
- }
-
- t_links links;
- links.reserve( 16 );
- mergeKeys( xDest, xSource, links );
-
- for ( size_t nPos = links.size(); nPos--; )
- {
- Link const & r = links[ nPos ];
- OSL_VERIFY( xDest->createLink( r.m_name, r.m_target ) );
- }
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/implementationregistration/mergekeys.hxx b/stoc/source/implementationregistration/mergekeys.hxx
deleted file mode 100644
index e99e9a79c..000000000
--- a/stoc/source/implementationregistration/mergekeys.hxx
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 INCLUDED_STOC_SOURCE_IMPLEMENTATIONREGISTRATION_MERGEKEYS_HXX
-#define INCLUDED_STOC_SOURCE_IMPLEMENTATIONREGISTRATION_MERGEKEYS_HXX
-
-#include "sal/config.h"
-
-#include "com/sun/star/uno/Reference.hxx"
-
-namespace com { namespace sun { namespace star { namespace registry {
- class XRegistryKey;
-} } } }
-
-namespace stoc_impreg {
-
-// throws ::com::sun::star::registry::InvalidRegistryException,
-// ::com::sun::star::registry::MergeConflictException,
-// ::com::sun::star::uno::RuntimeException:
-void mergeKeys(
- ::com::sun::star::uno::Reference< ::com::sun::star::registry::XRegistryKey >
- const & xDest,
- ::com::sun::star::uno::Reference< ::com::sun::star::registry::XRegistryKey >
- const & xSource);
-
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/inspect/insp.xml b/stoc/source/inspect/insp.xml
deleted file mode 100644
index 5bb64882e..000000000
--- a/stoc/source/inspect/insp.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name> introspection.uno </module-name>
- <component-description>
- <author> Juergen Schmidt </author>
- <name> com.sun.star.comp.stoc.Introspection </name>
- <description>
- This component implements XIntrospection. The method XIntrospection::inspect(any object)
- returns an XIntrospectionAccess that provides information about the methods, properties
- and listeners supported by the inspected object. Matching pairs of getName/setName()
- methods will also be offered as property "Name".
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> c++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.beans.Introspection </supported-service>
- <service-dependency> com.sun.star.reflection.CoreReflection </service-dependency>
- <type>com.sun.star.lang.DisposedException</type>
- <type> com.sun.star.beans.XIntrospection </type>
- <type> com.sun.star.beans.XIntrospectionAccess </type>
- <type> com.sun.star.beans.XPropertySet </type>
- <type> com.sun.star.beans.XFastPropertySet </type>
- <type> com.sun.star.beans.XMaterialHolder </type>
- <type> com.sun.star.beans.XExactName </type>
- <type> com.sun.star.beans.PropertyAttribute </type>
- <type> com.sun.star.beans.PropertyConcept </type>
- <type> com.sun.star.beans.MethodConcept </type>
- <type> com.sun.star.lang.XEventListener </type>
- <type> com.sun.star.lang.XInitialization </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XComponent </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.uno.DeploymentException </type>
- <type> com.sun.star.uno.XComponentContext </type>
- <type> com.sun.star.container.XEnumerationAccess </type>
- <type> com.sun.star.container.XNameContainer </type>
- <type> com.sun.star.container.XIndexContainer </type>
- <type> com.sun.star.reflection.XIdlReflection </type>
- <type> com.sun.star.reflection.XIdlClassProvider </type>
- <type> com.sun.star.reflection.XIdlClass </type>
- <type> com.sun.star.reflection.XIdlField2 </type>
- <type> com.sun.star.reflection.XIdlArray </type>
- <type> com.sun.star.reflection.FieldAccessMode </type>
- </component-description>
- <project-build-dependency> cppuhelper </project-build-dependency>
- <project-build-dependency> cppu </project-build-dependency>
- <project-build-dependency> sal </project-build-dependency>
- <runtime-module-dependency> cppuhelper3$(COM) </runtime-module-dependency>
- <runtime-module-dependency> cppu3 </runtime-module-dependency>
- <runtime-module-dependency> sal3 </runtime-module-dependency>
-</module-description>
diff --git a/stoc/source/inspect/introspection.component b/stoc/source/inspect/introspection.component
deleted file mode 100644
index 349fb0c9d..000000000
--- a/stoc/source/inspect/introspection.component
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--**********************************************************************
-*
-* 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.
-*
-**********************************************************************-->
-
-<component loader="com.sun.star.loader.SharedLibrary"
- xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.comp.stoc.Introspection">
- <service name="com.sun.star.beans.Introspection"/>
- </implementation>
-</component>
diff --git a/stoc/source/inspect/introspection.cxx b/stoc/source/inspect/introspection.cxx
deleted file mode 100644
index 5ada829be..000000000
--- a/stoc/source/inspect/introspection.cxx
+++ /dev/null
@@ -1,3072 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include <string.h>
-
-// Schalter fuer Introspection-Caching
-#define USE_INTROSPECTION_CACHE
-
-#ifdef USE_INTROSPECTION_CACHE
-#define INTROSPECTION_CACHE_MAX_SIZE 100
-#endif
-#include <osl/diagnose.h>
-#include <osl/mutex.hxx>
-#include <osl/thread.h>
-#include <cppuhelper/queryinterface.hxx>
-#include <cppuhelper/weak.hxx>
-#include <cppuhelper/component.hxx>
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/implbase3.hxx>
-#include <cppuhelper/typeprovider.hxx>
-
-#include <com/sun/star/uno/DeploymentException.hpp>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XEventListener.hpp>
-#include <com/sun/star/reflection/XIdlReflection.hpp>
-#include <com/sun/star/reflection/XIdlClassProvider.hpp>
-#include <com/sun/star/reflection/XIdlClass.hpp>
-#include <com/sun/star/reflection/XIdlField2.hpp>
-#include <com/sun/star/beans/UnknownPropertyException.hpp>
-#include <com/sun/star/beans/Property.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/beans/XFastPropertySet.hpp>
-#include <com/sun/star/beans/XIntrospection.hpp>
-#include <com/sun/star/beans/XIntrospectionAccess.hpp>
-#include <com/sun/star/beans/XMaterialHolder.hpp>
-#include <com/sun/star/beans/XExactName.hpp>
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-#include <com/sun/star/beans/PropertyConcept.hpp>
-#include <com/sun/star/beans/MethodConcept.hpp>
-#include <com/sun/star/container/XNameContainer.hpp>
-#include <com/sun/star/container/XIndexContainer.hpp>
-#include <com/sun/star/container/XEnumerationAccess.hpp>
-
-#include <rtl/ustrbuf.hxx>
-#include <rtl/strbuf.hxx>
-#include <boost/unordered_map.hpp>
-
-using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::reflection;
-using namespace com::sun::star::container;
-using namespace com::sun::star::registry;
-using namespace com::sun::star::beans;
-using namespace com::sun::star::beans::PropertyAttribute;
-using namespace com::sun::star::beans::PropertyConcept;
-using namespace com::sun::star::beans::MethodConcept;
-using namespace cppu;
-using namespace osl;
-
-using ::rtl::OUString;
-using ::rtl::OUStringToOString;
-using ::rtl::OString;
-
-#define IMPLEMENTATION_NAME "com.sun.star.comp.stoc.Introspection"
-#define SERVICE_NAME "com.sun.star.beans.Introspection"
-
-namespace stoc_inspect
-{
-
-typedef WeakImplHelper3< XIntrospectionAccess, XMaterialHolder, XExactName > IntrospectionAccessHelper;
-
-
-//==================================================================================================
-
-// Spezial-Wert fuer Method-Concept, um "normale" Funktionen kennzeichnen zu koennen
-#define MethodConcept_NORMAL_IMPL 0x80000000
-
-
-// Methode zur Feststellung, ob eine Klasse von einer anderen abgeleitet ist
-sal_Bool isDerivedFrom( Reference<XIdlClass> xToTestClass, Reference<XIdlClass> xDerivedFromClass )
-{
- Sequence< Reference<XIdlClass> > aClassesSeq = xToTestClass->getSuperclasses();
- const Reference<XIdlClass>* pClassesArray = aClassesSeq.getConstArray();
- sal_Int32 nSuperClassCount = aClassesSeq.getLength();
- sal_Int32 i;
- for( i = 0 ; i < nSuperClassCount ; i++ )
- {
- const Reference<XIdlClass>& rxClass = pClassesArray[i];
- if( xDerivedFromClass->equals( rxClass ) )
- {
- // Treffer
- return sal_True;
- }
- else
- {
- // Rekursiv weitersuchen
- return isDerivedFrom( rxClass, xDerivedFromClass );
- }
- }
- return sal_False;
-}
-
-//========================================================================
-
-// *** Klassifizierung der Properties (kein enum, um Sequence verwenden zu koennen) ***
-// Properties aus einem PropertySet-Interface
-#define MAP_PROPERTY_SET 0
-// Properties aus Fields
-#define MAP_FIELD 1
-// Properties, die durch get/set-Methoden beschrieben werden
-#define MAP_GETSET 2
-// Properties, die nur eine set-Methode haben
-#define MAP_SETONLY 3
-
-
-// Schrittweite, in der die Groesse der Sequences angepasst wird
-#define ARRAY_SIZE_STEP 20
-
-
-
-//**************************************
-//*** IntrospectionAccessStatic_Impl ***
-//**************************************
-// Entspricht dem alten IntrospectionAccessImpl, bildet jetzt den statischen
-// Anteil des neuen Instanz-bezogenen ImplIntrospectionAccess
-
-// ACHTUNG !!! Von Hand refcounten !!!
-
-
-// Hashtable fuer die Suche nach Namen
-struct hashName_Impl
-{
- size_t operator()(const OUString Str) const
- {
- return (size_t)Str.hashCode();
- }
-};
-
-struct eqName_Impl
-{
- sal_Bool operator()(const OUString Str1, const OUString Str2) const
- {
- return ( Str1 == Str2 );
- }
-};
-
-typedef boost::unordered_map
-<
- OUString,
- sal_Int32,
- hashName_Impl,
- eqName_Impl
->
-IntrospectionNameMap;
-
-
-// Hashtable zur Zuordnung der exakten Namen zu den zu Lower-Case
-// konvertierten Namen, dient zur Unterst�tzung von XExactName
-typedef boost::unordered_map
-<
- OUString,
- OUString,
- hashName_Impl,
- eqName_Impl
->
-LowerToExactNameMap;
-
-
-class ImplIntrospectionAccess;
-class IntrospectionAccessStatic_Impl
-{
- friend class ImplIntrospection;
- friend class ImplIntrospectionAccess;
-
- // CoreReflection halten
- Reference< XIdlReflection > mxCoreReflection;
-
- // InterfaceSequences, um Zusatz-Infos zu einer Property speichern zu koennen.
- // z.B. das Field bei MAP_FIELD, die get/set-Methoden bei MAP_GETSET usw.
- Sequence< Reference<XInterface> > aInterfaceSeq1;
- Sequence< Reference<XInterface> > aInterfaceSeq2;
-
- // Hashtables fuer die Namen
- IntrospectionNameMap maPropertyNameMap;
- IntrospectionNameMap maMethodNameMap;
- LowerToExactNameMap maLowerToExactNameMap;
-
- // Sequence aller Properties, auch zum Liefern aus getProperties()
- Sequence<Property> maAllPropertySeq;
-
- // Mapping der Properties auf Zugriffs-Arten
- Sequence<sal_Int16> maMapTypeSeq;
-
- // Klassifizierung der gefundenen Methoden
- Sequence<sal_Int32> maPropertyConceptSeq;
-
- // Anzahl der Properties
- sal_Int32 mnPropCount;
-
- // Anzahl der Properties, die den jeweiligen Konzepten zugeordnet sind
- //sal_Int32 mnDangerousPropCount;
- sal_Int32 mnPropertySetPropCount;
- sal_Int32 mnAttributePropCount;
- sal_Int32 mnMethodPropCount;
-
- // Flag, ob ein FastPropertySet unterstuetzt wird
- sal_Bool mbFastPropSet;
-
- // Original-Handles eines FastPropertySets
- sal_Int32* mpOrgPropertyHandleArray;
-
- // MethodSequence, die alle Methoden aufnimmt
- Sequence< Reference<XIdlMethod> > maAllMethodSeq;
-
- // Klassifizierung der gefundenen Methoden
- Sequence<sal_Int32> maMethodConceptSeq;
-
- // Anzahl der Methoden
- sal_Int32 mnMethCount;
-
- // Sequence der Listener, die angemeldet werden koennen
- Sequence< Type > maSupportedListenerSeq;
-
- // BaseInit (soll spaeter in der Applikation erfolgen!)
- void BaseInit( void );
-
- // Hilfs-Methoden zur Groessen-Anpassung der Sequences
- void checkPropertyArraysSize
- (
- Property*& rpAllPropArray,
- sal_Int16*& rpMapTypeArray,
- sal_Int32*& rpPropertyConceptArray,
- sal_Int32 iNextIndex
- );
- void checkInterfaceArraySize( Sequence< Reference<XInterface> >& rSeq, Reference<XInterface>*& rpInterfaceArray,
- sal_Int32 iNextIndex );
-
- // RefCount
- sal_Int32 nRefCount;
-
-
-public:
- IntrospectionAccessStatic_Impl( Reference< XIdlReflection > xCoreReflection_ );
- ~IntrospectionAccessStatic_Impl()
- {
- delete[] mpOrgPropertyHandleArray;
- }
- sal_Int32 getPropertyIndex( const OUString& aPropertyName ) const;
- sal_Int32 getMethodIndex( const OUString& aMethodName ) const;
-
- void acquire() { nRefCount++; }
- void release()
- {
- nRefCount--;
- if( nRefCount <= 0 )
- delete this;
- }
-
- // Methoden von XIntrospectionAccess (ALT, jetzt nur Impl)
- void setPropertyValue(const Any& obj, const OUString& aPropertyName, const Any& aValue) const;
-// void setPropertyValue(Any& obj, const OUString& aPropertyName, const Any& aValue) const;
- Any getPropertyValue(const Any& obj, const OUString& aPropertyName) const;
- void setPropertyValueByIndex(const Any& obj, sal_Int32 nIndex, const Any& aValue) const;
-// void setPropertyValueByIndex(Any& obj, sal_Int32 nIndex, const Any& aValue) const;
- Any getPropertyValueByIndex(const Any& obj, sal_Int32 nIndex) const;
-
- Sequence<Property> getProperties(void) const { return maAllPropertySeq; }
- Sequence< Reference<XIdlMethod> > getMethods(void) const { return maAllMethodSeq; }
- Sequence< Type > getSupportedListeners(void) const { return maSupportedListenerSeq; }
- Sequence<sal_Int32> getPropertyConcepts(void) const { return maPropertyConceptSeq; }
- Sequence<sal_Int32> getMethodConcepts(void) const { return maMethodConceptSeq; }
-};
-
-
-// Ctor
-IntrospectionAccessStatic_Impl::IntrospectionAccessStatic_Impl( Reference< XIdlReflection > xCoreReflection_ )
- : mxCoreReflection( xCoreReflection_ )
-{
- aInterfaceSeq1.realloc( ARRAY_SIZE_STEP );
- aInterfaceSeq2.realloc( ARRAY_SIZE_STEP );
-
- // Property-Daten
- maAllPropertySeq.realloc( ARRAY_SIZE_STEP );
- maMapTypeSeq.realloc( ARRAY_SIZE_STEP );
- maPropertyConceptSeq.realloc( ARRAY_SIZE_STEP );
-
- mbFastPropSet = sal_False;
- mpOrgPropertyHandleArray = NULL;
-
- mnPropCount = 0;
- //mnDangerousPropCount = 0;
- mnPropertySetPropCount = 0;
- mnAttributePropCount = 0;
- mnMethodPropCount = 0;
-
- // Method-Daten
- mnMethCount = 0;
-
- // Eigenens RefCounting
- nRefCount = 0;
-}
-
-// Von Hand refcounten !!!
-
-
-sal_Int32 IntrospectionAccessStatic_Impl::getPropertyIndex( const OUString& aPropertyName ) const
-{
- sal_Int32 iHashResult = -1;
- IntrospectionAccessStatic_Impl* pThis = (IntrospectionAccessStatic_Impl*)this;
- IntrospectionNameMap::iterator aIt = pThis->maPropertyNameMap.find( aPropertyName );
- if( !( aIt == pThis->maPropertyNameMap.end() ) )
- iHashResult = (*aIt).second;
- return iHashResult;
-}
-
-sal_Int32 IntrospectionAccessStatic_Impl::getMethodIndex( const OUString& aMethodName ) const
-{
- sal_Int32 iHashResult = -1;
- IntrospectionAccessStatic_Impl* pThis = (IntrospectionAccessStatic_Impl*)this;
- IntrospectionNameMap::iterator aIt = pThis->maMethodNameMap.find( aMethodName );
- if( !( aIt == pThis->maMethodNameMap.end() ) )
- {
- iHashResult = (*aIt).second;
- }
- // #95159 Check if full qualified name matches
- else
- {
- sal_Int32 nSearchFrom = aMethodName.getLength();
- nSearchFrom = aMethodName.getLength();
- while( true )
- {
- // Strategy: Search back until the first '_' is found
- sal_Int32 nFound = aMethodName.lastIndexOf( '_', nSearchFrom );
- if( nFound == -1 )
- break;
-
- OUString aPureMethodName = aMethodName.copy( nFound + 1 );
-
- aIt = pThis->maMethodNameMap.find( aPureMethodName );
- if( !( aIt == pThis->maMethodNameMap.end() ) )
- {
- // Check if it can be a type?
- // Problem: Does not work if package names contain _ ?!
- OUString aStr = aMethodName.copy( 0, nFound );
- OUString aTypeName = aStr.replace( '_', '.' );
- Reference< XIdlClass > xClass = mxCoreReflection->forName( aTypeName );
- if( xClass.is() )
- {
- // If this is a valid class it could be the right method
-
- // Could be the right method, type has to be checked
- iHashResult = (*aIt).second;
-
- const Reference<XIdlMethod>* pMethods = maAllMethodSeq.getConstArray();
- const Reference<XIdlMethod> xMethod = pMethods[ iHashResult ];
-
- Reference< XIdlClass > xMethClass = xMethod->getDeclaringClass();
- if( xClass->equals( xMethClass ) )
- {
- break;
- }
- else
- {
- iHashResult = -1;
-
- // Could also be another method with the same name
- // Iterate over all methods
- sal_Int32 nLen = maAllMethodSeq.getLength();
- for( int i = 0 ; i < nLen ; ++i )
- {
- const Reference<XIdlMethod> xMethod2 = pMethods[ i ];
-
- OUString aTestClassName = xMethod2->getDeclaringClass()->getName();
- OUString aTestMethodName = xMethod2->getName();
-
- if( xMethod2->getName() == aPureMethodName )
- {
- Reference< XIdlClass > xMethClass2 = xMethod2->getDeclaringClass();
-
- if( xClass->equals( xMethClass2 ) )
- {
- iHashResult = i;
- break;
- }
- }
- }
-
- if( iHashResult != -1 )
- break;
- }
- }
- }
-
- nSearchFrom = nFound - 1;
- if( nSearchFrom < 0 )
- break;
- }
- }
- return iHashResult;
-}
-
-void IntrospectionAccessStatic_Impl::setPropertyValue( const Any& obj, const OUString& aPropertyName, const Any& aValue ) const
-//void IntrospectionAccessStatic_Impl::setPropertyValue( Any& obj, const OUString& aPropertyName, const Any& aValue ) const
-{
- sal_Int32 i = getPropertyIndex( aPropertyName );
- if( i != -1 )
- setPropertyValueByIndex( obj, (sal_Int32)i, aValue );
- else
- throw UnknownPropertyException();
-}
-
-void IntrospectionAccessStatic_Impl::setPropertyValueByIndex(const Any& obj, sal_Int32 nSequenceIndex, const Any& aValue) const
-//void IntrospectionAccessStatic_Impl::setPropertyValueByIndex( Any& obj, sal_Int32 nSequenceIndex, const Any& aValue) const
-{
- // Handelt es sich bei dem uebergebenen Objekt ueberhaupt um was passendes?
- TypeClass eObjType = obj.getValueType().getTypeClass();
-
- Reference<XInterface> xInterface;
- if( eObjType == TypeClass_INTERFACE )
- {
- xInterface = *( Reference<XInterface>*)obj.getValue();
- }
- else if( nSequenceIndex >= mnPropCount || ( eObjType != TypeClass_STRUCT && eObjType != TypeClass_EXCEPTION ) )
- {
- throw IllegalArgumentException();
- }
-
- // Flags pruefen
- const Property* pProps = maAllPropertySeq.getConstArray();
- if( (pProps[ nSequenceIndex ].Attributes & READONLY) != 0 )
- {
- throw UnknownPropertyException();
- }
-
- const sal_Int16* pMapTypeArray = maMapTypeSeq.getConstArray();
- switch( pMapTypeArray[ nSequenceIndex ] )
- {
- case MAP_PROPERTY_SET:
- {
- // Property besorgen
- const Property& rProp = maAllPropertySeq.getConstArray()[ nSequenceIndex ];
-
- // Interface-Parameter auf den richtigen Typ bringen
- sal_Bool bUseCopy = sal_False;
- Any aRealValue;
-
- TypeClass eValType = aValue.getValueType().getTypeClass();
- if( eValType == TypeClass_INTERFACE )
- {
- Type aPropType = rProp.Type;
- OUString aTypeName( aPropType.getTypeName() );
- Reference< XIdlClass > xPropClass = mxCoreReflection->forName( aTypeName );
- //Reference<XIdlClass> xPropClass = rProp.Type;
- if( xPropClass.is() && xPropClass->getTypeClass() == TypeClass_INTERFACE )
- {
- Reference<XInterface> valInterface = *(Reference<XInterface>*)aValue.getValue();
- if( valInterface.is() )
- {
- //Any queryInterface( const Type& rType );
- aRealValue = valInterface->queryInterface( aPropType );
- if( aRealValue.hasValue() )
- bUseCopy = sal_True;
- }
- }
- }
-
- // Haben wir ein FastPropertySet und ein gueltiges Handle?
- // ACHTUNG: An dieser Stelle wird ausgenutzt, dass das PropertySet
- // zu Beginn des Introspection-Vorgangs abgefragt wird.
- sal_Int32 nOrgHandle;
- if( mbFastPropSet && ( nOrgHandle = mpOrgPropertyHandleArray[ nSequenceIndex ] ) != -1 )
- {
- // PropertySet-Interface holen
- Reference<XFastPropertySet> xFastPropSet =
- Reference<XFastPropertySet>::query( xInterface );
- if( xFastPropSet.is() )
- {
- xFastPropSet->setFastPropertyValue( nOrgHandle, bUseCopy ? aRealValue : aValue );
- }
- else
- {
- // throw UnknownPropertyException
- }
- }
- // sonst eben das normale nehmen
- else
- {
- // PropertySet-Interface holen
- Reference<XPropertySet> xPropSet =
- Reference<XPropertySet>::query( xInterface );
- if( xPropSet.is() )
- {
- xPropSet->setPropertyValue( rProp.Name, bUseCopy ? aRealValue : aValue );
- }
- else
- {
- // throw UnknownPropertyException
- }
- }
- }
- break;
-
- case MAP_FIELD:
- {
- Reference<XIdlField> xField = (XIdlField*)(aInterfaceSeq1.getConstArray()[ nSequenceIndex ].get());
- Reference<XIdlField2> xField2(xField, UNO_QUERY);
- if( xField2.is() )
- {
- xField2->set( (Any&)obj, aValue );
- // IllegalArgumentException
- // NullPointerException
- } else
- if( xField.is() )
- {
- xField->set( obj, aValue );
- // IllegalArgumentException
- // NullPointerException
- }
- else
- {
- // throw IllegalArgumentException();
- }
- }
- break;
-
- case MAP_GETSET:
- case MAP_SETONLY:
- {
- // set-Methode holen
- Reference<XIdlMethod> xMethod = (XIdlMethod*)(aInterfaceSeq2.getConstArray()[ nSequenceIndex ].get());
- if( xMethod.is() )
- {
- Sequence<Any> args( 1 );
- args.getArray()[0] = aValue;
- xMethod->invoke( obj, args );
- }
- else
- {
- // throw IllegalArgumentException();
- }
- }
- break;
- }
-}
-
-Any IntrospectionAccessStatic_Impl::getPropertyValue( const Any& obj, const OUString& aPropertyName ) const
-{
- sal_Int32 i = getPropertyIndex( aPropertyName );
- if( i != -1 )
- return getPropertyValueByIndex( obj, i );
-
- throw UnknownPropertyException();
-}
-
-Any IntrospectionAccessStatic_Impl::getPropertyValueByIndex(const Any& obj, sal_Int32 nSequenceIndex) const
-{
- Any aRet;
-
- // Handelt es sich bei dem uebergebenen Objekt ueberhaupt um was passendes?
- TypeClass eObjType = obj.getValueType().getTypeClass();
-
- Reference<XInterface> xInterface;
- if( eObjType == TypeClass_INTERFACE )
- {
- xInterface = *(Reference<XInterface>*)obj.getValue();
- }
- else if( nSequenceIndex >= mnPropCount || ( eObjType != TypeClass_STRUCT && eObjType != TypeClass_EXCEPTION ) )
- {
- // throw IllegalArgumentException();
- return aRet;
- }
-
- const sal_Int16* pMapTypeArray = maMapTypeSeq.getConstArray();
- switch( pMapTypeArray[ nSequenceIndex ] )
- {
- case MAP_PROPERTY_SET:
- {
- // Property besorgen
- const Property& rProp = maAllPropertySeq.getConstArray()[ nSequenceIndex ];
-
- // Haben wir ein FastPropertySet und ein gueltiges Handle?
- // ACHTUNG: An dieser Stelle wird ausgenutzt, dass das PropertySet
- // zu Beginn des Introspection-Vorgangs abgefragt wird.
- sal_Int32 nOrgHandle;
- if( mbFastPropSet && ( nOrgHandle = mpOrgPropertyHandleArray[ nSequenceIndex ] ) != -1 )
- {
- // PropertySet-Interface holen
- Reference<XFastPropertySet> xFastPropSet =
- Reference<XFastPropertySet>::query( xInterface );
- if( xFastPropSet.is() )
- {
- aRet = xFastPropSet->getFastPropertyValue( nOrgHandle);
- }
- else
- {
- // throw UnknownPropertyException
- return aRet;
- }
- }
- // sonst eben das normale nehmen
- else
- {
- // PropertySet-Interface holen
- Reference<XPropertySet> xPropSet =
- Reference<XPropertySet>::query( xInterface );
- if( xPropSet.is() )
- {
- aRet = xPropSet->getPropertyValue( rProp.Name );
- }
- else
- {
- // throw UnknownPropertyException
- return aRet;
- }
- }
- }
- break;
-
- case MAP_FIELD:
- {
- Reference<XIdlField> xField = (XIdlField*)(aInterfaceSeq1.getConstArray()[ nSequenceIndex ].get());
- if( xField.is() )
- {
- aRet = xField->get( obj );
- // IllegalArgumentException
- // NullPointerException
- }
- else
- {
- // throw IllegalArgumentException();
- return aRet;
- }
- }
- break;
-
- case MAP_GETSET:
- {
- // get-Methode holen
- Reference<XIdlMethod> xMethod = (XIdlMethod*)(aInterfaceSeq1.getConstArray()[ nSequenceIndex ].get());
- if( xMethod.is() )
- {
- Sequence<Any> args;
- aRet = xMethod->invoke( obj, args );
- }
- else
- {
- // throw IllegalArgumentException();
- return aRet;
- }
- }
- break;
-
- case MAP_SETONLY:
- // get-Methode gibt es nicht
- // throw WriteOnlyPropertyException();
- return aRet;
- }
- return aRet;
-}
-
-
-// Hilfs-Methoden zur Groessen-Anpassung der Sequences
-void IntrospectionAccessStatic_Impl::checkPropertyArraysSize
-(
- Property*& rpAllPropArray,
- sal_Int16*& rpMapTypeArray,
- sal_Int32*& rpPropertyConceptArray,
- sal_Int32 iNextIndex
-)
-{
- sal_Int32 nLen = maAllPropertySeq.getLength();
- if( iNextIndex >= nLen )
- {
- maAllPropertySeq.realloc( nLen + ARRAY_SIZE_STEP );
- rpAllPropArray = maAllPropertySeq.getArray();
-
- maMapTypeSeq.realloc( nLen + ARRAY_SIZE_STEP );
- rpMapTypeArray = maMapTypeSeq.getArray();
-
- maPropertyConceptSeq.realloc( nLen + ARRAY_SIZE_STEP );
- rpPropertyConceptArray = maPropertyConceptSeq.getArray();
- }
-}
-
-void IntrospectionAccessStatic_Impl::checkInterfaceArraySize( Sequence< Reference<XInterface> >& rSeq,
- Reference<XInterface>*& rpInterfaceArray, sal_Int32 iNextIndex )
-{
- sal_Int32 nLen = rSeq.getLength();
- if( iNextIndex >= nLen )
- {
- // Neue Groesse mit ARRAY_SIZE_STEP abgleichen
- sal_Int32 nMissingSize = iNextIndex - nLen + 1;
- sal_Int32 nSteps = nMissingSize / ARRAY_SIZE_STEP + 1;
- sal_Int32 nNewSize = nLen + nSteps * ARRAY_SIZE_STEP;
-
- rSeq.realloc( nNewSize );
- rpInterfaceArray = rSeq.getArray();
- }
-}
-
-
-//*******************************
-//*** ImplIntrospectionAdapter ***
-//*******************************
-
-// Neue Impl-Klasse im Rahmen der Introspection-Umstellung auf Instanz-gebundene
-// Introspection mit Property-Zugriff ueber XPropertySet. Die alte Klasse
-// ImplIntrospectionAccess lebt als IntrospectionAccessStatic_Impl
-class ImplIntrospectionAdapter :
- public XPropertySet, public XFastPropertySet, public XPropertySetInfo,
- public XNameContainer, public XIndexContainer,
- public XEnumerationAccess, public XIdlArray,
- public OWeakObject
-{
- // Parent-Objekt
- ImplIntrospectionAccess* mpAccess;
-
- // Untersuchtes Objekt
- const Any& mrInspectedObject;
-
- // Statische Daten der Introspection
- IntrospectionAccessStatic_Impl* mpStaticImpl;
-
- // Objekt als Interface
- Reference<XInterface> mxIface;
-
- // Original-Interfaces des Objekts
- Reference<XElementAccess> mxObjElementAccess;
- Reference<XNameContainer> mxObjNameContainer;
- Reference<XNameAccess> mxObjNameAccess;
- Reference<XIndexAccess> mxObjIndexAccess;
- Reference<XIndexContainer> mxObjIndexContainer;
- Reference<XEnumerationAccess> mxObjEnumerationAccess;
- Reference<XIdlArray> mxObjIdlArray;
-
-public:
- ImplIntrospectionAdapter( ImplIntrospectionAccess* pAccess_,
- const Any& obj, IntrospectionAccessStatic_Impl* pStaticImpl_ );
- ~ImplIntrospectionAdapter();
-
- // Methoden von XInterface
- virtual Any SAL_CALL queryInterface( const Type& rType ) throw( RuntimeException );
- virtual void SAL_CALL acquire() throw() { OWeakObject::acquire(); }
- virtual void SAL_CALL release() throw() { OWeakObject::release(); }
-
- // Methoden von XPropertySet
- virtual Reference<XPropertySetInfo> SAL_CALL getPropertySetInfo() throw( RuntimeException );
- virtual void SAL_CALL setPropertyValue(const OUString& aPropertyName, const Any& aValue)
- throw( UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException );
- virtual Any SAL_CALL getPropertyValue(const OUString& aPropertyName)
- throw( UnknownPropertyException, WrappedTargetException, RuntimeException );
- virtual void SAL_CALL addPropertyChangeListener(const OUString& aPropertyName, const Reference<XPropertyChangeListener>& aListener)
- throw( UnknownPropertyException, WrappedTargetException, RuntimeException );
- virtual void SAL_CALL removePropertyChangeListener(const OUString& aPropertyName, const Reference<XPropertyChangeListener>& aListener)
- throw( UnknownPropertyException, WrappedTargetException, RuntimeException );
- virtual void SAL_CALL addVetoableChangeListener(const OUString& aPropertyName, const Reference<XVetoableChangeListener>& aListener)
- throw( UnknownPropertyException, WrappedTargetException, RuntimeException );
- virtual void SAL_CALL removeVetoableChangeListener(const OUString& aPropertyName, const Reference<XVetoableChangeListener>& aListener)
- throw( UnknownPropertyException, WrappedTargetException, RuntimeException );
-
- // Methoden von XFastPropertySet
- virtual void SAL_CALL setFastPropertyValue(sal_Int32 nHandle, const Any& aValue)
- throw( UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException );
- virtual Any SAL_CALL getFastPropertyValue(sal_Int32 nHandle)
- throw( UnknownPropertyException, WrappedTargetException, RuntimeException );
-
- // Methoden von XPropertySetInfo
- virtual Sequence< Property > SAL_CALL getProperties(void) throw( RuntimeException );
- virtual Property SAL_CALL getPropertyByName(const OUString& Name) throw( RuntimeException );
- virtual sal_Bool SAL_CALL hasPropertyByName(const OUString& Name) throw( RuntimeException );
-
- // Methoden von XElementAccess
- virtual Type SAL_CALL getElementType(void) throw( RuntimeException );
- virtual sal_Bool SAL_CALL hasElements(void) throw( RuntimeException );
-
- // Methoden von XNameAccess
- virtual Any SAL_CALL getByName(const OUString& Name)
- throw( NoSuchElementException, WrappedTargetException, RuntimeException );
- virtual Sequence<OUString> SAL_CALL getElementNames(void) throw( RuntimeException );
- virtual sal_Bool SAL_CALL hasByName(const OUString& Name) throw( RuntimeException );
-
- // Methoden von XNameContainer
- virtual void SAL_CALL insertByName(const OUString& Name, const Any& Element)
- throw( IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException );
- virtual void SAL_CALL replaceByName(const OUString& Name, const Any& Element)
- throw( IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException );
- virtual void SAL_CALL removeByName(const OUString& Name)
- throw( NoSuchElementException, WrappedTargetException, RuntimeException );
-
- // Methoden von XIndexAccess
- virtual sal_Int32 SAL_CALL getCount(void) throw( RuntimeException );
- virtual Any SAL_CALL getByIndex(sal_Int32 Index)
- throw( IndexOutOfBoundsException, WrappedTargetException, RuntimeException );
-
- // Methoden von XIndexContainer
- virtual void SAL_CALL insertByIndex(sal_Int32 Index, const Any& Element)
- throw( IllegalArgumentException, IndexOutOfBoundsException, WrappedTargetException, RuntimeException );
- virtual void SAL_CALL replaceByIndex(sal_Int32 Index, const Any& Element)
- throw( IllegalArgumentException, IndexOutOfBoundsException, WrappedTargetException, RuntimeException );
- virtual void SAL_CALL removeByIndex(sal_Int32 Index)
- throw( IndexOutOfBoundsException, WrappedTargetException, RuntimeException );
-
- // Methoden von XEnumerationAccess
- virtual Reference<XEnumeration> SAL_CALL createEnumeration(void) throw( RuntimeException );
-
- // Methoden von XIdlArray
- virtual void SAL_CALL realloc(Any& array, sal_Int32 length)
- throw( IllegalArgumentException, RuntimeException );
- virtual sal_Int32 SAL_CALL getLen(const Any& array) throw( IllegalArgumentException, RuntimeException );
- virtual Any SAL_CALL get(const Any& array, sal_Int32 index)
- throw( IllegalArgumentException, ArrayIndexOutOfBoundsException, RuntimeException );
- virtual void SAL_CALL set(Any& array, sal_Int32 index, const Any& value)
- throw( IllegalArgumentException, ArrayIndexOutOfBoundsException, RuntimeException );
-};
-
-ImplIntrospectionAdapter::ImplIntrospectionAdapter( ImplIntrospectionAccess* pAccess_,
- const Any& obj, IntrospectionAccessStatic_Impl* pStaticImpl_ )
- : mpAccess( pAccess_), mrInspectedObject( obj ), mpStaticImpl( pStaticImpl_ )
-{
- mpStaticImpl->acquire();
-
- // Objekt als Interfaceholen
- TypeClass eType = mrInspectedObject.getValueType().getTypeClass();
- if( eType == TypeClass_INTERFACE )
- {
- mxIface = *( Reference< XInterface >*)mrInspectedObject.getValue();
-
- mxObjElementAccess = Reference<XElementAccess>::query( mxIface );
- mxObjNameAccess = Reference<XNameAccess>::query( mxIface );
- mxObjNameContainer = Reference<XNameContainer>::query( mxIface );
- mxObjIndexAccess = Reference<XIndexAccess>::query( mxIface );
- mxObjIndexContainer = Reference<XIndexContainer>::query( mxIface );
- mxObjEnumerationAccess = Reference<XEnumerationAccess>::query( mxIface );
- mxObjIdlArray = Reference<XIdlArray>::query( mxIface );
- }
-}
-
-ImplIntrospectionAdapter::~ImplIntrospectionAdapter()
-{
- mpStaticImpl->release();
-}
-
-// Methoden von XInterface
-Any SAL_CALL ImplIntrospectionAdapter::queryInterface( const Type& rType )
- throw( RuntimeException )
-{
- Any aRet( ::cppu::queryInterface(
- rType,
- static_cast< XPropertySet * >( this ),
- static_cast< XFastPropertySet * >( this ),
- static_cast< XPropertySetInfo * >( this ) ) );
- if( !aRet.hasValue() )
- aRet = OWeakObject::queryInterface( rType );
-
- if( !aRet.hasValue() )
- {
- // Wrapper fuer die Objekt-Interfaces
- if( ( mxObjElementAccess.is() && (aRet = ::cppu::queryInterface
- ( rType, static_cast< XElementAccess* >( static_cast< XNameAccess* >( this ) ) ) ).hasValue() )
- || ( mxObjNameAccess.is() && (aRet = ::cppu::queryInterface( rType, static_cast< XNameAccess* >( this ) ) ).hasValue() )
- || ( mxObjNameContainer.is() && (aRet = ::cppu::queryInterface( rType, static_cast< XNameContainer* >( this ) ) ).hasValue() )
- || ( mxObjIndexAccess.is() && (aRet = ::cppu::queryInterface( rType, static_cast< XIndexAccess* >( this ) ) ).hasValue() )
- || ( mxObjIndexContainer.is() && (aRet = ::cppu::queryInterface( rType, static_cast< XIndexContainer* >( this ) ) ).hasValue() )
- || ( mxObjEnumerationAccess .is() && (aRet = ::cppu::queryInterface( rType, static_cast< XEnumerationAccess* >( this ) ) ).hasValue() )
- || ( mxObjIdlArray.is() && (aRet = ::cppu::queryInterface( rType, static_cast< XIdlArray* >( this ) ) ).hasValue() )
- )
- {
- }
- }
- return aRet;
-}
-
-
-//*******************************
-//*** ImplIntrospectionAccess ***
-//*******************************
-
-// Neue Impl-Klasse im Rahmen der Introspection-Umstellung auf Instanz-gebundene
-// Introspection mit Property-Zugriff ueber XPropertySet. Die alte Klasse
-// ImplIntrospectionAccess lebt als IntrospectionAccessStatic_Impl
-class ImplIntrospectionAccess : IntrospectionAccessHelper
-{
- friend class ImplIntrospection;
-
- // Untersuchtes Objekt
- Any maInspectedObject;
-
- // Als Interface
- Reference<XInterface> mxIface;
-
- // Statische Daten der Introspection
- IntrospectionAccessStatic_Impl* mpStaticImpl;
-
- // Adapter-Implementation
- ImplIntrospectionAdapter* mpAdapter;
-
- // Letzte Sequence, die bei getProperties geliefert wurde (Optimierung)
- Sequence<Property> maLastPropertySeq;
- sal_Int32 mnLastPropertyConcept;
-
- // Letzte Sequence, die bei getMethods geliefert wurde (Optimierung)
- Sequence<Reference<XIdlMethod> > maLastMethodSeq;
- sal_Int32 mnLastMethodConcept;
-
-public:
- ImplIntrospectionAccess( const Any& obj, IntrospectionAccessStatic_Impl* pStaticImpl_ );
- ~ImplIntrospectionAccess();
-
- // Methoden von XIntrospectionAccess
- virtual sal_Int32 SAL_CALL getSuppliedMethodConcepts(void)
- throw( RuntimeException );
- virtual sal_Int32 SAL_CALL getSuppliedPropertyConcepts(void)
- throw( RuntimeException );
- virtual Property SAL_CALL getProperty(const OUString& Name, sal_Int32 PropertyConcepts)
- throw( NoSuchElementException, RuntimeException );
- virtual sal_Bool SAL_CALL hasProperty(const OUString& Name, sal_Int32 PropertyConcepts)
- throw( RuntimeException );
- virtual Sequence< Property > SAL_CALL getProperties(sal_Int32 PropertyConcepts)
- throw( RuntimeException );
- virtual Reference<XIdlMethod> SAL_CALL getMethod(const OUString& Name, sal_Int32 MethodConcepts)
- throw( NoSuchMethodException, RuntimeException );
- virtual sal_Bool SAL_CALL hasMethod(const OUString& Name, sal_Int32 MethodConcepts)
- throw( RuntimeException );
- virtual Sequence< Reference<XIdlMethod> > SAL_CALL getMethods(sal_Int32 MethodConcepts)
- throw( RuntimeException );
- virtual Sequence< Type > SAL_CALL getSupportedListeners(void)
- throw( RuntimeException );
- using OWeakObject::queryAdapter;
- virtual Reference<XInterface> SAL_CALL queryAdapter( const Type& rType )
- throw( IllegalTypeException, RuntimeException );
-
- // Methoden von XMaterialHolder
- virtual Any SAL_CALL getMaterial(void) throw(RuntimeException);
-
- // Methoden von XExactName
- virtual OUString SAL_CALL getExactName( const OUString& rApproximateName ) throw( RuntimeException );
-};
-
-ImplIntrospectionAccess::ImplIntrospectionAccess
- ( const Any& obj, IntrospectionAccessStatic_Impl* pStaticImpl_ )
- : maInspectedObject( obj ), mpStaticImpl( pStaticImpl_ ), mpAdapter( NULL )
-{
- mpStaticImpl->acquire();
-
- // Objekt als Interface merken, wenn moeglich
- TypeClass eType = maInspectedObject.getValueType().getTypeClass();
- if( eType == TypeClass_INTERFACE )
- mxIface = *(Reference<XInterface>*)maInspectedObject.getValue();
-
- mnLastPropertyConcept = -1;
- mnLastMethodConcept = -1;
-}
-
-ImplIntrospectionAccess::~ImplIntrospectionAccess()
-{
- mpStaticImpl->release();
-
- // Eigene Referenz loslassen
- if (mpAdapter)
- mpAdapter->release();
-}
-
-
-//***************************************************
-//*** Implementation von ImplIntrospectionAdapter ***
-//***************************************************
-
-// Methoden von XPropertySet
-Reference<XPropertySetInfo> ImplIntrospectionAdapter::getPropertySetInfo(void)
- throw( RuntimeException )
-{
- return (XPropertySetInfo *)this;
-}
-
-void ImplIntrospectionAdapter::setPropertyValue(const OUString& aPropertyName, const Any& aValue)
- throw( UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException )
-{
- mpStaticImpl->setPropertyValue( mrInspectedObject, aPropertyName, aValue );
-}
-
-Any ImplIntrospectionAdapter::getPropertyValue(const OUString& aPropertyName)
- throw( UnknownPropertyException, WrappedTargetException, RuntimeException )
-{
- return mpStaticImpl->getPropertyValue( mrInspectedObject, aPropertyName );
-}
-
-void ImplIntrospectionAdapter::addPropertyChangeListener(const OUString& aPropertyName, const Reference<XPropertyChangeListener>& aListener)
- throw( UnknownPropertyException, WrappedTargetException, RuntimeException )
-{
- if( mxIface.is() )
- {
- Reference<XPropertySet> xPropSet =
- Reference<XPropertySet>::query( mxIface );
- //Reference<XPropertySet> xPropSet( mxIface, USR_QUERY );
- if( xPropSet.is() )
- xPropSet->addPropertyChangeListener(aPropertyName, aListener);
- }
-}
-
-void ImplIntrospectionAdapter::removePropertyChangeListener(const OUString& aPropertyName, const Reference<XPropertyChangeListener>& aListener)
- throw( UnknownPropertyException, WrappedTargetException, RuntimeException )
-{
- if( mxIface.is() )
- {
- Reference<XPropertySet> xPropSet =
- Reference<XPropertySet>::query( mxIface );
- //Reference<XPropertySet> xPropSet( mxIface, USR_QUERY );
- if( xPropSet.is() )
- xPropSet->removePropertyChangeListener(aPropertyName, aListener);
- }
-}
-
-void ImplIntrospectionAdapter::addVetoableChangeListener(const OUString& aPropertyName, const Reference<XVetoableChangeListener>& aListener)
- throw( UnknownPropertyException, WrappedTargetException, RuntimeException )
-{
- if( mxIface.is() )
- {
- Reference<XPropertySet> xPropSet =
- Reference<XPropertySet>::query( mxIface );
- //Reference<XPropertySet> xPropSet( mxIface, USR_QUERY );
- if( xPropSet.is() )
- xPropSet->addVetoableChangeListener(aPropertyName, aListener);
- }
-}
-
-void ImplIntrospectionAdapter::removeVetoableChangeListener(const OUString& aPropertyName, const Reference<XVetoableChangeListener>& aListener)
- throw( UnknownPropertyException, WrappedTargetException, RuntimeException )
-{
- if( mxIface.is() )
- {
- Reference<XPropertySet> xPropSet =
- Reference<XPropertySet>::query( mxIface );
- if( xPropSet.is() )
- xPropSet->removeVetoableChangeListener(aPropertyName, aListener);
- }
-}
-
-
-// Methoden von XFastPropertySet
-void ImplIntrospectionAdapter::setFastPropertyValue(sal_Int32, const Any&)
- throw( UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException )
-{
-}
-
-Any ImplIntrospectionAdapter::getFastPropertyValue(sal_Int32)
- throw( UnknownPropertyException, WrappedTargetException, RuntimeException )
-{
- return Any();
-}
-
-// Methoden von XPropertySetInfo
-Sequence< Property > ImplIntrospectionAdapter::getProperties(void) throw( RuntimeException )
-{
- return mpStaticImpl->getProperties();
-}
-
-Property ImplIntrospectionAdapter::getPropertyByName(const OUString& Name)
- throw( RuntimeException )
-{
- return mpAccess->getProperty( Name, PropertyConcept::ALL );
-}
-
-sal_Bool ImplIntrospectionAdapter::hasPropertyByName(const OUString& Name)
- throw( RuntimeException )
-{
- return mpAccess->hasProperty( Name, PropertyConcept::ALL );
-}
-
-// Methoden von XElementAccess
-Type ImplIntrospectionAdapter::getElementType(void) throw( RuntimeException )
-{
- return mxObjElementAccess->getElementType();
-}
-
-sal_Bool ImplIntrospectionAdapter::hasElements(void) throw( RuntimeException )
-{
- return mxObjElementAccess->hasElements();
-}
-
-// Methoden von XNameAccess
-Any ImplIntrospectionAdapter::getByName(const OUString& Name)
- throw( NoSuchElementException, WrappedTargetException, RuntimeException )
-{
- return mxObjNameAccess->getByName( Name );
-}
-
-Sequence< OUString > ImplIntrospectionAdapter::getElementNames(void)
- throw( RuntimeException )
-{
- return mxObjNameAccess->getElementNames();
-}
-
-sal_Bool ImplIntrospectionAdapter::hasByName(const OUString& Name)
- throw( RuntimeException )
-{
- return mxObjNameAccess->hasByName( Name );
-}
-
-// Methoden von XNameContainer
-void ImplIntrospectionAdapter::insertByName(const OUString& Name, const Any& Element)
- throw( IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException )
-{
- mxObjNameContainer->insertByName( Name, Element );
-}
-
-void ImplIntrospectionAdapter::replaceByName(const OUString& Name, const Any& Element)
- throw( IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException )
-{
- mxObjNameContainer->replaceByName( Name, Element );
-}
-
-void ImplIntrospectionAdapter::removeByName(const OUString& Name)
- throw( NoSuchElementException, WrappedTargetException, RuntimeException )
-{
- mxObjNameContainer->removeByName( Name );
-}
-
-// Methoden von XIndexAccess
-// Schon in XNameAccess: virtual Reference<XIdlClass> getElementType(void) const
-sal_Int32 ImplIntrospectionAdapter::getCount(void) throw( RuntimeException )
-{
- return mxObjIndexAccess->getCount();
-}
-
-Any ImplIntrospectionAdapter::getByIndex(sal_Int32 Index)
- throw( IndexOutOfBoundsException, WrappedTargetException, RuntimeException )
-{
- return mxObjIndexAccess->getByIndex( Index );
-}
-
-// Methoden von XIndexContainer
-void ImplIntrospectionAdapter::insertByIndex(sal_Int32 Index, const Any& Element)
- throw( IllegalArgumentException, IndexOutOfBoundsException, WrappedTargetException, RuntimeException )
-{
- mxObjIndexContainer->insertByIndex( Index, Element );
-}
-
-void ImplIntrospectionAdapter::replaceByIndex(sal_Int32 Index, const Any& Element)
- throw( IllegalArgumentException, IndexOutOfBoundsException, WrappedTargetException, RuntimeException )
-{
- mxObjIndexContainer->replaceByIndex( Index, Element );
-}
-
-void ImplIntrospectionAdapter::removeByIndex(sal_Int32 Index)
- throw( IndexOutOfBoundsException, WrappedTargetException, RuntimeException )
-{
- mxObjIndexContainer->removeByIndex( Index );
-}
-
-// Methoden von XEnumerationAccess
-// Schon in XNameAccess: virtual Reference<XIdlClass> getElementType(void) const;
-Reference<XEnumeration> ImplIntrospectionAdapter::createEnumeration(void) throw( RuntimeException )
-{
- return mxObjEnumerationAccess->createEnumeration();
-}
-
-// Methoden von XIdlArray
-void ImplIntrospectionAdapter::realloc(Any& array, sal_Int32 length)
- throw( IllegalArgumentException, RuntimeException )
-{
- mxObjIdlArray->realloc( array, length );
-}
-
-sal_Int32 ImplIntrospectionAdapter::getLen(const Any& array)
- throw( IllegalArgumentException, RuntimeException )
-{
- return mxObjIdlArray->getLen( array );
-}
-
-Any ImplIntrospectionAdapter::get(const Any& array, sal_Int32 index)
- throw( IllegalArgumentException, ArrayIndexOutOfBoundsException, RuntimeException )
-{
- return mxObjIdlArray->get( array, index );
-}
-
-void ImplIntrospectionAdapter::set(Any& array, sal_Int32 index, const Any& value)
- throw( IllegalArgumentException, ArrayIndexOutOfBoundsException, RuntimeException )
-{
- mxObjIdlArray->set( array, index, value );
-}
-
-
-//**************************************************
-//*** Implementation von ImplIntrospectionAccess ***
-//**************************************************
-
-// Methoden von XIntrospectionAccess
-sal_Int32 ImplIntrospectionAccess::getSuppliedMethodConcepts(void)
- throw( RuntimeException )
-{
- return MethodConcept::DANGEROUS |
- PROPERTY |
- LISTENER |
- ENUMERATION |
- NAMECONTAINER |
- INDEXCONTAINER;
-}
-
-sal_Int32 ImplIntrospectionAccess::getSuppliedPropertyConcepts(void)
- throw( RuntimeException )
-{
- return PropertyConcept::DANGEROUS |
- PROPERTYSET |
- ATTRIBUTES |
- METHODS;
-}
-
-Property ImplIntrospectionAccess::getProperty(const OUString& Name, sal_Int32 PropertyConcepts)
- throw( NoSuchElementException, RuntimeException )
-{
- Property aRet;
- sal_Int32 i = mpStaticImpl->getPropertyIndex( Name );
- sal_Bool bFound = sal_False;
- if( i != -1 )
- {
- sal_Int32 nConcept = mpStaticImpl->getPropertyConcepts().getConstArray()[ i ];
- if( (PropertyConcepts & nConcept) != 0 )
- {
- const Property* pProps = mpStaticImpl->getProperties().getConstArray();
- aRet = pProps[ i ];
- bFound = sal_True;
- }
- }
- if( !bFound )
- throw NoSuchElementException() ;
- return aRet;
-}
-
-sal_Bool ImplIntrospectionAccess::hasProperty(const OUString& Name, sal_Int32 PropertyConcepts)
- throw( RuntimeException )
-{
- sal_Int32 i = mpStaticImpl->getPropertyIndex( Name );
- sal_Bool bRet = sal_False;
- if( i != -1 )
- {
- sal_Int32 nConcept = mpStaticImpl->getPropertyConcepts().getConstArray()[ i ];
- if( (PropertyConcepts & nConcept) != 0 )
- bRet = sal_True;
- }
- return bRet;
-}
-
-Sequence< Property > ImplIntrospectionAccess::getProperties(sal_Int32 PropertyConcepts)
- throw( RuntimeException )
-{
- // Wenn alle unterstuetzten Konzepte gefordert werden, Sequence einfach durchreichen
- sal_Int32 nAllSupportedMask = PROPERTYSET |
- ATTRIBUTES |
- METHODS;
- if( ( PropertyConcepts & nAllSupportedMask ) == nAllSupportedMask )
- {
- return mpStaticImpl->getProperties();
- }
-
- // Gleiche Sequence wie beim vorigen mal?
- if( mnLastPropertyConcept == PropertyConcepts )
- {
- return maLastPropertySeq;
- }
-
- // Anzahl der zu liefernden Properties
- sal_Int32 nCount = 0;
-
- // Es gibt zur Zeit keine DANGEROUS-Properties
- // if( PropertyConcepts & DANGEROUS )
- // nCount += mpStaticImpl->mnDangerousPropCount;
- if( PropertyConcepts & PROPERTYSET )
- nCount += mpStaticImpl->mnPropertySetPropCount;
- if( PropertyConcepts & ATTRIBUTES )
- nCount += mpStaticImpl->mnAttributePropCount;
- if( PropertyConcepts & METHODS )
- nCount += mpStaticImpl->mnMethodPropCount;
-
- // Sequence entsprechend der geforderten Anzahl reallocieren
- ImplIntrospectionAccess* pThis = (ImplIntrospectionAccess*)this; // const umgehen
- pThis->maLastPropertySeq.realloc( nCount );
- Property* pDestProps = pThis->maLastPropertySeq.getArray();
-
- // Alle Properties durchgehen und entsprechend der Concepte uebernehmen
- Sequence<Property> aPropSeq = mpStaticImpl->getProperties();
- const Property* pSourceProps = aPropSeq.getConstArray();
- const sal_Int32* pConcepts = mpStaticImpl->getPropertyConcepts().getConstArray();
- sal_Int32 nLen = aPropSeq.getLength();
-
- sal_Int32 iDest = 0;
- for( sal_Int32 i = 0 ; i < nLen ; i++ )
- {
- sal_Int32 nConcept = pConcepts[ i ];
- if( nConcept & PropertyConcepts )
- pDestProps[ iDest++ ] = pSourceProps[ i ];
- }
-
- // PropertyConcept merken, dies entspricht maLastPropertySeq
- pThis->mnLastPropertyConcept = PropertyConcepts;
-
- // Zusammengebastelte Sequence liefern
- return maLastPropertySeq;
-}
-
-Reference<XIdlMethod> ImplIntrospectionAccess::getMethod(const OUString& Name, sal_Int32 MethodConcepts)
- throw( NoSuchMethodException, RuntimeException )
-{
- Reference<XIdlMethod> xRet;
- sal_Int32 i = mpStaticImpl->getMethodIndex( Name );
- if( i != -1 )
- {
-
- sal_Int32 nConcept = mpStaticImpl->getMethodConcepts().getConstArray()[ i ];
- if( (MethodConcepts & nConcept) != 0 )
- {
- const Reference<XIdlMethod>* pMethods = mpStaticImpl->getMethods().getConstArray();
- xRet = pMethods[i];
- }
- }
- if( !xRet.is() )
- throw NoSuchMethodException();
- return xRet;
-}
-
-sal_Bool ImplIntrospectionAccess::hasMethod(const OUString& Name, sal_Int32 MethodConcepts)
- throw( RuntimeException )
-{
- sal_Int32 i = mpStaticImpl->getMethodIndex( Name );
- sal_Bool bRet = sal_False;
- if( i != -1 )
- {
- sal_Int32 nConcept = mpStaticImpl->getMethodConcepts().getConstArray()[ i ];
- if( (MethodConcepts & nConcept) != 0 )
- bRet = sal_True;
- }
- return bRet;
-}
-
-Sequence< Reference<XIdlMethod> > ImplIntrospectionAccess::getMethods(sal_Int32 MethodConcepts)
- throw( RuntimeException )
-{
- ImplIntrospectionAccess* pThis = (ImplIntrospectionAccess*)this; // const umgehen
-
- // Wenn alle unterstuetzten Konzepte gefordert werden, Sequence einfach durchreichen
- sal_Int32 nAllSupportedMask = MethodConcept::DANGEROUS |
- PROPERTY |
- LISTENER |
- ENUMERATION |
- NAMECONTAINER |
- INDEXCONTAINER |
- MethodConcept_NORMAL_IMPL;
- if( ( MethodConcepts & nAllSupportedMask ) == nAllSupportedMask )
- {
- return mpStaticImpl->getMethods();
- }
-
- // Gleiche Sequence wie beim vorigen mal?
- if( mnLastMethodConcept == MethodConcepts )
- {
- return maLastMethodSeq;
- }
-
- // Methoden-Sequences besorgen
- Sequence< Reference<XIdlMethod> > aMethodSeq = mpStaticImpl->getMethods();
- const Reference<XIdlMethod>* pSourceMethods = aMethodSeq.getConstArray();
- const sal_Int32* pConcepts = mpStaticImpl->getMethodConcepts().getConstArray();
- sal_Int32 nLen = aMethodSeq.getLength();
-
- // Sequence entsprechend der geforderten Anzahl reallocieren
- // Anders als bei den Properties kann die Anzahl nicht durch
- // Zaehler in inspect() vorher ermittelt werden, da Methoden
- // mehreren Konzepten angehoeren koennen
- pThis->maLastMethodSeq.realloc( nLen );
- Reference<XIdlMethod>* pDestMethods = pThis->maLastMethodSeq.getArray();
-
- // Alle Methods durchgehen und entsprechend der Concepte uebernehmen
- sal_Int32 iDest = 0;
- for( sal_Int32 i = 0 ; i < nLen ; i++ )
- {
- sal_Int32 nConcept = pConcepts[ i ];
- if( nConcept & MethodConcepts )
- pDestMethods[ iDest++ ] = pSourceMethods[ i ];
-
- #if OSL_DEBUG_LEVEL > 0
- static bool debug = false;
- if ( debug )
- {
- // Methode mit Concepts ausgeben
- const Reference< XIdlMethod >& rxMethod = pSourceMethods[ i ];
- ::rtl::OString aNameStr = ::rtl::OUStringToOString( rxMethod->getName(), osl_getThreadTextEncoding() );
- ::rtl::OString ConceptStr;
- if( nConcept & MethodConcept::DANGEROUS )
- ConceptStr += "DANGEROUS |";
- if( nConcept & MethodConcept::PROPERTY )
- ConceptStr += "PROPERTY |";
- if( nConcept & MethodConcept::LISTENER )
- ConceptStr += "LISTENER |";
- if( nConcept & MethodConcept::ENUMERATION )
- ConceptStr += "ENUMERATION |";
- if( nConcept & MethodConcept::NAMECONTAINER )
- ConceptStr += "NAMECONTAINER |";
- if( nConcept & MethodConcept::INDEXCONTAINER )
- ConceptStr += "INDEXCONTAINER |";
- OSL_TRACE( "Method %ld: %s, Concepts = %s", i, aNameStr.getStr(), ConceptStr.getStr() );
- }
- #endif
- }
-
- // Auf die richtige Laenge bringen
- pThis->maLastMethodSeq.realloc( iDest );
-
- // MethodConcept merken, dies entspricht maLastMethodSeq
- pThis->mnLastMethodConcept = MethodConcepts;
-
- // Zusammengebastelte Sequence liefern
- return maLastMethodSeq;
-}
-
-Sequence< Type > ImplIntrospectionAccess::getSupportedListeners(void)
- throw( RuntimeException )
-{
- return mpStaticImpl->getSupportedListeners();
-}
-
-Reference<XInterface> SAL_CALL ImplIntrospectionAccess::queryAdapter( const Type& rType )
- throw( IllegalTypeException, RuntimeException )
-{
- // Gibt es schon einen Adapter?
- if( !mpAdapter )
- {
- ((ImplIntrospectionAccess*)this)->mpAdapter =
- new ImplIntrospectionAdapter( this, maInspectedObject, mpStaticImpl );
-
- // Selbst eine Referenz halten
- mpAdapter->acquire();
- }
-
- Reference<XInterface> xRet;
- Any aIfaceAny( mpAdapter->queryInterface( rType ) );
- if( aIfaceAny.hasValue() )
- xRet = *(Reference<XInterface>*)aIfaceAny.getValue();
-
- return xRet;
-}
-
-// Methoden von XMaterialHolder
-Any ImplIntrospectionAccess::getMaterial(void) throw(RuntimeException)
-{
- return maInspectedObject;
-}
-
-// Hilfs-Funktion zur LowerCase-Wandlung eines OUString
-OUString toLower( OUString aUStr )
-{
- // Tabelle fuer XExactName pflegen
- ::rtl::OUString aOWStr( aUStr.getStr() );
- ::rtl::OUString aOWLowerStr = aOWStr.toAsciiLowerCase();
- OUString aLowerUStr( aOWLowerStr.getStr() );
- return aLowerUStr;
-}
-
-// Methoden von XExactName
-OUString ImplIntrospectionAccess::getExactName( const OUString& rApproximateName ) throw( RuntimeException )
-{
- OUString aRetStr;
- LowerToExactNameMap::iterator aIt =
- mpStaticImpl->maLowerToExactNameMap.find( toLower( rApproximateName ) );
- if( !( aIt == mpStaticImpl->maLowerToExactNameMap.end() ) )
- aRetStr = (*aIt).second;
- return aRetStr;
-}
-
-
-//-----------------------------------------------------------------------------
-
-#ifdef USE_INTROSPECTION_CACHE
-
-struct hashIntrospectionKey_Impl
-{
- Sequence< Reference<XIdlClass> > aIdlClasses;
- Reference<XPropertySetInfo> xPropInfo;
- Reference<XIdlClass> xImplClass;
- sal_Int32 nHitCount;
-
- void IncHitCount() const { ((hashIntrospectionKey_Impl*)this)->nHitCount++; }
- hashIntrospectionKey_Impl() : nHitCount( 0 ) {}
- hashIntrospectionKey_Impl( const Sequence< Reference<XIdlClass> > & rIdlClasses,
- const Reference<XPropertySetInfo> & rxPropInfo,
- const Reference<XIdlClass> & rxImplClass );
-};
-
-hashIntrospectionKey_Impl::hashIntrospectionKey_Impl
-(
- const Sequence< Reference<XIdlClass> > & rIdlClasses,
- const Reference<XPropertySetInfo> & rxPropInfo,
- const Reference<XIdlClass> & rxImplClass
-)
- : aIdlClasses( rIdlClasses )
- , xPropInfo( rxPropInfo )
- , xImplClass( rxImplClass )
- , nHitCount( 0 )
-{}
-
-
-struct hashIntrospectionAccessCache_Impl
-{
- size_t operator()(const hashIntrospectionKey_Impl & rObj ) const
- {
- return (size_t)rObj.xImplClass.get() ^ (size_t)rObj.xPropInfo.get();
- }
-
- bool operator()( const hashIntrospectionKey_Impl & rObj1,
- const hashIntrospectionKey_Impl & rObj2 ) const
- {
- if( rObj1.xPropInfo != rObj2.xPropInfo
- || rObj1.xImplClass != rObj2.xImplClass )
- return sal_False;
-
- sal_Int32 nCount1 = rObj1.aIdlClasses.getLength();
- sal_Int32 nCount2 = rObj2.aIdlClasses.getLength();
- if( nCount1 != nCount2 )
- return sal_False;
-
- const Reference<XIdlClass>* pRefs1 = rObj1.aIdlClasses.getConstArray();
- const Reference<XIdlClass>* pRefs2 = rObj2.aIdlClasses.getConstArray();
- return memcmp( pRefs1, pRefs2, nCount1 * sizeof( Reference<XIdlClass> ) ) == 0;
- }
-
-};
-
-typedef boost::unordered_map
-<
- hashIntrospectionKey_Impl,
- IntrospectionAccessStatic_Impl*,
- hashIntrospectionAccessCache_Impl,
- hashIntrospectionAccessCache_Impl
->
-IntrospectionAccessCacheMap_Impl;
-
-class IntrospectionAccessCacheMap : public IntrospectionAccessCacheMap_Impl
-{
-public:
- ~IntrospectionAccessCacheMap()
- {
- IntrospectionAccessCacheMap::iterator iter = begin();
- IntrospectionAccessCacheMap::iterator stop = this->end();
- while( iter != stop )
- {
-
- (*iter).second->release();
- (*iter).second = NULL;
- ++iter;
- }
- }
-};
-
-
-// For XTypeProvider
-struct hashTypeProviderKey_Impl
-{
- Reference<XPropertySetInfo> xPropInfo;
- Sequence< sal_Int8 > maImpIdSeq;
- sal_Int32 nHitCount;
-
- void IncHitCount() const { ((hashTypeProviderKey_Impl*)this)->nHitCount++; }
- hashTypeProviderKey_Impl() : nHitCount( 0 ) {}
- hashTypeProviderKey_Impl( const Reference<XPropertySetInfo> & rxPropInfo, const Sequence< sal_Int8 > & aImpIdSeq_ );
-};
-
-hashTypeProviderKey_Impl::hashTypeProviderKey_Impl
-(
- const Reference<XPropertySetInfo> & rxPropInfo,
- const Sequence< sal_Int8 > & aImpIdSeq_
-)
- : xPropInfo( rxPropInfo )
- , maImpIdSeq( aImpIdSeq_ )
- , nHitCount( 0 )
-{}
-
-
-struct TypeProviderAccessCache_Impl
-{
- size_t operator()(const hashTypeProviderKey_Impl & rObj ) const;
-
- bool operator()( const hashTypeProviderKey_Impl & rObj1,
- const hashTypeProviderKey_Impl & rObj2 ) const
- {
- if( rObj1.xPropInfo != rObj2.xPropInfo )
- return sal_False;
-
- bool bEqual = false;
- sal_Int32 nLen1 = rObj1.maImpIdSeq.getLength();
- sal_Int32 nLen2 = rObj2.maImpIdSeq.getLength();
- if( nLen1 == nLen2 && nLen1 > 0 )
- {
- const sal_Int8* pId1 = rObj1.maImpIdSeq.getConstArray();
- const sal_Int8* pId2 = rObj2.maImpIdSeq.getConstArray();
- bEqual = (memcmp( pId1, pId2, nLen1 * sizeof( sal_Int8 ) ) == 0 );
- }
- return bEqual;
- }
-};
-
-size_t TypeProviderAccessCache_Impl::operator()(const hashTypeProviderKey_Impl & rObj ) const
-{
- const sal_Int32* pBytesAsInt32Array = (const sal_Int32*)rObj.maImpIdSeq.getConstArray();
- sal_Int32 nLen = rObj.maImpIdSeq.getLength();
- sal_Int32 nCount32 = nLen / 4;
- sal_Int32 nMod32 = nLen % 4;
-
- // XOR with full 32 bit values
- sal_Int32 nId32 = 0;
- sal_Int32 i;
- for( i = 0 ; i < nCount32 ; i++ )
- nId32 ^= *(pBytesAsInt32Array++);
-
- // XOR with remaining byte values
- if( nMod32 )
- {
- const sal_Int8* pBytes = (const sal_Int8*)pBytesAsInt32Array;
- sal_Int8* pInt8_Id32 = (sal_Int8*)&nId32;
- for( i = 0 ; i < nMod32 ; i++ )
- *(pInt8_Id32++) ^= *(pBytes++);
- }
-
- return (size_t)nId32;
-}
-
-
-typedef boost::unordered_map
-<
- hashTypeProviderKey_Impl,
- IntrospectionAccessStatic_Impl*,
- TypeProviderAccessCache_Impl,
- TypeProviderAccessCache_Impl
->
-TypeProviderAccessCacheMap_Impl;
-
-class TypeProviderAccessCacheMap : public TypeProviderAccessCacheMap_Impl
-{
-public:
- ~TypeProviderAccessCacheMap()
- {
- TypeProviderAccessCacheMap::iterator iter = begin();
- TypeProviderAccessCacheMap::iterator stop = this->end();
- while( iter != stop )
- {
- (*iter).second->release();
- (*iter).second = NULL;
- ++iter;
- }
- }
-};
-
-#endif
-
-
-//*************************
-//*** ImplIntrospection ***
-//*************************
-
-struct OIntrospectionMutex
-{
- Mutex m_mutex;
-};
-
-class ImplIntrospection : public XIntrospection
- , public XServiceInfo
- , public OIntrospectionMutex
- , public OComponentHelper
-{
- friend class ImplMergeIntrospection;
- friend class ImplMVCIntrospection;
-
- // Implementation der Introspection.
- // ACHTUNG: RefCounting von Hand !!!
- IntrospectionAccessStatic_Impl* implInspect(const Any& aToInspectObj);
-
- // Save XMultiServiceFactory from createComponent
- Reference<XMultiServiceFactory> m_xSMgr;
-
- // CoreReflection halten
- Reference< XIdlReflection > mxCoreReflection;
-
- // Klassen, deren Methoden eine spezielle Rolle spielen
- Reference<XIdlClass> mxElementAccessClass;
- Reference<XIdlClass> mxNameContainerClass;
- Reference<XIdlClass> mxNameAccessClass;
- Reference<XIdlClass> mxIndexContainerClass;
- Reference<XIdlClass> mxIndexAccessClass;
- Reference<XIdlClass> mxEnumerationAccessClass;
- Reference<XIdlClass> mxInterfaceClass;
- Reference<XIdlClass> mxAggregationClass;
- sal_Bool mbDisposed;
-
-#ifdef USE_INTROSPECTION_CACHE
- sal_uInt16 mnCacheEntryCount;
- sal_uInt16 mnTPCacheEntryCount;
- IntrospectionAccessCacheMap* mpCache;
- TypeProviderAccessCacheMap* mpTypeProviderCache;
-#endif
-
-public:
- ImplIntrospection( const Reference<XMultiServiceFactory> & rXSMgr );
-
- // Methoden von XInterface
- virtual Any SAL_CALL queryInterface( const Type& rType ) throw( RuntimeException );
- virtual void SAL_CALL acquire() throw() { OComponentHelper::acquire(); }
- virtual void SAL_CALL release() throw() { OComponentHelper::release(); }
-
- // XTypeProvider
- Sequence< Type > SAL_CALL getTypes( ) throw( RuntimeException );
- Sequence<sal_Int8> SAL_CALL getImplementationId( ) throw( RuntimeException );
-
- // XServiceInfo
- OUString SAL_CALL getImplementationName() throw();
- sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw();
- Sequence< OUString > SAL_CALL getSupportedServiceNames(void) throw();
- static OUString SAL_CALL getImplementationName_Static( );
- static Sequence< OUString > SAL_CALL getSupportedServiceNames_Static(void) throw();
-
- // Methoden von XIntrospection
- virtual Reference<XIntrospectionAccess> SAL_CALL inspect(const Any& aToInspectObj)
- throw( RuntimeException );
-
-protected:
- // some XComponent part from OComponentHelper
- virtual void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException);
-};
-
-enum MethodType
-{
- STANDARD_METHOD, // normale Methode, kein Bezug zu Properties oder Listenern
- GETSET_METHOD, // gehoert zu einer get/set-Property
- ADD_LISTENER_METHOD, // add-Methode einer Listener-Schnittstelle
- REMOVE_LISTENER_METHOD, // remove-Methode einer Listener-Schnittstelle
- INVALID_METHOD // Methode, deren Klasse nicht beruecksichtigt wird, z.B. XPropertySet
-};
-
-// Ctor
-ImplIntrospection::ImplIntrospection( const Reference<XMultiServiceFactory> & rXSMgr )
- : OComponentHelper( m_mutex )
- , m_xSMgr( rXSMgr )
-{
-#ifdef USE_INTROSPECTION_CACHE
- mnCacheEntryCount = 0;
- mnTPCacheEntryCount = 0;
- mpCache = NULL;
- mpTypeProviderCache = NULL;
-#endif
-
- // Spezielle Klassen holen
-// Reference< XInterface > xServiceIface = m_xSMgr->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.reflection.CoreReflection")) );
-// if( xServiceIface.is() )
-// mxCoreReflection = Reference< XIdlReflection >::query( xServiceIface );
- Reference< XPropertySet > xProps( rXSMgr, UNO_QUERY );
- OSL_ASSERT( xProps.is() );
- if (xProps.is())
- {
- Reference< XComponentContext > xContext;
- xProps->getPropertyValue(
- OUString( RTL_CONSTASCII_USTRINGPARAM("DefaultContext") ) ) >>= xContext;
- OSL_ASSERT( xContext.is() );
- if (xContext.is())
- {
- xContext->getValueByName(
- OUString( RTL_CONSTASCII_USTRINGPARAM("/singletons/com.sun.star.reflection.theCoreReflection") ) ) >>= mxCoreReflection;
- OSL_ENSURE( mxCoreReflection.is(), "### CoreReflection singleton not accessible!?" );
- }
- }
- if (! mxCoreReflection.is())
- {
- throw DeploymentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("/singletons/com.sun.star.reflection.theCoreReflection singleton not accessible") ),
- Reference< XInterface >() );
- }
-
- mxElementAccessClass = mxCoreReflection->forName( OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.container.XElementAccess")) );
- mxNameContainerClass = mxCoreReflection->forName( OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.container.XNameContainer")) );
- mxNameAccessClass = mxCoreReflection->forName( OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.container.XNameAccess")) );
- mxIndexContainerClass = mxCoreReflection->forName( OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.container.XIndexContainer")) );
- mxIndexAccessClass = mxCoreReflection->forName( OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.container.XIndexAccess")) );
- mxEnumerationAccessClass = mxCoreReflection->forName( OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.container.XEnumerationAccess")) );
- mxInterfaceClass = mxCoreReflection->forName( OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.XInterface")) );
- mxAggregationClass = mxCoreReflection->forName( OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.XAggregation")) );
- mbDisposed = sal_False;
-}
-
-// XComponent
-void ImplIntrospection::dispose() throw(::com::sun::star::uno::RuntimeException)
-{
- OComponentHelper::dispose();
-
-#ifdef USE_INTROSPECTION_CACHE
- // Cache loeschen
- delete mpCache;
- mpCache = NULL;
- delete mpTypeProviderCache;
- mpTypeProviderCache = NULL;
-#endif
-
- mxElementAccessClass = NULL;
- mxNameContainerClass = NULL;
- mxNameAccessClass = NULL;
- mxIndexContainerClass = NULL;
- mxIndexAccessClass = NULL;
- mxEnumerationAccessClass = NULL;
- mxInterfaceClass = NULL;
- mxAggregationClass = NULL;
- mbDisposed = sal_True;
-}
-
-
-//-----------------------------------------------------------------------------
-
-// XInterface
-Any ImplIntrospection::queryInterface( const Type & rType )
- throw(::com::sun::star::uno::RuntimeException)
-{
- Any aRet( ::cppu::queryInterface(
- rType,
- static_cast< XIntrospection * >( this ),
- static_cast< XServiceInfo * >( this ) ) );
-
- return (aRet.hasValue() ? aRet : OComponentHelper::queryInterface( rType ));
-}
-
-// XTypeProvider
-Sequence< Type > ImplIntrospection::getTypes()
- throw( RuntimeException )
-{
- static OTypeCollection * s_pTypes = 0;
- if (! s_pTypes)
- {
- MutexGuard aGuard( Mutex::getGlobalMutex() );
- if (! s_pTypes)
- {
- static OTypeCollection s_aTypes(
- ::getCppuType( (const Reference< XIntrospection > *)0 ),
- ::getCppuType( (const Reference< XServiceInfo > *)0 ),
- OComponentHelper::getTypes() );
- s_pTypes = &s_aTypes;
- }
- }
- return s_pTypes->getTypes();
-}
-
-Sequence< sal_Int8 > ImplIntrospection::getImplementationId()
- throw( RuntimeException )
-{
- static OImplementationId * s_pId = 0;
- if (! s_pId)
- {
- MutexGuard aGuard( Mutex::getGlobalMutex() );
- if (! s_pId)
- {
- static OImplementationId s_aId;
- s_pId = &s_aId;
- }
- }
- return s_pId->getImplementationId();
-}
-
-
-// XServiceInfo
-OUString ImplIntrospection::getImplementationName() throw()
-{
- return getImplementationName_Static();
-}
-
-// XServiceInfo
-sal_Bool ImplIntrospection::supportsService(const OUString& ServiceName) throw()
-{
- Sequence< OUString > aSNL = getSupportedServiceNames();
- const OUString * pArray = aSNL.getConstArray();
- for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
- if( pArray[i] == ServiceName )
- return sal_True;
- return sal_False;
-}
-
-// XServiceInfo
-Sequence< OUString > ImplIntrospection::getSupportedServiceNames(void) throw()
-{
- return getSupportedServiceNames_Static();
-}
-
-//*************************************************************************
-// Helper XServiceInfo
-OUString ImplIntrospection::getImplementationName_Static( )
-{
- return OUString(RTL_CONSTASCII_USTRINGPARAM(IMPLEMENTATION_NAME));
-}
-
-// ORegistryServiceManager_Static
-Sequence< OUString > ImplIntrospection::getSupportedServiceNames_Static(void) throw()
-{
- Sequence< OUString > aSNS( 1 );
- aSNS.getArray()[0] = OUString(RTL_CONSTASCII_USTRINGPARAM(SERVICE_NAME));
- return aSNS;
-}
-
-//*************************************************************************
-
-// Methoden von XIntrospection
-Reference<XIntrospectionAccess> ImplIntrospection::inspect(const Any& aToInspectObj)
- throw( RuntimeException )
-{
- Reference<XIntrospectionAccess> xAccess;
-
- if ( aToInspectObj.getValueType().getTypeClass() == TypeClass_TYPE )
- {
- Type aType;
- aToInspectObj >>= aType;
-
- Reference< XIdlClass > xIdlClass = mxCoreReflection->forName(((Type*)(aToInspectObj.getValue()))->getTypeName());
-
- if ( xIdlClass.is() )
- {
- Any aRealInspectObj;
- aRealInspectObj <<= xIdlClass;
-
- IntrospectionAccessStatic_Impl* pStaticImpl = implInspect( aRealInspectObj );
- if( pStaticImpl )
- xAccess = new ImplIntrospectionAccess( aRealInspectObj, pStaticImpl );
- }
- }
- else
- {
- IntrospectionAccessStatic_Impl* pStaticImpl = implInspect( aToInspectObj );
- if( pStaticImpl )
- xAccess = new ImplIntrospectionAccess( aToInspectObj, pStaticImpl );
- }
-
- return xAccess;
-}
-
-//-----------------------------------------------------------------------------
-
-// Hashtable fuer Pruefung auf mehrfache Beruecksichtigung von Interfaces
-struct hashInterface_Impl
-{
- size_t operator()(const void* p) const
- {
- return (size_t)p;
- }
-};
-
-struct eqInterface_Impl
-{
- bool operator()(const void* p1, const void* p2) const
- {
- return ( p1 == p2 );
- }
-};
-
-typedef boost::unordered_map
-<
- void*,
- void*,
- hashInterface_Impl,
- eqInterface_Impl
->
-CheckedInterfacesMap;
-
-
-
-// TODO: Spaeter auslagern
-Reference<XIdlClass> TypeToIdlClass( const Type& rType, const Reference< XMultiServiceFactory > & xMgr )
-{
- static Reference< XIdlReflection > xRefl;
-
- // void als Default-Klasse eintragen
- Reference<XIdlClass> xRetClass;
- typelib_TypeDescription * pTD = 0;
- rType.getDescription( &pTD );
- if( pTD )
- {
- OUString sOWName( pTD->pTypeName );
- if( !xRefl.is() )
- {
- xRefl = Reference< XIdlReflection >( xMgr->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.reflection.CoreReflection")) ), UNO_QUERY );
- OSL_ENSURE( xRefl.is(), "### no corereflection!" );
- }
- xRetClass = xRefl->forName( sOWName );
- }
- return xRetClass;
-}
-
-// Implementation der Introspection.
-IntrospectionAccessStatic_Impl* ImplIntrospection::implInspect(const Any& aToInspectObj)
-{
- MutexGuard aGuard( m_mutex );
-
- // Wenn die Introspection schon disposed ist, wird nur ein leeres Ergebnis geliefert
- if( mbDisposed )
- return NULL;
-
- // Objekt untersuchen
- TypeClass eType = aToInspectObj.getValueType().getTypeClass();
- if( eType != TypeClass_INTERFACE && eType != TypeClass_STRUCT && eType != TypeClass_EXCEPTION )
- return NULL;
-
- Reference<XInterface> x;
- if( eType == TypeClass_INTERFACE )
- {
- // Interface aus dem Any besorgen
- x = *(Reference<XInterface>*)aToInspectObj.getValue();
- if( !x.is() )
- return NULL;
- }
-
-#ifdef USE_INTROSPECTION_CACHE
- // Haben wir schon eine Cache-Instanz
- if( !mpCache )
- mpCache = new IntrospectionAccessCacheMap;
- if( !mpTypeProviderCache )
- mpTypeProviderCache = new TypeProviderAccessCacheMap;
- IntrospectionAccessCacheMap& aCache = *mpCache;
- TypeProviderAccessCacheMap& aTPCache = *mpTypeProviderCache;
-
- // Pointer auf ggf. noetige neue IntrospectionAccess-Instanz
- IntrospectionAccessStatic_Impl* pAccess = NULL;
-#else
- // Pointer auf ggf. noetige neue IntrospectionAccess-Instanz
- IntrospectionAccessStatic_Impl* pAccess = new IntrospectionAccessStatic_Impl( mxCoreReflection );
-#endif
-
- // Pruefen: Ist schon ein passendes Access-Objekt gecached?
- Sequence< Reference<XIdlClass> > SupportedClassSeq;
- Sequence< Type > SupportedTypesSeq;
- Reference<XIdlClassProvider> xClassProvider;
- Reference<XTypeProvider> xTypeProvider;
- Reference<XIdlClass> xImplClass;
- Reference<XPropertySetInfo> xPropSetInfo;
- Reference<XPropertySet> xPropSet;
-
- // Bei Interfaces XTypeProvider / XIdlClassProvider- und PropertySet-Interface anfordern
- if( eType == TypeClass_INTERFACE )
- {
- // XIdlClassProvider
- xTypeProvider = Reference<XTypeProvider>::query( x );
- if( xTypeProvider.is() )
- {
- SupportedTypesSeq = xTypeProvider->getTypes();
- sal_Int32 nTypeCount = SupportedTypesSeq.getLength();
- if( nTypeCount )
- {
- SupportedClassSeq.realloc( nTypeCount );
- Reference<XIdlClass>* pClasses = SupportedClassSeq.getArray();
-
- const Type* pTypes = SupportedTypesSeq.getConstArray();
- for( sal_Int32 i = 0 ; i < nTypeCount ; i++ )
- {
- pClasses[ i ] = TypeToIdlClass( pTypes[ i ], m_xSMgr );
- }
- // TODO: Caching!
- }
- }
- else
- {
- // XIdlClassProvider
- xClassProvider = Reference<XIdlClassProvider>::query( x );
- if( xClassProvider.is() )
- {
- SupportedClassSeq = xClassProvider->getIdlClasses();
- if( SupportedClassSeq.getLength() )
- xImplClass = SupportedClassSeq.getConstArray()[0];
- }
- }
- // #70197, fuer InvocationAdapter: Interface-Typ im Any auch ohne
- // ClassProvider unterstuetzen
- if( !xClassProvider.is() && !xTypeProvider.is() )
- {
- xImplClass = TypeToIdlClass( aToInspectObj.getValueType(), m_xSMgr );
- SupportedClassSeq.realloc( 1 );
- SupportedClassSeq.getArray()[ 0 ] = xImplClass;
- }
-
- xPropSet = Reference<XPropertySet>::query( x );
- // Jetzt versuchen, das PropertySetInfo zu bekommen
- if( xPropSet.is() )
- xPropSetInfo = xPropSet->getPropertySetInfo();
- }
- else
- {
- xImplClass = TypeToIdlClass( aToInspectObj.getValueType(), m_xSMgr );
- }
-
-#ifdef USE_INTROSPECTION_CACHE
- if( xTypeProvider.is() )
- {
- Sequence< sal_Int8 > aImpIdSeq = xTypeProvider->getImplementationId();
- sal_Int32 nIdLen = aImpIdSeq.getLength();
-
- if( nIdLen )
- {
- // cache only, if the descriptor class is set
- hashTypeProviderKey_Impl aKeySeq( xPropSetInfo, aImpIdSeq );
-
- TypeProviderAccessCacheMap::iterator aIt = aTPCache.find( aKeySeq );
- if( aIt == aTPCache.end() )
- {
- // not found
- // Neue Instanz anlegen und unter dem gegebenen Key einfuegen
- pAccess = new IntrospectionAccessStatic_Impl( mxCoreReflection );
-
- // RefCount von Hand erhoehen, muss beim Entfernen
- // aus der Hashtable wieder released werden
- pAccess->acquire();
-
- // Groesse begrenzen, alten Eintrag wieder rausschmeissen
- if( mnTPCacheEntryCount > INTROSPECTION_CACHE_MAX_SIZE )
- {
- // Access mit dem kleinsten HitCount suchen
- TypeProviderAccessCacheMap::iterator iter = aTPCache.begin();
- TypeProviderAccessCacheMap::iterator end = aTPCache.end();
- TypeProviderAccessCacheMap::iterator toDelete = iter;
- while( iter != end )
- {
- if( (*iter).first.nHitCount < (*toDelete).first.nHitCount )
- toDelete = iter;
- ++iter;
- }
-
- // Gefundenen Eintrag entfernen
- if( (*toDelete).second )
- (*toDelete).second->release();
- (*toDelete).second = NULL;
- aTPCache.erase( toDelete );
- }
- else
- mnTPCacheEntryCount++;
-
- // Neuer Eintrage rein in die Table
- aKeySeq.nHitCount = 1;
- aTPCache[ aKeySeq ] = pAccess;
-
- }
- else
- {
- // Hit-Count erhoehen
- (*aIt).first.IncHitCount();
- return (*aIt).second;
- }
- }
- }
- else if( xImplClass.is() )
- {
- // cache only, if the descriptor class is set
- hashIntrospectionKey_Impl aKeySeq( SupportedClassSeq, xPropSetInfo, xImplClass );
-
- IntrospectionAccessCacheMap::iterator aIt = aCache.find( aKeySeq );
- if( aIt == aCache.end() )
- {
- // not found
- // Neue Instanz anlegen und unter dem gegebenen Key einfuegen
- pAccess = new IntrospectionAccessStatic_Impl( mxCoreReflection );
-
- // RefCount von Hand erhoehen, muss beim Entfernen
- // aus der Hashtable wieder released werden
- pAccess->acquire();
-
- // Groesse begrenzen, alten Eintrag wieder rausschmeissen
- if( mnCacheEntryCount > INTROSPECTION_CACHE_MAX_SIZE )
- {
- // Access mit dem kleinsten HitCount suchen
- IntrospectionAccessCacheMap::iterator iter = aCache.begin();
- IntrospectionAccessCacheMap::iterator end = aCache.end();
- IntrospectionAccessCacheMap::iterator toDelete = iter;
- while( iter != end )
- {
- if( (*iter).first.nHitCount < (*toDelete).first.nHitCount )
- toDelete = iter;
- ++iter;
- }
-
- // Gefundenen Eintrag entfernen
- if( (*toDelete).second )
- (*toDelete).second->release();
- (*toDelete).second = NULL;
- aCache.erase( toDelete );
- }
- else
- mnCacheEntryCount++;
-
- // Neuer Eintrage rein in die Table
- aKeySeq.nHitCount = 1;
- aCache[ aKeySeq ] = pAccess;
-
- }
- else
- {
- // Hit-Count erhoehen
- (*aIt).first.IncHitCount();
- return (*aIt).second;
- }
- }
-#endif
-
- // Kein Access gecached -> neu anlegen
- Property* pAllPropArray;
- Reference<XInterface>* pInterfaces1;
- Reference<XInterface>* pInterfaces2;
- sal_Int16* pMapTypeArray;
- sal_Int32* pPropertyConceptArray;
- sal_Int32 i;
-
- if( !pAccess )
- pAccess = new IntrospectionAccessStatic_Impl( mxCoreReflection );
-
- // Referenzen auf wichtige Daten von pAccess
- sal_Int32& rPropCount = pAccess->mnPropCount;
- IntrospectionNameMap& rPropNameMap = pAccess->maPropertyNameMap;
- IntrospectionNameMap& rMethodNameMap = pAccess->maMethodNameMap;
- LowerToExactNameMap& rLowerToExactNameMap = pAccess->maLowerToExactNameMap;
-
- // Schon mal Pointer auf das eigene Property-Feld holen
- pAllPropArray = pAccess->maAllPropertySeq.getArray();
- pInterfaces1 = pAccess->aInterfaceSeq1.getArray();
- pInterfaces2 = pAccess->aInterfaceSeq2.getArray();
- pMapTypeArray = pAccess->maMapTypeSeq.getArray();
- pPropertyConceptArray = pAccess->maPropertyConceptSeq.getArray();
-
- //*************************
- //*** Analyse vornehmen ***
- //*************************
- if( eType == TypeClass_INTERFACE )
- {
- // Zunaechst nach speziellen Interfaces suchen, die fuer
- // die Introspection von besonderer Bedeutung sind.
-
- // XPropertySet vorhanden?
- if( xPropSet.is() && xPropSetInfo.is() )
- {
- // Gibt es auch ein FastPropertySet?
- Reference<XFastPropertySet> xDummy = Reference<XFastPropertySet>::query( x );
- sal_Bool bFast = pAccess->mbFastPropSet = xDummy.is();
-
- Sequence<Property> aPropSeq = xPropSetInfo->getProperties();
- const Property* pProps = aPropSeq.getConstArray();
- sal_Int32 nLen = aPropSeq.getLength();
-
- // Bei FastPropertySet muessen wir uns die Original-Handles merken
- if( bFast )
- pAccess->mpOrgPropertyHandleArray = new sal_Int32[ nLen ];
-
- for( i = 0 ; i < nLen ; i++ )
- {
- // Property in eigene Liste uebernehmen
- pAccess->checkPropertyArraysSize
- ( pAllPropArray, pMapTypeArray, pPropertyConceptArray, rPropCount );
- Property& rProp = pAllPropArray[ rPropCount ];
- rProp = pProps[ i ];
-
- if( bFast )
- pAccess->mpOrgPropertyHandleArray[ i ] = rProp.Handle;
-
- // PropCount als Handle fuer das eigene FastPropertySet eintragen
- rProp.Handle = rPropCount;
-
- // Art der Property merken
- pMapTypeArray[ rPropCount ] = MAP_PROPERTY_SET;
- pPropertyConceptArray[ rPropCount ] = PROPERTYSET;
- pAccess->mnPropertySetPropCount++;
-
- // Namen in Hashtable eintragen, wenn nicht schon bekannt
- OUString aPropName = rProp.Name;
-
- // Haben wir den Namen schon?
- IntrospectionNameMap::iterator aIt = rPropNameMap.find( aPropName );
- if( aIt == rPropNameMap.end() )
- {
- // Neuer Eintrag in die Hashtable
- rPropNameMap[ aPropName ] = rPropCount;
-
- // Tabelle fuer XExactName pflegen
- rLowerToExactNameMap[ toLower( aPropName ) ] = aPropName;
- }
- else
- {
- OSL_FAIL( OString( "Introspection: Property \"" ) +
- OUStringToOString( aPropName, RTL_TEXTENCODING_ASCII_US ) +
- OString( "\" found more than once in PropertySet" ) );
- }
-
- // Count pflegen
- rPropCount++;
- }
- }
-
-
- // Jetzt alle weiteren implementierten Interfaces durchgehen
- // Diese muessen durch das XIdlClassProvider-Interface geliefert werden.
- // #70197, fuer InvocationAdapter: Interface-Typ im Any auch ohne
- // ClassProvider unterstuetzen
- //if( xClassProvider.is() )
- {
- // Indizes in die Export-Tabellen
- sal_Int32 iAllExportedMethod = 0;
- sal_Int32 iAllSupportedListener = 0;
-
- // Hashtable fuer Pruefung auf mehrfache Beruecksichtigung von Interfaces
- CheckedInterfacesMap aCheckedInterfacesMap;
-
- // Flag, ob XInterface-Methoden erfasst werden sollen
- // (das darf nur einmal erfolgen, initial zulassen)
- sal_Bool bXInterfaceIsInvalid = sal_False;
-
- // Flag, ob die XInterface-Methoden schon erfasst wurden. Wenn sal_True,
- // wird bXInterfaceIsInvalid am Ende der Iface-Schleife aktiviert und
- // XInterface-Methoden werden danach abgeklemmt.
- sal_Bool bFoundXInterface = sal_False;
-
- // Schleife ueber alle vom ClassProvider angegebenen Klassen
- sal_Int32 nClassCount = SupportedClassSeq.getLength();
- for( sal_Int32 nIdx = 0 ; nIdx < nClassCount; nIdx++ )
- {
- Reference<XIdlClass> xImplClass2 = SupportedClassSeq.getConstArray()[nIdx];
- while( xImplClass2.is() )
- {
- // Interfaces der Implementation holen
- Sequence< Reference<XIdlClass> > aClassSeq = xImplClass2->getInterfaces();
- sal_Int32 nIfaceCount = aClassSeq.getLength();
-
- aClassSeq.realloc( nIfaceCount + 1 );
- aClassSeq.getArray()[ nIfaceCount ] = xImplClass2;
- nIfaceCount++;
-
- const Reference<XIdlClass>* pParamArray = aClassSeq.getConstArray();
-
- for( sal_Int32 j = 0 ; j < nIfaceCount ; j++ )
- {
- const Reference<XIdlClass>& rxIfaceClass = pParamArray[j];
-
- // Pruefen, ob das Interface schon beruecksichtigt wurde.
- XInterface* pIface = SAL_STATIC_CAST( XInterface*, rxIfaceClass.get() );
- if( aCheckedInterfacesMap.count( pIface ) > 0 )
- {
- // Kennen wir schon
- continue;
- }
- else
- {
- // Sonst eintragen
- aCheckedInterfacesMap[ pIface ] = pIface;
- }
-
- //********************************************************************
-
- // 2. Fields als Properties registrieren
-
- // Felder holen
- Sequence< Reference<XIdlField> > fields = rxIfaceClass->getFields();
- const Reference<XIdlField>* pFields = fields.getConstArray();
- sal_Int32 nLen = fields.getLength();
-
- for( i = 0 ; i < nLen ; i++ )
- {
- Reference<XIdlField> xField = pFields[i];
- Reference<XIdlClass> xPropType = xField->getType();
-
- // Ist die PropertySequence gross genug?
- pAccess->checkPropertyArraysSize
- ( pAllPropArray, pMapTypeArray, pPropertyConceptArray, rPropCount );
-
- // In eigenes Property-Array eintragen
- Property& rProp = pAllPropArray[ rPropCount ];
- OUString aFieldName = xField->getName();
- rProp.Name = aFieldName;
- rProp.Handle = rPropCount;
- Type aFieldType( xPropType->getTypeClass(), xPropType->getName() );
- rProp.Type = aFieldType;
- FieldAccessMode eAccessMode = xField->getAccessMode();
- rProp.Attributes = (eAccessMode == FieldAccessMode_READONLY ||
- eAccessMode == FieldAccessMode_CONST)
- ? READONLY : 0;
-
- // Namen in Hashtable eintragen
- OUString aPropName = rProp.Name;
-
- // Haben wir den Namen schon?
- IntrospectionNameMap::iterator aIt = rPropNameMap.find( aPropName );
- if( !( aIt == rPropNameMap.end() ) )
- {
- /* TODO
- OSL_TRACE(
- String( "Introspection: Property \"" ) +
- OOUStringToString( aPropName, CHARSET_SYSTEM ) +
- String( "\" found more than once" ) );
- */
- continue;
- }
-
- // Neuer Eintrag in die Hashtable
- rPropNameMap[ aPropName ] = rPropCount;
-
- // Tabelle fuer XExactName pflegen
- rLowerToExactNameMap[ toLower( aPropName ) ] = aPropName;
-
- // Field merken
- pAccess->checkInterfaceArraySize( pAccess->aInterfaceSeq1,
- pInterfaces1, rPropCount );
- pInterfaces1[ rPropCount ] = xField;
-
- // Art der Property merken
- pMapTypeArray[ rPropCount ] = MAP_FIELD;
- pPropertyConceptArray[ rPropCount ] = ATTRIBUTES;
- pAccess->mnAttributePropCount++;
-
- // Count pflegen
- rPropCount++;
- }
-
- //********************************************************************
-
- // 3. Methoden
-
- // Zaehler fuer die gefundenen Listener
- sal_Int32 nListenerCount = 0;
-
- // Alle Methoden holen und merken
- Sequence< Reference<XIdlMethod> > methods = rxIfaceClass->getMethods();
- const Reference<XIdlMethod>* pSourceMethods = methods.getConstArray();
- sal_Int32 nSourceMethodCount = methods.getLength();
-
- // 3. a) get/set- und Listener-Methoden suchen
-
- // Feld fuer Infos ueber die Methoden anlegen, damit spaeter leicht die Methoden
- // gefunden werden koennen, die nicht im Zusammenhang mit Properties oder Listenern
- // stehen. NEU: auch MethodConceptArray initialisieren
- MethodType* pMethodTypes = new MethodType[ nSourceMethodCount ];
- sal_Int32* pLocalMethodConcepts = new sal_Int32[ nSourceMethodCount ];
- for( i = 0 ; i < nSourceMethodCount ; i++ )
- {
- pMethodTypes[ i ] = STANDARD_METHOD;
- pLocalMethodConcepts[ i ] = 0;
- }
-
- OUString aMethName;
- OUString aPropName;
- OUString aStartStr;
- for( i = 0 ; i < nSourceMethodCount ; i++ )
- {
- // Methode ansprechen
- const Reference<XIdlMethod>& rxMethod_i = pSourceMethods[i];
- sal_Int32& rMethodConcept_i = pLocalMethodConcepts[ i ];
-
- // Namen besorgen
- aMethName = rxMethod_i->getName();
-
- // Methoden katalogisieren
- // Alle (?) Methoden von XInterface filtern, damit z.B. nicht
- // vom Scripting aus aquire oder release gerufen werden kann
- if( rxMethod_i->getDeclaringClass()->equals( mxInterfaceClass ) )
- {
- // XInterface-Methoden sind hiermit einmal beruecksichtigt
- bFoundXInterface = sal_True;
-
- if( bXInterfaceIsInvalid )
- {
- pMethodTypes[ i ] = INVALID_METHOD;
- continue;
- }
- else
- {
- if( aMethName != OUString( RTL_CONSTASCII_USTRINGPARAM("queryInterface")) )
- {
- rMethodConcept_i |= MethodConcept::DANGEROUS;
- continue;
- }
- }
- }
- else if( rxMethod_i->getDeclaringClass()->equals( mxAggregationClass ) )
- {
- if( aMethName == OUString( RTL_CONSTASCII_USTRINGPARAM("setDelegator")) )
- {
- rMethodConcept_i |= MethodConcept::DANGEROUS;
- continue;
- }
- }
- else if( rxMethod_i->getDeclaringClass()->equals( mxElementAccessClass ) )
- {
- rMethodConcept_i |= ( NAMECONTAINER |
- INDEXCONTAINER |
- ENUMERATION );
- }
- else if( rxMethod_i->getDeclaringClass()->equals( mxNameContainerClass ) ||
- rxMethod_i->getDeclaringClass()->equals( mxNameAccessClass ) )
- {
- rMethodConcept_i |= NAMECONTAINER;
- }
- else if( rxMethod_i->getDeclaringClass()->equals( mxIndexContainerClass ) ||
- rxMethod_i->getDeclaringClass()->equals( mxIndexAccessClass ) )
- {
- rMethodConcept_i |= INDEXCONTAINER;
- }
- else if( rxMethod_i->getDeclaringClass()->equals( mxEnumerationAccessClass ) )
- {
- rMethodConcept_i |= ENUMERATION;
- }
-
- // Wenn der Name zu kurz ist, wird's sowieso nichts
- if( aMethName.getLength() <= 3 )
- continue;
-
- // Ist es eine get-Methode?
- aStartStr = aMethName.copy( 0, 3 );
- if( aStartStr == OUString( RTL_CONSTASCII_USTRINGPARAM("get")) )
- {
- // Namen der potentiellen Property
- aPropName = aMethName.copy( 3 );
-
- // get-Methode darf keinen Parameter haben
- Sequence< Reference<XIdlClass> > getParams = rxMethod_i->getParameterTypes();
- if( getParams.getLength() > 0 )
- {
- continue;
- }
-
- // Haben wir den Namen schon?
- IntrospectionNameMap::iterator aIt = rPropNameMap.find( aPropName );
- if( !( aIt == rPropNameMap.end() ) )
- {
- /* TODO
- OSL_TRACE(
- String( "Introspection: Property \"" ) +
- OOUStringToString( aPropName, CHARSET_SYSTEM ) +
- String( "\" found more than once" ) );
- */
- continue;
- }
-
- // Eine readonly-Property ist es jetzt mindestens schon
- rMethodConcept_i |= PROPERTY;
-
- pMethodTypes[i] = GETSET_METHOD;
- Reference<XIdlClass> xGetRetType = rxMethod_i->getReturnType();
-
- // Ist die PropertySequence gross genug?
- pAccess->checkPropertyArraysSize
- ( pAllPropArray, pMapTypeArray, pPropertyConceptArray, rPropCount );
-
- // In eigenes Property-Array eintragen
- Property& rProp = pAllPropArray[ rPropCount ];
- rProp.Name = aPropName;
- rProp.Handle = rPropCount;
- rProp.Type = Type( xGetRetType->getTypeClass(), xGetRetType->getName() );
- rProp.Attributes = READONLY;
-
- // Neuer Eintrag in die Hashtable
- rPropNameMap[ aPropName ] = rPropCount;
-
- // Tabelle fuer XExactName pflegen
- rLowerToExactNameMap[ toLower( aPropName ) ] = aPropName;
-
- // get-Methode merken
- pAccess->checkInterfaceArraySize( pAccess->aInterfaceSeq1,
- pInterfaces1, rPropCount );
- pInterfaces1[ rPropCount ] = rxMethod_i;
-
- // Art der Property merken
- pMapTypeArray[ rPropCount ] = MAP_GETSET;
- pPropertyConceptArray[ rPropCount ] = METHODS;
- pAccess->mnMethodPropCount++;
-
- // Passende set-Methode suchen
- sal_Int32 k;
- for( k = 0 ; k < nSourceMethodCount ; k++ )
- {
- // Methode ansprechen
- const Reference<XIdlMethod>& rxMethod_k = pSourceMethods[k];
-
- // Nur Methoden nehmen, die nicht schon zugeordnet sind
- if( k == i || pMethodTypes[k] != STANDARD_METHOD )
- continue;
-
- // Name holen und auswerten
- OUString aMethName2 = rxMethod_k->getName();
- OUString aStartStr2 = aMethName2.copy( 0, 3 );
- // ACHTUNG: Wegen SDL-Bug NICHT != bei OUString verwenden !!!
- if( !( aStartStr2 == OUString( RTL_CONSTASCII_USTRINGPARAM("set")) ) )
- continue;
-
- // Ist es denn der gleiche Name?
- OUString aPropName2 = aMethName2.copy( 3 );
- // ACHTUNG: Wegen SDL-Bug NICHT != bei OUString verwenden !!!
- if( !( aPropName == aPropName2 ) )
- continue;
-
- // set-Methode muss void returnen
- Reference<XIdlClass> xSetRetType = rxMethod_k->getReturnType();
- if( xSetRetType->getTypeClass() != TypeClass_VOID )
- {
- continue;
- }
-
- // set-Methode darf nur einen Parameter haben
- Sequence< Reference<XIdlClass> > setParams = rxMethod_k->getParameterTypes();
- sal_Int32 nParamCount = setParams.getLength();
- if( nParamCount != 1 )
- {
- continue;
- }
-
- // Jetzt muss nur noch der return-Typ dem Parameter-Typ entsprechen
- const Reference<XIdlClass>* pParamArray2 = setParams.getConstArray();
- Reference<XIdlClass> xParamType = pParamArray2[ 0 ];
- if( xParamType->equals( xGetRetType ) )
- {
- pLocalMethodConcepts[ k ] = PROPERTY;
-
- pMethodTypes[k] = GETSET_METHOD;
-
- // ReadOnly-Flag wieder loschen
- rProp.Attributes &= ~READONLY;
-
- // set-Methode merken
- pAccess->checkInterfaceArraySize( pAccess->aInterfaceSeq2,
- pInterfaces2, rPropCount );
- pInterfaces2[ rPropCount ] = rxMethod_k;
- }
- }
-
- // Count pflegen
- rPropCount++;
- }
-
- // Ist es eine addListener-Methode?
- else if( aStartStr == OUString( RTL_CONSTASCII_USTRINGPARAM("add")) )
- {
- OUString aListenerStr( RTL_CONSTASCII_USTRINGPARAM("Listener" ) );
-
- // Namen der potentiellen Property
- sal_Int32 nStrLen = aMethName.getLength();
- sal_Int32 nCopyLen = nStrLen - aListenerStr.getLength();
- OUString aEndStr = aMethName.copy( nCopyLen > 0 ? nCopyLen : 0 );
-
- // Endet das Teil auf Listener?
- // ACHTUNG: Wegen SDL-Bug NICHT != bei OUString verwenden !!!
- if( !( aEndStr == aListenerStr ) )
- continue;
-
- // Welcher Listener?
- OUString aListenerName = aMethName.copy( 3, nStrLen - aListenerStr.getLength() - 3 );
-
- // TODO: Hier koennten noch genauere Pruefungen vorgenommen werden
- // - Rueckgabe-Typ
- // - Anzahl und Art der Parameter
-
-
- // Passende remove-Methode suchen, sonst gilt's nicht
- sal_Int32 k;
- for( k = 0 ; k < nSourceMethodCount ; k++ )
- {
- // Methode ansprechen
- const Reference<XIdlMethod>& rxMethod_k = pSourceMethods[k];
-
- // Nur Methoden nehmen, die nicht schon zugeordnet sind
- if( k == i || pMethodTypes[k] != STANDARD_METHOD )
- continue;
-
- // Name holen und auswerten
- OUString aMethName2 = rxMethod_k->getName();
- sal_Int32 nNameLen = aMethName2.getLength();
- sal_Int32 nCopyLen2 = (nNameLen < 6) ? nNameLen : 6;
- OUString aStartStr2 = aMethName2.copy( 0, nCopyLen2 );
- OUString aRemoveStr( RTL_CONSTASCII_USTRINGPARAM("remove" ) );
- // ACHTUNG: Wegen SDL-Bug NICHT != bei OUString verwenden !!!
- if( !( aStartStr2 == aRemoveStr ) )
- continue;
-
- // Ist es denn der gleiche Listener?
- if( aMethName2.getLength() - aRemoveStr.getLength() <= aListenerStr.getLength() )
- continue;
- OUString aListenerName2 = aMethName2.copy
- ( 6, aMethName2.getLength() - aRemoveStr.getLength() - aListenerStr.getLength() );
- // ACHTUNG: Wegen SDL-Bug NICHT != bei OUString verwenden !!!
- if( !( aListenerName == aListenerName2 ) )
- continue;
-
- // TODO: Hier koennten noch genauere Pruefungen vorgenommen werden
- // - Rueckgabe-Typ
- // - Anzahl und Art der Parameter
-
-
- // Methoden sind als Listener-Schnittstelle erkannt
- rMethodConcept_i |= LISTENER;
- pLocalMethodConcepts[ k ] |= LISTENER;
-
- pMethodTypes[i] = ADD_LISTENER_METHOD;
- pMethodTypes[k] = REMOVE_LISTENER_METHOD;
- nListenerCount++;
- }
- }
- }
-
-
- // Jetzt koennen noch SET-Methoden ohne zugehoerige GET-Methode existieren,
- // diese muessen zu Write-Only-Properties gemachte werden.
- for( i = 0 ; i < nSourceMethodCount ; i++ )
- {
- // Methode ansprechen
- const Reference<XIdlMethod>& rxMethod_i = pSourceMethods[i];
-
- // Nur Methoden nehmen, die nicht schon zugeordnet sind
- if( pMethodTypes[i] != STANDARD_METHOD )
- continue;
-
- // Namen besorgen
- aMethName = rxMethod_i->getName();
-
- // Wenn der Name zu kurz ist, wird's sowieso nichts
- if( aMethName.getLength() <= 3 )
- continue;
-
- // Ist es eine set-Methode ohne zugehoerige get-Methode?
- aStartStr = aMethName.copy( 0, 3 );
- if( aStartStr == OUString( RTL_CONSTASCII_USTRINGPARAM("set")) )
- {
- // Namen der potentiellen Property
- aPropName = aMethName.copy( 3 );
-
- // set-Methode muss void returnen
- Reference<XIdlClass> xSetRetType = rxMethod_i->getReturnType();
- if( xSetRetType->getTypeClass() != TypeClass_VOID )
- {
- continue;
- }
-
- // set-Methode darf nur einen Parameter haben
- Sequence< Reference<XIdlClass> > setParams = rxMethod_i->getParameterTypes();
- sal_Int32 nParamCount = setParams.getLength();
- if( nParamCount != 1 )
- {
- continue;
- }
-
- // Haben wir den Namen schon?
- IntrospectionNameMap::iterator aIt = rPropNameMap.find( aPropName );
- if( !( aIt == rPropNameMap.end() ) )
- {
- /* TODO:
- OSL_TRACE(
- String( "Introspection: Property \"" ) +
- OOUStringToString( aPropName, CHARSET_SYSTEM ) +
- String( "\" found more than once" ) );
- */
- continue;
- }
-
- // Alles klar, es ist eine Write-Only-Property
- pLocalMethodConcepts[ i ] = PROPERTY;
-
- pMethodTypes[i] = GETSET_METHOD;
- Reference<XIdlClass> xGetRetType = setParams.getConstArray()[0];
-
- // Ist die PropertySequence gross genug?
- pAccess->checkPropertyArraysSize
- ( pAllPropArray, pMapTypeArray, pPropertyConceptArray, rPropCount );
-
- // In eigenes Property-Array eintragen
- Property& rProp = pAllPropArray[ rPropCount ];
- rProp.Name = aPropName;
- rProp.Handle = rPropCount;
- rProp.Type = Type( xGetRetType->getTypeClass(), xGetRetType->getName() );
- rProp.Attributes = 0; // PROPERTY_WRITEONLY ???
-
- // Neuer Eintrag in die Hashtable
- rPropNameMap[ aPropName ] = rPropCount;
-
- // Tabelle fuer XExactName pflegen
- rLowerToExactNameMap[ toLower( aPropName ) ] = aPropName;
-
- // set-Methode merken
- pAccess->checkInterfaceArraySize( pAccess->aInterfaceSeq2,
- pInterfaces2, rPropCount );
- pInterfaces2[ rPropCount ] = rxMethod_i;
-
- // Art der Property merken
- pMapTypeArray[ rPropCount ] = MAP_SETONLY;
- pPropertyConceptArray[ rPropCount ] = METHODS;
- pAccess->mnMethodPropCount++;
-
- // Count pflegen
- rPropCount++;
- }
- }
-
-
- //********************************************************************
-
- // 4. Methoden in die Gesamt-Sequence uebernehmen
-
- // Wieviele Methoden muessen in die Method-Sequence?
- sal_Int32 nExportedMethodCount = 0;
- sal_Int32 nSupportedListenerCount = 0;
- for( i = 0 ; i < nSourceMethodCount ; i++ )
- {
- if( pMethodTypes[ i ] != INVALID_METHOD )
- {
- nExportedMethodCount++;
- }
- if( pMethodTypes[ i ] == ADD_LISTENER_METHOD )
- {
- nSupportedListenerCount++;
- }
- }
-
- // Sequences im Access-Objekt entsprechend aufbohren
- pAccess->maAllMethodSeq.realloc( nExportedMethodCount + iAllExportedMethod );
- pAccess->maMethodConceptSeq.realloc( nExportedMethodCount + iAllExportedMethod );
- pAccess->maSupportedListenerSeq.realloc( nSupportedListenerCount + iAllSupportedListener );
-
- // Methoden reinschreiben
- Reference<XIdlMethod>* pDestMethods = pAccess->maAllMethodSeq.getArray();
- sal_Int32* pMethodConceptArray = pAccess->maMethodConceptSeq.getArray();
- Type* pListenerClassRefs = pAccess->maSupportedListenerSeq.getArray();
- for( i = 0 ; i < nSourceMethodCount ; i++ )
- {
- if( pMethodTypes[ i ] != INVALID_METHOD )
- {
- // Methode ansprechen
- const Reference<XIdlMethod>& rxMethod = pSourceMethods[i];
-
- // Namen in Hashtable eintragen, wenn nicht schon bekannt
- OUString aMethName2 = rxMethod->getName();
- IntrospectionNameMap::iterator aIt = rMethodNameMap.find( aMethName2 );
- if( aIt == rMethodNameMap.end() )
- {
- // Eintragen
- rMethodNameMap[ aMethName2 ] = iAllExportedMethod;
-
- // Tabelle fuer XExactName pflegen
- rLowerToExactNameMap[ toLower( aMethName2 ) ] = aMethName2;
- }
- else
- {
- sal_Int32 iHashResult = (*aIt).second;
-
- Reference<XIdlMethod> xExistingMethod = pDestMethods[ iHashResult ];
-
- Reference< XIdlClass > xExistingMethClass =
- xExistingMethod->getDeclaringClass();
- Reference< XIdlClass > xNewMethClass = rxMethod->getDeclaringClass();
- if( xExistingMethClass->equals( xNewMethClass ) )
- continue;
- }
-
- pDestMethods[ iAllExportedMethod ] = rxMethod;
-
- // Wenn kein Concept gesetzt wurde, ist die Methode "normal"
- sal_Int32& rMethodConcept_i = pLocalMethodConcepts[ i ];
- if( !rMethodConcept_i )
- rMethodConcept_i = MethodConcept_NORMAL_IMPL;
- pMethodConceptArray[ iAllExportedMethod ] = rMethodConcept_i;
- iAllExportedMethod++;
- }
- if( pMethodTypes[ i ] == ADD_LISTENER_METHOD )
- {
- // Klasse des Listeners ermitteln
- const Reference<XIdlMethod>& rxMethod = pSourceMethods[i];
-
- // void als Default-Klasse eintragen
- Reference<XIdlClass> xListenerClass = TypeToIdlClass( getCppuVoidType(), m_xSMgr );
- // ALT: Reference<XIdlClass> xListenerClass = Void_getReflection()->getIdlClass();
-
- // 1. Moeglichkeit: Parameter nach einer Listener-Klasse durchsuchen
- // Nachteil: Superklassen muessen rekursiv durchsucht werden
- Sequence< Reference<XIdlClass> > aParams = rxMethod->getParameterTypes();
- const Reference<XIdlClass>* pParamArray2 = aParams.getConstArray();
-
- Reference<XIdlClass> xEventListenerClass = TypeToIdlClass( getCppuType( (Reference<XEventListener>*) NULL ), m_xSMgr );
- // ALT: Reference<XIdlClass> xEventListenerClass = XEventListener_getReflection()->getIdlClass();
- sal_Int32 nParamCount = aParams.getLength();
- sal_Int32 k;
- for( k = 0 ; k < nParamCount ; k++ )
- {
- const Reference<XIdlClass>& rxClass = pParamArray2[k];
-
- // Sind wir von einem Listener abgeleitet?
- if( rxClass->equals( xEventListenerClass ) ||
- isDerivedFrom( rxClass, xEventListenerClass ) )
- {
- xListenerClass = rxClass;
- break;
- }
- }
-
- // 2. Moeglichkeit: Namen der Methode auswerden
- // Nachteil: geht nicht bei Test-Listenern, die es nicht gibt
- //aMethName = rxMethod->getName();
- //aListenerName = aMethName.Copy( 3, aMethName.Len()-8-3 );
- //Reference<XIdlClass> xListenerClass = reflection->forName( aListenerName );
- Type aListenerType( TypeClass_INTERFACE, xListenerClass->getName() );
- pListenerClassRefs[ iAllSupportedListener ] = aListenerType;
- iAllSupportedListener++;
- }
- }
-
- // Wenn in diesem Durchlauf XInterface-Methoden
- // dabei waren, diese zukuenftig ignorieren
- if( bFoundXInterface )
- bXInterfaceIsInvalid = sal_True;
-
- delete[] pMethodTypes;
- delete[] pLocalMethodConcepts;
- }
-
- // Super-Klasse(n) vorhanden? Dann dort fortsetzen
- Sequence< Reference<XIdlClass> > aSuperClassSeq = xImplClass2->getSuperclasses();
-
- // Zur Zeit wird nur von einer Superklasse ausgegangen
- if( aSuperClassSeq.getLength() >= 1 )
- {
- xImplClass2 = aSuperClassSeq.getConstArray()[0];
- OSL_ENSURE( xImplClass2.is(), "super class null" );
- }
- else
- {
- xImplClass2 = NULL;
- }
- }
- }
-
- // Anzahl der exportierten Methoden uebernehmen und Sequences anpassen
- // (kann abweichen, weil doppelte Methoden erst nach der Ermittlung
- // von nExportedMethodCount herausgeworfen werden)
- sal_Int32& rMethCount = pAccess->mnMethCount;
- rMethCount = iAllExportedMethod;
- pAccess->maAllMethodSeq.realloc( rMethCount );
- pAccess->maMethodConceptSeq.realloc( rMethCount );
-
- // Groesse der Property-Sequences anpassen
- pAccess->maAllPropertySeq.realloc( rPropCount );
- pAccess->maPropertyConceptSeq.realloc( rPropCount );
- pAccess->maMapTypeSeq.realloc( rPropCount );
-
- // Ende der Schleife ueber alle vom ClassProvider angegebenen Klassen
- }
- }
- // Bei structs Fields als Properties registrieren
- else //if( eType == TypeClass_STRUCT )
- {
- // Ist es ein Interface oder eine struct?
- //Reference<XIdlClass> xClassRef = aToInspectObj.getReflection()->getIdlClass();
- Reference<XIdlClass> xClassRef = TypeToIdlClass( aToInspectObj.getValueType(), m_xSMgr );
- if( !xClassRef.is() )
- {
- OSL_FAIL( "Can't get XIdlClass from Reflection" );
- return pAccess;
- }
-
- // Felder holen
- Sequence< Reference<XIdlField> > fields = xClassRef->getFields();
- const Reference<XIdlField>* pFields = fields.getConstArray();
- sal_Int32 nLen = fields.getLength();
-
- for( i = 0 ; i < nLen ; i++ )
- {
- Reference<XIdlField> xField = pFields[i];
- Reference<XIdlClass> xPropType = xField->getType();
- OUString aPropName = xField->getName();
-
- // Ist die PropertySequence gross genug?
- pAccess->checkPropertyArraysSize
- ( pAllPropArray, pMapTypeArray, pPropertyConceptArray, rPropCount );
-
- // In eigenes Property-Array eintragen
- Property& rProp = pAllPropArray[ rPropCount ];
- rProp.Name = aPropName;
- rProp.Handle = rPropCount;
- rProp.Type = Type( xPropType->getTypeClass(), xPropType->getName() );
- FieldAccessMode eAccessMode = xField->getAccessMode();
- rProp.Attributes = (eAccessMode == FieldAccessMode_READONLY ||
- eAccessMode == FieldAccessMode_CONST)
- ? READONLY : 0;
-
- //FieldAccessMode eAccessMode = xField->getAccessMode();
- //rProp.Attributes = (eAccessMode == FieldAccessMode::READONLY || eAccessMode == CONST)
- //? PropertyAttribute::READONLY : 0;
-
- // Namen in Hashtable eintragen
- rPropNameMap[ aPropName ] = rPropCount;
-
- // Tabelle fuer XExactName pflegen
- rLowerToExactNameMap[ toLower( aPropName ) ] = aPropName;
-
- // Field merken
- pAccess->checkInterfaceArraySize( pAccess->aInterfaceSeq1,
- pInterfaces1, rPropCount );
- pInterfaces1[ rPropCount ] = xField;
-
- // Art der Property merken
- pMapTypeArray[ rPropCount ] = MAP_FIELD;
- pPropertyConceptArray[ rPropCount ] = ATTRIBUTES;
- pAccess->mnAttributePropCount++;
-
- // Count pflegen
- rPropCount++;
- }
- }
-
- // Property-Sequence auf die richtige Laenge bringen
- pAccess->maAllPropertySeq.realloc( pAccess->mnPropCount );
-
- return pAccess;
-}
-
-//*************************************************************************
-Reference< XInterface > SAL_CALL ImplIntrospection_CreateInstance( const Reference< XMultiServiceFactory > & rSMgr )
- throw( RuntimeException )
-{
- Reference< XInterface > xService = (OWeakObject*)(OComponentHelper*)new ImplIntrospection( rSMgr );
- return xService;
-}
-
-}
-
-extern "C"
-{
-SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
- const sal_Char * pImplName, void * pServiceManager, void * )
-{
- void * pRet = 0;
-
- if (pServiceManager && rtl_str_compare( pImplName, IMPLEMENTATION_NAME ) == 0)
- {
- Reference< XSingleServiceFactory > xFactory( createOneInstanceFactory(
- reinterpret_cast< XMultiServiceFactory * >( pServiceManager ),
- OUString::createFromAscii( pImplName ),
- stoc_inspect::ImplIntrospection_CreateInstance,
- stoc_inspect::ImplIntrospection::getSupportedServiceNames_Static() ) );
-
- if (xFactory.is())
- {
- xFactory->acquire();
- pRet = xFactory.get();
- }
- }
-
- return pRet;
-}
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/inspect/makefile.mk b/stoc/source/inspect/makefile.mk
deleted file mode 100644
index 60864eea2..000000000
--- a/stoc/source/inspect/makefile.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME= stoc
-TARGET = introspection.uno
-ENABLE_EXCEPTIONS=TRUE
-COMP1TYPELIST = insp
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-DLLPRE =
-
-# ------------------------------------------------------------------
-
-.INCLUDE : ..$/cppumaker.mk
-
-SLOFILES= \
- $(SLO)$/introspection.obj
-
-SHL1TARGET= $(TARGET)
-
-SHL1STDLIBS= \
- $(CPPULIB) \
- $(CPPUHELPERLIB) \
- $(SALLIB)
-
-SHL1VERSIONMAP = $(SOLARENV)/src/component.map
-SHL1RPATH=URELIB
-
-SHL1DEPN=
-SHL1IMPLIB= i$(TARGET)
-SHL1LIBS= $(SLB)$/$(TARGET).lib
-SHL1DEF= $(MISC)$/$(SHL1TARGET).def
-
-DEF1NAME= $(SHL1TARGET)
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
-ALLTAR : $(MISC)/introspection.component
-
-$(MISC)/introspection.component .ERRREMOVE : \
- $(SOLARENV)/bin/createcomponent.xslt introspection.component
- $(XSLTPROC) --nonet --stringparam uri \
- '$(COMPONENTPREFIX_URE_NATIVE)$(SHL1TARGETN:f)' -o $@ \
- $(SOLARENV)/bin/createcomponent.xslt introspection.component
diff --git a/stoc/source/invocation/inv.xml b/stoc/source/invocation/inv.xml
deleted file mode 100644
index 495b092d2..000000000
--- a/stoc/source/invocation/inv.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name> invocation.uno </module-name>
- <component-description>
- <author> Daniel Boelzle </author>
- <name> com.sun.star.comp.stoc.Invocation </name>
- <description>
-You can construct Invocation objects through this factory service.
-Invoke createInstanceWithArguments() of XSingleServiceFactory
-to create an Invocation adapter for your object;
-invoking createInstance() will fail.
-Instances implement XInvocation to invoke methods and set/get properties at an object
-which corresponds with the object which implements this interface.
-
-There are two ways to get information about this object. First you
-can get the implemented method with XInvocation::getMethodNames()
-and the properties with XInvocation::getPropertyNames().
-Second you can get, if provided, all information about the methods and the
-properties with XInvocation::getIntrospection().
-Container access is available through the XIndexContainer,
-XNameContainer and XEnumerationContainer
-(use XInterface::queryInterface).
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> C++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.script.Invocation </supported-service>
- <service-dependency>com.sun.star.script.Converter</service-dependency>
- <service-dependency>com.sun.star.beans.Introspection</service-dependency>
- <service-dependency>com.sun.star.reflection.CoreReflection</service-dependency>
- <type> com.sun.star.script.XInvocation </type>
- <type> com.sun.star.script.XInvocation2 </type>
- <type> com.sun.star.script.InvocationInfo </type>
- <type> com.sun.star.script.MemberType </type>
- <type> com.sun.star.script.XTypeConverter </type>
- <type> com.sun.star.script.FailReason </type>
- <type> com.sun.star.beans.XIntrospection </type>
- <type> com.sun.star.beans.XIntrospectionAccess </type>
- <type> com.sun.star.beans.XPropertySet </type>
- <type> com.sun.star.beans.XFastPropertySet </type>
- <type> com.sun.star.beans.XMaterialHolder </type>
- <type> com.sun.star.beans.XExactName </type>
- <type> com.sun.star.beans.PropertyAttribute </type>
- <type> com.sun.star.beans.PropertyConcept </type>
- <type> com.sun.star.beans.MethodConcept </type>
- <type> com.sun.star.lang.XEventListener </type>
- <type> com.sun.star.lang.XInitialization </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.lang.XMultiComponentFactory </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.uno.DeploymentException </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.XComponentContext </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.container.XEnumerationAccess </type>
- <type> com.sun.star.container.XNameContainer </type>
- <type> com.sun.star.container.XIndexContainer </type>
- <type> com.sun.star.reflection.XIdlReflection </type>
- <type> com.sun.star.reflection.XIdlClassProvider </type>
- <type> com.sun.star.reflection.XIdlClass </type>
- <type> com.sun.star.reflection.XIdlArray </type>
- <type> com.sun.star.reflection.FieldAccessMode </type>
- </component-description>
- <project-build-dependency> cppuhelper </project-build-dependency>
- <project-build-dependency> cppu </project-build-dependency>
- <project-build-dependency> sal </project-build-dependency>
- <runtime-module-dependency> cppuhelper3$(COM) </runtime-module-dependency>
- <runtime-module-dependency> cppu3 </runtime-module-dependency>
- <runtime-module-dependency> sal3 </runtime-module-dependency>
-</module-description>
diff --git a/stoc/source/invocation/invocation.component b/stoc/source/invocation/invocation.component
deleted file mode 100644
index 67178ef2e..000000000
--- a/stoc/source/invocation/invocation.component
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--**********************************************************************
-*
-* 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.
-*
-**********************************************************************-->
-
-<component loader="com.sun.star.loader.SharedLibrary"
- xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.comp.stoc.Invocation">
- <service name="com.sun.star.script.Invocation"/>
- </implementation>
-</component>
diff --git a/stoc/source/invocation/invocation.cxx b/stoc/source/invocation/invocation.cxx
deleted file mode 100644
index e5b05d09c..000000000
--- a/stoc/source/invocation/invocation.cxx
+++ /dev/null
@@ -1,1234 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <osl/mutex.hxx>
-#include <cppuhelper/queryinterface.hxx>
-#include <cppuhelper/weak.hxx>
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/implementationentry.hxx>
-#include <cppuhelper/typeprovider.hxx>
-#include <cppuhelper/implbase2.hxx>
-
-#include <com/sun/star/uno/DeploymentException.hpp>
-#include <com/sun/star/script/FailReason.hpp>
-#include <com/sun/star/script/XTypeConverter.hpp>
-#include <com/sun/star/script/XInvocation.hpp>
-#include <com/sun/star/script/XInvocation2.hpp>
-#include <com/sun/star/reflection/XIdlReflection.hpp>
-#include <com/sun/star/container/XNameContainer.hpp>
-#include <com/sun/star/container/XIndexContainer.hpp>
-#include <com/sun/star/container/XEnumerationAccess.hpp>
-#include <com/sun/star/beans/XExactName.hpp>
-#include <com/sun/star/beans/XMaterialHolder.hpp>
-#include <com/sun/star/beans/XIntrospection.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-#include <com/sun/star/beans/MethodConcept.hpp>
-#include <com/sun/star/beans/PropertyConcept.hpp>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XTypeProvider.hpp>
-#include <com/sun/star/registry/XRegistryKey.hpp>
-
-#include <boost/scoped_array.hpp>
-#include <rtl/ustrbuf.hxx>
-#include <rtl/strbuf.hxx>
-
-#define SERVICENAME "com.sun.star.script.Invocation"
-#define IMPLNAME "com.sun.star.comp.stoc.Invocation"
-
-using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::script;
-using namespace com::sun::star::reflection;
-using namespace com::sun::star::beans;
-using namespace com::sun::star::registry;
-using namespace com::sun::star::container;
-using namespace cppu;
-using namespace osl;
-using ::rtl::OUString;
-
-namespace stoc_inv
-{
-static rtl_StandardModuleCount g_moduleCount = MODULE_COUNT_INIT;
-
-static Sequence< OUString > inv_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] = OUString(RTL_CONSTASCII_USTRINGPARAM(SERVICENAME));
- return seqNames;
-}
-
-static OUString inv_getImplementationName()
-{
- return OUString(RTL_CONSTASCII_USTRINGPARAM(IMPLNAME));
-}
-
-// TODO: Zentral implementieren
-inline Reference<XIdlClass> TypeToIdlClass( const Type& rType, const Reference< XIdlReflection > & xRefl )
-{
- return xRefl->forName( rType.getTypeName() );
-}
-
-
-//==================================================================================================
-class Invocation_Impl
- : public OWeakObject
- , public XInvocation2
- , public XNameContainer
- , public XIndexContainer
- , public XEnumerationAccess
- , public XExactName
- , public XMaterialHolder
- , public XTypeProvider
-{
-public:
- Invocation_Impl( const Any & rAdapted, const Reference<XTypeConverter> &,
- const Reference<XIntrospection> &,
- const Reference<XIdlReflection> & );
- virtual ~Invocation_Impl();
-
- // XInterface
- virtual Any SAL_CALL queryInterface( const Type & aType) throw( RuntimeException );
- virtual void SAL_CALL acquire() throw() { OWeakObject::acquire(); }
- virtual void SAL_CALL release() throw() { OWeakObject::release(); }
-
-
- // XTypeProvider
- virtual Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( )
- throw(RuntimeException);
- virtual Sequence< sal_Int8 > SAL_CALL getImplementationId( )
- throw( RuntimeException);
-
- // Methoden von XMaterialHolder
- virtual Any SAL_CALL getMaterial(void) throw(RuntimeException);
-
- // ? XTool
- virtual void SAL_CALL setMaterial( const Any& rMaterial );
-
- // XInvocation
- virtual Reference<XIntrospectionAccess> SAL_CALL getIntrospection(void) throw( RuntimeException );
- virtual Any SAL_CALL invoke(const OUString& FunctionName, const Sequence< Any >& Params, Sequence< sal_Int16 >& OutParamIndex, Sequence< Any >& OutParam)
- throw( IllegalArgumentException, CannotConvertException, InvocationTargetException, RuntimeException );
- virtual void SAL_CALL setValue(const OUString& PropertyName, const Any& Value)
- throw( UnknownPropertyException, CannotConvertException, InvocationTargetException, RuntimeException );
- virtual Any SAL_CALL getValue(const OUString& PropertyName)
- throw( UnknownPropertyException, RuntimeException );
- virtual sal_Bool SAL_CALL hasMethod(const OUString& Name) throw( RuntimeException );
- virtual sal_Bool SAL_CALL hasProperty(const OUString& Name) throw( RuntimeException );
-
- // XInvocation2
- virtual Sequence< OUString > SAL_CALL getMemberNames( )
- throw( RuntimeException );
- virtual Sequence< InvocationInfo > SAL_CALL getInfo( )
- throw( RuntimeException );
- virtual InvocationInfo SAL_CALL getInfoForName( const OUString& aName, sal_Bool bExact )
- throw( IllegalArgumentException, RuntimeException );
-
- // All Access and Container methods are not thread save
- // XElementAccess
- virtual Type SAL_CALL getElementType(void) throw( RuntimeException )
- { return _xElementAccess->getElementType(); }
-
- virtual sal_Bool SAL_CALL hasElements(void) throw( RuntimeException )
- { return _xElementAccess->hasElements(); }
-
- // XNameContainer
- virtual void SAL_CALL insertByName( const OUString& Name, const Any& Element )
- throw( IllegalArgumentException, ElementExistException, WrappedTargetException, RuntimeException )
- { _xNameContainer->insertByName( Name, Element ); }
-
- virtual void SAL_CALL replaceByName( const OUString& Name, const Any& Element )
- throw( IllegalArgumentException, NoSuchElementException, WrappedTargetException, RuntimeException )
- { _xNameContainer->replaceByName( Name, Element ); }
-
- virtual void SAL_CALL removeByName( const OUString& Name )
- throw( NoSuchElementException, WrappedTargetException, RuntimeException )
- { _xNameContainer->removeByName( Name ); }
-
- // XNameAccess
- virtual Any SAL_CALL getByName( const OUString& Name )
- throw( NoSuchElementException, WrappedTargetException, RuntimeException )
- { return _xNameAccess->getByName( Name ); }
-
- virtual Sequence<OUString> SAL_CALL getElementNames(void) throw( RuntimeException )
- { return _xNameAccess->getElementNames(); }
-
- virtual sal_Bool SAL_CALL hasByName( const OUString& Name ) throw( RuntimeException )
- { return _xNameAccess->hasByName( Name ); }
-
- // XIndexContainer
- virtual void SAL_CALL insertByIndex( sal_Int32 Index, const Any& Element )
- throw( IllegalArgumentException, IndexOutOfBoundsException, WrappedTargetException, RuntimeException )
- { _xIndexContainer->insertByIndex( Index, Element ); }
-
- virtual void SAL_CALL replaceByIndex( sal_Int32 Index, const Any& Element )
- throw( IllegalArgumentException, IndexOutOfBoundsException, WrappedTargetException, RuntimeException )
- { _xIndexContainer->replaceByIndex( Index, Element ); }
-
- virtual void SAL_CALL removeByIndex( sal_Int32 Index )
- throw( IndexOutOfBoundsException, WrappedTargetException, RuntimeException )
- { _xIndexContainer->removeByIndex( Index ); }
-
- // XIndexAccess
- virtual sal_Int32 SAL_CALL getCount(void) throw( RuntimeException )
- { return _xIndexAccess->getCount(); }
-
- virtual Any SAL_CALL getByIndex( sal_Int32 Index )
- throw( IndexOutOfBoundsException, WrappedTargetException, RuntimeException )
- { return _xIndexAccess->getByIndex( Index ); }
-
- // XEnumerationAccess
- virtual Reference<XEnumeration> SAL_CALL createEnumeration(void) throw( RuntimeException )
- { return _xEnumerationAccess->createEnumeration(); }
-
- // XExactName
- virtual OUString SAL_CALL getExactName( const OUString& rApproximateName ) throw( RuntimeException );
-
-
- //=====================================================================================================
-private:
- void getInfoSequenceImpl( Sequence< OUString >* pStringSeq, Sequence< InvocationInfo >* pInfoSeq );
- void fillInfoForNameAccess( InvocationInfo& rInfo, const OUString& aName );
- void fillInfoForProperty( InvocationInfo& rInfo, const Property& rProp );
- void fillInfoForMethod( InvocationInfo& rInfo, const Reference< XIdlMethod > xMethod );
-
- Reference<XTypeConverter> xTypeConverter;
- Reference<XIntrospection> xIntrospection;
- Reference<XIdlReflection> xCoreReflection;
-
- Any _aMaterial;
- // _xDirect and (_xIntrospectionAccess, xPropertySet) are exclusive
- Reference<XInvocation> _xDirect;
- Reference<XInvocation2> _xDirect2;
- Reference<XPropertySet> _xPropertySet;
- Reference<XIntrospectionAccess> _xIntrospectionAccess;
-
- // supplied Interfaces
- Reference<XNameContainer> _xNameContainer;
- Reference<XNameAccess> _xNameAccess;
- Reference<XIndexContainer> _xIndexContainer;
- Reference<XIndexAccess> _xIndexAccess;
- Reference<XEnumerationAccess> _xEnumerationAccess;
- Reference<XElementAccess> _xElementAccess;
-
- //
- Reference<XExactName> _xENDirect, _xENIntrospection, _xENNameAccess;
-};
-
-
-//==================================================================================================
-//==================================================================================================
-//==================================================================================================
-
-//--------------------------------------------------------------------------------------------------
-Invocation_Impl::Invocation_Impl
-(
- const Any & rAdapted,
- const Reference<XTypeConverter> & rTC,
- const Reference<XIntrospection> & rI,
- const Reference<XIdlReflection> & rCR
-)
- : xTypeConverter( rTC )
- , xIntrospection( rI )
- , xCoreReflection( rCR )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- setMaterial( rAdapted );
-}
-
-Invocation_Impl::~Invocation_Impl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-//##################################################################################################
-//### INTERFACE IMPLEMENTATIONS ####################################################################
-//##################################################################################################
-
-
-Any SAL_CALL Invocation_Impl::queryInterface( const Type & aType )
- throw( RuntimeException )
-{
- // PropertySet-Implementation
- Any a = ::cppu::queryInterface( aType,
- SAL_STATIC_CAST(XInvocation*, this),
- SAL_STATIC_CAST(XMaterialHolder*, this),
- SAL_STATIC_CAST(XTypeProvider *,this) );
- if( a.hasValue() )
- {
- return a;
- }
-
- if( aType == getCppuType( (Reference<XExactName>*) NULL ) )
- {
- // Ivocation does not support XExactName, if direct object supports
- // XInvocation, but not XExactName.
- if ((_xDirect.is() && _xENDirect.is()) ||
- (!_xDirect.is() && (_xENIntrospection.is() || _xENNameAccess.is())))
- {
- return makeAny( Reference< XExactName >( SAL_STATIC_CAST(XExactName*, this) ) );
- }
- }
- else if ( aType == getCppuType( (Reference<XNameContainer>*) NULL ) )
- {
- if( _xNameContainer.is() )
- return makeAny( Reference< XNameContainer >( SAL_STATIC_CAST(XNameContainer*, this) ) );
- }
- else if ( aType == getCppuType( (Reference<XNameAccess>*) NULL ) )
- {
- if( _xNameAccess.is() )
- return makeAny( Reference< XNameAccess >( SAL_STATIC_CAST(XNameAccess*, this) ) );
- }
- else if ( aType == getCppuType( (Reference<XIndexContainer>*) NULL ) )
- {
- if (_xIndexContainer.is())
- return makeAny( Reference< XIndexContainer >( SAL_STATIC_CAST(XIndexContainer*, this) ) );
- }
- else if ( aType == getCppuType( (Reference<XIndexAccess>*) NULL ) )
- {
- if (_xIndexAccess.is())
- return makeAny( Reference< XIndexAccess >( SAL_STATIC_CAST(XIndexAccess*, this) ) );
- }
- else if ( aType == getCppuType( (Reference<XEnumerationAccess>*) NULL ) )
- {
- if (_xEnumerationAccess.is())
- return makeAny( Reference< XEnumerationAccess >( SAL_STATIC_CAST(XEnumerationAccess*, this) ) );
- }
- else if ( aType == getCppuType( (Reference<XElementAccess>*) NULL ) )
- {
- if (_xElementAccess.is())
- {
- return makeAny( Reference< XElementAccess >(
- SAL_STATIC_CAST(XElementAccess*, SAL_STATIC_CAST(XNameContainer*, this) ) ) );
- }
- }
- else if ( aType == getCppuType( (Reference<XInvocation2>*) NULL ) )
- {
- // Invocation does not support XInvocation2, if direct object supports
- // XInvocation, but not XInvocation2.
- if ( ( _xDirect.is() && _xDirect2.is()) ||
- (!_xDirect.is() && _xIntrospectionAccess.is() ) )
- {
- return makeAny( Reference< XInvocation2 >( SAL_STATIC_CAST(XInvocation2*, this) ) );
- }
- }
-
- return OWeakObject::queryInterface( aType );
-}
-
-
-//--------------------------------------------------------------------------------------------------
-Any Invocation_Impl::getMaterial(void) throw(RuntimeException)
-{
- // AB, 12.2.1999 Sicherstellen, dass das Material wenn moeglich
- // aus der direkten Invocation bzw. von der Introspection geholt
- // wird, da sonst Structs nicht korrekt behandelt werden
- Reference<XMaterialHolder> xMaterialHolder;
- if( _xDirect.is() )
- {
- xMaterialHolder = Reference<XMaterialHolder>::query( _xDirect );
- //_xDirect->queryInterface( XMaterialHolder::getSmartUik(), xMaterialHolder );
- }
- else if( _xIntrospectionAccess.is() )
- {
- xMaterialHolder = Reference<XMaterialHolder>::query( _xIntrospectionAccess );
- //_xIntrospectionAccess->queryInterface( XMaterialHolder::getSmartUik(), xMaterialHolder );
- }
- if( xMaterialHolder.is() )
- {
- return xMaterialHolder->getMaterial();
- }
- return _aMaterial;
-}
-
-//--------------------------------------------------------------------------------------------------
-void Invocation_Impl::setMaterial( const Any& rMaterial )
-{
- // set the material first and only once
- Reference<XInterface> xObj;
-
- if (rMaterial.getValueType().getTypeClass() == TypeClass_INTERFACE)
- xObj = *(Reference<XInterface>*)rMaterial.getValue();
- _aMaterial = rMaterial;
-
- // Ersteinmal alles ausserhalb des guards machen
- _xDirect = Reference<XInvocation>::query( xObj );
-
- if( _xDirect.is() )
- {
- // Objekt direkt befragen
- _xElementAccess = Reference<XElementAccess>::query( _xDirect );
- _xEnumerationAccess = Reference<XEnumerationAccess>::query( _xDirect );
- _xIndexAccess = Reference<XIndexAccess>::query( _xDirect );
- _xIndexContainer = Reference<XIndexContainer>::query( _xDirect );
- _xNameAccess = Reference<XNameAccess>::query( _xDirect );
- _xNameContainer = Reference<XNameContainer>::query( _xDirect );
- _xENDirect = Reference<XExactName>::query( _xDirect );
- _xDirect2 = Reference<XInvocation2>::query( _xDirect );
-
- // only once!!!
- //_xIntrospectionAccess = XIntrospectionAccessRef();
- //_xPropertySet = XPropertySetRef();
- }
- else
- {
- // Invocation ueber die Introspection machen
- if (xIntrospection.is())
- {
- _xIntrospectionAccess = xIntrospection->inspect( _aMaterial );
- if( _xIntrospectionAccess.is() )
- {
-
- _xElementAccess = Reference<XElementAccess>::query(
- _xIntrospectionAccess->queryAdapter(
- getCppuType( (Reference<XElementAccess>*) NULL ) ) );
-
- _xEnumerationAccess = Reference<XEnumerationAccess>::query(
- _xIntrospectionAccess->queryAdapter(
- getCppuType( (Reference<XEnumerationAccess>*) NULL )) );
-
- _xIndexAccess = Reference<XIndexAccess>::query(
- _xIntrospectionAccess->queryAdapter(
- getCppuType( (Reference<XIndexAccess>*) NULL ) ) );
-
- _xIndexContainer = Reference<XIndexContainer>::query(
- _xIntrospectionAccess->queryAdapter(
- getCppuType( (Reference<XIndexContainer>*) NULL ) ) );
-
- _xNameAccess = Reference<XNameAccess>::query(
- _xIntrospectionAccess->queryAdapter(
- getCppuType( (Reference<XNameAccess>*) NULL ) ) );
-
- _xNameContainer = Reference<XNameContainer>::query(
- _xIntrospectionAccess->queryAdapter(
- getCppuType( (Reference<XNameContainer>*) NULL ) ) );
-
- _xPropertySet = Reference<XPropertySet>::query(
- _xIntrospectionAccess->queryAdapter(
- getCppuType( (Reference<XPropertySet>*) NULL )) );
-
- _xENIntrospection = Reference<XExactName>::query( _xIntrospectionAccess );
- if (_xNameAccess.is())
- _xENNameAccess = Reference<XExactName>::query( _xNameAccess );
- }
- }
- /* only once !!!
- _xDirect = XInvocationRef();
- if( !_xIntrospectionAccess.is() )
- {
- // reset
- _xElementAccess = XElementAccessRef();
- _xEnumerationAccess = XEnumerationAccessRef();
- _xIndexAccess = XIndexAccessRef();
- _xIndexContainer = XIndexContainerRef();
- _xNameAccess = XNameAccessRef();
- _xNameContainer = XNameContainerRef();
- _xPropertySet = XPropertySetRef();
- }
- */
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-OUString Invocation_Impl::getExactName( const OUString& rApproximateName )
- throw( RuntimeException )
-{
- if (_xENDirect.is())
- return _xENDirect->getExactName( rApproximateName );
-
- OUString aRet;
- if (_xENIntrospection.is())
- aRet = _xENIntrospection->getExactName( rApproximateName );
- if (!aRet.getLength() && _xENNameAccess.is())
- aRet = _xENNameAccess->getExactName( rApproximateName );
- return aRet;
-}
-
-//--------------------------------------------------------------------------------------------------
-Reference<XIntrospectionAccess> Invocation_Impl::getIntrospection(void)
- throw( RuntimeException )
-{
- if( _xDirect.is() )
- return _xDirect->getIntrospection();
- else
- return _xIntrospectionAccess;
-}
-
-//--------------------------------------------------------------------------------------------------
-sal_Bool Invocation_Impl::hasMethod( const OUString& Name )
- throw( RuntimeException )
-{
- if (_xDirect.is())
- return _xDirect->hasMethod( Name );
- if( _xIntrospectionAccess.is() )
- return _xIntrospectionAccess->hasMethod( Name, MethodConcept::ALL ^ MethodConcept::DANGEROUS );
- return sal_False;
-}
-
-//--------------------------------------------------------------------------------------------------
-sal_Bool Invocation_Impl::hasProperty( const OUString& Name )
- throw( RuntimeException )
-{
- if (_xDirect.is())
- return _xDirect->hasProperty( Name );
- // PropertySet
- if( _xIntrospectionAccess.is()
- && _xIntrospectionAccess->hasProperty( Name, PropertyConcept::ALL ^ PropertyConcept::DANGEROUS ) )
- return sal_True;
- // NameAccess
- if( _xNameAccess.is() )
- return _xNameAccess->hasByName( Name );
- return sal_False;
-}
-
-//--------------------------------------------------------------------------------------------------
-Any Invocation_Impl::getValue( const OUString& PropertyName )
- throw( UnknownPropertyException, RuntimeException )
-{
- if (_xDirect.is())
- return _xDirect->getValue( PropertyName );
- try
- {
- // PropertySet
- if( _xIntrospectionAccess.is() && _xPropertySet.is()
- && _xIntrospectionAccess->hasProperty
- ( PropertyName, PropertyConcept::ALL ^ PropertyConcept::DANGEROUS ) )
- {
- return _xPropertySet->getPropertyValue( PropertyName );
- }
- // NameAccess
- if( _xNameAccess.is() && _xNameAccess->hasByName( PropertyName ) )
- return _xNameAccess->getByName( PropertyName );
- }
- catch (UnknownPropertyException &)
- {
- throw;
- }
- catch (RuntimeException &)
- {
- throw;
- }
- catch (Exception &)
- {
- }
-
- throw UnknownPropertyException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("cannot get value ") ) + PropertyName,
- Reference< XInterface >() );
-}
-
-//--------------------------------------------------------------------------------------------------
-void Invocation_Impl::setValue( const OUString& PropertyName, const Any& Value )
- throw( UnknownPropertyException, CannotConvertException, InvocationTargetException, RuntimeException )
-{
- if (_xDirect.is())
- _xDirect->setValue( PropertyName, Value );
- else
- {
- try
- {
- // Properties
- if( _xIntrospectionAccess.is() && _xPropertySet.is()
- && _xIntrospectionAccess->hasProperty(
- PropertyName, PropertyConcept::ALL ^ PropertyConcept::DANGEROUS ) )
- {
- Property aProp = _xIntrospectionAccess->getProperty(
- PropertyName, PropertyConcept::ALL ^ PropertyConcept::DANGEROUS );
- Reference < XIdlClass > r = TypeToIdlClass( aProp.Type, xCoreReflection );
- if( r->isAssignableFrom( TypeToIdlClass( Value.getValueType(), xCoreReflection ) ) )
- _xPropertySet->setPropertyValue( PropertyName, Value );
- else if( xTypeConverter.is() )
- _xPropertySet->setPropertyValue(
- PropertyName, xTypeConverter->convertTo( Value, aProp.Type ) );
- else
- throw RuntimeException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("no type converter service!") ),
- Reference< XInterface >() );
- }
- // NameContainer
- else if( _xNameContainer.is() )
- {
- Any aConv;
- Reference < XIdlClass > r =
- TypeToIdlClass( _xNameContainer->getElementType(), xCoreReflection );
- if( r->isAssignableFrom(TypeToIdlClass( Value.getValueType(), xCoreReflection ) ) )
- aConv = Value;
- else if( xTypeConverter.is() )
- aConv = xTypeConverter->convertTo( Value, _xNameContainer->getElementType() );
- else
- throw RuntimeException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("no type converter service!") ),
- Reference< XInterface >() );
-
- // bei Vorhandensein ersetzen, ansonsten einfuegen
- if (_xNameContainer->hasByName( PropertyName ))
- _xNameContainer->replaceByName( PropertyName, aConv );
- else
- _xNameContainer->insertByName( PropertyName, aConv );
- }
- else
- throw UnknownPropertyException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("no introspection nor name container!") ),
- Reference< XInterface >() );
- }
- catch (UnknownPropertyException &)
- {
- throw;
- }
- catch (CannotConvertException &)
- {
- throw;
- }
- catch (InvocationTargetException &)
- {
- throw;
- }
- catch (RuntimeException &)
- {
- throw;
- }
- catch (Exception & exc)
- {
- throw InvocationTargetException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("exception occurred in setValue(): ") ) +
- exc.Message, Reference< XInterface >(), makeAny( exc /* though sliced */ ) );
- }
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-Any Invocation_Impl::invoke( const OUString& FunctionName, const Sequence<Any>& InParams,
- Sequence<sal_Int16>& OutIndizes, Sequence<Any>& OutParams )
- throw( IllegalArgumentException, CannotConvertException, InvocationTargetException, RuntimeException )
-{
- if (_xDirect.is())
- return _xDirect->invoke( FunctionName, InParams, OutIndizes, OutParams );
-
- if (_xIntrospectionAccess.is())
- {
- // throw NoSuchMethodException if not exist
- Reference<XIdlMethod> xMethod = _xIntrospectionAccess->getMethod(
- FunctionName, MethodConcept::ALL ^ MethodConcept::DANGEROUS );
-
- // ParameterInfos
- Sequence<ParamInfo> aFParams = xMethod->getParameterInfos();
- const ParamInfo* pFParams = aFParams.getConstArray();
- sal_Int32 nFParamsLen = aFParams.getLength();
- if (nFParamsLen != InParams.getLength())
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("incorrect number of parameters passed invoking function ") ) + FunctionName,
- (OWeakObject *) this, (sal_Int16) 1 );
- }
-
- // IN Parameter
- const Any* pInParams = InParams.getConstArray();
-
- // Introspection Invoke Parameter
- Sequence<Any> aInvokeParams( nFParamsLen );
- Any* pInvokeParams = aInvokeParams.getArray();
-
- // OUT Indizes
- OutIndizes.realloc( nFParamsLen );
- sal_Int16* pOutIndizes = OutIndizes.getArray();
- sal_uInt32 nOutIndex = 0;
-
- for ( sal_Int32 nPos = 0; nPos < nFParamsLen; ++nPos )
- {
- try
- {
- const ParamInfo& rFParam = pFParams[nPos];
- const Reference<XIdlClass>& rDestType = rFParam.aType;
-
- // is IN/INOUT parameter?
- if (rFParam.aMode != ParamMode_OUT)
- {
- if (rDestType->isAssignableFrom( TypeToIdlClass( pInParams[nPos].getValueType(), xCoreReflection ) ))
- {
- pInvokeParams[nPos] = pInParams[nPos];
- }
- else if (xTypeConverter.is())
- {
- Type aDestType( rDestType->getTypeClass(), rDestType->getName() );
- pInvokeParams[nPos] = xTypeConverter->convertTo( pInParams[nPos], aDestType );
- }
- else
- {
- CannotConvertException aExc;
- aExc.Context = *this;
- aExc.Message = OUString( RTL_CONSTASCII_USTRINGPARAM("invocation type mismatch!") );
- throw aExc;
- }
- }
-
- // is OUT/INOUT parameter?
- if (rFParam.aMode != ParamMode_IN)
- {
- pOutIndizes[nOutIndex] = (sal_Int16)nPos;
- if (rFParam.aMode == ParamMode_OUT)
- rDestType->createObject( pInvokeParams[nPos] ); // default init
- ++nOutIndex;
- }
- }
- catch( CannotConvertException& rExc )
- {
- rExc.ArgumentIndex = nPos; // optionalen Parameter Index hinzufuegen
- throw rExc;
- }
- }
-
- // execute Method
- Any aRet = xMethod->invoke( _aMaterial, aInvokeParams );
-
- // OUT Params
- OutIndizes.realloc( nOutIndex );
- pOutIndizes = OutIndizes.getArray();
- OutParams.realloc( nOutIndex );
- Any* pOutParams = OutParams.getArray();
-
- while (nOutIndex--)
- {
- pOutParams[nOutIndex] = pInvokeParams[ pOutIndizes[nOutIndex] ];
- }
-
- return aRet;
- }
-
- RuntimeException aExc;
- aExc.Context = *this;
- aExc.Message = OUString( RTL_CONSTASCII_USTRINGPARAM("invocation lacking of introspection access!") );
- throw aExc;
-}
-
-//--------------------------------------------------------------------------------------------------
-
-// Struct to optimize sorting
-struct MemberItem
-{
- OUString aName;
-
- // Defines where the member comes from
- enum Mode { NAMEACCESS, PROPERTYSET, METHOD } eMode;
-
- // Index to respective sequence
- // (Index to NameAccess sequence for eMode==NAMEACCESS etc.)
- sal_Int32 nIndex;
-};
-
-// Implementation of getting name or info
-// String sequence will be filled when pStringSeq != NULL
-// Info sequence will be filled when pInfoSeq != NULL
-void Invocation_Impl::getInfoSequenceImpl
-(
- Sequence< OUString >* pStringSeq,
- Sequence< InvocationInfo >* pInfoSeq
-)
-{
- //Sequence< OUString > aStrSeq;
- //if( !pStringSeq )
- //pStringSeq = &aStrSeq;
-
-
- // Get all needed sequences
- Sequence<OUString> aNameAccessNames;
- Sequence<Property> aPropertySeq;
- Sequence< Reference< XIdlMethod > > aMethodSeq;
-
- if( _xNameAccess.is() )
- {
- aNameAccessNames = _xNameAccess->getElementNames();
- }
-
- if( _xIntrospectionAccess.is() )
- {
- aPropertySeq = _xIntrospectionAccess->getProperties
- ( PropertyConcept::ALL - PropertyConcept::DANGEROUS );
-
- aMethodSeq = _xIntrospectionAccess->getMethods
- ( MethodConcept::ALL - MethodConcept::DANGEROUS );
- }
-
- sal_Int32 nNameAccessCount = aNameAccessNames.getLength();
- sal_Int32 nPropertyCount = aPropertySeq.getLength();
- sal_Int32 nMethodCount = aMethodSeq.getLength();
- sal_Int32 nTotalCount = nNameAccessCount + nPropertyCount + nMethodCount;
-
- // Create and fill array of MemberItems
- boost::scoped_array< MemberItem > pItems( new MemberItem[ nTotalCount ] );
- const OUString* pStrings = aNameAccessNames.getConstArray();
- const Property* pProps = aPropertySeq.getConstArray();
- const Reference< XIdlMethod >* pMethods = aMethodSeq.getConstArray();
-
- // Fill array of MemberItems
- sal_Int32 i, iTotal = 0;
-
- // Name Access
- for( i = 0 ; i < nNameAccessCount ; i++, iTotal++ )
- {
- MemberItem& rItem = pItems[ iTotal ];
- rItem.aName = pStrings[ i ];
- rItem.eMode = MemberItem::NAMEACCESS;
- rItem.nIndex = i;
- }
-
- // Property set
- for( i = 0 ; i < nPropertyCount ; i++, iTotal++ )
- {
- MemberItem& rItem = pItems[ iTotal ];
- rItem.aName = pProps[ i ].Name;
- rItem.eMode = MemberItem::PROPERTYSET;
- rItem.nIndex = i;
- }
-
- // Methods
- for( i = 0 ; i < nMethodCount ; i++, iTotal++ )
- {
- MemberItem& rItem = pItems[ iTotal ];
- Reference< XIdlMethod > xMethod = pMethods[ i ];
- rItem.aName = xMethod->getName();
- rItem.eMode = MemberItem::METHOD;
- rItem.nIndex = i;
- }
-
- // Setting up result sequences
- OUString* pRetStrings = NULL;
- if( pStringSeq )
- {
- pStringSeq->realloc( nTotalCount );
- pRetStrings = pStringSeq->getArray();
- }
-
- InvocationInfo* pRetInfos = NULL;
- if( pInfoSeq )
- {
- pInfoSeq->realloc( nTotalCount );
- pRetInfos = pInfoSeq->getArray();
- }
-
- // Fill result sequences in the correct order of members
- for( iTotal = 0 ; iTotal < nTotalCount ; iTotal++ )
- {
- MemberItem& rItem = pItems[ iTotal ];
- if( pRetStrings )
- {
- pRetStrings[ iTotal ] = rItem.aName;
- }
-
- if( pRetInfos )
- {
- if( rItem.eMode == MemberItem::NAMEACCESS )
- {
- fillInfoForNameAccess( pRetInfos[ iTotal ], rItem.aName );
- }
- else if( rItem.eMode == MemberItem::PROPERTYSET )
- {
- fillInfoForProperty( pRetInfos[ iTotal ], pProps[ rItem.nIndex ] );
- }
- else if( rItem.eMode == MemberItem::METHOD )
- {
- fillInfoForMethod( pRetInfos[ iTotal ], pMethods[ rItem.nIndex ] );
- }
- }
- }
-}
-
-// XInvocation2
-Sequence< OUString > SAL_CALL Invocation_Impl::getMemberNames( )
- throw( RuntimeException )
-{
- if( _xDirect2.is() )
- {
- return _xDirect2->getMemberNames();
- }
- Sequence< OUString > aRetSeq;
- getInfoSequenceImpl( &aRetSeq, NULL );
- return aRetSeq;
-}
-
-Sequence< InvocationInfo > SAL_CALL Invocation_Impl::getInfo( )
- throw( RuntimeException )
-{
- if( _xDirect2.is() )
- {
- return _xDirect2->getInfo();
- }
- Sequence< InvocationInfo > aRetSeq;
- getInfoSequenceImpl( NULL, &aRetSeq );
- return aRetSeq;
-}
-
-InvocationInfo SAL_CALL Invocation_Impl::getInfoForName( const OUString& aName, sal_Bool bExact )
- throw( IllegalArgumentException, RuntimeException )
-{
- if( _xDirect2.is() )
- {
- return _xDirect2->getInfoForName( aName, bExact );
- }
-
- sal_Bool bFound = sal_False;
- OUString aExactName = aName;
- InvocationInfo aRetInfo;
-
- if( bExact )
- aExactName = getExactName( aName );
- if( aExactName.getLength() > 0 )
- {
- if( _xIntrospectionAccess->hasMethod( aExactName, MethodConcept::ALL ^ MethodConcept::DANGEROUS ) )
- {
- Reference<XIdlMethod> xMethod = _xIntrospectionAccess->getMethod
- ( aExactName, MethodConcept::ALL ^ MethodConcept::DANGEROUS );
- fillInfoForMethod( aRetInfo, xMethod );
- bFound = sal_True;
- }
- else
- {
- if( _xIntrospectionAccess.is() && _xIntrospectionAccess->hasProperty
- ( aExactName, PropertyConcept::ALL ^ PropertyConcept::DANGEROUS ) )
- {
- Property aProp = _xIntrospectionAccess->getProperty
- ( aExactName, PropertyConcept::ALL ^ PropertyConcept::DANGEROUS );
- fillInfoForProperty( aRetInfo, aProp );
- bFound = sal_True;
- }
- // NameAccess
- else if( _xNameAccess.is() && _xNameAccess->hasByName( aExactName ) )
- {
- fillInfoForNameAccess( aRetInfo, aExactName );
- bFound = sal_True;
- }
- }
- }
- if( !bFound )
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("Unknown name, getExactName() failed!") ),
- (XWeak *)(OWeakObject *)this, 0 );
- }
- return aRetInfo;
-}
-
-// Helper functions to fill InvocationInfo for XNameAccess
-void Invocation_Impl::fillInfoForNameAccess
-(
- InvocationInfo& rInfo,
- const OUString& aName
-)
-{
- rInfo.aName = aName;
- rInfo.eMemberType = MemberType_PROPERTY;
- rInfo.PropertyAttribute = 0;
- if( !_xNameContainer.is() )
- {
- rInfo.PropertyAttribute = PropertyAttribute::READONLY;
- }
- rInfo.aType = _xNameAccess->getElementType();
-}
-
-void Invocation_Impl::fillInfoForProperty
-(
- InvocationInfo& rInfo,
- const Property& rProp
-)
-{
- rInfo.aName = rProp.Name;
- rInfo.eMemberType = MemberType_PROPERTY;
- rInfo.PropertyAttribute = rProp.Attributes;
- rInfo.aType = rProp.Type;
-}
-
-void Invocation_Impl::fillInfoForMethod
-(
- InvocationInfo& rInfo,
- const Reference< XIdlMethod > xMethod
-)
-{
- rInfo.aName = xMethod->getName();
- rInfo.eMemberType = MemberType_METHOD;
- Reference< XIdlClass > xReturnClass = xMethod->getReturnType();
- Type aReturnType( xReturnClass->getTypeClass(), xReturnClass->getName() );
- rInfo.aType = aReturnType;
- Sequence<ParamInfo> aParamInfos = xMethod->getParameterInfos();
- sal_Int32 nParamCount = aParamInfos.getLength();
- if( nParamCount > 0 )
- {
- const ParamInfo* pInfos = aParamInfos.getConstArray();
-
- rInfo.aParamTypes.realloc( nParamCount );
- Type* pParamTypes = rInfo.aParamTypes.getArray();
- rInfo.aParamModes.realloc( nParamCount );
- ParamMode* pParamModes = rInfo.aParamModes.getArray();
-
- for( sal_Int32 i = 0 ; i < nParamCount ; i++ )
- {
- Reference< XIdlClass > xParamClass = pInfos[i].aType;
- Type aParamType( xParamClass->getTypeClass(), xParamClass->getName() );
- pParamTypes[ i ] = aParamType;
- pParamModes[ i ] = pInfos[i].aMode;
- }
- }
-}
-
-
-// XTypeProvider
-Sequence< Type > SAL_CALL Invocation_Impl::getTypes(void) throw( RuntimeException )
-{
- static Sequence< Type > const * s_pTypes = 0;
- if (! s_pTypes)
- {
- Sequence< Type > types( 4 +8 );
- Type * pTypes = types.getArray();
- sal_Int32 n = 0;
-
- pTypes[ n++ ] = ::getCppuType( (Reference< XTypeProvider > const *)0 );
- pTypes[ n++ ] = ::getCppuType( (Reference< XWeak > const *)0 );
- pTypes[ n++ ] = ::getCppuType( (Reference< XInvocation > const *)0 );
- pTypes[ n++ ] = ::getCppuType( (Reference< XMaterialHolder > const *)0 );
-
- // Ivocation does not support XExactName, if direct object supports
- // XInvocation, but not XExactName.
- if ((_xDirect.is() && _xENDirect.is()) ||
- (!_xDirect.is() && (_xENIntrospection.is() || _xENNameAccess.is())))
- {
- pTypes[ n++ ] = ::getCppuType( (Reference< XExactName > const *)0 );
- }
- if( _xNameContainer.is() )
- {
- pTypes[ n++ ] = ::getCppuType( (Reference< XNameContainer > const *)0 );
- }
- if( _xNameAccess.is() )
- {
- pTypes[ n++ ] = ::getCppuType( (Reference< XNameAccess > const *)0 );
- }
- if (_xIndexContainer.is())
- {
- pTypes[ n++ ] = ::getCppuType( (Reference< XIndexContainer > const *)0 );
- }
- if (_xIndexAccess.is())
- {
- pTypes[ n++ ] = ::getCppuType( (Reference< XIndexAccess > const *)0 );
- }
- if (_xEnumerationAccess.is())
- {
- pTypes[ n++ ] = ::getCppuType( (Reference< XEnumerationAccess > const *)0 );
- }
- if (_xElementAccess.is())
- {
- pTypes[ n++ ] = ::getCppuType( (Reference< XElementAccess > const *)0 );
- }
- // Invocation does not support XInvocation2, if direct object supports
- // XInvocation, but not XInvocation2.
- if ( ( _xDirect.is() && _xDirect2.is()) ||
- (!_xDirect.is() && _xIntrospectionAccess.is() ) )
- {
- pTypes[ n++ ] = ::getCppuType( (Reference< XInvocation2 > const *)0 );
- }
-
- types.realloc( n );
-
- // store types
- MutexGuard guard( Mutex::getGlobalMutex() );
- if (! s_pTypes)
- {
- static Sequence< Type > s_types( types );
- s_pTypes = &s_types;
- }
- }
- return *s_pTypes;
-}
-
-Sequence< sal_Int8 > SAL_CALL Invocation_Impl::getImplementationId( ) throw( RuntimeException)
-{
- static OImplementationId *pId = 0;
- if( ! pId )
- {
- MutexGuard guard( Mutex::getGlobalMutex() );
- if( ! pId )
- {
- static OImplementationId id( sal_False );
- pId = &id;
- }
- }
- return pId->getImplementationId();
-}
-
-//==================================================================================================
-//==================================================================================================
-//==================================================================================================
-class InvocationService
- : public WeakImplHelper2< XSingleServiceFactory, XServiceInfo >
-{
-public:
- InvocationService( const Reference<XComponentContext> & xCtx );
- virtual ~InvocationService();
-
- // XServiceInfo
- OUString SAL_CALL getImplementationName() throw( RuntimeException );
- sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw( RuntimeException );
- Sequence< OUString > SAL_CALL getSupportedServiceNames(void) throw( RuntimeException );
-
- // XSingleServiceFactory
- Reference<XInterface> SAL_CALL createInstance(void) throw( Exception, RuntimeException );
- Reference<XInterface> SAL_CALL createInstanceWithArguments(
- const Sequence<Any>& rArguments ) throw( Exception, RuntimeException );
-private:
- Reference<XComponentContext> mxCtx;
- Reference<XMultiComponentFactory> mxSMgr;
- Reference<XTypeConverter> xTypeConverter;
- Reference<XIntrospection> xIntrospection;
- Reference<XIdlReflection> xCoreReflection;
-};
-
-InvocationService::InvocationService( const Reference<XComponentContext> & xCtx )
- : mxCtx( xCtx )
- , mxSMgr( xCtx->getServiceManager() )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- xTypeConverter = Reference<XTypeConverter>(
- mxSMgr->createInstanceWithContext(
- OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.script.Converter")),
- xCtx ),
- UNO_QUERY );
- xIntrospection = Reference<XIntrospection>(
- mxSMgr->createInstanceWithContext(
- OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.beans.Introspection")),
- xCtx),
- UNO_QUERY);
- mxCtx->getValueByName(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM("/singletons/com.sun.star.reflection.theCoreReflection")) )
- >>= xCoreReflection;
- OSL_ENSURE( xCoreReflection.is(), "### CoreReflection singleton not accessable!?" );
- if (! xCoreReflection.is())
- {
- throw DeploymentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("/singletons/com.sun.star.reflection.theCoreReflection singleton not accessable") ),
- Reference< XInterface >() );
- }
-// xCoreReflection = Reference<XIdlReflection>(
-// mxSMgr->createInstanceWithContext(
-// OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.reflection.CoreReflection")),
-// xCtx),
-// UNO_QUERY);
-}
-
-InvocationService::~InvocationService()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XServiceInfo
-OUString InvocationService::getImplementationName() throw( RuntimeException )
-{
- return inv_getImplementationName();
-}
-
-// XServiceInfo
-sal_Bool InvocationService::supportsService(const OUString& ServiceName) throw( RuntimeException )
-{
- Sequence< OUString > aSNL = getSupportedServiceNames();
- const OUString * pArray = aSNL.getConstArray();
- for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
- if( pArray[i] == ServiceName )
- return sal_True;
- return sal_False;
-}
-
-// XServiceInfo
-Sequence< OUString > InvocationService::getSupportedServiceNames(void) throw( RuntimeException )
-{
- return inv_getSupportedServiceNames();
-}
-
-//--------------------------------------------------------------------------------------------------
-Reference<XInterface> InvocationService::createInstance(void) throw( Exception, RuntimeException )
-{
- //TODO:throw( Exception(OUString( RTL_CONSTASCII_USTRINGPARAM("no default construction of invocation adapter possible!")), *this) );
- return Reference<XInterface>(); // dummy
-}
-
-//--------------------------------------------------------------------------------------------------
-Reference<XInterface> InvocationService::createInstanceWithArguments(
- const Sequence<Any>& rArguments ) throw( Exception, RuntimeException )
-{
- if (rArguments.getLength() == 1)
- {
- return Reference< XInterface >
- ( *new Invocation_Impl( *rArguments.getConstArray(),
- xTypeConverter, xIntrospection, xCoreReflection ) );
- }
- else
- {
- //TODO:throw( Exception(OUString( RTL_CONSTASCII_USTRINGPARAM("no default construction of invocation adapter possible!")), *this) );
- return Reference<XInterface>();
- }
-}
-
-
-//*************************************************************************
-Reference<XInterface> SAL_CALL InvocationService_CreateInstance( const Reference<XComponentContext> & xCtx )
- throw( RuntimeException )
-{
- Reference<XInterface> xService = Reference< XInterface > ( *new InvocationService( xCtx ) );
- return xService;
-}
-
-}
-
-using namespace stoc_inv;
-static struct ImplementationEntry g_entries[] =
-{
- {
- InvocationService_CreateInstance, inv_getImplementationName,
- inv_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt , 0
- },
- { 0, 0, 0, 0, 0, 0 }
-};
-
-extern "C"
-{
-sal_Bool SAL_CALL component_canUnload( TimeValue *pTime )
-{
- return g_moduleCount.canUnload( &g_moduleCount , pTime );
-}
-
-//==================================================================================================
-SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
- const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey )
-{
- return component_getFactoryHelper( pImplName, pServiceManager, pRegistryKey , g_entries );
-}
-}
-
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/invocation/makefile.mk b/stoc/source/invocation/makefile.mk
deleted file mode 100644
index 72eeea37c..000000000
--- a/stoc/source/invocation/makefile.mk
+++ /dev/null
@@ -1,71 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME= stoc
-TARGET = invocation.uno
-ENABLE_EXCEPTIONS=TRUE
-COMP1TYPELIST = inv
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-DLLPRE =
-
-# ------------------------------------------------------------------
-
-.INCLUDE : ..$/cppumaker.mk
-
-SLOFILES= \
- $(SLO)$/invocation.obj
-
-SHL1TARGET= $(TARGET)
-
-SHL1STDLIBS= \
- $(CPPULIB) \
- $(CPPUHELPERLIB) \
- $(SALLIB)
-
-SHL1VERSIONMAP = $(SOLARENV)/src/unloadablecomponent.map
-SHL1DEPN=
-SHL1IMPLIB= i$(TARGET)
-SHL1LIBS= $(SLB)$/$(TARGET).lib
-SHL1RPATH=URELIB
-
-DEF1NAME= $(SHL1TARGET)
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
-ALLTAR : $(MISC)/invocation.component
-
-$(MISC)/invocation.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \
- invocation.component
- $(XSLTPROC) --nonet --stringparam uri \
- '$(COMPONENTPREFIX_URE_NATIVE)$(SHL1TARGETN:f)' -o $@ \
- $(SOLARENV)/bin/createcomponent.xslt invocation.component
diff --git a/stoc/source/invocation_adapterfactory/iafactory.cxx b/stoc/source/invocation_adapterfactory/iafactory.cxx
deleted file mode 100644
index f011c137a..000000000
--- a/stoc/source/invocation_adapterfactory/iafactory.cxx
+++ /dev/null
@@ -1,1002 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include <boost/unordered_map.hpp>
-#include <boost/unordered_set.hpp>
-
-#include <osl/diagnose.h>
-#include <osl/interlck.h>
-#include <osl/mutex.hxx>
-
-#include <uno/dispatcher.h>
-#include <uno/data.h>
-#include <uno/any2.h>
-#include <uno/mapping.hxx>
-
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/implbase3.hxx>
-#include <cppuhelper/implementationentry.hxx>
-
-#include <com/sun/star/uno/XAggregation.hpp>
-#include <com/sun/star/script/XTypeConverter.hpp>
-#include <com/sun/star/script/XInvocationAdapterFactory.hpp>
-#include <com/sun/star/script/XInvocationAdapterFactory2.hpp>
-#include <com/sun/star/script/XInvocation.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#include <com/sun/star/registry/XSimpleRegistry.hpp>
-#include <com/sun/star/registry/XRegistryKey.hpp>
-#include <com/sun/star/reflection/InvocationTargetException.hpp>
-#include "com/sun/star/uno/RuntimeException.hpp"
-
-#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
-
-#define SERVICENAME "com.sun.star.script.InvocationAdapterFactory"
-#define IMPLNAME "com.sun.star.comp.stoc.InvocationAdapterFactory"
-
-
-using namespace ::std;
-using namespace ::rtl;
-using namespace ::osl;
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-
-namespace stoc_invadp
-{
-
-static rtl_StandardModuleCount g_moduleCount = MODULE_COUNT_INIT;
-
-static Sequence< OUString > invadp_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] =
- OUString(RTL_CONSTASCII_USTRINGPARAM(SERVICENAME));
- return seqNames;
-}
-
-static OUString invadp_getImplementationName()
-{
- return OUString(RTL_CONSTASCII_USTRINGPARAM(IMPLNAME));
-}
-
-struct hash_ptr
-{
- inline size_t operator() ( void * p ) const
- { return (size_t)p; }
-};
-typedef boost::unordered_set< void *, hash_ptr, equal_to< void * > > t_ptr_set;
-typedef boost::unordered_map< void *, t_ptr_set, hash_ptr, equal_to< void * > > t_ptr_map;
-
-//==============================================================================
-class FactoryImpl
- : public ::cppu::WeakImplHelper3< lang::XServiceInfo,
- script::XInvocationAdapterFactory,
- script::XInvocationAdapterFactory2 >
-{
-public:
- Mapping m_aUno2Cpp;
- Mapping m_aCpp2Uno;
- uno_Interface * m_pConverter;
-
- typelib_TypeDescription * m_pInvokMethodTD;
- typelib_TypeDescription * m_pSetValueTD;
- typelib_TypeDescription * m_pGetValueTD;
- typelib_TypeDescription * m_pAnySeqTD;
- typelib_TypeDescription * m_pShortSeqTD;
- typelib_TypeDescription * m_pConvertToTD;
-
- Mutex m_mutex;
- t_ptr_map m_receiver2adapters;
-
- FactoryImpl( Reference< XComponentContext > const & xContext )
- SAL_THROW( (RuntimeException) );
- virtual ~FactoryImpl() SAL_THROW( () );
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName()
- throw (RuntimeException);
- virtual sal_Bool SAL_CALL supportsService( const OUString & rServiceName )
- throw (RuntimeException);
- virtual Sequence< OUString > SAL_CALL getSupportedServiceNames()
- throw (RuntimeException);
-
- // XInvocationAdapterFactory
- virtual Reference< XInterface > SAL_CALL createAdapter(
- const Reference< script::XInvocation > & xReceiver, const Type & rType )
- throw (RuntimeException);
- // XInvocationAdapterFactory2
- virtual Reference< XInterface > SAL_CALL createAdapter(
- const Reference< script::XInvocation > & xReceiver,
- const Sequence< Type > & rTypes )
- throw (RuntimeException);
-};
-struct AdapterImpl;
-//==============================================================================
-struct InterfaceAdapterImpl : public uno_Interface
-{
- AdapterImpl * m_pAdapter;
- typelib_InterfaceTypeDescription * m_pTypeDescr;
-};
-//==============================================================================
-struct AdapterImpl
-{
- oslInterlockedCount m_nRef;
- FactoryImpl * m_pFactory;
- void * m_key; // map key
- uno_Interface * m_pReceiver; // XInvocation receiver
-
- sal_Int32 m_nInterfaces;
- InterfaceAdapterImpl * m_pInterfaces;
-
- // XInvocation calls
- void getValue(
- const typelib_TypeDescription * pMemberType,
- void * pReturn, void * pArgs[], uno_Any ** ppException );
- void setValue(
- const typelib_TypeDescription * pMemberType,
- void * pReturn, void * pArgs[], uno_Any ** ppException );
- void invoke(
- const typelib_TypeDescription * pMemberType,
- void * pReturn, void * pArgs[], uno_Any ** ppException );
-
- bool coerce_assign(
- void * pDest, typelib_TypeDescriptionReference * pType,
- uno_Any * pSource, uno_Any * pExc );
- inline bool coerce_construct(
- void * pDest, typelib_TypeDescriptionReference * pType,
- uno_Any * pSource, uno_Any * pExc );
-
- inline void acquire()
- SAL_THROW( () );
- inline void release()
- SAL_THROW( () );
- inline ~AdapterImpl()
- SAL_THROW( () );
- inline AdapterImpl(
- void * key, Reference< script::XInvocation > const & xReceiver,
- const Sequence< Type > & rTypes,
- FactoryImpl * pFactory )
- SAL_THROW( (RuntimeException) );
-};
-//______________________________________________________________________________
-inline AdapterImpl::~AdapterImpl()
- SAL_THROW( () )
-{
- for ( sal_Int32 nPos = m_nInterfaces; nPos--; )
- {
- ::typelib_typedescription_release(
- (typelib_TypeDescription *)m_pInterfaces[ nPos ].m_pTypeDescr );
- }
- delete [] m_pInterfaces;
- //
- (*m_pReceiver->release)( m_pReceiver );
- m_pFactory->release();
-}
-//______________________________________________________________________________
-inline void AdapterImpl::acquire()
- SAL_THROW( () )
-{
- ::osl_incrementInterlockedCount( &m_nRef );
-}
-//______________________________________________________________________________
-inline void AdapterImpl::release()
- SAL_THROW( () )
-{
- bool delete_this = false;
- {
- MutexGuard guard( m_pFactory->m_mutex );
- if (! ::osl_decrementInterlockedCount( &m_nRef ))
- {
- t_ptr_map::iterator iFind(
- m_pFactory->m_receiver2adapters.find( m_key ) );
- OSL_ASSERT( m_pFactory->m_receiver2adapters.end() != iFind );
- t_ptr_set & adapter_set = iFind->second;
- if (adapter_set.erase( this ) != 1) {
- OSL_ASSERT( false );
- }
- if (adapter_set.empty())
- {
- m_pFactory->m_receiver2adapters.erase( iFind );
- }
- delete_this = true;
- }
- }
- if (delete_this)
- delete this;
-}
-
-//------------------------------------------------------------------------------
-static inline void constructRuntimeException(
- uno_Any * pExc, const OUString & rMsg )
-{
- RuntimeException exc( rMsg, Reference< XInterface >() );
- // no conversion neeeded due to binary compatibility + no convertable type
- ::uno_type_any_construct(
- pExc, &exc, ::getCppuType( &exc ).getTypeLibType(), 0 );
-}
-
-//------------------------------------------------------------------------------
-static inline sal_Bool type_equals(
- typelib_TypeDescriptionReference * pType1,
- typelib_TypeDescriptionReference * pType2 )
- SAL_THROW( () )
-{
- return (pType1 == pType2 ||
- (pType1->pTypeName->length == pType2->pTypeName->length &&
- 0 == ::rtl_ustr_compare(
- pType1->pTypeName->buffer, pType2->pTypeName->buffer )));
-}
-
-//______________________________________________________________________________
-bool AdapterImpl::coerce_assign(
- void * pDest, typelib_TypeDescriptionReference * pType, uno_Any * pSource,
- uno_Any * pOutExc )
-{
- if (typelib_TypeClass_ANY == pType->eTypeClass)
- {
- ::uno_type_any_assign(
- (uno_Any *)pDest, pSource->pData, pSource->pType, 0, 0 );
- return true;
- }
- if (::uno_type_assignData(
- pDest, pType, pSource->pData, pSource->pType, 0, 0, 0 ))
- {
- return true;
- }
- else // try type converter
- {
- uno_Any ret;
- void * args[ 2 ];
- args[ 0 ] = pSource;
- args[ 1 ] = &pType;
- uno_Any exc;
- uno_Any * p_exc = &exc;
-
- // converTo()
- (*m_pFactory->m_pConverter->pDispatcher)(
- m_pFactory->m_pConverter,
- m_pFactory->m_pConvertToTD, &ret, args, &p_exc );
-
- if (p_exc) // exception occurred
- {
- OSL_ASSERT(
- p_exc->pType->eTypeClass == typelib_TypeClass_EXCEPTION );
- if (typelib_typedescriptionreference_isAssignableFrom(
- ::getCppuType(
- (RuntimeException const *) 0 ).getTypeLibType(),
- p_exc->pType ))
- {
- // is RuntimeException or derived: rethrow
- uno_type_any_construct(
- pOutExc, p_exc->pData, p_exc->pType, 0 );
- }
- else
- {
- // set runtime exception
- constructRuntimeException(
- pOutExc, OUSTR("type coercion failed: ") +
- reinterpret_cast< Exception const * >(
- p_exc->pData )->Message );
- }
- ::uno_any_destruct( p_exc, 0 );
- // pOutExc constructed
- return false;
- }
- else
- {
- bool succ = (sal_False != ::uno_type_assignData(
- pDest, pType, ret.pData, ret.pType, 0, 0, 0 ));
- ::uno_any_destruct( &ret, 0 );
- OSL_ENSURE(
- succ, "### conversion succeeded, but assignment failed!?" );
- if (! succ)
- {
- // set runtime exception
- constructRuntimeException(
- pOutExc,
- OUSTR("type coercion failed: "
- "conversion succeeded, but assignment failed?!") );
- }
- return succ;
- }
- }
-}
-//______________________________________________________________________________
-inline bool AdapterImpl::coerce_construct(
- void * pDest, typelib_TypeDescriptionReference * pType, uno_Any * pSource,
- uno_Any * pExc )
-{
- if (typelib_TypeClass_ANY == pType->eTypeClass)
- {
- ::uno_type_copyData( pDest, pSource, pType, 0 );
- return true;
- }
- if (type_equals( pType, pSource->pType))
- {
- ::uno_type_copyData( pDest, pSource->pData, pType, 0 );
- return true;
- }
- ::uno_type_constructData( pDest, pType );
- return coerce_assign( pDest, pType, pSource, pExc );
-}
-
-//------------------------------------------------------------------------------
-static void handleInvokExc( uno_Any * pDest, uno_Any * pSource )
-{
- OUString const & name =
- *reinterpret_cast< OUString const * >( &pSource->pType->pTypeName );
-
- if (name.equalsAsciiL(
- RTL_CONSTASCII_STRINGPARAM(
- "com.sun.star.reflection.InvocationTargetException") ))
- {
- // unwrap invocation target exception
- uno_Any * target_exc =
- &reinterpret_cast< reflection::InvocationTargetException * >(
- pSource->pData )->TargetException;
- ::uno_type_any_construct(
- pDest, target_exc->pData, target_exc->pType, 0 );
- }
- else // all other exceptions are wrapped to RuntimeException
- {
- if (typelib_TypeClass_EXCEPTION == pSource->pType->eTypeClass)
- {
- constructRuntimeException(
- pDest, ((Exception const *)pSource->pData)->Message );
- }
- else
- {
- constructRuntimeException(
- pDest, OUSTR("no exception has been thrown via invocation?!") );
- }
- }
-}
-//______________________________________________________________________________
-void AdapterImpl::getValue(
- const typelib_TypeDescription * pMemberType,
- void * pReturn, void * [], uno_Any ** ppException )
-{
- uno_Any aInvokRet;
- void * pInvokArgs[1];
- pInvokArgs[0] =
- &((typelib_InterfaceMemberTypeDescription *)pMemberType)->pMemberName;
- uno_Any aInvokExc;
- uno_Any * pInvokExc = &aInvokExc;
-
- // getValue()
- (*m_pReceiver->pDispatcher)(
- m_pReceiver, m_pFactory->m_pGetValueTD,
- &aInvokRet, pInvokArgs, &pInvokExc );
-
- if (pInvokExc) // getValue() call exception
- {
- handleInvokExc( *ppException, pInvokExc );
- ::uno_any_destruct( pInvokExc, 0 ); // cleanup
- }
- else // invocation call succeeded
- {
- if (coerce_construct(
- pReturn,
- ((typelib_InterfaceAttributeTypeDescription *)
- pMemberType)->pAttributeTypeRef,
- &aInvokRet, *ppException ))
- {
- *ppException = 0; // no exceptions be thrown
- }
- ::uno_any_destruct( &aInvokRet, 0 );
- }
-}
-//______________________________________________________________________________
-void AdapterImpl::setValue(
- const typelib_TypeDescription * pMemberType,
- void *, void * pArgs[], uno_Any ** ppException )
-{
- uno_Any aInvokVal;
- ::uno_type_any_construct(
- &aInvokVal, pArgs[0],
- ((typelib_InterfaceAttributeTypeDescription *)
- pMemberType)->pAttributeTypeRef, 0 );
-
- void * pInvokArgs[2];
- pInvokArgs[0] =
- &((typelib_InterfaceMemberTypeDescription *)pMemberType)->pMemberName;
- pInvokArgs[1] = &aInvokVal;
- uno_Any aInvokExc;
- uno_Any * pInvokExc = &aInvokExc;
-
- // setValue()
- (*m_pReceiver->pDispatcher)(
- m_pReceiver, m_pFactory->m_pSetValueTD, 0, pInvokArgs, &pInvokExc );
-
- if (pInvokExc) // setValue() call exception
- {
- handleInvokExc( *ppException, pInvokExc );
- ::uno_any_destruct( pInvokExc, 0 ); // cleanup
- }
- else // invocation call succeeded
- {
- *ppException = 0; // no exceptions be thrown
- }
-
- ::uno_any_destruct( &aInvokVal, 0 ); // cleanup
-}
-//______________________________________________________________________________
-void AdapterImpl::invoke(
- const typelib_TypeDescription * pMemberType,
- void * pReturn, void * pArgs[], uno_Any ** ppException )
-{
- sal_Int32 nParams =
- ((typelib_InterfaceMethodTypeDescription *)pMemberType)->nParams;
- typelib_MethodParameter * pFormalParams =
- ((typelib_InterfaceMethodTypeDescription *)pMemberType)->pParams;
-
- // in params
- uno_Sequence * pInParamsSeq = 0;
- ::uno_sequence_construct(
- &pInParamsSeq, m_pFactory->m_pAnySeqTD, 0, nParams, 0 );
- uno_Any * pInAnys = (uno_Any *)pInParamsSeq->elements;
- sal_Int32 nOutParams = 0;
- sal_Int32 nPos;
- for ( nPos = nParams; nPos--; )
- {
- typelib_MethodParameter const & rParam = pFormalParams[nPos];
- if (rParam.bIn) // is in/inout param
- {
- ::uno_type_any_assign(
- &pInAnys[nPos], pArgs[nPos], rParam.pTypeRef, 0, 0 );
- }
- // else: pure out is empty any
-
- if (rParam.bOut)
- ++nOutParams;
- }
-
- // out params, out indices
- uno_Sequence * pOutIndices;
- uno_Sequence * pOutParams;
- // return value
- uno_Any aInvokRet;
- // perform call
- void * pInvokArgs[4];
- pInvokArgs[0] =
- &((typelib_InterfaceMemberTypeDescription *)pMemberType)->pMemberName;
- pInvokArgs[1] = &pInParamsSeq;
- pInvokArgs[2] = &pOutIndices;
- pInvokArgs[3] = &pOutParams;
- uno_Any aInvokExc;
- uno_Any * pInvokExc = &aInvokExc;
-
- // invoke() call
- (*m_pReceiver->pDispatcher)(
- m_pReceiver, m_pFactory->m_pInvokMethodTD,
- &aInvokRet, pInvokArgs, &pInvokExc );
-
- if (pInvokExc)
- {
- handleInvokExc( *ppException, pInvokExc );
- ::uno_any_destruct( pInvokExc, 0 ); // cleanup
- }
- else // no invocation exception
- {
- // write changed out params
- OSL_ENSURE(
- pOutParams->nElements == nOutParams &&
- pOutIndices->nElements == nOutParams,
- "### out params lens differ!" );
- if (pOutParams->nElements == nOutParams &&
- pOutIndices->nElements == nOutParams)
- {
- sal_Int16 * pIndices = (sal_Int16 *)pOutIndices->elements;
- uno_Any * pOut = (uno_Any *)pOutParams->elements;
- for ( nPos = 0; nPos < nOutParams; ++nPos )
- {
- sal_Int32 nIndex = pIndices[nPos];
- OSL_ENSURE( nIndex < nParams, "### illegal index!" );
- typelib_MethodParameter const & rParam = pFormalParams[nIndex];
- bool succ;
- if (rParam.bIn) // is in/inout param
- {
- succ = coerce_assign(
- pArgs[nIndex], rParam.pTypeRef, &pOut[nPos],
- *ppException );
- }
- else // pure out
- {
- succ = coerce_construct(
- pArgs[nIndex], rParam.pTypeRef, &pOut[nPos],
- *ppException );
- }
- if (! succ) // cleanup of out params
- {
- for ( sal_Int32 n = 0; n <= nPos; ++n )
- {
- sal_Int32 nIndex2 = pIndices[n];
- OSL_ENSURE( nIndex2 < nParams, "### illegal index!" );
- typelib_MethodParameter const & rParam2 =
- pFormalParams[nIndex2];
- if (! rParam2.bIn) // is pure out param
- {
- ::uno_type_destructData(
- pArgs[nIndex2], rParam2.pTypeRef, 0 );
- }
- }
- }
- }
- if (nPos == pOutIndices->nElements)
- {
- // out param copy ok; write return value
- if (coerce_construct(
- pReturn,
- ((typelib_InterfaceMethodTypeDescription *)
- pMemberType)->pReturnTypeRef,
- &aInvokRet, *ppException ))
- {
- *ppException = 0; // no exception
- }
- }
- }
- else
- {
- // set runtime exception
- constructRuntimeException(
- *ppException,
- OUSTR("out params lengths differ after invocation call!") );
- }
- // cleanup invok out params
- ::uno_destructData( &pOutIndices, m_pFactory->m_pShortSeqTD, 0 );
- ::uno_destructData( &pOutParams, m_pFactory->m_pAnySeqTD, 0 );
- // cleanup invok return value
- ::uno_any_destruct( &aInvokRet, 0 );
- }
- // cleanup constructed in params
- ::uno_destructData( &pInParamsSeq, m_pFactory->m_pAnySeqTD, 0 );
-}
-
-extern "C"
-{
-//______________________________________________________________________________
-static void SAL_CALL adapter_acquire( uno_Interface * pUnoI )
-{
- static_cast< InterfaceAdapterImpl * >( pUnoI )->m_pAdapter->acquire();
-}
-//______________________________________________________________________________
-static void SAL_CALL adapter_release( uno_Interface * pUnoI )
-{
- static_cast< InterfaceAdapterImpl * >( pUnoI )->m_pAdapter->release();
-}
-//______________________________________________________________________________
-static void SAL_CALL adapter_dispatch(
- uno_Interface * pUnoI, const typelib_TypeDescription * pMemberType,
- void * pReturn, void * pArgs[], uno_Any ** ppException )
-{
- // query to emulated interface
- switch (((typelib_InterfaceMemberTypeDescription *)pMemberType)->nPosition)
- {
- case 0: // queryInterface()
- {
- AdapterImpl * that =
- static_cast< InterfaceAdapterImpl * >( pUnoI )->m_pAdapter;
- *ppException = 0; // no exc
- typelib_TypeDescriptionReference * pDemanded =
- *(typelib_TypeDescriptionReference **)pArgs[0];
- // pInterfaces[0] is XInterface
- for ( sal_Int32 nPos = 0; nPos < that->m_nInterfaces; ++nPos )
- {
- typelib_InterfaceTypeDescription * pTD =
- that->m_pInterfaces[nPos].m_pTypeDescr;
- while (pTD)
- {
- if (type_equals(
- ((typelib_TypeDescription *)pTD)->pWeakRef, pDemanded ))
- {
- uno_Interface * pUnoI2 = &that->m_pInterfaces[nPos];
- ::uno_any_construct(
- (uno_Any *)pReturn, &pUnoI2,
- (typelib_TypeDescription *)pTD, 0 );
- return;
- }
- pTD = pTD->pBaseTypeDescription;
- }
- }
- ::uno_any_construct( (uno_Any *)pReturn, 0, 0, 0 ); // clear()
- break;
- }
- case 1: // acquire()
- *ppException = 0; // no exc
- adapter_acquire( pUnoI );
- break;
- case 2: // release()
- *ppException = 0; // no exc
- adapter_release( pUnoI );
- break;
-
- default:
- {
- AdapterImpl * that =
- static_cast< InterfaceAdapterImpl * >( pUnoI )->m_pAdapter;
- if (pMemberType->eTypeClass == typelib_TypeClass_INTERFACE_METHOD)
- {
- that->invoke( pMemberType, pReturn, pArgs, ppException );
- }
- else // attribute
- {
- if (pReturn)
- that->getValue( pMemberType, pReturn, pArgs, ppException );
- else
- that->setValue( pMemberType, pReturn, pArgs, ppException );
- }
- }
- }
-}
-}
-//______________________________________________________________________________
-AdapterImpl::AdapterImpl(
- void * key, Reference< script::XInvocation > const & xReceiver,
- const Sequence< Type > & rTypes,
- FactoryImpl * pFactory )
- SAL_THROW( (RuntimeException) )
- : m_nRef( 1 ),
- m_pFactory( pFactory ),
- m_key( key )
-{
- // init adapters
- m_nInterfaces = rTypes.getLength();
- m_pInterfaces = new InterfaceAdapterImpl[ rTypes.getLength() ];
- const Type * pTypes = rTypes.getConstArray();
- for ( sal_Int32 nPos = rTypes.getLength(); nPos--; )
- {
- InterfaceAdapterImpl * pInterface = &m_pInterfaces[nPos];
- pInterface->acquire = adapter_acquire;
- pInterface->release = adapter_release;
- pInterface->pDispatcher = adapter_dispatch;
- pInterface->m_pAdapter = this;
- pInterface->m_pTypeDescr = 0;
- pTypes[nPos].getDescription(
- (typelib_TypeDescription **)&pInterface->m_pTypeDescr );
- OSL_ASSERT( pInterface->m_pTypeDescr );
- if (! pInterface->m_pTypeDescr)
- {
- for ( sal_Int32 n = 0; n < nPos; ++n )
- {
- ::typelib_typedescription_release(
- (typelib_TypeDescription *)
- m_pInterfaces[ n ].m_pTypeDescr );
- }
- delete [] m_pInterfaces;
- throw RuntimeException(
- OUSTR("cannot retrieve all interface type infos!"),
- Reference< XInterface >() );
- }
- }
-
- // map receiver
- m_pReceiver = (uno_Interface *)m_pFactory->m_aCpp2Uno.mapInterface(
- xReceiver.get(), ::getCppuType( &xReceiver ) );
- OSL_ASSERT( 0 != m_pReceiver );
- if (! m_pReceiver)
- {
- throw RuntimeException(
- OUSTR("cannot map receiver!"), Reference< XInterface >() );
- }
-
- m_pFactory->acquire();
-}
-
-//______________________________________________________________________________
-FactoryImpl::FactoryImpl( Reference< XComponentContext > const & xContext )
- SAL_THROW( (RuntimeException) )
- : m_pInvokMethodTD( 0 ),
- m_pSetValueTD( 0 ),
- m_pGetValueTD( 0 ),
- m_pAnySeqTD( 0 ),
- m_pShortSeqTD( 0 ),
- m_pConvertToTD( 0 )
-{
- // C++/UNO bridge
- OUString aCppEnvTypeName = OUSTR(CPPU_CURRENT_LANGUAGE_BINDING_NAME);
- OUString aUnoEnvTypeName = OUSTR(UNO_LB_UNO);
- m_aUno2Cpp = Mapping( aUnoEnvTypeName, aCppEnvTypeName );
- m_aCpp2Uno = Mapping( aCppEnvTypeName, aUnoEnvTypeName );
- OSL_ENSURE(
- m_aUno2Cpp.is() && m_aCpp2Uno.is(), "### no uno / C++ mappings!" );
-
- // type converter
- Reference< script::XTypeConverter > xConverter(
- xContext->getServiceManager()->createInstanceWithContext(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.script.Converter") ),
- xContext ),
- UNO_QUERY_THROW );
- m_pConverter = (uno_Interface *)m_aCpp2Uno.mapInterface(
- xConverter.get(), ::getCppuType( &xConverter ) );
- OSL_ASSERT( 0 != m_pConverter );
-
- // some type info:
- // sequence< any >
- Type const & rAnySeqType = ::getCppuType( (const Sequence< Any > *)0 );
- rAnySeqType.getDescription( &m_pAnySeqTD );
- // sequence< short >
- const Type & rShortSeqType =
- ::getCppuType( (const Sequence< sal_Int16 > *)0 );
- rShortSeqType.getDescription( &m_pShortSeqTD );
- // script.XInvocation
- typelib_TypeDescription * pTD = 0;
- const Type & rInvType = ::getCppuType(
- (const Reference< script::XInvocation > *)0 );
- TYPELIB_DANGER_GET( &pTD, rInvType.getTypeLibType() );
- typelib_InterfaceTypeDescription * pITD;
- pITD = reinterpret_cast<typelib_InterfaceTypeDescription*>(pTD);
- if( ! pITD->aBase.bComplete )
- typelib_typedescription_complete( &pTD );
- ::typelib_typedescriptionreference_getDescription(
- &m_pInvokMethodTD, pITD->ppMembers[ 1 ] ); // invoke()
- ::typelib_typedescriptionreference_getDescription(
- &m_pSetValueTD, pITD->ppMembers[ 2 ] ); // setValue()
- ::typelib_typedescriptionreference_getDescription(
- &m_pGetValueTD, pITD->ppMembers[ 3 ] ); // getValue()
- // script.XTypeConverter
- const Type & rTCType =
- ::getCppuType( (const Reference< script::XTypeConverter > *)0 );
- TYPELIB_DANGER_GET( &pTD, rTCType.getTypeLibType() );
- pITD = reinterpret_cast<typelib_InterfaceTypeDescription*>(pTD);
- ::typelib_typedescriptionreference_getDescription(
- &m_pConvertToTD, pITD->ppMembers[ 0 ] ); // convertTo()
- TYPELIB_DANGER_RELEASE( pTD );
-
- if (!m_pInvokMethodTD || !m_pSetValueTD || !m_pGetValueTD ||
- !m_pConvertToTD ||
- !m_pAnySeqTD || !m_pShortSeqTD)
- {
- throw RuntimeException(
- OUSTR("missing type descriptions!"), Reference< XInterface >() );
- }
-
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-}
-//______________________________________________________________________________
-FactoryImpl::~FactoryImpl() SAL_THROW( () )
-{
- ::typelib_typedescription_release( m_pInvokMethodTD );
- ::typelib_typedescription_release( m_pSetValueTD );
- ::typelib_typedescription_release( m_pGetValueTD );
- ::typelib_typedescription_release( m_pAnySeqTD );
- ::typelib_typedescription_release( m_pShortSeqTD );
- ::typelib_typedescription_release( m_pConvertToTD );
-
- (*m_pConverter->release)( m_pConverter );
-
-#if OSL_DEBUG_LEVEL > 1
- OSL_ENSURE( m_receiver2adapters.empty(), "### still adapters out there!?" );
-#endif
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-//------------------------------------------------------------------------------
-static inline AdapterImpl * lookup_adapter(
- t_ptr_set ** pp_adapter_set,
- t_ptr_map & map, void * key, Sequence< Type > const & rTypes )
- SAL_THROW( () )
-{
- t_ptr_set & adapters_set = map[ key ];
- *pp_adapter_set = &adapters_set;
- if (adapters_set.empty())
- return 0; // shortcut
- // find matching adapter
- Type const * pTypes = rTypes.getConstArray();
- sal_Int32 nTypes = rTypes.getLength();
- t_ptr_set::const_iterator iPos( adapters_set.begin() );
- t_ptr_set::const_iterator const iEnd( adapters_set.end() );
- while (iEnd != iPos)
- {
- AdapterImpl * that = reinterpret_cast< AdapterImpl * >( *iPos );
- // iterate thru all types if that is a matching adapter
- sal_Int32 nPosTypes;
- for ( nPosTypes = nTypes; nPosTypes--; )
- {
- Type const & rType = pTypes[ nPosTypes ];
- // find in adapter's type list
- sal_Int32 nPos;
- for ( nPos = that->m_nInterfaces; nPos--; )
- {
- if (::typelib_typedescriptionreference_isAssignableFrom(
- rType.getTypeLibType(),
- ((typelib_TypeDescription *)that->
- m_pInterfaces[ nPos ].m_pTypeDescr)->pWeakRef ))
- {
- // found
- break;
- }
- }
- if (nPos < 0) // type not found => next adapter
- break;
- }
- if (nPosTypes < 0) // all types found
- return that;
- ++iPos;
- }
- return 0;
-}
-
-// XInvocationAdapterFactory2 impl
-//______________________________________________________________________________
-Reference< XInterface > FactoryImpl::createAdapter(
- const Reference< script::XInvocation > & xReceiver,
- const Sequence< Type > & rTypes )
- throw (RuntimeException)
-{
- Reference< XInterface > xRet;
- if (xReceiver.is() && rTypes.getLength())
- {
- t_ptr_set * adapter_set;
- AdapterImpl * that;
- Reference< XInterface > xKey( xReceiver, UNO_QUERY );
- {
- ClearableMutexGuard guard( m_mutex );
- that = lookup_adapter(
- &adapter_set, m_receiver2adapters, xKey.get(), rTypes );
- if (0 == that) // no entry
- {
- guard.clear();
- // create adapter; already acquired: m_nRef == 1
- AdapterImpl * pNew =
- new AdapterImpl( xKey.get(), xReceiver, rTypes, this );
- // lookup again
- ClearableMutexGuard guard2( m_mutex );
- that = lookup_adapter(
- &adapter_set, m_receiver2adapters, xKey.get(), rTypes );
- if (0 == that) // again no entry
- {
- pair< t_ptr_set::iterator, bool > insertion(
- adapter_set->insert( pNew ) );
- OSL_ASSERT( insertion.second );
- that = pNew;
- }
- else
- {
- that->acquire();
- guard2.clear();
- delete pNew; // has never been inserted
- }
- }
- else // found adapter
- {
- that->acquire();
- }
- }
- // map one interface to C++
- uno_Interface * pUnoI = &that->m_pInterfaces[ 0 ];
- m_aUno2Cpp.mapInterface(
- (void **)&xRet, pUnoI, ::getCppuType( &xRet ) );
- that->release();
- OSL_ASSERT( xRet.is() );
- if (! xRet.is())
- {
- throw RuntimeException(
- OUSTR("mapping UNO to C++ failed!"),
- Reference< XInterface >() );
- }
- }
- return xRet;
-}
-// XInvocationAdapterFactory impl
-//______________________________________________________________________________
-Reference< XInterface > FactoryImpl::createAdapter(
- const Reference< script::XInvocation > & xReceiver, const Type & rType )
- throw (RuntimeException)
-{
- return createAdapter( xReceiver, Sequence< Type >( &rType, 1 ) );
-}
-
-// XServiceInfo
-//______________________________________________________________________________
-OUString FactoryImpl::getImplementationName()
- throw (RuntimeException)
-{
- return invadp_getImplementationName();
-}
-//______________________________________________________________________________
-sal_Bool FactoryImpl::supportsService( const OUString & rServiceName )
- throw (RuntimeException)
-{
- const Sequence< OUString > & rSNL = getSupportedServiceNames();
- const OUString * pArray = rSNL.getConstArray();
- for ( sal_Int32 nPos = rSNL.getLength(); nPos--; )
- {
- if (pArray[nPos].equals( rServiceName ))
- return sal_True;
- }
- return sal_False;
-}
-//______________________________________________________________________________
-Sequence< OUString > FactoryImpl::getSupportedServiceNames()
- throw (RuntimeException)
-{
- return invadp_getSupportedServiceNames();
-}
-
-//==============================================================================
-static Reference< XInterface > SAL_CALL FactoryImpl_create(
- const Reference< XComponentContext > & xContext )
- throw (Exception)
-{
- Reference< XInterface > rRet;
- {
- MutexGuard guard( Mutex::getGlobalMutex() );
- static WeakReference < XInterface > rwInstance;
- rRet = rwInstance;
-
- if( ! rRet.is() )
- {
- rRet = (::cppu::OWeakObject *)new FactoryImpl( xContext );
- rwInstance = rRet;
- }
- }
- return rRet;
-}
-
-}
-
-
-//##############################################################################
-//##############################################################################
-//##############################################################################
-
-static struct ::cppu::ImplementationEntry g_entries[] =
-{
- {
- ::stoc_invadp::FactoryImpl_create,
- ::stoc_invadp::invadp_getImplementationName,
- ::stoc_invadp::invadp_getSupportedServiceNames,
- ::cppu::createSingleComponentFactory,
- &::stoc_invadp::g_moduleCount.modCnt , 0
- },
- { 0, 0, 0, 0, 0, 0 }
-};
-
-extern "C"
-{
-sal_Bool SAL_CALL component_canUnload(
- TimeValue *pTime )
-{
- return ::stoc_invadp::g_moduleCount.canUnload(
- &::stoc_invadp::g_moduleCount, pTime );
-}
-
-//==============================================================================
-SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
- const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey )
-{
- return ::cppu::component_getFactoryHelper(
- pImplName, pServiceManager, pRegistryKey , g_entries );
-}
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/invocation_adapterfactory/invadp.xml b/stoc/source/invocation_adapterfactory/invadp.xml
deleted file mode 100644
index 446389a1f..000000000
--- a/stoc/source/invocation_adapterfactory/invadp.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name> invocadapt.uno </module-name>
- <component-description>
- <author> Daniel Boelzle </author>
- <name> com.sun.star.comp.stoc.InvocationAdapterFactory </name>
- <description>
-You can create adapter interfaces of any given type for an invocation
-interface by using an adapter factory instance.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> C++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.script.InvocationAdapterFactory </supported-service>
- <type> com.sun.star.script.XTypeConverter </type>
- <type> com.sun.star.script.XInvocationAdapterFactory </type>
- <type> com.sun.star.script.XInvocationAdapterFactory2 </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.registry.XSimpleRegistry </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XComponentContext </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.container.XEnumerationAccess </type>
- <type> com.sun.star.container.XNameContainer </type>
- <type> com.sun.star.container.XIndexContainer </type>
- <type> com.sun.star.reflection.InvocationTargetException </type>
- </component-description>
- <project-build-dependency> cppuhelper </project-build-dependency>
- <project-build-dependency> cppu </project-build-dependency>
- <project-build-dependency> sal </project-build-dependency>
- <runtime-module-dependency> cppuhelper3$(COM) </runtime-module-dependency>
- <runtime-module-dependency> cppu3 </runtime-module-dependency>
- <runtime-module-dependency> sal3 </runtime-module-dependency>
-</module-description>
diff --git a/stoc/source/invocation_adapterfactory/invocadapt.component b/stoc/source/invocation_adapterfactory/invocadapt.component
deleted file mode 100644
index 64f7b2b36..000000000
--- a/stoc/source/invocation_adapterfactory/invocadapt.component
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--**********************************************************************
-*
-* 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.
-*
-**********************************************************************-->
-
-<component loader="com.sun.star.loader.SharedLibrary"
- xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.comp.stoc.InvocationAdapterFactory">
- <service name="com.sun.star.script.InvocationAdapterFactory"/>
- </implementation>
-</component>
diff --git a/stoc/source/invocation_adapterfactory/makefile.mk b/stoc/source/invocation_adapterfactory/makefile.mk
deleted file mode 100644
index 4c3450ac8..000000000
--- a/stoc/source/invocation_adapterfactory/makefile.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME=stoc
-TARGET = invocadapt.uno
-ENABLE_EXCEPTIONS=TRUE
-COMP1TYPELIST = invadp
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-DLLPRE =
-
-# ------------------------------------------------------------------
-
-.INCLUDE : ..$/cppumaker.mk
-
-SLOFILES= \
- $(SLO)$/iafactory.obj
-
-SHL1TARGET= $(TARGET)
-
-SHL1STDLIBS= \
- $(CPPULIB) \
- $(CPPUHELPERLIB) \
- $(SALLIB)
-
-SHL1VERSIONMAP = $(SOLARENV)/src/unloadablecomponent.map
-SHL1RPATH=URELIB
-
-SHL1DEPN=
-SHL1IMPLIB= i$(TARGET)
-SHL1LIBS= $(SLB)$/$(TARGET).lib
-SHL1DEF= $(MISC)$/$(SHL1TARGET).def
-
-DEF1NAME= $(SHL1TARGET)
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
-ALLTAR : $(MISC)/invocadapt.component
-
-$(MISC)/invocadapt.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \
- invocadapt.component
- $(XSLTPROC) --nonet --stringparam uri \
- '$(COMPONENTPREFIX_URE_NATIVE)$(SHL1TARGETN:f)' -o $@ \
- $(SOLARENV)/bin/createcomponent.xslt invocadapt.component
diff --git a/stoc/source/javaloader/javaloader.component b/stoc/source/javaloader/javaloader.component
deleted file mode 100644
index bdd3b82d5..000000000
--- a/stoc/source/javaloader/javaloader.component
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--**********************************************************************
-*
-* 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.
-*
-**********************************************************************-->
-
-<component loader="com.sun.star.loader.SharedLibrary"
- xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.comp.stoc.JavaComponentLoader">
- <service name="com.sun.star.loader.Java"/>
- <service name="com.sun.star.loader.Java2"/>
- </implementation>
-</component>
diff --git a/stoc/source/javaloader/javaloader.cxx b/stoc/source/javaloader/javaloader.cxx
deleted file mode 100644
index b28b766d5..000000000
--- a/stoc/source/javaloader/javaloader.cxx
+++ /dev/null
@@ -1,455 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-
-#include <cstdarg>
-#include <osl/diagnose.h>
-#include <osl/process.h>
-
-#include <rtl/process.h>
-#include <rtl/ustrbuf.hxx>
-
-#include <uno/environment.h>
-#include <uno/mapping.hxx>
-#include "com/sun/star/uno/RuntimeException.hpp"
-
-#include <cppuhelper/servicefactory.hxx>
-
-#ifdef LINUX
-#undef minor
-#undef major
-#endif
-
-#include <com/sun/star/java/XJavaVM.hpp>
-
-#include <com/sun/star/lang/XMultiComponentFactory.hpp>
-
-#include "jni.h"
-
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/implementationentry.hxx>
-
-#include <cppuhelper/implbase2.hxx>
-
-#include <com/sun/star/loader/XImplementationLoader.hpp>
-#include <com/sun/star/lang/IllegalArgumentException.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/registry/XRegistryKey.hpp>
-
-#include "jvmaccess/unovirtualmachine.hxx"
-#include "jvmaccess/virtualmachine.hxx"
-
-namespace css = com::sun::star;
-
-using namespace ::com::sun::star::java;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::loader;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::registry;
-
-using namespace ::cppu;
-using namespace ::rtl;
-using namespace ::osl;
-
-namespace stoc_javaloader {
-
-static Mutex & getInitMutex();
-
-static Sequence< OUString > loader_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(2);
- seqNames.getArray()[0] = OUString(
- RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.loader.Java") );
- seqNames.getArray()[1] = OUString(
- RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.loader.Java2") );
- return seqNames;
-}
-
-static OUString loader_getImplementationName()
-{
- return OUString(
- RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.stoc.JavaComponentLoader" ) );
-}
-
-class JavaComponentLoader : public WeakImplHelper2<XImplementationLoader, XServiceInfo>
-{
- css::uno::Reference<XComponentContext> m_xComponentContext;
- /** Do not use m_javaLoader directly. Instead use getJavaLoader.
- */
- css::uno::Reference<XImplementationLoader> m_javaLoader;
- /** The retured Reference contains a null pointer if the office is not configured
- to run java.
-
- @exception com::sun::star::uno::RuntimeException
- If the Java implementation of the loader could not be obtained, for reasons other
- then that java was not configured the RuntimeException is thrown.
- */
- const css::uno::Reference<XImplementationLoader> & getJavaLoader();
-
-
-public:
- JavaComponentLoader(const css::uno::Reference<XComponentContext> & xCtx)
- throw(RuntimeException);
- virtual ~JavaComponentLoader() throw();
-
-public:
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName() throw(RuntimeException);
- virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName)
- throw(RuntimeException);
- virtual Sequence<OUString> SAL_CALL getSupportedServiceNames()
- throw(RuntimeException);
-
- // XImplementationLoader
- virtual css::uno::Reference<XInterface> SAL_CALL activate(
- const OUString& implementationName, const OUString& implementationLoaderUrl,
- const OUString& locationUrl, const css::uno::Reference<XRegistryKey>& xKey)
- throw(CannotActivateFactoryException, RuntimeException);
- virtual sal_Bool SAL_CALL writeRegistryInfo(
- const css::uno::Reference<XRegistryKey>& xKey,
- const OUString& implementationLoaderUrl, const OUString& locationUrl)
- throw(CannotRegisterImplementationException, RuntimeException);
-};
-
-const css::uno::Reference<XImplementationLoader> & JavaComponentLoader::getJavaLoader()
-{
- MutexGuard aGuard(getInitMutex());
-
- if (m_javaLoader.is())
- return m_javaLoader;
-
- uno_Environment * pJava_environment = NULL;
- uno_Environment * pUno_environment = NULL;
- typelib_InterfaceTypeDescription * pType_XImplementationLoader = 0;
-
- try {
- // get a java vm, where we can create a loader
- css::uno::Reference<XJavaVM> javaVM_xJavaVM(
- m_xComponentContext->getValueByName(
- OUString(RTL_CONSTASCII_USTRINGPARAM(
- "/singletons/"
- "com.sun.star.java.theJavaVirtualMachine"))),
- UNO_QUERY_THROW);
-
- // Use the special protocol of XJavaVM.getJavaVM: If the passed in
- // process ID has an extra 17th byte of value one, the returned any
- // contains a pointer to a jvmaccess::UnoVirtualMachine, instead of the
- // underlying JavaVM pointer:
- Sequence<sal_Int8> processID(17);
- rtl_getGlobalProcessId(reinterpret_cast<sal_uInt8 *>(processID.getArray()));
- processID[16] = 1;
-
- // We get a non-refcounted pointer to a jvmaccess::UnoVirtualMachine
- // from the XJavaVM service (the pointer is guaranteed to be valid
- // as long as our reference to the XJavaVM service lasts), and
- // convert the non-refcounted pointer into a refcounted one
- // immediately:
- OSL_ENSURE(sizeof (sal_Int64)
- >= sizeof (jvmaccess::UnoVirtualMachine *),
- "Pointer cannot be represented as sal_Int64");
- sal_Int64 nPointer = reinterpret_cast< sal_Int64 >(
- static_cast< jvmaccess::UnoVirtualMachine * >(0));
- javaVM_xJavaVM->getJavaVM(processID) >>= nPointer;
- rtl::Reference< jvmaccess::UnoVirtualMachine > xVirtualMachine(
- reinterpret_cast< jvmaccess::UnoVirtualMachine * >(nPointer));
- if (!xVirtualMachine.is())
- //throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM(
- // "javaloader error - JavaVirtualMachine service could not provide a VM")),
- // css::uno::Reference<XInterface>());
- // We must not throw a RuntimeException, because this might end the applications.
- // It is ok if java components
- // are not working because the office can be installed without Java support.
- return m_javaLoader; // null-ref
-
- try
- {
- jvmaccess::VirtualMachine::AttachGuard aGuard2(
- xVirtualMachine->getVirtualMachine());
- JNIEnv * pJNIEnv = aGuard2.getEnvironment();
-
- // instantiate the java JavaLoader
- jclass jcClassLoader = pJNIEnv->FindClass("java/lang/ClassLoader");
- if(pJNIEnv->ExceptionOccurred())
- throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM(
- "javaloader error - could not find class java/lang/ClassLoader")),
- css::uno::Reference<XInterface>());
- jmethodID jmLoadClass = pJNIEnv->GetMethodID(
- jcClassLoader, "loadClass",
- "(Ljava/lang/String;)Ljava/lang/Class;");
- if(pJNIEnv->ExceptionOccurred())
- throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM(
- "javaloader error - could not find method java/lang/ClassLoader.loadClass")),
- css::uno::Reference<XInterface>());
- jvalue arg;
- arg.l = pJNIEnv->NewStringUTF(
- "com.sun.star.comp.loader.JavaLoader");
- if(pJNIEnv->ExceptionOccurred())
- throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM(
- "javaloader error - could not create string")),
- css::uno::Reference<XInterface>());
- jclass jcJavaLoader = static_cast< jclass >(
- pJNIEnv->CallObjectMethodA(
- static_cast< jobject >(xVirtualMachine->getClassLoader()),
- jmLoadClass, &arg));
- if(pJNIEnv->ExceptionOccurred())
- throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM(
- "javaloader error - could not find class com/sun/star/comp/loader/JavaLoader")),
- css::uno::Reference<XInterface>());
- jmethodID jmJavaLoader_init = pJNIEnv->GetMethodID(jcJavaLoader, "<init>", "()V");
- if(pJNIEnv->ExceptionOccurred())
- throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM(
- "javaloader error - instantiation of com.sun.star.comp.loader.JavaLoader failed")),
- css::uno::Reference<XInterface>());
- jobject joJavaLoader = pJNIEnv->NewObject(jcJavaLoader, jmJavaLoader_init);
- if(pJNIEnv->ExceptionOccurred())
- throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM(
- "javaloader error - instantiation of com.sun.star.comp.loader.JavaLoader failed")),
- css::uno::Reference<XInterface>());
-
- // map the java JavaLoader to this environment
- OUString sJava(RTL_CONSTASCII_USTRINGPARAM("java"));
- uno_getEnvironment(&pJava_environment, sJava.pData,
- xVirtualMachine.get());
- if(!pJava_environment)
- throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM(
- "javaloader error - no Java environment available")), css::uno::Reference<XInterface>());
-
- // why is there no convinient contructor?
- OUString sCppu_current_lb_name(RTL_CONSTASCII_USTRINGPARAM(CPPU_CURRENT_LANGUAGE_BINDING_NAME));
- uno_getEnvironment(&pUno_environment, sCppu_current_lb_name.pData, NULL);
- if(!pUno_environment)
- throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM(
- "javaloader error - no C++ environment available")), css::uno::Reference<XInterface>());
-
- Mapping java_curr(pJava_environment, pUno_environment);
- if(!java_curr.is())
- throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM(
- "javaloader error - no mapping from java to C++ ")), css::uno::Reference<XInterface>());
-
- // release java environment
- pJava_environment->release(pJava_environment);
- pJava_environment = NULL;
-
- // release uno environment
- pUno_environment->release(pUno_environment);
- pUno_environment = NULL;
-
- getCppuType((css::uno::Reference<XImplementationLoader> *) 0).
- getDescription((typelib_TypeDescription **) & pType_XImplementationLoader);
- if(!pType_XImplementationLoader)
- throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM(
- "javaloader error - no type information for XImplementationLoader")),
- css::uno::Reference<XInterface>());
-
- m_javaLoader = css::uno::Reference<XImplementationLoader>(reinterpret_cast<XImplementationLoader *>(
- java_curr.mapInterface(joJavaLoader, pType_XImplementationLoader)));
- pJNIEnv->DeleteLocalRef( joJavaLoader );
- if(!m_javaLoader.is())
- throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM(
- "javaloader error - mapping of java XImplementationLoader to c++ failed")),
- css::uno::Reference<XInterface>());
-
- typelib_typedescription_release(reinterpret_cast<typelib_TypeDescription *>(pType_XImplementationLoader));
- pType_XImplementationLoader = NULL;
- }
- catch (jvmaccess::VirtualMachine::AttachGuard::CreationException &)
- {
- throw RuntimeException(
- OUString(RTL_CONSTASCII_USTRINGPARAM(
- "jvmaccess::VirtualMachine::AttachGuard"
- "::CreationException")),0);
- }
-
- // set the service manager at the javaloader
- css::uno::Reference<XInitialization> javaLoader_XInitialization(m_javaLoader, UNO_QUERY);
- if(!javaLoader_XInitialization.is())
- throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM(
- "javaloader error - initialization of java javaloader failed, no XInitialization")),
- css::uno::Reference<XInterface>());
-
- Any any;
- any <<= css::uno::Reference<XMultiComponentFactory>(
- m_xComponentContext->getServiceManager());
-
- javaLoader_XInitialization->initialize(Sequence<Any>(&any, 1));
- }
- catch(RuntimeException &) {
- if(pJava_environment)
- pJava_environment->release(pJava_environment);
-
- if(pUno_environment)
- pUno_environment->release(pUno_environment);
-
- if(pType_XImplementationLoader)
- typelib_typedescription_release(
- reinterpret_cast<typelib_TypeDescription *>(pType_XImplementationLoader));
- throw;
- }
- OSL_TRACE("javaloader.cxx: mapped javaloader - 0x%x", m_javaLoader.get());
- return m_javaLoader;
-}
-
-JavaComponentLoader::JavaComponentLoader(const css::uno::Reference<XComponentContext> & xCtx) throw(RuntimeException) :
- m_xComponentContext(xCtx)
-
-{
-
-}
-
-JavaComponentLoader::~JavaComponentLoader() throw()
-{
-}
-
-// XServiceInfo
-OUString SAL_CALL JavaComponentLoader::getImplementationName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return loader_getImplementationName();
-}
-
-sal_Bool SAL_CALL JavaComponentLoader::supportsService(const OUString & ServiceName)
- throw(::com::sun::star::uno::RuntimeException)
-{
- sal_Bool bSupport = sal_False;
-
- Sequence<OUString> aSNL = getSupportedServiceNames();
- const OUString * pArray = aSNL.getArray();
- for(sal_Int32 i = 0; i < aSNL.getLength() && !bSupport; ++ i)
- bSupport = pArray[i] == ServiceName;
-
- return bSupport;
-}
-
-Sequence<OUString> SAL_CALL JavaComponentLoader::getSupportedServiceNames()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return loader_getSupportedServiceNames();
-}
-
-
-
-// XImplementationLoader
-sal_Bool SAL_CALL JavaComponentLoader::writeRegistryInfo(
- const css::uno::Reference<XRegistryKey> & xKey, const OUString & blabla,
- const OUString & rLibName)
- throw(CannotRegisterImplementationException, RuntimeException)
-{
- const css::uno::Reference<XImplementationLoader> & loader = getJavaLoader();
- if (loader.is())
- return loader->writeRegistryInfo(xKey, blabla, rLibName);
- else
- throw CannotRegisterImplementationException(
- OUString(RTL_CONSTASCII_USTRINGPARAM("Could not create Java implementation loader")), NULL);
-}
-
-
-css::uno::Reference<XInterface> SAL_CALL JavaComponentLoader::activate(
- const OUString & rImplName, const OUString & blabla, const OUString & rLibName,
- const css::uno::Reference<XRegistryKey> & xKey)
- throw(CannotActivateFactoryException, RuntimeException)
-{
- const css::uno::Reference<XImplementationLoader> & loader = getJavaLoader();
- if (loader.is())
- return loader->activate(rImplName, blabla, rLibName, xKey);
- else
- throw CannotActivateFactoryException(
- OUString(RTL_CONSTASCII_USTRINGPARAM("Could not create Java implementation loader")), NULL);
-}
-
-static Mutex & getInitMutex()
-{
- static Mutex * pMutex = 0;
- if( ! pMutex )
- {
- MutexGuard guard( Mutex::getGlobalMutex() );
- if( ! pMutex )
- {
- static Mutex mutex;
- pMutex = &mutex;
- }
- }
- return *pMutex;
-}
-
-css::uno::Reference<XInterface> SAL_CALL JavaComponentLoader_CreateInstance(const css::uno::Reference<XComponentContext> & xCtx) throw(Exception)
-{
- css::uno::Reference<XInterface> xRet;
-
- try {
- MutexGuard guard( getInitMutex() );
- // The javaloader is never destroyed and there can be only one!
- // Note that the first context wins ....
- static css::uno::Reference< XInterface > *pStaticRef = 0;
- if( pStaticRef )
- {
- xRet = *pStaticRef;
- }
- else
- {
- xRet = *new JavaComponentLoader(xCtx);
- pStaticRef = new css::uno::Reference< XInterface > ( xRet );
- }
- }
- catch(RuntimeException & runtimeException) {
- OString message = OUStringToOString(runtimeException.Message, RTL_TEXTENCODING_ASCII_US);
- osl_trace("javaloader - could not init javaloader cause of %s", message.getStr());
- throw;
- }
-
- return xRet;
-}
-
-} //end namespace
-
-
-using namespace stoc_javaloader;
-
-static struct ImplementationEntry g_entries[] =
-{
- {
- JavaComponentLoader_CreateInstance, loader_getImplementationName,
- loader_getSupportedServiceNames, createSingleComponentFactory,
- 0 , 0
- },
- { 0, 0, 0, 0, 0, 0 }
-};
-
-extern "C"
-{
-SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
- const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey )
-{
- return component_getFactoryHelper( pImplName, pServiceManager, pRegistryKey , g_entries );
-}
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/javaloader/javaloader.xml b/stoc/source/javaloader/javaloader.xml
deleted file mode 100644
index eb632f59e..000000000
--- a/stoc/source/javaloader/javaloader.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name> javaloader.uno </module-name>
- <component-description>
- <author> Kay Ramme </author>
- <name> com.sun.star.comp.stoc.JavaComponentLoader </name>
- <description> ... </description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> c++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.loader.Java </supported-service>
- <supported-service> com.sun.star.loader.Java2 </supported-service>
- <service-dependency> ... </service-dependency>
-
- <type> com.sun.star.java.XJavaVM </type>
- <type> com.sun.star.lang.IllegalArgumentException </type>
- <type> com.sun.star.lang.XInitialization </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XMultiComponentFactory </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.loader.XImplementationLoader </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XWeak </type>
- </component-description>
- <project-build-dependency> cppuhelper </project-build-dependency>
- <project-build-dependency> cppu </project-build-dependency>
- <project-build-dependency> sal </project-build-dependency>
- <project-build-dependency> jvmaccess </project-build-dependency>
- <runtime-module-dependency> cppuhelper3$(COM) </runtime-module-dependency>
- <runtime-module-dependency> cppu3 </runtime-module-dependency>
- <runtime-module-dependency> sal3 </runtime-module-dependency>
- <runtime-module-dependency> jvmaccess3$(COM) </runtime-module-dependency>
-</module-description>
diff --git a/stoc/source/javaloader/makefile.mk b/stoc/source/javaloader/makefile.mk
deleted file mode 100644
index e53b90d5e..000000000
--- a/stoc/source/javaloader/makefile.mk
+++ /dev/null
@@ -1,79 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-
-PRJ=..$/..
-
-PRJNAME=stoc
-TARGET = javaloader.uno
-ENABLE_EXCEPTIONS=TRUE
-COMP1TYPELIST = javaloader
-
-.IF "$(SOLAR_JAVA)" == "TRUE"
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-DLLPRE =
-
-# ------------------------------------------------------------------
-
-.INCLUDE : ..$/cppumaker.mk
-
-SLOFILES= $(SLO)$/javaloader.obj
-
-SHL1TARGET= $(TARGET)
-
-SHL1STDLIBS=\
- $(CPPUHELPERLIB) \
- $(CPPULIB) \
- $(SALLIB) \
- $(JVMACCESSLIB)
-
-SHL1VERSIONMAP = $(SOLARENV)/src/component.map
-SHL1DEPN=
-SHL1IMPLIB= i$(TARGET)
-SHL1LIBS= $(SLB)$/$(TARGET).lib
-SHL1DEF= $(MISC)$/$(SHL1TARGET).def
-SHL1RPATH= URELIB
-
-DEF1NAME= $(SHL1TARGET)
-
-.ELSE # SOLAR_JAVA
-all:
- @echo Nothing to do: SOLAR_JAVA not set
-.ENDIF
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
-ALLTAR : $(MISC)/javaloader.component
-
-$(MISC)/javaloader.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \
- javaloader.component
- $(XSLTPROC) --nonet --stringparam uri \
- '$(COMPONENTPREFIX_URE_NATIVE)$(SHL1TARGETN:f)' -o $@ \
- $(SOLARENV)/bin/createcomponent.xslt javaloader.component
diff --git a/stoc/source/javavm/interact.cxx b/stoc/source/javavm/interact.cxx
deleted file mode 100644
index b8992cd85..000000000
--- a/stoc/source/javavm/interact.cxx
+++ /dev/null
@@ -1,128 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "interact.hxx"
-
-#include "com/sun/star/java/JavaDisabledException.hpp"
-#include "com/sun/star/java/JavaVMCreationFailureException.hpp"
-#include "com/sun/star/task/XInteractionAbort.hpp"
-#include "com/sun/star/task/XInteractionRetry.hpp"
-#include "com/sun/star/task/XInteractionContinuation.hpp"
-#include "cppuhelper/implbase1.hxx"
-#include "osl/mutex.hxx"
-
-namespace css = com::sun::star;
-
-using stoc_javavm::InteractionRequest;
-
-namespace {
-
-class AbortContinuation:
- public cppu::WeakImplHelper1< css::task::XInteractionAbort >
-{
-public:
- inline AbortContinuation() {}
-
- virtual inline void SAL_CALL select() throw (css::uno::RuntimeException) {}
-
-private:
- AbortContinuation(AbortContinuation &); // not implemented
- void operator =(AbortContinuation); // not implemented
-
- virtual inline ~AbortContinuation() {}
-};
-
-}
-
-class InteractionRequest::RetryContinuation:
- public cppu::WeakImplHelper1< css::task::XInteractionRetry >
-{
-public:
- inline RetryContinuation(): m_bSelected(false) {}
-
- virtual void SAL_CALL select() throw (css::uno::RuntimeException);
-
- bool isSelected() const;
-
-private:
- RetryContinuation(RetryContinuation &); // not implemented
- void operator =(RetryContinuation); // not implemented
-
- virtual inline ~RetryContinuation() {}
-
- mutable osl::Mutex m_aMutex;
- bool m_bSelected;
-};
-
-void SAL_CALL InteractionRequest::RetryContinuation::select()
- throw (css::uno::RuntimeException)
-{
- osl::MutexGuard aGuard(m_aMutex);
- m_bSelected = true;
-}
-
-bool InteractionRequest::RetryContinuation::isSelected() const
-{
- osl::MutexGuard aGuard(m_aMutex);
- return m_bSelected;
-}
-
-InteractionRequest::InteractionRequest(css::uno::Any const & rRequest):
- m_aRequest(rRequest)
-{
- m_aContinuations.realloc(2);
- m_xRetryContinuation = new RetryContinuation;
- m_aContinuations[0] = new AbortContinuation;
- m_aContinuations[1] = m_xRetryContinuation.get();
-}
-
-css::uno::Any SAL_CALL InteractionRequest::getRequest()
- throw (css::uno::RuntimeException)
-{
- return m_aRequest;
-}
-
-css::uno::Sequence< css::uno::Reference< css::task::XInteractionContinuation > >
-SAL_CALL InteractionRequest::getContinuations()
- throw (css::uno::RuntimeException)
-{
- return m_aContinuations;
-}
-
-bool InteractionRequest::retry() const
-{
- return m_xRetryContinuation.is() && m_xRetryContinuation->isSelected();
-}
-
-InteractionRequest::~InteractionRequest()
-{}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/javavm/interact.hxx b/stoc/source/javavm/interact.hxx
deleted file mode 100644
index fe9f79672..000000000
--- a/stoc/source/javavm/interact.hxx
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-#if !defined INCLUDED_STOC_JAVAVM_INTERACT_HXX
-#define INCLUDED_STOC_JAVAVM_INTERACT_HXX
-
-#include "com/sun/star/task/XInteractionRequest.hpp"
-#include "com/sun/star/uno/Any.hxx"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "cppuhelper/implbase1.hxx"
-#include "rtl/ref.hxx"
-
-namespace com { namespace sun { namespace star { namespace task {
- class XInteractionContinuation;
-} } } }
-
-namespace stoc_javavm {
-
-class InteractionRequest:
- public cppu::WeakImplHelper1< com::sun::star::task::XInteractionRequest >
-{
-public:
- explicit InteractionRequest(com::sun::star::uno::Any const & rRequest);
-
- virtual com::sun::star::uno::Any SAL_CALL getRequest()
- throw (com::sun::star::uno::RuntimeException);
-
- virtual com::sun::star::uno::Sequence< com::sun::star::uno::Reference<
- com::sun::star::task::XInteractionContinuation > > SAL_CALL
- getContinuations() throw (com::sun::star::uno::RuntimeException);
-
- bool retry() const;
-
-private:
- class RetryContinuation;
-
- InteractionRequest(InteractionRequest &); // not implemented
- void operator =(InteractionRequest); // not implemented
-
- virtual ~InteractionRequest();
-
- com::sun::star::uno::Any m_aRequest;
- com::sun::star::uno::Sequence< com::sun::star::uno::Reference<
- com::sun::star::task::XInteractionContinuation > > m_aContinuations;
- rtl::Reference< RetryContinuation > m_xRetryContinuation;
-};
-
-}
-
-#endif // INCLUDED_STOC_JAVAVM_INTERACT_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/javavm/javavm.component b/stoc/source/javavm/javavm.component
deleted file mode 100644
index f78d8af3a..000000000
--- a/stoc/source/javavm/javavm.component
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--**********************************************************************
-*
-* 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.
-*
-**********************************************************************-->
-
-<component loader="com.sun.star.loader.SharedLibrary"
- xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.comp.stoc.JavaVirtualMachine">
- <service name="com.sun.star.java.JavaVirtualMachine"/>
- <singleton name="com.sun.star.java.theJavaVirtualMachine"/>
- </implementation>
-</component>
diff --git a/stoc/source/javavm/javavm.cxx b/stoc/source/javavm/javavm.cxx
deleted file mode 100644
index 93c21e174..000000000
--- a/stoc/source/javavm/javavm.cxx
+++ /dev/null
@@ -1,1772 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "javavm.hxx"
-
-#include "interact.hxx"
-#include "jvmargs.hxx"
-
-#include "com/sun/star/beans/NamedValue.hpp"
-#include "com/sun/star/beans/PropertyState.hpp"
-#include "com/sun/star/beans/PropertyValue.hpp"
-#include "com/sun/star/container/XContainer.hpp"
-#include "com/sun/star/java/JavaNotFoundException.hpp"
-#include "com/sun/star/java/InvalidJavaSettingsException.hpp"
-#include "com/sun/star/java/RestartRequiredException.hpp"
-#include "com/sun/star/java/JavaDisabledException.hpp"
-#include "com/sun/star/java/JavaVMCreationFailureException.hpp"
-#include "com/sun/star/lang/DisposedException.hpp"
-#include "com/sun/star/lang/IllegalArgumentException.hpp"
-#include "com/sun/star/lang/XEventListener.hpp"
-#include "com/sun/star/lang/XMultiComponentFactory.hpp"
-#include "com/sun/star/lang/XSingleComponentFactory.hpp"
-#include "com/sun/star/lang/WrappedTargetRuntimeException.hpp"
-#include "com/sun/star/registry/XRegistryKey.hpp"
-#include "com/sun/star/registry/XSimpleRegistry.hpp"
-#include "com/sun/star/task/XInteractionHandler.hpp"
-#include "com/sun/star/uno/Exception.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/RuntimeException.hpp"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "com/sun/star/uno/XComponentContext.hpp"
-#include "com/sun/star/uno/XCurrentContext.hpp"
-#include "com/sun/star/uno/XInterface.hpp"
-#include "com/sun/star/util/XMacroExpander.hpp"
-#include "com/sun/star/container/XNameAccess.hpp"
-#include "cppuhelper/exc_hlp.hxx"
-#include "cppuhelper/factory.hxx"
-#include "cppuhelper/implbase1.hxx"
-#include "cppuhelper/implementationentry.hxx"
-#include "jvmaccess/classpath.hxx"
-#include "jvmaccess/unovirtualmachine.hxx"
-#include "jvmaccess/virtualmachine.hxx"
-#include "osl/file.hxx"
-#include "osl/thread.h"
-#include "rtl/bootstrap.hxx"
-#include "rtl/process.h"
-#include "rtl/string.h"
-#include "rtl/ustrbuf.hxx"
-#include "rtl/ustring.h"
-#include "rtl/ustring.hxx"
-#include "rtl/uri.hxx"
-#include "sal/types.h"
-#include "uno/current_context.hxx"
-#include "uno/environment.h"
-#include "uno/lbnames.h"
-#include "jvmfwk/framework.h"
-#include "jni.h"
-
-#include <stack>
-#include <string.h>
-#include <time.h>
-#include <memory>
-#include <vector>
-#include "boost/scoped_array.hpp"
-#define OUSTR(x) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( x ))
-
-// Properties of the javavm can be put
-// as a komma separated list in this
-// environment variable
-#define PROPERTIES_ENV "OO_JAVA_PROPERTIES"
-#ifdef UNIX
-#define INI_FILE "javarc"
-#ifdef MACOSX
-#define DEF_JAVALIB "JavaVM.framework"
-#else
-#define DEF_JAVALIB "libjvm.so"
-#endif
-#define TIMEZONE "MEZ"
-#else
-#define INI_FILE "java.ini"
-#define DEF_JAVALIB "jvm.dll"
-#define TIMEZONE "MET"
-#endif
-
-/* Within this implementation of the com.sun.star.java.JavaVirtualMachine
- * service and com.sun.star.java.theJavaVirtualMachine singleton, the method
- * com.sun.star.java.XJavaVM.getJavaVM relies on the following:
- * 1 The string "$URE_INTERNAL_JAVA_DIR/" is expanded via the
- * com.sun.star.util.theMacroExpander singleton into an internal (see the
- * com.sun.star.uri.ExternalUriReferenceTranslator service), hierarchical URI
- * reference relative to which the URE JAR files can be addressed.
- * 2 The string "$URE_INTERNAL_JAVA_CLASSPATH" is either not expandable via the
- * com.sun.star.util.theMacroExpander singleton
- * (com.sun.star.lang.IllegalArgumentException), or is expanded via the
- * com.sun.star.util.theMacroExpander singleton into a list of zero or more
- * internal (see the com.sun.star.uri.ExternalUriReferenceTranslator service)
- * URIs, where any space characters (U+0020) are ignored (and, in particular,
- * separate adjacent URIs).
- * If either of these requirements is not met, getJavaVM raises a
- * com.sun.star.uno.RuntimeException.
- */
-
-namespace css = com::sun::star;
-
-using stoc_javavm::JavaVirtualMachine;
-
-namespace {
-
-
-
-class NoJavaIniException: public css::uno::Exception
-{
-};
-
-class SingletonFactory:
- private cppu::WeakImplHelper1< css::lang::XEventListener >
-{
-public:
- static css::uno::Reference< css::uno::XInterface > getSingleton(
- css::uno::Reference< css::uno::XComponentContext > const & rContext);
-
-private:
- SingletonFactory(SingletonFactory &); // not implemented
- void operator =(SingletonFactory); // not implemented
-
- inline SingletonFactory() {}
-
- virtual inline ~SingletonFactory() {}
-
- virtual void SAL_CALL disposing(css::lang::EventObject const &)
- throw (css::uno::RuntimeException);
-
- static void dispose();
-
- // TODO ok to keep these static?
- static osl::Mutex m_aMutex;
- static css::uno::Reference< css::uno::XInterface > m_xSingleton;
- static bool m_bDisposed;
-};
-
-css::uno::Reference< css::uno::XInterface > SingletonFactory::getSingleton(
- css::uno::Reference< css::uno::XComponentContext > const & rContext)
-{
- css::uno::Reference< css::uno::XInterface > xSingleton;
- css::uno::Reference< css::lang::XComponent > xComponent;
- {
- osl::MutexGuard aGuard(m_aMutex);
- if (!m_xSingleton.is())
- {
- if (m_bDisposed)
- throw css::lang::DisposedException();
- xComponent = css::uno::Reference< css::lang::XComponent >(
- rContext, css::uno::UNO_QUERY_THROW);
- m_xSingleton = static_cast< cppu::OWeakObject * >(
- new JavaVirtualMachine(rContext));
- }
- xSingleton = m_xSingleton;
- }
- if (xComponent.is())
- try
- {
- xComponent->addEventListener(new SingletonFactory);
- }
- catch (...)
- {
- dispose();
- throw;
- }
- return xSingleton;
-}
-
-void SAL_CALL SingletonFactory::disposing(css::lang::EventObject const &)
- throw (css::uno::RuntimeException)
-{
- dispose();
-}
-
-void SingletonFactory::dispose()
-{
- css::uno::Reference< css::lang::XComponent > xComponent;
- {
- osl::MutexGuard aGuard(m_aMutex);
- xComponent = css::uno::Reference< css::lang::XComponent >(
- m_xSingleton, css::uno::UNO_QUERY);
- m_xSingleton.clear();
- m_bDisposed = true;
- }
- if (xComponent.is())
- xComponent->dispose();
-}
-
-osl::Mutex SingletonFactory::m_aMutex;
-css::uno::Reference< css::uno::XInterface > SingletonFactory::m_xSingleton;
-bool SingletonFactory::m_bDisposed = false;
-
-rtl::OUString serviceGetImplementationName()
-{
- return rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.stoc.JavaVirtualMachine"));
-}
-
-css::uno::Sequence< rtl::OUString > serviceGetSupportedServiceNames()
-{
- rtl::OUString aServiceName(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.java.JavaVirtualMachine"));
- return css::uno::Sequence< rtl::OUString >(&aServiceName, 1);
-}
-
-css::uno::Reference< css::uno::XInterface > SAL_CALL serviceCreateInstance(
- css::uno::Reference< css::uno::XComponentContext > const & rContext)
- SAL_THROW((css::uno::Exception))
-{
- // Only one single instance of this service is ever constructed, and is
- // available until the component context used to create this instance is
- // disposed. Afterwards, this function throws a DisposedException (as do
- // all relevant methods on the single service instance).
- return SingletonFactory::getSingleton(rContext);
-}
-
-cppu::ImplementationEntry const aServiceImplementation[]
- = { { serviceCreateInstance,
- serviceGetImplementationName,
- serviceGetSupportedServiceNames,
- cppu::createSingleComponentFactory,
- 0, 0 },
- { 0, 0, 0, 0, 0, 0 } };
-
-typedef std::stack< jvmaccess::VirtualMachine::AttachGuard * > GuardStack;
-
-extern "C" {
-
-static void destroyAttachGuards(void * pData)
-{
- GuardStack * pStack = static_cast< GuardStack * >(pData);
- if (pStack != 0)
- {
- while (!pStack->empty())
- {
- delete pStack->top();
- pStack->pop();
- }
- delete pStack;
- }
-}
-
-}
-
-bool askForRetry(css::uno::Any const & rException)
-{
- css::uno::Reference< css::uno::XCurrentContext > xContext(
- css::uno::getCurrentContext());
- if (xContext.is())
- {
- css::uno::Reference< css::task::XInteractionHandler > xHandler;
- xContext->getValueByName(rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "java-vm.interaction-handler")))
- >>= xHandler;
- if (xHandler.is())
- {
- rtl::Reference< stoc_javavm::InteractionRequest > xRequest(
- new stoc_javavm::InteractionRequest(rException));
- xHandler->handle(xRequest.get());
- return xRequest->retry();
- }
- }
- return false;
-}
-
-// Only gets the properties if the "Proxy Server" entry in the option dialog is
-// set to manual (i.e. not to none)
-void getINetPropsFromConfig(stoc_javavm::JVM * pjvm,
- const css::uno::Reference<css::lang::XMultiComponentFactory> & xSMgr,
- const css::uno::Reference<css::uno::XComponentContext> &xCtx ) throw (css::uno::Exception)
-{
- css::uno::Reference<css::uno::XInterface> xConfRegistry = xSMgr->createInstanceWithContext(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.ConfigurationRegistry")),
- xCtx );
- if(!xConfRegistry.is()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("javavm.cxx: couldn't get ConfigurationRegistry")), 0);
-
- css::uno::Reference<css::registry::XSimpleRegistry> xConfRegistry_simple(xConfRegistry, css::uno::UNO_QUERY);
- if(!xConfRegistry_simple.is()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("javavm.cxx: couldn't get ConfigurationRegistry")), 0);
-
- xConfRegistry_simple->open(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Inet")), sal_True, sal_False);
- css::uno::Reference<css::registry::XRegistryKey> xRegistryRootKey = xConfRegistry_simple->getRootKey();
-
-// if ooInetProxyType is not 0 then read the settings
- css::uno::Reference<css::registry::XRegistryKey> proxyEnable= xRegistryRootKey->openKey(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Settings/ooInetProxyType")));
- if( proxyEnable.is() && 0 != proxyEnable->getLongValue())
- {
- // read ftp proxy name
- css::uno::Reference<css::registry::XRegistryKey> ftpProxy_name = xRegistryRootKey->openKey(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Settings/ooInetFTPProxyName")));
- if(ftpProxy_name.is() && ftpProxy_name->getStringValue().getLength()) {
- rtl::OUString ftpHost = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ftp.proxyHost="));
- ftpHost += ftpProxy_name->getStringValue();
-
- // read ftp proxy port
- css::uno::Reference<css::registry::XRegistryKey> ftpProxy_port = xRegistryRootKey->openKey(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Settings/ooInetFTPProxyPort")));
- if(ftpProxy_port.is() && ftpProxy_port->getLongValue()) {
- rtl::OUString ftpPort = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ftp.proxyPort="));
- ftpPort += rtl::OUString::valueOf(ftpProxy_port->getLongValue());
-
- pjvm->pushProp(ftpHost);
- pjvm->pushProp(ftpPort);
- }
- }
-
- // read http proxy name
- css::uno::Reference<css::registry::XRegistryKey> httpProxy_name = xRegistryRootKey->openKey(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Settings/ooInetHTTPProxyName")));
- if(httpProxy_name.is() && httpProxy_name->getStringValue().getLength()) {
- rtl::OUString httpHost = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("http.proxyHost="));
- httpHost += httpProxy_name->getStringValue();
-
- // read http proxy port
- css::uno::Reference<css::registry::XRegistryKey> httpProxy_port = xRegistryRootKey->openKey(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Settings/ooInetHTTPProxyPort")));
- if(httpProxy_port.is() && httpProxy_port->getLongValue()) {
- rtl::OUString httpPort = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("http.proxyPort="));
- httpPort += rtl::OUString::valueOf(httpProxy_port->getLongValue());
-
- pjvm->pushProp(httpHost);
- pjvm->pushProp(httpPort);
- }
- }
-
- // read https proxy name
- css::uno::Reference<css::registry::XRegistryKey> httpsProxy_name = xRegistryRootKey->openKey(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Settings/ooInetHTTPSProxyName")));
- if(httpsProxy_name.is() && httpsProxy_name->getStringValue().getLength()) {
- rtl::OUString httpsHost = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("https.proxyHost="));
- httpsHost += httpsProxy_name->getStringValue();
-
- // read https proxy port
- css::uno::Reference<css::registry::XRegistryKey> httpsProxy_port = xRegistryRootKey->openKey(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Settings/ooInetHTTPSProxyPort")));
- if(httpsProxy_port.is() && httpsProxy_port->getLongValue()) {
- rtl::OUString httpsPort = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("https.proxyPort="));
- httpsPort += rtl::OUString::valueOf(httpsProxy_port->getLongValue());
-
- pjvm->pushProp(httpsHost);
- pjvm->pushProp(httpsPort);
- }
- }
-
- // read nonProxyHosts
- css::uno::Reference<css::registry::XRegistryKey> nonProxies_name = xRegistryRootKey->openKey(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Settings/ooInetNoProxy")));
- if(nonProxies_name.is() && nonProxies_name->getStringValue().getLength()) {
- rtl::OUString httpNonProxyHosts = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("http.nonProxyHosts="));
- rtl::OUString ftpNonProxyHosts= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ftp.nonProxyHosts="));
- rtl::OUString value= nonProxies_name->getStringValue();
- // replace the separator ";" by "|"
- value= value.replace((sal_Unicode)';', (sal_Unicode)'|');
-
- httpNonProxyHosts += value;
- ftpNonProxyHosts += value;
-
- pjvm->pushProp(httpNonProxyHosts);
- pjvm->pushProp(ftpNonProxyHosts);
- }
-
- // read socks settings
-/* Reference<XRegistryKey> socksProxy_name = xRegistryRootKey->openKey(OUSTR("Settings/ooInetSOCKSProxyName"));
- if (socksProxy_name.is() && httpProxy_name->getStringValue().getLength()) {
- OUString socksHost = OUSTR("socksProxyHost=");
- socksHost += socksProxy_name->getStringValue();
-
- // read http proxy port
- Reference<XRegistryKey> socksProxy_port = xRegistryRootKey->openKey(OUSTR("Settings/ooInetSOCKSProxyPort"));
- if (socksProxy_port.is() && socksProxy_port->getLongValue()) {
- OUString socksPort = OUSTR("socksProxyPort=");
- socksPort += OUString::valueOf(socksProxy_port->getLongValue());
-
- pjvm->pushProp(socksHost);
- pjvm->pushProp(socksPort);
- }
- }
-*/ }
- xConfRegistry_simple->close();
-}
-
-void getDefaultLocaleFromConfig(
- stoc_javavm::JVM * pjvm,
- const css::uno::Reference<css::lang::XMultiComponentFactory> & xSMgr,
- const css::uno::Reference<css::uno::XComponentContext> &xCtx ) throw(css::uno::Exception)
-{
- css::uno::Reference<css::uno::XInterface> xConfRegistry =
- xSMgr->createInstanceWithContext(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.configuration.ConfigurationRegistry")), xCtx );
- if(!xConfRegistry.is())
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("javavm.cxx: couldn't get ConfigurationRegistry")), 0);
-
- css::uno::Reference<css::registry::XSimpleRegistry> xConfRegistry_simple(
- xConfRegistry, css::uno::UNO_QUERY);
- if(!xConfRegistry_simple.is())
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("javavm.cxx: couldn't get ConfigurationRegistry")), 0);
-
- xConfRegistry_simple->open(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Setup")), sal_True, sal_False);
- css::uno::Reference<css::registry::XRegistryKey> xRegistryRootKey = xConfRegistry_simple->getRootKey();
-
- // read locale
- css::uno::Reference<css::registry::XRegistryKey> locale = xRegistryRootKey->openKey(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("L10N/ooLocale")));
- if(locale.is() && locale->getStringValue().getLength()) {
- rtl::OUString language;
- rtl::OUString country;
-
- sal_Int32 index = locale->getStringValue().indexOf((sal_Unicode) '-');
-
- if(index >= 0) {
- language = locale->getStringValue().copy(0, index);
- country = locale->getStringValue().copy(index + 1);
-
- if(language.getLength()) {
- rtl::OUString prop(RTL_CONSTASCII_USTRINGPARAM("user.language="));
- prop += language;
-
- pjvm->pushProp(prop);
- }
-
- if(country.getLength()) {
- rtl::OUString prop(RTL_CONSTASCII_USTRINGPARAM("user.country="));
- prop += country;
-
- pjvm->pushProp(prop);
- }
- }
- }
-
- xConfRegistry_simple->close();
-}
-
-
-
-void getJavaPropsFromSafetySettings(
- stoc_javavm::JVM * pjvm,
- const css::uno::Reference<css::lang::XMultiComponentFactory> & xSMgr,
- const css::uno::Reference<css::uno::XComponentContext> &xCtx) throw(css::uno::Exception)
-{
- css::uno::Reference<css::uno::XInterface> xConfRegistry =
- xSMgr->createInstanceWithContext(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.configuration.ConfigurationRegistry")),
- xCtx);
- if(!xConfRegistry.is())
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("javavm.cxx: couldn't get ConfigurationRegistry")), 0);
-
- css::uno::Reference<css::registry::XSimpleRegistry> xConfRegistry_simple(
- xConfRegistry, css::uno::UNO_QUERY);
- if(!xConfRegistry_simple.is())
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("javavm.cxx: couldn't get ConfigurationRegistry")), 0);
-
- xConfRegistry_simple->open(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Java")),
- sal_True, sal_False);
- css::uno::Reference<css::registry::XRegistryKey> xRegistryRootKey =
- xConfRegistry_simple->getRootKey();
-
- if (xRegistryRootKey.is())
- {
- css::uno::Reference<css::registry::XRegistryKey> key_NetAccess= xRegistryRootKey->openKey(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VirtualMachine/NetAccess")));
- if (key_NetAccess.is())
- {
- sal_Int32 val= key_NetAccess->getLongValue();
- rtl::OUString sVal;
- switch( val)
- {
- case 0: sVal= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("host"));
- break;
- case 1: sVal= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("unrestricted"));
- break;
- case 3: sVal= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("none"));
- break;
- }
- rtl::OUString sProperty( RTL_CONSTASCII_USTRINGPARAM("appletviewer.security.mode="));
- sProperty= sProperty + sVal;
- pjvm->pushProp(sProperty);
- }
- css::uno::Reference<css::registry::XRegistryKey> key_CheckSecurity= xRegistryRootKey->openKey(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VirtualMachine/Security")));
- if( key_CheckSecurity.is())
- {
- sal_Bool val= (sal_Bool) key_CheckSecurity->getLongValue();
- rtl::OUString sProperty(RTL_CONSTASCII_USTRINGPARAM("stardiv.security.disableSecurity="));
- if( val)
- sProperty= sProperty + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("false"));
- else
- sProperty= sProperty + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("true"));
- pjvm->pushProp( sProperty);
- }
- }
- xConfRegistry_simple->close();
-}
-
-static void setTimeZone(stoc_javavm::JVM * pjvm) throw() {
- /* A Bug in the Java function
- ** struct Hjava_util_Properties * java_lang_System_initProperties(
- ** struct Hjava_lang_System *this,
- ** struct Hjava_util_Properties *props);
- ** This function doesn't detect MEZ, MET or "W. Europe Standard Time"
- */
- struct tm *tmData;
- time_t clock = time(NULL);
- tzset();
- tmData = localtime(&clock);
-#ifdef MACOSX
- char * p = tmData->tm_zone;
-#else
- char * p = tzname[0];
- (void)tmData;
-#endif
-
- if (!strcmp(TIMEZONE, p))
- pjvm->pushProp(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("user.timezone=ECT")));
-}
-
-void initVMConfiguration(
- stoc_javavm::JVM * pjvm,
- const css::uno::Reference<css::lang::XMultiComponentFactory> & xSMgr,
- const css::uno::Reference<css::uno::XComponentContext > &xCtx) throw(css::uno::Exception)
-{
- stoc_javavm::JVM jvm;
- try {
- getINetPropsFromConfig(&jvm, xSMgr, xCtx);
- }
- catch(css::uno::Exception & exception) {
-#if OSL_DEBUG_LEVEL > 1
- rtl::OString message = rtl::OUStringToOString(exception.Message, RTL_TEXTENCODING_ASCII_US);
- OSL_TRACE("javavm.cxx: can not get INetProps cause of >%s<", message.getStr());
-#else
- (void) exception; // unused
-#endif
- }
-
- try {
- getDefaultLocaleFromConfig(&jvm, xSMgr,xCtx);
- }
- catch(css::uno::Exception & exception) {
-#if OSL_DEBUG_LEVEL > 1
- rtl::OString message = rtl::OUStringToOString(exception.Message, RTL_TEXTENCODING_ASCII_US);
- OSL_TRACE("javavm.cxx: can not get locale cause of >%s<", message.getStr());
-#else
- (void) exception; // unused
-#endif
- }
-
- try
- {
- getJavaPropsFromSafetySettings(&jvm, xSMgr, xCtx);
- }
- catch(css::uno::Exception & exception) {
-#if OSL_DEBUG_LEVEL > 1
- rtl::OString message = rtl::OUStringToOString(exception.Message, RTL_TEXTENCODING_ASCII_US);
- OSL_TRACE("javavm.cxx: couldn't get safety settings because of >%s<", message.getStr());
-#else
- (void) exception; // unused
-#endif
- }
-
- *pjvm= jvm;
- setTimeZone(pjvm);
-
-}
-
-class DetachCurrentThread {
-public:
- explicit DetachCurrentThread(JavaVM * jvm): m_jvm(jvm) {}
-
- ~DetachCurrentThread() {
- if (m_jvm->DetachCurrentThread() != 0) {
- OSL_ASSERT(false);
- }
- }
-
-private:
- DetachCurrentThread(DetachCurrentThread &); // not defined
- void operator =(DetachCurrentThread &); // not defined
-
- JavaVM * m_jvm;
-};
-
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(sal_Char const * pImplName,
- void * pServiceManager,
- void * pRegistryKey)
-{
- return cppu::component_getFactoryHelper(pImplName, pServiceManager,
- pRegistryKey,
- aServiceImplementation);
-}
-
-// There is no component_canUnload, as the library cannot be unloaded.
-
-JavaVirtualMachine::JavaVirtualMachine(
- css::uno::Reference< css::uno::XComponentContext > const & rContext):
- JavaVirtualMachine_Impl(*static_cast< osl::Mutex * >(this)),
- m_xContext(rContext),
- m_bDisposed(false),
- m_pJavaVm(0),
- m_bDontCreateJvm(false),
- m_aAttachGuards(destroyAttachGuards) // TODO check for validity
-{}
-
-void SAL_CALL
-JavaVirtualMachine::initialize(css::uno::Sequence< css::uno::Any > const &
- rArguments)
- throw (css::uno::Exception)
-{
- osl::MutexGuard aGuard(*this);
- if (m_bDisposed)
- throw css::lang::DisposedException(
- rtl::OUString(), static_cast< cppu::OWeakObject * >(this));
- if (m_xUnoVirtualMachine.is())
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "bad call to initialize")),
- static_cast< cppu::OWeakObject * >(this));
- css::beans::NamedValue val;
- if (rArguments.getLength() == 1 && (rArguments[0] >>= val)
- && val.Name.equalsAsciiL(
- RTL_CONSTASCII_STRINGPARAM( "UnoVirtualMachine")))
- {
- OSL_ENSURE(
- sizeof (sal_Int64) >= sizeof (jvmaccess::UnoVirtualMachine *),
- "Pointer cannot be represented as sal_Int64");
- sal_Int64 nPointer = reinterpret_cast< sal_Int64 >(
- static_cast< jvmaccess::UnoVirtualMachine * >(0));
- val.Value >>= nPointer;
- m_xUnoVirtualMachine =
- reinterpret_cast< jvmaccess::UnoVirtualMachine * >(nPointer);
- } else {
- OSL_ENSURE(
- sizeof (sal_Int64) >= sizeof (jvmaccess::VirtualMachine *),
- "Pointer cannot be represented as sal_Int64");
- sal_Int64 nPointer = reinterpret_cast< sal_Int64 >(
- static_cast< jvmaccess::VirtualMachine * >(0));
- if (rArguments.getLength() == 1)
- rArguments[0] >>= nPointer;
- rtl::Reference< jvmaccess::VirtualMachine > vm(
- reinterpret_cast< jvmaccess::VirtualMachine * >(nPointer));
- if (vm.is()) {
- try {
- m_xUnoVirtualMachine = new jvmaccess::UnoVirtualMachine(vm, 0);
- } catch (jvmaccess::UnoVirtualMachine::CreationException &) {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "jvmaccess::UnoVirtualMachine::CreationException")),
- static_cast< cppu::OWeakObject * >(this));
- }
- }
- }
- if (!m_xUnoVirtualMachine.is()) {
- throw css::lang::IllegalArgumentException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "sequence of exactly one any containing either (a) a"
- " com.sun.star.beans.NamedValue with Name"
- " \"UnoVirtualMachine\" and Value a hyper representing a"
- " non-null pointer to a jvmaccess:UnoVirtualMachine, or (b)"
- " a hyper representing a non-null pointer to a"
- " jvmaccess::VirtualMachine required")),
- static_cast< cppu::OWeakObject * >(this), 0);
- }
- m_xVirtualMachine = m_xUnoVirtualMachine->getVirtualMachine();
-}
-
-rtl::OUString SAL_CALL JavaVirtualMachine::getImplementationName()
- throw (css::uno::RuntimeException)
-{
- return serviceGetImplementationName();
-}
-
-sal_Bool SAL_CALL
-JavaVirtualMachine::supportsService(rtl::OUString const & rServiceName)
- throw (css::uno::RuntimeException)
-{
- css::uno::Sequence< rtl::OUString > aNames(getSupportedServiceNames());
- for (sal_Int32 i = 0; i < aNames.getLength(); ++i)
- if (aNames[i] == rServiceName)
- return true;
- return false;
-}
-
-css::uno::Sequence< rtl::OUString > SAL_CALL
-JavaVirtualMachine::getSupportedServiceNames()
- throw (css::uno::RuntimeException)
-{
- return serviceGetSupportedServiceNames();
-}
-
-css::uno::Any SAL_CALL
-JavaVirtualMachine::getJavaVM(css::uno::Sequence< sal_Int8 > const & rProcessId)
- throw (css::uno::RuntimeException)
-{
- osl::MutexGuard aGuard(*this);
- if (m_bDisposed)
- throw css::lang::DisposedException(
- rtl::OUString(), static_cast< cppu::OWeakObject * >(this));
- css::uno::Sequence< sal_Int8 > aId(16);
- rtl_getGlobalProcessId(reinterpret_cast< sal_uInt8 * >(aId.getArray()));
- enum ReturnType {
- RETURN_JAVAVM, RETURN_VIRTUALMACHINE, RETURN_UNOVIRTUALMACHINE };
- ReturnType returnType =
- rProcessId.getLength() == 17 && rProcessId[16] == 0
- ? RETURN_VIRTUALMACHINE
- : rProcessId.getLength() == 17 && rProcessId[16] == 1
- ? RETURN_UNOVIRTUALMACHINE
- : RETURN_JAVAVM;
- css::uno::Sequence< sal_Int8 > aProcessId(rProcessId);
- if (returnType != RETURN_JAVAVM)
- aProcessId.realloc(16);
- if (aId != aProcessId)
- return css::uno::Any();
-
- while (!m_xVirtualMachine.is()) // retry until successful
- {
- // This is the second attempt to create Java. m_bDontCreateJvm is
- // set which means instantiating the JVM might crash.
- if (m_bDontCreateJvm)
- //throw css::uno::RuntimeException();
- return css::uno::Any();
-
- stoc_javavm::JVM aJvm;
- initVMConfiguration(&aJvm, m_xContext->getServiceManager(),
- m_xContext);
- //Create the JavaVMOption array
- const std::vector<rtl::OUString> & props = aJvm.getProperties();
- boost::scoped_array<JavaVMOption> sarOptions(
- new JavaVMOption[props.size()]);
- JavaVMOption * arOptions = sarOptions.get();
- //Create an array that contains the strings which are passed
- //into the options
- boost::scoped_array<rtl::OString> sarPropStrings(
- new rtl::OString[props.size()]);
- rtl::OString * arPropStrings = sarPropStrings.get();
-
- rtl::OString sJavaOption("-");
- typedef std::vector<rtl::OUString>::const_iterator cit;
- int index = 0;
- for (cit i = props.begin(); i != props.end(); ++i)
- {
- rtl::OString sOption = rtl::OUStringToOString(
- *i, osl_getThreadTextEncoding());
-
- if (!sOption.matchIgnoreAsciiCase(sJavaOption, 0))
- arPropStrings[index]= rtl::OString("-D") + sOption;
- else
- arPropStrings[index] = sOption;
-
- arOptions[index].optionString = (sal_Char*)arPropStrings[index].getStr();
- arOptions[index].extraInfo = 0;
- index ++;
- }
-
- JNIEnv * pMainThreadEnv = 0;
- javaFrameworkError errcode = JFW_E_NONE;
- errcode = jfw_startVM(arOptions, index, & m_pJavaVm,
- & pMainThreadEnv);
-
- bool bStarted = false;
- switch (errcode)
- {
- case JFW_E_NONE: bStarted = true; break;
- case JFW_E_NO_SELECT:
- {
- // No Java configured. We silenty run the java configuration
- // Java.
- javaFrameworkError errFind = jfw_findAndSelectJRE( NULL );
- if (errFind == JFW_E_NONE)
- {
- continue;
- }
- else if (errFind == JFW_E_NO_JAVA_FOUND)
- {
-
- //Warning MessageBox:
- //%PRODUCTNAME requires a Java runtime environment (JRE) to perform this task.
- //Please install a JRE and restart %PRODUCTNAME.
- css::java::JavaNotFoundException exc(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "JavaVirtualMachine::getJavaVM failed because"
- " No suitable JRE found!")),
- static_cast< cppu::OWeakObject * >(this));
- askForRetry(css::uno::makeAny(exc));
- return css::uno::Any();
- }
- else
- {
- //An unexpected error occurred
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "[JavaVirtualMachine]:An unexpected error occurred"
- " while searching for a Java!")), 0);
- }
- }
- case JFW_E_INVALID_SETTINGS:
- {
- //Warning MessageBox:
- // The %PRODUCTNAME configuration has been changed. Under Tools
- // - Options - %PRODUCTNAME - Java, select the Java runtime environment
- // you want to have used by %PRODUCTNAME.
- css::java::InvalidJavaSettingsException exc(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "JavaVirtualMachine::getJavaVM failed because"
- " Java settings have changed!")),
- static_cast< cppu::OWeakObject * >(this));
- askForRetry(css::uno::makeAny(exc));
- return css::uno::Any();
- }
- case JFW_E_JAVA_DISABLED:
- {
- //QueryBox:
- //%PRODUCTNAME requires a Java runtime environment (JRE) to perform
- //this task. However, use of a JRE has been disabled. Do you want to
- //enable the use of a JRE now?
- css::java::JavaDisabledException exc(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "JavaVirtualMachine::getJavaVM failed because"
- " Java is disabled!")),
- static_cast< cppu::OWeakObject * >(this));
- if( ! askForRetry(css::uno::makeAny(exc)))
- return css::uno::Any();
- continue;
- }
- case JFW_E_VM_CREATION_FAILED:
- {
- //If the creation failed because the JRE has been uninstalled then
- //we search another one. As long as there is a javaldx, we should
- //never come into this situation. javaldx checks alway if the JRE
- //still exist.
- JavaInfo * pJavaInfo = NULL;
- if (JFW_E_NONE == jfw_getSelectedJRE(&pJavaInfo))
- {
- sal_Bool bExist = sal_False;
- if (JFW_E_NONE == jfw_existJRE(pJavaInfo, &bExist))
- {
- if (bExist == sal_False
- && ! (pJavaInfo->nRequirements & JFW_REQUIRE_NEEDRESTART))
- {
- javaFrameworkError errFind = jfw_findAndSelectJRE( NULL );
- if (errFind == JFW_E_NONE)
- {
- continue;
- }
- }
- }
- }
-
- jfw_freeJavaInfo(pJavaInfo);
- //
- //Error: %PRODUCTNAME requires a Java
- //runtime environment (JRE) to perform this task. The selected JRE
- //is defective. Please select another version or install a new JRE
- //and select it under Tools - Options - %PRODUCTNAME - Java.
- css::java::JavaVMCreationFailureException exc(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "JavaVirtualMachine::getJavaVM failed because"
- " Java is defective!")),
- static_cast< cppu::OWeakObject * >(this), 0);
- askForRetry(css::uno::makeAny(exc));
- return css::uno::Any();
- }
- case JFW_E_RUNNING_JVM:
- {
- //This service should make sure that we do not start java twice.
- OSL_ASSERT(0);
- break;
- }
- case JFW_E_NEED_RESTART:
- {
- //Error:
- //For the selected Java runtime environment to work properly,
- //%PRODUCTNAME must be restarted. Please restart %PRODUCTNAME now.
- css::java::RestartRequiredException exc(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "JavaVirtualMachine::getJavaVM failed because"
- "Office must be restarted before Java can be used!")),
- static_cast< cppu::OWeakObject * >(this));
- askForRetry(css::uno::makeAny(exc));
- return css::uno::Any();
- }
- default:
- //RuntimeException: error is somewhere in the java framework.
- //An unexpected error occurred
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "[JavaVirtualMachine]:An unexpected error occurred"
- " while starting Java!")), 0);
- }
-
- if (bStarted)
- {
- {
- DetachCurrentThread detach(m_pJavaVm);
- // necessary to make debugging work; this thread will be
- // suspended when the destructor of detach returns
- m_xVirtualMachine = new jvmaccess::VirtualMachine(
- m_pJavaVm, JNI_VERSION_1_2, true, pMainThreadEnv);
- setUpUnoVirtualMachine(pMainThreadEnv);
- }
- // Listen for changes in the configuration (e.g. proxy settings):
- // TODO this is done too late; changes to the configuration done
- // after the above call to initVMConfiguration are lost
- registerConfigChangesListener();
-
- break;
- }
- }
- if (!m_xUnoVirtualMachine.is()) {
- try {
- jvmaccess::VirtualMachine::AttachGuard guard(m_xVirtualMachine);
- setUpUnoVirtualMachine(guard.getEnvironment());
- } catch (jvmaccess::VirtualMachine::AttachGuard::CreationException &) {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "jvmaccess::VirtualMachine::AttachGuard::"
- "CreationException occurred")),
- static_cast< cppu::OWeakObject * >(this));
- }
- }
- switch (returnType) {
- default: // RETURN_JAVAVM
- if (m_pJavaVm == 0) {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "JavaVirtualMachine service was initialized in a way"
- " that the requested JavaVM pointer is not available")),
- static_cast< cppu::OWeakObject * >(this));
- }
- return css::uno::makeAny(reinterpret_cast< sal_IntPtr >(m_pJavaVm));
- case RETURN_VIRTUALMACHINE:
- OSL_ASSERT(sizeof (sal_Int64) >= sizeof (jvmaccess::VirtualMachine *));
- return css::uno::makeAny(
- reinterpret_cast< sal_Int64 >(
- m_xUnoVirtualMachine->getVirtualMachine().get()));
- case RETURN_UNOVIRTUALMACHINE:
- OSL_ASSERT(sizeof (sal_Int64) >= sizeof (jvmaccess::VirtualMachine *));
- return css::uno::makeAny(
- reinterpret_cast< sal_Int64 >(m_xUnoVirtualMachine.get()));
- }
-}
-
-sal_Bool SAL_CALL JavaVirtualMachine::isVMStarted()
- throw (css::uno::RuntimeException)
-{
- osl::MutexGuard aGuard(*this);
- if (m_bDisposed)
- throw css::lang::DisposedException(
- rtl::OUString(), static_cast< cppu::OWeakObject * >(this));
- return m_xUnoVirtualMachine.is();
-}
-
-sal_Bool SAL_CALL JavaVirtualMachine::isVMEnabled()
- throw (css::uno::RuntimeException)
-{
- {
- osl::MutexGuard aGuard(*this);
- if (m_bDisposed)
- throw css::lang::DisposedException(
- rtl::OUString(), static_cast< cppu::OWeakObject * >(this));
- }
-// stoc_javavm::JVM aJvm;
-// initVMConfiguration(&aJvm, m_xContext->getServiceManager(), m_xContext);
-// return aJvm.isEnabled();
- //ToDo
- sal_Bool bEnabled = sal_False;
- if (jfw_getEnabled( & bEnabled) != JFW_E_NONE)
- throw css::uno::RuntimeException();
- return bEnabled;
-}
-
-sal_Bool SAL_CALL JavaVirtualMachine::isThreadAttached()
- throw (css::uno::RuntimeException)
-{
- osl::MutexGuard aGuard(*this);
- if (m_bDisposed)
- throw css::lang::DisposedException(
- rtl::OUString(), static_cast< cppu::OWeakObject * >(this));
- // TODO isThreadAttached only returns true if the thread was attached via
- // registerThread:
- GuardStack * pStack
- = static_cast< GuardStack * >(m_aAttachGuards.getData());
- return pStack != 0 && !pStack->empty();
-}
-
-void SAL_CALL JavaVirtualMachine::registerThread()
- throw (css::uno::RuntimeException)
-{
- osl::MutexGuard aGuard(*this);
- if (m_bDisposed)
- throw css::lang::DisposedException(
- rtl::OUString(), static_cast< cppu::OWeakObject * >(this));
- if (!m_xUnoVirtualMachine.is())
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "JavaVirtualMachine::registerThread:"
- " null VirtualMachine")),
- static_cast< cppu::OWeakObject * >(this));
- GuardStack * pStack
- = static_cast< GuardStack * >(m_aAttachGuards.getData());
- if (pStack == 0)
- {
- pStack = new GuardStack;
- m_aAttachGuards.setData(pStack);
- }
- try
- {
- pStack->push(
- new jvmaccess::VirtualMachine::AttachGuard(
- m_xUnoVirtualMachine->getVirtualMachine()));
- }
- catch (jvmaccess::VirtualMachine::AttachGuard::CreationException &)
- {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "JavaVirtualMachine::registerThread: jvmaccess::"
- "VirtualMachine::AttachGuard::CreationException")),
- static_cast< cppu::OWeakObject * >(this));
- }
-}
-
-void SAL_CALL JavaVirtualMachine::revokeThread()
- throw (css::uno::RuntimeException)
-{
- osl::MutexGuard aGuard(*this);
- if (m_bDisposed)
- throw css::lang::DisposedException(
- rtl::OUString(), static_cast< cppu::OWeakObject * >(this));
- if (!m_xUnoVirtualMachine.is())
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "JavaVirtualMachine::revokeThread:"
- " null VirtualMachine")),
- static_cast< cppu::OWeakObject * >(this));
- GuardStack * pStack
- = static_cast< GuardStack * >(m_aAttachGuards.getData());
- if (pStack == 0 || pStack->empty())
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "JavaVirtualMachine::revokeThread:"
- " no matching registerThread")),
- static_cast< cppu::OWeakObject * >(this));
- delete pStack->top();
- pStack->pop();
-}
-
-void SAL_CALL
-JavaVirtualMachine::disposing(css::lang::EventObject const & rSource)
- throw (css::uno::RuntimeException)
-{
- osl::MutexGuard aGuard(*this);
- if (rSource.Source == m_xInetConfiguration)
- m_xInetConfiguration.clear();
- if (rSource.Source == m_xJavaConfiguration)
- m_xJavaConfiguration.clear();
-}
-
-void SAL_CALL JavaVirtualMachine::elementInserted(
- css::container::ContainerEvent const &)
- throw (css::uno::RuntimeException)
-{}
-
-void SAL_CALL JavaVirtualMachine::elementRemoved(
- css::container::ContainerEvent const &)
- throw (css::uno::RuntimeException)
-{}
-
-// If a user changes the setting, for example for proxy settings, then this
-// function will be called from the configuration manager. Even if the .xml
-// file does not contain an entry yet and that entry has to be inserted, this
-// function will be called. We call java.lang.System.setProperty for the new
-// values.
-void SAL_CALL JavaVirtualMachine::elementReplaced(
- css::container::ContainerEvent const & rEvent)
- throw (css::uno::RuntimeException)
-{
- // TODO Using the new value stored in rEvent is wrong here. If two threads
- // receive different elementReplaced calls in quick succession, it is
- // unspecified which changes the JVM's system properties last. A correct
- // solution must atomically (i.e., protected by a mutex) read the latest
- // value from the configuration and set it as a system property at the JVM.
-
- rtl::OUString aAccessor;
- rEvent.Accessor >>= aAccessor;
- rtl::OUString aPropertyName;
- rtl::OUString aPropertyName2;
- rtl::OUString aPropertyValue;
- bool bSecurityChanged = false;
- if (aAccessor.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("ooInetProxyType")))
- {
- // Proxy none, manually
- sal_Int32 value = 0;
- rEvent.Element >>= value;
- setINetSettingsInVM(value != 0);
- return;
- }
- else if (aAccessor.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(
- "ooInetHTTPProxyName")))
- {
- aPropertyName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "http.proxyHost"));
- rEvent.Element >>= aPropertyValue;
- }
- else if (aAccessor.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(
- "ooInetHTTPProxyPort")))
- {
- aPropertyName
- = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("http.proxyPort"));
- sal_Int32 n = 0;
- rEvent.Element >>= n;
- aPropertyValue = rtl::OUString::valueOf(n);
- }
- else if (aAccessor.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(
- "ooInetHTTPSProxyName")))
- {
- aPropertyName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "https.proxyHost"));
- rEvent.Element >>= aPropertyValue;
- }
- else if (aAccessor.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(
- "ooInetHTTPSProxyPort")))
- {
- aPropertyName
- = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("https.proxyPort"));
- sal_Int32 n = 0;
- rEvent.Element >>= n;
- aPropertyValue = rtl::OUString::valueOf(n);
- }
- else if (aAccessor.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(
- "ooInetFTPProxyName")))
- {
- aPropertyName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "ftp.proxyHost"));
- rEvent.Element >>= aPropertyValue;
- }
- else if (aAccessor.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(
- "ooInetFTPProxyPort")))
- {
- aPropertyName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "ftp.proxyPort"));
- sal_Int32 n = 0;
- rEvent.Element >>= n;
- aPropertyValue = rtl::OUString::valueOf(n);
- }
- else if (aAccessor.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(
- "ooInetNoProxy")))
- {
- aPropertyName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "http.nonProxyHosts"));
- aPropertyName2 = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "ftp.nonProxyHosts"));
- rEvent.Element >>= aPropertyValue;
- aPropertyValue = aPropertyValue.replace(';', '|');
- }
- else if (aAccessor.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("NetAccess")))
- {
- aPropertyName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "appletviewer.security.mode"));
- sal_Int32 n = 0;
- if (rEvent.Element >>= n)
- switch (n)
- {
- case 0:
- aPropertyValue = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "host"));
- break;
- case 1:
- aPropertyValue = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "unrestricted"));
- break;
- case 3:
- aPropertyValue = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "none"));
- break;
- }
- else
- return;
- bSecurityChanged = true;
- }
- else if (aAccessor.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("Security")))
- {
- aPropertyName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "stardiv.security.disableSecurity"));
- sal_Bool b = sal_Bool();
- if (rEvent.Element >>= b)
- if (b)
- aPropertyValue = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "false"));
- else
- aPropertyValue = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "true"));
- else
- return;
- bSecurityChanged = true;
- }
- else
- return;
-
- rtl::Reference< jvmaccess::VirtualMachine > xVirtualMachine;
- {
- osl::MutexGuard aGuard(*this);
- if (m_xUnoVirtualMachine.is()) {
- xVirtualMachine = m_xUnoVirtualMachine->getVirtualMachine();
- }
- }
- if (xVirtualMachine.is())
- {
- try
- {
- jvmaccess::VirtualMachine::AttachGuard aAttachGuard(
- xVirtualMachine);
- JNIEnv * pJNIEnv = aAttachGuard.getEnvironment();
-
- // call java.lang.System.setProperty
- // String setProperty( String key, String value)
- jclass jcSystem= pJNIEnv->FindClass("java/lang/System");
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:FindClass java/lang/System")), 0);
- jmethodID jmSetProps= pJNIEnv->GetStaticMethodID( jcSystem, "setProperty","(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:GetStaticMethodID java.lang.System.setProperty")), 0);
-
- jstring jsPropName= pJNIEnv->NewString( aPropertyName.getStr(), aPropertyName.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
-
- // remove the property if it does not have a value ( user left the dialog field empty)
- // or if the port is set to 0
- aPropertyValue= aPropertyValue.trim();
- if(
- aPropertyValue.getLength() == 0 ||
- (
- (
- aPropertyName.equals( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ftp.proxyPort"))) ||
- aPropertyName.equals( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("http.proxyPort"))) /*||
- aPropertyName.equals( OUString( RTL_CONSTASCII_USTRINGPARAM("socksProxyPort")))*/
- ) &&
- aPropertyValue.equals(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("0")))
- )
- )
- {
- // call java.lang.System.getProperties
- jmethodID jmGetProps= pJNIEnv->GetStaticMethodID( jcSystem, "getProperties","()Ljava/util/Properties;");
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:GetStaticMethodID java.lang.System.getProperties")), 0);
- jobject joProperties= pJNIEnv->CallStaticObjectMethod( jcSystem, jmGetProps);
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:CallStaticObjectMethod java.lang.System.getProperties")), 0);
- // call java.util.Properties.remove
- jclass jcProperties= pJNIEnv->FindClass("java/util/Properties");
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:FindClass java/util/Properties")), 0);
- jmethodID jmRemove= pJNIEnv->GetMethodID( jcProperties, "remove", "(Ljava/lang/Object;)Ljava/lang/Object;");
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:GetMethodID java.util.Properties.remove")), 0);
- pJNIEnv->CallObjectMethod( joProperties, jmRemove, jsPropName);
-
- // special calse for ftp.nonProxyHosts and http.nonProxyHosts. The office only
- // has a value for two java properties
- if (aPropertyName2.getLength() > 0)
- {
- jstring jsPropName2= pJNIEnv->NewString( aPropertyName2.getStr(), aPropertyName2.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- pJNIEnv->CallObjectMethod( joProperties, jmRemove, jsPropName2);
- }
- }
- else
- {
- // Change the Value of the property
- jstring jsPropValue= pJNIEnv->NewString( aPropertyValue.getStr(), aPropertyValue.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- pJNIEnv->CallStaticObjectMethod( jcSystem, jmSetProps, jsPropName, jsPropValue);
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:CallStaticObjectMethod java.lang.System.setProperty")), 0);
-
- // special calse for ftp.nonProxyHosts and http.nonProxyHosts. The office only
- // has a value for two java properties
- if (aPropertyName2.getLength() > 0)
- {
- jstring jsPropName2= pJNIEnv->NewString( aPropertyName2.getStr(), aPropertyName2.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- jsPropValue= pJNIEnv->NewString( aPropertyValue.getStr(), aPropertyValue.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- pJNIEnv->CallStaticObjectMethod( jcSystem, jmSetProps, jsPropName2, jsPropValue);
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:CallStaticObjectMethod java.lang.System.setProperty")), 0);
- }
- }
-
- // If the settings for Security and NetAccess changed then we have to notify the SandboxSecurity
- // SecurityManager
- // call System.getSecurityManager()
- if (bSecurityChanged)
- {
- jmethodID jmGetSecur= pJNIEnv->GetStaticMethodID( jcSystem,"getSecurityManager","()Ljava/lang/SecurityManager;");
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:GetStaticMethodID java.lang.System.getSecurityManager")), 0);
- jobject joSecur= pJNIEnv->CallStaticObjectMethod( jcSystem, jmGetSecur);
- if (joSecur != 0)
- {
- // Make sure the SecurityManager is our SandboxSecurity
- // FindClass("com.sun.star.lib.sandbox.SandboxSecurityManager" only worked at the first time
- // this code was executed. Maybe it is a security feature. However, all attempts to debug the
- // SandboxSecurity class (maybe the VM invokes checkPackageAccess) failed.
-// jclass jcSandboxSec= pJNIEnv->FindClass("com.sun.star.lib.sandbox.SandboxSecurity");
-// if(pJNIEnv->ExceptionOccurred()) throw RuntimeException(OUSTR("JNI:FindClass com.sun.star.lib.sandbox.SandboxSecurity"), Reference<XInterface>());
-// jboolean bIsSand= pJNIEnv->IsInstanceOf( joSecur, jcSandboxSec);
- // The SecurityManagers class Name must be com.sun.star.lib.sandbox.SandboxSecurity
- jclass jcSec= pJNIEnv->GetObjectClass( joSecur);
- jclass jcClass= pJNIEnv->FindClass("java/lang/Class");
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:FindClass java.lang.Class")), 0);
- jmethodID jmName= pJNIEnv->GetMethodID( jcClass,"getName","()Ljava/lang/String;");
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:GetMethodID java.lang.Class.getName")), 0);
- jstring jsClass= (jstring) pJNIEnv->CallObjectMethod( jcSec, jmName);
- const jchar* jcharName= pJNIEnv->GetStringChars( jsClass, NULL);
- rtl::OUString sName( jcharName);
- jboolean bIsSandbox;
- if (sName == rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.lib.sandbox.SandboxSecurity")))
- bIsSandbox= JNI_TRUE;
- else
- bIsSandbox= JNI_FALSE;
- pJNIEnv->ReleaseStringChars( jsClass, jcharName);
-
- if (bIsSandbox == JNI_TRUE)
- {
- // call SandboxSecurity.reset
- jmethodID jmReset= pJNIEnv->GetMethodID( jcSec,"reset","()V");
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:GetMethodID com.sun.star.lib.sandbox.SandboxSecurity.reset")), 0);
- pJNIEnv->CallVoidMethod( joSecur, jmReset);
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:CallVoidMethod com.sun.star.lib.sandbox.SandboxSecurity.reset")), 0);
- }
- }
- }
- }
- catch (jvmaccess::VirtualMachine::AttachGuard::CreationException &)
- {
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "jvmaccess::VirtualMachine::AttachGuard::"
- "CreationException")),
- 0);
- }
- }
-}
-
-JavaVirtualMachine::~JavaVirtualMachine()
-{
- if (m_xInetConfiguration.is())
- // We should never get here, but just in case...
- try
- {
- m_xInetConfiguration->removeContainerListener(this);
- }
- catch (css::uno::Exception &)
- {
- OSL_FAIL("com.sun.star.uno.Exception caught");
- }
- if (m_xJavaConfiguration.is())
- // We should never get here, but just in case...
- try
- {
- m_xJavaConfiguration->removeContainerListener(this);
- }
- catch (css::uno::Exception &)
- {
- OSL_FAIL("com.sun.star.uno.Exception caught");
- }
-}
-
-void SAL_CALL JavaVirtualMachine::disposing()
-{
- css::uno::Reference< css::container::XContainer > xContainer1;
- css::uno::Reference< css::container::XContainer > xContainer2;
- {
- osl::MutexGuard aGuard(*this);
- m_bDisposed = true;
- xContainer1 = m_xInetConfiguration;
- m_xInetConfiguration.clear();
- xContainer2 = m_xJavaConfiguration;
- m_xJavaConfiguration.clear();
- }
- if (xContainer1.is())
- xContainer1->removeContainerListener(this);
- if (xContainer2.is())
- xContainer2->removeContainerListener(this);
-}
-
-/*We listen to changes in the configuration. For example, the user changes the proxy
- settings in the options dialog (menu tools). Then we are notified of this change and
- if the java vm is already running we change the properties (System.lang.System.setProperties)
- through JNI.
- To receive notifications this class implements XContainerListener.
-*/
-void JavaVirtualMachine::registerConfigChangesListener()
-{
- try
- {
- css::uno::Reference< css::lang::XMultiServiceFactory > xConfigProvider(
- m_xContext->getServiceManager()->createInstanceWithContext( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.configuration.ConfigurationProvider")), m_xContext), css::uno::UNO_QUERY);
-
- if (xConfigProvider.is())
- {
- // We register this instance as listener to changes in org.openoffice.Inet/Settings
- // arguments for ConfigurationAccess
- css::uno::Sequence< css::uno::Any > aArguments(2);
- aArguments[0] <<= css::beans::PropertyValue(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("nodepath")),
- 0,
- css::uno::makeAny(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Inet/Settings"))),
- css::beans::PropertyState_DIRECT_VALUE);
- // depth: -1 means unlimited
- aArguments[1] <<= css::beans::PropertyValue(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("depth")),
- 0,
- css::uno::makeAny( (sal_Int32)-1),
- css::beans::PropertyState_DIRECT_VALUE);
-
- m_xInetConfiguration
- = css::uno::Reference< css::container::XContainer >(
- xConfigProvider->createInstanceWithArguments(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.configuration.ConfigurationAccess")),
- aArguments),
- css::uno::UNO_QUERY);
-
- if (m_xInetConfiguration.is())
- m_xInetConfiguration->addContainerListener(this);
-
- // now register as listener to changes in org.openoffice.Java/VirtualMachine
- css::uno::Sequence< css::uno::Any > aArguments2(2);
- aArguments2[0] <<= css::beans::PropertyValue(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("nodepath")),
- 0,
- css::uno::makeAny(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Java/VirtualMachine"))),
- css::beans::PropertyState_DIRECT_VALUE);
- // depth: -1 means unlimited
- aArguments2[1] <<= css::beans::PropertyValue(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("depth")),
- 0,
- css::uno::makeAny( (sal_Int32)-1),
- css::beans::PropertyState_DIRECT_VALUE);
-
- m_xJavaConfiguration
- = css::uno::Reference< css::container::XContainer >(
- xConfigProvider->createInstanceWithArguments(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.configuration.ConfigurationAccess")),
- aArguments2),
- css::uno::UNO_QUERY);
-
- if (m_xJavaConfiguration.is())
- m_xJavaConfiguration->addContainerListener(this);
- }
- }catch( css::uno::Exception & e)
- {
-#if OSL_DEBUG_LEVEL > 1
- rtl::OString message = rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US);
- OSL_TRACE("javavm.cxx: could not set up listener for Configuration because of >%s<", message.getStr());
-#else
- (void) e; // unused
-#endif
- }
-}
-
-// param true: all Inet setting are set as Java Properties on a live VM.
-// false: the Java net properties are set to empty value.
-void JavaVirtualMachine::setINetSettingsInVM(bool set_reset)
-{
- osl::MutexGuard aGuard(*this);
- try
- {
- if (m_xUnoVirtualMachine.is())
- {
- jvmaccess::VirtualMachine::AttachGuard aAttachGuard(
- m_xUnoVirtualMachine->getVirtualMachine());
- JNIEnv * pJNIEnv = aAttachGuard.getEnvironment();
-
- // The Java Properties
- rtl::OUString sFtpProxyHost(RTL_CONSTASCII_USTRINGPARAM("ftp.proxyHost") );
- rtl::OUString sFtpProxyPort(RTL_CONSTASCII_USTRINGPARAM("ftp.proxyPort") );
- rtl::OUString sFtpNonProxyHosts (RTL_CONSTASCII_USTRINGPARAM("ftp.nonProxyHosts"));
- rtl::OUString sHttpProxyHost(RTL_CONSTASCII_USTRINGPARAM("http.proxyHost") );
- rtl::OUString sHttpProxyPort(RTL_CONSTASCII_USTRINGPARAM("http.proxyPort") );
- rtl::OUString sHttpNonProxyHosts(RTL_CONSTASCII_USTRINGPARAM("http.nonProxyHosts"));
-
- // creat Java Properties as JNI strings
- jstring jsFtpProxyHost= pJNIEnv->NewString( sFtpProxyHost.getStr(), sFtpProxyHost.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- jstring jsFtpProxyPort= pJNIEnv->NewString( sFtpProxyPort.getStr(), sFtpProxyPort.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- jstring jsFtpNonProxyHosts= pJNIEnv->NewString( sFtpNonProxyHosts.getStr(), sFtpNonProxyHosts.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- jstring jsHttpProxyHost= pJNIEnv->NewString( sHttpProxyHost.getStr(), sHttpProxyHost.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- jstring jsHttpProxyPort= pJNIEnv->NewString( sHttpProxyPort.getStr(), sHttpProxyPort.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- jstring jsHttpNonProxyHosts= pJNIEnv->NewString( sHttpNonProxyHosts.getStr(), sHttpNonProxyHosts.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
-
- // prepare java.lang.System.setProperty
- jclass jcSystem= pJNIEnv->FindClass("java/lang/System");
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:FindClass java/lang/System")), 0);
- jmethodID jmSetProps= pJNIEnv->GetStaticMethodID( jcSystem, "setProperty","(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:GetStaticMethodID java.lang.System.setProperty")), 0);
-
- // call java.lang.System.getProperties
- jmethodID jmGetProps= pJNIEnv->GetStaticMethodID( jcSystem, "getProperties","()Ljava/util/Properties;");
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:GetStaticMethodID java.lang.System.getProperties")), 0);
- jobject joProperties= pJNIEnv->CallStaticObjectMethod( jcSystem, jmGetProps);
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:CallStaticObjectMethod java.lang.System.getProperties")), 0);
- // prepare java.util.Properties.remove
- jclass jcProperties= pJNIEnv->FindClass("java/util/Properties");
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:FindClass java/util/Properties")), 0);
-
- if (set_reset)
- {
- // Set all network properties with the VM
- JVM jvm;
- getINetPropsFromConfig( &jvm, m_xContext->getServiceManager(), m_xContext);
- const ::std::vector< rtl::OUString> & Props = jvm.getProperties();
- typedef ::std::vector< rtl::OUString >::const_iterator C_IT;
-
- for( C_IT i= Props.begin(); i != Props.end(); i++)
- {
- rtl::OUString prop= *i;
- sal_Int32 index= prop.indexOf( (sal_Unicode)'=');
- rtl::OUString propName= prop.copy( 0, index);
- rtl::OUString propValue= prop.copy( index + 1);
-
- if( propName.equals( sFtpProxyHost))
- {
- jstring jsVal= pJNIEnv->NewString( propValue.getStr(), propValue.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- pJNIEnv->CallStaticObjectMethod( jcSystem, jmSetProps, jsFtpProxyHost, jsVal);
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:CallStaticObjectMethod java.lang.System.setProperty")), 0);
- }
- else if( propName.equals( sFtpProxyPort))
- {
- jstring jsVal= pJNIEnv->NewString( propValue.getStr(), propValue.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- pJNIEnv->CallStaticObjectMethod( jcSystem, jmSetProps, jsFtpProxyPort, jsVal);
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:CallStaticObjectMethod java.lang.System.setProperty")), 0);
- }
- else if( propName.equals( sFtpNonProxyHosts))
- {
- jstring jsVal= pJNIEnv->NewString( propValue.getStr(), propValue.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- pJNIEnv->CallStaticObjectMethod( jcSystem, jmSetProps, jsFtpNonProxyHosts, jsVal);
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:CallStaticObjectMethod java.lang.System.setProperty")), 0);
- }
- else if( propName.equals( sHttpProxyHost))
- {
- jstring jsVal= pJNIEnv->NewString( propValue.getStr(), propValue.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- pJNIEnv->CallStaticObjectMethod( jcSystem, jmSetProps, jsHttpProxyHost, jsVal);
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:CallStaticObjectMethod java.lang.System.setProperty")), 0);
- }
- else if( propName.equals( sHttpProxyPort))
- {
- jstring jsVal= pJNIEnv->NewString( propValue.getStr(), propValue.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- pJNIEnv->CallStaticObjectMethod( jcSystem, jmSetProps, jsHttpProxyPort, jsVal);
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:CallStaticObjectMethod java.lang.System.setProperty")), 0);
- }
- else if( propName.equals( sHttpNonProxyHosts))
- {
- jstring jsVal= pJNIEnv->NewString( propValue.getStr(), propValue.getLength());
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:NewString")), 0);
- pJNIEnv->CallStaticObjectMethod( jcSystem, jmSetProps, jsHttpNonProxyHosts, jsVal);
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:CallStaticObjectMethod java.lang.System.setProperty")), 0);
- }
- }
- }
- else
- {
- // call java.util.Properties.remove
- jmethodID jmRemove= pJNIEnv->GetMethodID( jcProperties, "remove", "(Ljava/lang/Object;)Ljava/lang/Object;");
- if(pJNIEnv->ExceptionOccurred()) throw css::uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("JNI:GetMethodID java.util.Property.remove")), 0);
- pJNIEnv->CallObjectMethod( joProperties, jmRemove, jsFtpProxyHost);
- pJNIEnv->CallObjectMethod( joProperties, jmRemove, jsFtpProxyPort);
- pJNIEnv->CallObjectMethod( joProperties, jmRemove, jsFtpNonProxyHosts);
- pJNIEnv->CallObjectMethod( joProperties, jmRemove, jsHttpProxyHost);
- pJNIEnv->CallObjectMethod( joProperties, jmRemove, jsHttpProxyPort);
- pJNIEnv->CallObjectMethod( joProperties, jmRemove, jsHttpNonProxyHosts);
- }
- }
- }
- catch (css::uno::RuntimeException &)
- {
- OSL_FAIL("RuntimeException");
- }
- catch (jvmaccess::VirtualMachine::AttachGuard::CreationException &)
- {
- OSL_FAIL("jvmaccess::VirtualMachine::AttachGuard::CreationException");
- }
-}
-
-void JavaVirtualMachine::setUpUnoVirtualMachine(JNIEnv * environment) {
- css::uno::Reference< css::util::XMacroExpander > exp;
- if (!(m_xContext->getValueByName(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "/singletons/com.sun.star.util.theMacroExpander")))
- >>= exp)
- || !exp.is())
- {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "component context fails to supply singleton"
- " com.sun.star.util.theMacroExpander of type"
- " com.sun.star.util.XMacroExpander")),
- m_xContext);
- }
- rtl::OUString baseUrl;
- try {
- baseUrl = exp->expandMacros(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("$URE_INTERNAL_JAVA_DIR/")));
- } catch (css::lang::IllegalArgumentException &) {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com::sun::star::lang::IllegalArgumentException")),
- static_cast< cppu::OWeakObject * >(this));
- }
- rtl::OUString classPath;
- try {
- classPath = exp->expandMacros(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("$URE_INTERNAL_JAVA_CLASSPATH")));
- } catch (css::lang::IllegalArgumentException &) {}
- jclass class_URLClassLoader = environment->FindClass(
- "java/net/URLClassLoader");
- if (class_URLClassLoader == 0) {
- handleJniException(environment);
- }
- jmethodID ctor_URLClassLoader = environment->GetMethodID(
- class_URLClassLoader, "<init>", "([Ljava/net/URL;)V");
- if (ctor_URLClassLoader == 0) {
- handleJniException(environment);
- }
- jclass class_URL = environment->FindClass("java/net/URL");
- if (class_URL == 0) {
- handleJniException(environment);
- }
- jmethodID ctor_URL_1 = environment->GetMethodID(
- class_URL, "<init>", "(Ljava/lang/String;)V");
- if (ctor_URL_1 == 0) {
- handleJniException(environment);
- }
- jvalue args[3];
- args[0].l = environment->NewString(
- static_cast< jchar const * >(baseUrl.getStr()),
- static_cast< jsize >(baseUrl.getLength()));
- if (args[0].l == 0) {
- handleJniException(environment);
- }
- jobject base = environment->NewObjectA(class_URL, ctor_URL_1, args);
- if (base == 0) {
- handleJniException(environment);
- }
- jmethodID ctor_URL_2 = environment->GetMethodID(
- class_URL, "<init>", "(Ljava/net/URL;Ljava/lang/String;)V");
- if (ctor_URL_2 == 0) {
- handleJniException(environment);
- }
- jobjectArray classpath = jvmaccess::ClassPath::translateToUrls(
- m_xContext, environment, classPath);
- if (classpath == 0) {
- handleJniException(environment);
- }
- args[0].l = base;
- args[1].l = environment->NewStringUTF("unoloader.jar");
- if (args[1].l == 0) {
- handleJniException(environment);
- }
- args[0].l = environment->NewObjectA(class_URL, ctor_URL_2, args);
- if (args[0].l == 0) {
- handleJniException(environment);
- }
- args[0].l = environment->NewObjectArray(1, class_URL, args[0].l);
- if (args[0].l == 0) {
- handleJniException(environment);
- }
- jobject cl1 = environment->NewObjectA(
- class_URLClassLoader, ctor_URLClassLoader, args);
- if (cl1 == 0) {
- handleJniException(environment);
- }
- jmethodID method_loadClass = environment->GetMethodID(
- class_URLClassLoader, "loadClass",
- "(Ljava/lang/String;)Ljava/lang/Class;");
- if (method_loadClass == 0) {
- handleJniException(environment);
- }
- args[0].l = environment->NewStringUTF(
- "com.sun.star.lib.unoloader.UnoClassLoader");
- if (args[0].l == 0) {
- handleJniException(environment);
- }
- jclass class_UnoClassLoader = static_cast< jclass >(
- environment->CallObjectMethodA(cl1, method_loadClass, args));
- if (class_UnoClassLoader == 0) {
- handleJniException(environment);
- }
- jmethodID ctor_UnoClassLoader = environment->GetMethodID(
- class_UnoClassLoader, "<init>",
- "(Ljava/net/URL;[Ljava/net/URL;Ljava/lang/ClassLoader;)V");
- if (ctor_UnoClassLoader == 0) {
- handleJniException(environment);
- }
- args[0].l = base;
- args[1].l = classpath;
- args[2].l = cl1;
- jobject cl2 = environment->NewObjectA(
- class_UnoClassLoader, ctor_UnoClassLoader, args);
- if (cl2 == 0) {
- handleJniException(environment);
- }
- try {
- m_xUnoVirtualMachine = new jvmaccess::UnoVirtualMachine(
- m_xVirtualMachine, cl2);
- } catch (jvmaccess::UnoVirtualMachine::CreationException &) {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "jvmaccess::UnoVirtualMachine::CreationException")),
- static_cast< cppu::OWeakObject * >(this));
- }
-}
-
-void JavaVirtualMachine::handleJniException(JNIEnv * environment) {
- environment->ExceptionClear();
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("JNI exception occurred")),
- static_cast< cppu::OWeakObject * >(this));
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/javavm/javavm.hxx b/stoc/source/javavm/javavm.hxx
deleted file mode 100644
index 78782c2d7..000000000
--- a/stoc/source/javavm/javavm.hxx
+++ /dev/null
@@ -1,175 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-#if !defined INCLUDED_STOC_JAVAVM_JAVAVM_HXX
-#define INCLUDED_STOC_JAVAVM_JAVAVM_HXX
-
-#include "jvmargs.hxx"
-
-#include "com/sun/star/container/XContainerListener.hpp"
-#include "com/sun/star/lang/XInitialization.hpp"
-#include "com/sun/star/java/XJavaThreadRegister_11.hpp"
-#include "com/sun/star/java/XJavaVM.hpp"
-#include "com/sun/star/lang/XServiceInfo.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "cppuhelper/compbase5.hxx"
-#include "osl/thread.hxx"
-#include "rtl/ref.hxx"
-#include <osl/mutex.hxx>
-#include <rtl/ustring.hxx>
-
-namespace com { namespace sun { namespace star {
- namespace container { class XContainer; }
- namespace uno { class XComponentContext; }
-} } }
-namespace jvmaccess {
- class UnoVirtualMachine;
- class VirtualMachine;
-}
-
-namespace stoc_javavm {
-
-bool configureJava(const com::sun::star::uno::Reference<
- com::sun::star::uno::XComponentContext>& xContext);
-// The MS compiler needs a typedef here, so the JavaVirtualMachine ctor can call
-// its base class ctor:
-typedef
-cppu::WeakComponentImplHelper5< com::sun::star::lang::XInitialization,
- com::sun::star::lang::XServiceInfo,
- com::sun::star::java::XJavaVM,
- com::sun::star::java::XJavaThreadRegister_11,
- com::sun::star::container::XContainerListener >
-JavaVirtualMachine_Impl;
-
-class JavaVirtualMachine: private osl::Mutex, public JavaVirtualMachine_Impl
-{
-public:
- explicit JavaVirtualMachine(
- com::sun::star::uno::Reference<
- com::sun::star::uno::XComponentContext > const & rContext);
-
- // XInitialization
- virtual void SAL_CALL
- initialize(com::sun::star::uno::Sequence< com::sun::star::uno::Any > const &
- rArguments)
- throw (com::sun::star::uno::Exception);
-
- // XServiceInfo
- virtual rtl::OUString SAL_CALL getImplementationName()
- throw (com::sun::star::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL
- supportsService(rtl::OUString const & rServiceName)
- throw (com::sun::star::uno::RuntimeException);
-
- virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL
- getSupportedServiceNames() throw (com::sun::star::uno::RuntimeException);
-
- // XJavaVM
- virtual com::sun::star::uno::Any SAL_CALL
- getJavaVM(com::sun::star::uno::Sequence< sal_Int8 > const & rProcessId)
- throw (com::sun::star::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isVMStarted()
- throw (com::sun::star::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isVMEnabled()
- throw (com::sun::star::uno::RuntimeException);
-
- // XJavaThreadRegister_11
- virtual sal_Bool SAL_CALL isThreadAttached()
- throw (com::sun::star::uno::RuntimeException);
-
- virtual void SAL_CALL registerThread()
- throw (com::sun::star::uno::RuntimeException);
-
- virtual void SAL_CALL revokeThread()
- throw (com::sun::star::uno::RuntimeException);
-
- // XContainerListener
- virtual void SAL_CALL
- disposing(com::sun::star::lang::EventObject const & rSource)
- throw (com::sun::star::uno::RuntimeException);
-
- virtual void SAL_CALL
- elementInserted(com::sun::star::container::ContainerEvent const & rEvent)
- throw (com::sun::star::uno::RuntimeException);
-
- virtual void SAL_CALL
- elementRemoved(com::sun::star::container::ContainerEvent const & rEvent)
- throw (com::sun::star::uno::RuntimeException);
-
- virtual void SAL_CALL
- elementReplaced(com::sun::star::container::ContainerEvent const & rEvent)
- throw (com::sun::star::uno::RuntimeException);
-
-private:
- JavaVirtualMachine(JavaVirtualMachine &); // not implemented
- void operator =(JavaVirtualMachine); // not implemented
-
- virtual ~JavaVirtualMachine();
-
- virtual void SAL_CALL disposing();
-
- JavaVM * createJavaVM(JVM const & jvm, JNIEnv ** pMainThreadEnv);
- // throws com::sun::star::uno::RuntimeException
-
- void registerConfigChangesListener();
-
- void setINetSettingsInVM(bool set_reset);
-
- void setUpUnoVirtualMachine(JNIEnv * environment);
-
- void handleJniException(JNIEnv * environment);
-
- com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >
- m_xContext;
-
- // the following are controlled by the 'this' mutex:
- bool m_bDisposed;
- rtl::Reference< jvmaccess::VirtualMachine > m_xVirtualMachine;
- rtl::Reference< jvmaccess::UnoVirtualMachine > m_xUnoVirtualMachine;
- JavaVM * m_pJavaVm;
- // stored as an instance member for backwards compatibility in getJavaVM
- bool m_bDontCreateJvm;
- // If the first creation of Java failed and this flag is set then the
- // next call to getJavaVM throws a RuntimException. This is useful when
- // the second attempt to create Java might cause a crash.
- com::sun::star::uno::Reference< com::sun::star::container::XContainer >
- m_xInetConfiguration;
- com::sun::star::uno::Reference< com::sun::star::container::XContainer >
- m_xJavaConfiguration; // for Java settings
-
- osl::ThreadData m_aAttachGuards;
-};
-
-}
-
-#endif // INCLUDED_STOC_JAVAVM_JAVAVM_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/javavm/jen.xml b/stoc/source/javavm/jen.xml
deleted file mode 100644
index 42d8db92f..000000000
--- a/stoc/source/javavm/jen.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name> javavm.uno </module-name>
- <component-description>
- <author> Kay Ramme </author>
- <name> com.sun.star.comp.stoc.JavaVirtualMachine </name>
- <description>
-The Java VM service manages the creation of java vms.
-It takes a look at the UNO runtime and tries to find a java environment.
-If an java environment already exists, no new vm is created, instead
-the existing vm given back.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> c++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.java.JavaVirtualMachine </supported-service>
- <service-dependency> ... </service-dependency>
- <type>com.sun.star.beans.NamedValue</type>
- <type>com.sun.star.java.XJavaThreadRegister_11</type>
- <type>com.sun.star.uri/ExternalUriReferenceTranslator</type>
- <type>com.sun.star.util.XMacroExpander</type>
- <type> com.sun.star.java.XJavaVM </type>
- <type> com.sun.star.java.XJavaVM </type>
- <type> com.sun.star.container.XNameAccess </type>
- <type> com.sun.star.container.XContainer </type>
- <type> com.sun.star.container.XContainerListener </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.lang.XComponent </type>
- <type> com.sun.star.lang.WrappedTargetRuntimeException </type>
- <type> com.sun.star.lang.DisposedException </type>
- <type> com.sun.star.lang.IllegalArgumentException </type>
- <type> com.sun.star.lang.XInitialization </type>
- <type> com.sun.star.registry.XSimpleRegistry </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.uno.XComponentContext </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.uno.XCurrentContext </type>
- <type> com.sun.star.beans.PropertyValue </type>
- <type> com.sun.star.task.XInteractionHandler </type>
- <type> com.sun.star.task.XInteractionRequest </type>
- <type> com.sun.star.task.XInteractionContinuation </type>
- <type> com.sun.star.task.XInteractionAbort </type>
- <type> com.sun.star.task.XInteractionRetry </type>
- <type> com.sun.star.java.JavaInitializationException </type>
- <type> com.sun.star.java.JavaDisabledException </type>
- <type> com.sun.star.java.JavaNotFoundException </type>
- <type> com.sun.star.java.InvalidJavaSettingsException </type>
- <type> com.sun.star.java.RestartRequiredException </type>
- <type> com.sun.star.java.JavaVMCreationFailureException </type>
- <type> com.sun.star.container.XNameAccess </type>
- </component-description>
- <project-build-dependency> cppuhelper </project-build-dependency>
- <project-build-dependency> cppu </project-build-dependency>
- <project-build-dependency> tools </project-build-dependency>
- <project-build-dependency> sal </project-build-dependency>
- <project-build-dependency> jvmaccess </project-build-dependency>
- <project-build-dependency> salhelper </project-build-dependency>
- <runtime-module-dependency> cppuhelper3$(COM) </runtime-module-dependency>
- <runtime-module-dependency> cppu3 </runtime-module-dependency>
- <runtime-module-dependency> tl(COM) </runtime-module-dependency>
- <runtime-module-dependency> sal3 </runtime-module-dependency>
- <runtime-module-dependency> jvmaccess3$(COM) </runtime-module-dependency>
- <runtime-module-dependency> salhelper3$(COM) </runtime-module-dependency>
-</module-description>
diff --git a/stoc/source/javavm/jvmargs.cxx b/stoc/source/javavm/jvmargs.cxx
deleted file mode 100644
index 323ffa829..000000000
--- a/stoc/source/javavm/jvmargs.cxx
+++ /dev/null
@@ -1,68 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "jvmargs.hxx"
-#include <rtl/ustring.hxx>
-
-
-#define OUSTR(x) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( x ))
-
-using ::rtl::OUString;
-namespace stoc_javavm {
-
-JVM::JVM() throw()//: _enabled(sal_False)
-{
-}
-
-void JVM::pushProp(const OUString & property)
-{
- sal_Int32 index = property.indexOf((sal_Unicode)'=');
- if(index > 0)
- {
- OUString left = property.copy(0, index).trim();
- OUString right(property.copy(index + 1).trim());
- _props.push_back(property);
- }
- else
- { // no '=', could be -X
- _props.push_back(property);
- }
-}
-
-
-const ::std::vector< ::rtl::OUString > & JVM::getProperties() const
-{
- return _props;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/javavm/jvmargs.hxx b/stoc/source/javavm/jvmargs.hxx
deleted file mode 100644
index ebd1aa170..000000000
--- a/stoc/source/javavm/jvmargs.hxx
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 __JVM_HXX
-#define __JVM_HXX
-
-
-#include <vector>
-#include <rtl/ustring.hxx>
-
-#include "jni.h"
-
-
-extern "C" {
- typedef jint JNICALL JNI_InitArgs_Type(void *);
- typedef jint JNICALL JNI_CreateVM_Type(JavaVM **, JNIEnv **, void *);
-
-}
-
-namespace stoc_javavm {
-
- class JVM {
- ::std::vector<rtl::OUString> _props;
-
- public:
- JVM() throw();
-
- void pushProp(const ::rtl::OUString & uString);
- const ::std::vector< ::rtl::OUString> & getProperties() const;
- };
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/javavm/makefile.mk b/stoc/source/javavm/makefile.mk
deleted file mode 100644
index bcd36e696..000000000
--- a/stoc/source/javavm/makefile.mk
+++ /dev/null
@@ -1,94 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME=stoc
-TARGET = javavm.uno
-ENABLE_EXCEPTIONS=TRUE
-COMP1TYPELIST = jen
-
-.IF "$(SOLAR_JAVA)" == "TRUE"
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-DLLPRE =
-
-# --- Files --------------------------------------------------------
-
-# Kollision zwischen bool.h aus Java und bool.h aus der STL.
-# Das Problem tritt fuer alle Plattformen auf, aber anscheinend stolpert nur der
-# GCC darueber
-.IF "$(COM)" == "GCC"
-CDEFS += -D__SGI_STL_BOOL_H
-.ENDIF
-
-.INCLUDE : ..$/cppumaker.mk
-
-SLOFILES= \
- $(SLO)$/javavm.obj \
- $(SLO)$/jvmargs.obj \
- $(SLO)$/interact.obj
-
-SHL1TARGET= $(TARGET)
-SHL1VERSIONMAP = $(SOLARENV)/src/component.map
-SHL1STDLIBS= \
- $(CPPUHELPERLIB) \
- $(CPPULIB) \
- $(SALLIB) \
- $(JVMACCESSLIB) \
- $(SALHELPERLIB) \
- $(JVMFWKLIB)
-
-.IF "$(GUI)"=="WNT"
-SHL1STDLIBS += $(ADVAPI32LIB)
-.ENDIF
-
-SHL1DEPN=
-SHL1IMPLIB= i$(TARGET)
-SHL1LIBS= $(SLB)$/$(TARGET).lib
-SHL1DEF= $(MISC)$/$(SHL1TARGET).def
-SHL1RPATH= URELIB
-
-DEF1NAME= $(SHL1TARGET)
-
-.ELSE # SOLAR_JAVA
-all:
- @echo Nothing to do: SOLAR_JAVA not set
-.ENDIF
-
-# --- Targets ------------------------------------------------------
-
-
-.INCLUDE : target.mk
-
-ALLTAR : $(MISC)/javavm.component
-
-$(MISC)/javavm.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \
- javavm.component
- $(XSLTPROC) --nonet --stringparam uri \
- '$(COMPONENTPREFIX_URE_NATIVE)$(SHL1TARGETN:f)' -o $@ \
- $(SOLARENV)/bin/createcomponent.xslt javavm.component
diff --git a/stoc/source/loader/dllcomponentloader.cxx b/stoc/source/loader/dllcomponentloader.cxx
deleted file mode 100644
index 34c79b10c..000000000
--- a/stoc/source/loader/dllcomponentloader.cxx
+++ /dev/null
@@ -1,259 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include <stdlib.h>
-#include <osl/file.h>
-#include <vector>
-#include <osl/mutex.hxx>
-#include <osl/diagnose.h>
-#include <osl/module.h>
-#include <rtl/ustring.hxx>
-#include <uno/environment.h>
-#include <uno/mapping.hxx>
-#include <cppuhelper/queryinterface.hxx>
-#include <cppuhelper/weak.hxx>
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/shlib.hxx>
-#include <cppuhelper/implbase3.hxx>
-#include <cppuhelper/implementationentry.hxx>
-#include <cppuhelper/bootstrap.hxx>
-
-#include <com/sun/star/loader/XImplementationLoader.hpp>
-#include <com/sun/star/lang/IllegalArgumentException.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/registry/XRegistryKey.hpp>
-
-#define SERVICENAME "com.sun.star.loader.SharedLibrary"
-#define IMPLNAME "com.sun.star.comp.stoc.DLLComponentLoader"
-
-#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
-
-
-using namespace com::sun::star;
-using namespace com::sun::star::uno;
-using namespace com::sun::star::loader;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::registry;
-using namespace cppu;
-using namespace osl;
-using ::rtl::OUString;
-extern rtl_StandardModuleCount g_moduleCount;
-
-namespace stoc_bootstrap
-{
-Sequence< OUString > loader_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] = OUString(RTL_CONSTASCII_USTRINGPARAM(SERVICENAME));
- return seqNames;
-}
-
-OUString loader_getImplementationName()
-{
- return OUString(RTL_CONSTASCII_USTRINGPARAM(IMPLNAME));
-}
-}
-
-namespace stoc_loader
-{
-//*************************************************************************
-// DllComponentLoader
-//*************************************************************************
-class DllComponentLoader
- : public WeakImplHelper3< XImplementationLoader,
- XInitialization,
- XServiceInfo >
-{
-public:
- DllComponentLoader( const Reference<XComponentContext> & xCtx );
- ~DllComponentLoader();
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException);
-
- // XInitialization
- virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
-
- // XImplementationLoader
- virtual Reference<XInterface> SAL_CALL activate( const OUString& implementationName, const OUString& implementationLoaderUrl, const OUString& locationUrl, const Reference<XRegistryKey>& xKey ) throw(CannotActivateFactoryException, RuntimeException);
- virtual sal_Bool SAL_CALL writeRegistryInfo( const Reference<XRegistryKey>& xKey, const OUString& implementationLoaderUrl, const OUString& locationUrl ) throw(CannotRegisterImplementationException, RuntimeException);
-
-private:
- OUString expand_url( OUString const & url )
- SAL_THROW( (RuntimeException) );
-
- Reference<XMultiServiceFactory> m_xSMgr;
-};
-
-//*************************************************************************
-DllComponentLoader::DllComponentLoader( const Reference<XComponentContext> & xCtx )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- m_xSMgr.set( xCtx->getServiceManager(), UNO_QUERY );
-}
-
-//*************************************************************************
-DllComponentLoader::~DllComponentLoader()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-//*************************************************************************
-OUString SAL_CALL DllComponentLoader::getImplementationName( )
- throw(::com::sun::star::uno::RuntimeException)
-{
- return stoc_bootstrap::loader_getImplementationName();
-}
-
-//*************************************************************************
-sal_Bool SAL_CALL DllComponentLoader::supportsService( const OUString& ServiceName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- Sequence< OUString > aSNL = getSupportedServiceNames();
- const OUString * pArray = aSNL.getArray();
- for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
- if( pArray[i] == ServiceName )
- return sal_True;
- return sal_False;
-}
-
-//*************************************************************************
-Sequence<OUString> SAL_CALL DllComponentLoader::getSupportedServiceNames( )
- throw(::com::sun::star::uno::RuntimeException)
-{
- return stoc_bootstrap::loader_getSupportedServiceNames();
-}
-
-//*************************************************************************
-void DllComponentLoader::initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& )
- throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
-{
- OSL_FAIL( "dllcomponentloader::initialize should not be called !" );
-// if( aArgs.getLength() != 1 )
-// {
-// throw IllegalArgumentException();
-// }
-
-// Reference< XMultiServiceFactory > rServiceManager;
-
-// if( aArgs.getConstArray()[0].getValueType().getTypeClass() == TypeClass_INTERFACE )
-// {
-// aArgs.getConstArray()[0] >>= rServiceManager;
-// }
-
-// if( !rServiceManager.is() )
-// {
-// throw IllegalArgumentException();
-// }
-
-// m_xSMgr = rServiceManager;
-}
-
-//==================================================================================================
-OUString DllComponentLoader::expand_url( OUString const & url )
- SAL_THROW( (RuntimeException) )
-{
- try
- {
- return cppu::bootstrap_expandUri( url );
- }
- catch ( IllegalArgumentException & e )
- {
- throw RuntimeException( e.Message, e.Context );
- }
-}
-
-//*************************************************************************
-Reference<XInterface> SAL_CALL DllComponentLoader::activate(
- const OUString & rImplName, const OUString &, const OUString & rLibName,
- const Reference< XRegistryKey > & xKey )
-
- throw(CannotActivateFactoryException, RuntimeException)
-{
- rtl::OUString aPrefix;
- if( xKey.is() )
- {
- Reference<XRegistryKey > xActivatorKey = xKey->openKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/UNO/ACTIVATOR") ) );
- if (xActivatorKey.is() && xActivatorKey->getValueType() == RegistryValueType_ASCII )
- {
- Reference<XRegistryKey > xPrefixKey = xKey->openKey(
- rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("/UNO/PREFIX") ) );
- if( xPrefixKey.is() && xPrefixKey->getValueType() == RegistryValueType_ASCII )
- {
- aPrefix = xPrefixKey->getAsciiValue();
- if( aPrefix.getLength() != 0 )
- aPrefix = aPrefix + OUSTR("_");
- }
- }
- }
-
- return loadSharedLibComponentFactory(
- expand_url( rLibName ), OUString(), rImplName, m_xSMgr, xKey, aPrefix );
-}
-
-
-//*************************************************************************
-sal_Bool SAL_CALL DllComponentLoader::writeRegistryInfo(
- const Reference< XRegistryKey > & xKey, const OUString &, const OUString & rLibName )
-
- throw(CannotRegisterImplementationException, RuntimeException)
-{
- writeSharedLibComponentInfo(
- expand_url( rLibName ), OUString(), m_xSMgr, xKey );
- return sal_True;
-}
-}
-
-namespace stoc_bootstrap
-{
-//*************************************************************************
-Reference<XInterface> SAL_CALL DllComponentLoader_CreateInstance( const Reference<XComponentContext> & xCtx ) throw(Exception)
-{
- Reference<XInterface> xRet;
-
- XImplementationLoader *pXLoader = (XImplementationLoader *)new stoc_loader::DllComponentLoader(xCtx);
-
- if (pXLoader)
- {
- xRet = Reference<XInterface>::query(pXLoader);
- }
-
- return xRet;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/loader/makefile.mk b/stoc/source/loader/makefile.mk
deleted file mode 100644
index 24a39597a..000000000
--- a/stoc/source/loader/makefile.mk
+++ /dev/null
@@ -1,47 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME= stoc
-TARGET = shlibloader
-ENABLE_EXCEPTIONS=TRUE
-BOOTSTRAP_SERVICE=TRUE
-UNOUCROUT= $(OUT)$/inc$/bootstrap
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-
-# ------------------------------------------------------------------
-
-SLOFILES= \
- $(SLO)$/dllcomponentloader.obj
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
diff --git a/stoc/source/module-description.dtd b/stoc/source/module-description.dtd
deleted file mode 100644
index 279f721de..000000000
--- a/stoc/source/module-description.dtd
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- 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.
-
--->
-
-<!ENTITY % component-description-optional "reference-docu|service-dependency|type">
-<!ENTITY % module-description-optional "project-build-dependency|runtime-module-dependency|(%component-description-optional;)">
-<!ELEMENT module-description (module-name, component-description*,(%module-description-optional;)* )>
-<!ELEMENT component-description (author,name,description,loader-name,language,status, supported-service+, (%component-description-optional;)* )>
-
-<!ELEMENT author (#PCDATA)>
-<!ELEMENT name (#PCDATA)>
-<!ELEMENT description (#PCDATA)>
-<!ELEMENT reference-docu EMPTY >
-<!ATTLIST reference-docu
- xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink/Namespace"
- xlink:type (simple) #FIXED "simple"
- xlink:href CDATA #REQUIRED
- xlink:role NMTOKEN #IMPLIED
- xlink:title CDATA #IMPLIED >
-
-<!ELEMENT module-name (#PCDATA)>
-<!ELEMENT loader-name (#PCDATA)>
-<!ELEMENT supported-service (#PCDATA)>
-<!ELEMENT service-dependency (#PCDATA)>
-<!ELEMENT project-build-dependency (#PCDATA)>
-<!ELEMENT runtime-module-dependency (#PCDATA)>
-<!ELEMENT language (#PCDATA)>
-<!ELEMENT status EMPTY >
-<!ATTLIST status value (under_construction | alpha | beta | final) #REQUIRED>
-<!ELEMENT type (#PCDATA)>
diff --git a/stoc/source/namingservice/makefile.mk b/stoc/source/namingservice/makefile.mk
deleted file mode 100644
index cc98cdfc3..000000000
--- a/stoc/source/namingservice/makefile.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME= stoc
-TARGET = namingservice.uno
-ENABLE_EXCEPTIONS=TRUE
-COMP1TYPELIST = namingservice
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-DLLPRE =
-
-# ------------------------------------------------------------------
-
-.INCLUDE : ..$/cppumaker.mk
-
-SLOFILES= \
- $(SLO)$/namingservice.obj
-
-SHL1TARGET= $(TARGET)
-
-SHL1STDLIBS= \
- $(CPPULIB) \
- $(CPPUHELPERLIB) \
- $(SALLIB)
-
-SHL1VERSIONMAP = $(SOLARENV)/src/unloadablecomponent.map
-
-SHL1DEPN=
-SHL1IMPLIB= i$(TARGET)
-SHL1LIBS= $(SLB)$/$(TARGET).lib
-SHL1DEF= $(MISC)$/$(SHL1TARGET).def
-SHL1RPATH= URELIB
-
-DEF1NAME= $(SHL1TARGET)
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
-ALLTAR : $(MISC)/namingservice.component
-
-$(MISC)/namingservice.component .ERRREMOVE : \
- $(SOLARENV)/bin/createcomponent.xslt namingservice.component
- $(XSLTPROC) --nonet --stringparam uri \
- '$(COMPONENTPREFIX_URE_NATIVE)$(SHL1TARGETN:f)' -o $@ \
- $(SOLARENV)/bin/createcomponent.xslt namingservice.component
diff --git a/stoc/source/namingservice/namingservice.component b/stoc/source/namingservice/namingservice.component
deleted file mode 100644
index 8450cdee6..000000000
--- a/stoc/source/namingservice/namingservice.component
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--**********************************************************************
-*
-* 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.
-*
-**********************************************************************-->
-
-<component loader="com.sun.star.loader.SharedLibrary"
- xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.comp.stoc.NamingService">
- <service name="com.sun.star.uno.NamingService"/>
- </implementation>
-</component>
diff --git a/stoc/source/namingservice/namingservice.cxx b/stoc/source/namingservice/namingservice.cxx
deleted file mode 100644
index c93269578..000000000
--- a/stoc/source/namingservice/namingservice.cxx
+++ /dev/null
@@ -1,223 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include <boost/unordered_map.hpp>
-#include <osl/mutex.hxx>
-#include <osl/diagnose.h>
-#include <uno/dispatcher.h>
-#include <uno/mapping.hxx>
-#include <cppuhelper/queryinterface.hxx>
-#include <cppuhelper/weak.hxx>
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/component.hxx>
-#include <cppuhelper/implbase2.hxx>
-#include <cppuhelper/implementationentry.hxx>
-
-#include <com/sun/star/uno/XNamingService.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-
-using namespace cppu;
-using namespace osl;
-using namespace std;
-
-using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::registry;
-
-using ::rtl::OUString;
-
-#define SERVICENAME "com.sun.star.uno.NamingService"
-#define IMPLNAME "com.sun.star.comp.stoc.NamingService"
-
-namespace stoc_namingservice
-{
-static rtl_StandardModuleCount g_moduleCount = MODULE_COUNT_INIT;
-
-static Sequence< OUString > ns_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] = OUString(RTL_CONSTASCII_USTRINGPARAM(SERVICENAME));
- return seqNames;
-}
-
-static OUString ns_getImplementationName()
-{
- return OUString(RTL_CONSTASCII_USTRINGPARAM(IMPLNAME));
-}
-
-struct equalOWString_Impl
-{
- sal_Bool operator()(const OUString & s1, const OUString & s2) const
- { return s1 == s2; }
-};
-
-struct hashOWString_Impl
-{
- size_t operator()(const OUString & rName) const
- { return rName.hashCode(); }
-};
-
-typedef boost::unordered_map
-<
- OUString,
- Reference<XInterface >,
- hashOWString_Impl,
- equalOWString_Impl
-> HashMap_OWString_Interface;
-
-//==================================================================================================
-class NamingService_Impl
- : public WeakImplHelper2 < XServiceInfo, XNamingService >
-{
- Mutex aMutex;
- HashMap_OWString_Interface aMap;
-public:
- NamingService_Impl();
- ~NamingService_Impl();
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName()
- throw(::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName )
- throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< OUString > SAL_CALL getSupportedServiceNames()
- throw(::com::sun::star::uno::RuntimeException);
- static Sequence< OUString > SAL_CALL getSupportedServiceNames_Static()
- {
- OUString aStr( OUString(RTL_CONSTASCII_USTRINGPARAM(SERVICENAME)) );
- return Sequence< OUString >( &aStr, 1 );
- }
-
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getRegisteredObject( const ::rtl::OUString& Name ) throw(Exception, RuntimeException);
- virtual void SAL_CALL registerObject( const ::rtl::OUString& Name, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& Object ) throw(Exception, RuntimeException);
- virtual void SAL_CALL revokeObject( const ::rtl::OUString& Name ) throw(Exception, RuntimeException);
-};
-
-//==================================================================================================
-static Reference<XInterface> SAL_CALL NamingService_Impl_create( const Reference<XComponentContext> & )
-{
- return *new NamingService_Impl();
-}
-
-//==================================================================================================
-NamingService_Impl::NamingService_Impl()
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-}
-
-//==================================================================================================
-NamingService_Impl::~NamingService_Impl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XServiceInfo
-OUString NamingService_Impl::getImplementationName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return ns_getImplementationName();
-}
-
-// XServiceInfo
-sal_Bool NamingService_Impl::supportsService( const OUString & rServiceName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- const Sequence< OUString > & rSNL = getSupportedServiceNames();
- const OUString * pArray = rSNL.getConstArray();
- for ( sal_Int32 nPos = rSNL.getLength(); nPos--; )
- {
- if (pArray[nPos] == rServiceName)
- return sal_True;
- }
- return sal_False;
-}
-
-// XServiceInfo
-Sequence< OUString > NamingService_Impl::getSupportedServiceNames()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return ns_getSupportedServiceNames();
-}
-
-// XServiceInfo
-Reference< XInterface > NamingService_Impl::getRegisteredObject( const OUString& Name ) throw(Exception, RuntimeException)
-{
- Guard< Mutex > aGuard( aMutex );
- Reference< XInterface > xRet;
- HashMap_OWString_Interface::iterator aIt = aMap.find( Name );
- if( aIt != aMap.end() )
- xRet = (*aIt).second;
- return xRet;
-}
-
-// XServiceInfo
-void NamingService_Impl::registerObject( const OUString& Name, const Reference< XInterface >& Object ) throw(Exception, RuntimeException)
-{
- Guard< Mutex > aGuard( aMutex );
- aMap[ Name ] = Object;
-}
-
-// XServiceInfo
-void NamingService_Impl::revokeObject( const OUString& Name ) throw(Exception, RuntimeException)
-{
- Guard< Mutex > aGuard( aMutex );
- aMap.erase( Name );
-}
-
-}
-
-using namespace stoc_namingservice;
-static struct ImplementationEntry g_entries[] =
-{
- {
- NamingService_Impl_create, ns_getImplementationName,
- ns_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt , 0
- },
- { 0, 0, 0, 0, 0, 0 }
-};
-
-extern "C"
-{
-sal_Bool SAL_CALL component_canUnload( TimeValue *pTime )
-{
- return g_moduleCount.canUnload( &g_moduleCount , pTime );
-}
-
-//==================================================================================================
-SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
- const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey )
-{
- return component_getFactoryHelper( pImplName, pServiceManager, pRegistryKey , g_entries );
-}
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/namingservice/namingservice.xml b/stoc/source/namingservice/namingservice.xml
deleted file mode 100644
index 5c5fc9b77..000000000
--- a/stoc/source/namingservice/namingservice.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name> namingservice.uno </module-name>
- <component-description>
- <author> Juergen Schmidt </author>
- <name> com.sun.star.comp.stoc.NamingService </name>
- <description>
-The naming service allows the registration and retrieval of objects.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> c++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.uno.NamingService </supported-service>
- <type>com.sun.star.lang.DisposedException</type>
- <type> com.sun.star.lang.XComponent </type>
- <type> com.sun.star.lang.IllegalArgumentException </type>
- <type> com.sun.star.lang.XInitialization </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XComponentContext </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.uno.XNamingService </type>
- </component-description>
- <project-build-dependency> cppuhelper </project-build-dependency>
- <project-build-dependency> cppu </project-build-dependency>
- <project-build-dependency> sal </project-build-dependency>
- <runtime-module-dependency> cppuhelper3$(COM) </runtime-module-dependency>
- <runtime-module-dependency> cppu3 </runtime-module-dependency>
- <runtime-module-dependency> sal3 </runtime-module-dependency>
-</module-description>
diff --git a/stoc/source/proxy_factory/makefile.mk b/stoc/source/proxy_factory/makefile.mk
deleted file mode 100644
index 23146e678..000000000
--- a/stoc/source/proxy_factory/makefile.mk
+++ /dev/null
@@ -1,73 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-
-PRJ=..$/..
-
-PRJNAME=stoc
-TARGET = proxyfac.uno
-ENABLE_EXCEPTIONS=TRUE
-COMP1TYPELIST = proxyfac
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-DLLPRE =
-
-# ------------------------------------------------------------------
-
-.INCLUDE : ..$/cppumaker.mk
-
-SLOFILES= \
- $(SLO)$/proxyfac.obj
-
-SHL1TARGET=$(TARGET)
-SHL1VERSIONMAP = $(SOLARENV)/src/unloadablecomponent.map
-
-SHL1STDLIBS= \
- $(CPPULIB) \
- $(CPPUHELPERLIB) \
- $(SALLIB)
-
-SHL1DEPN=
-SHL1IMPLIB=i$(TARGET)
-SHL1LIBS=$(SLB)$/$(TARGET).lib
-SHL1DEF=$(MISC)$/$(SHL1TARGET).def
-SHL1RPATH=URELIB
-
-DEF1NAME=$(SHL1TARGET)
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
-ALLTAR : $(MISC)/proxyfac.component
-
-$(MISC)/proxyfac.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \
- proxyfac.component
- $(XSLTPROC) --nonet --stringparam uri \
- '$(COMPONENTPREFIX_URE_NATIVE)$(SHL1TARGETN:f)' -o $@ \
- $(SOLARENV)/bin/createcomponent.xslt proxyfac.component
diff --git a/stoc/source/proxy_factory/proxyfac.component b/stoc/source/proxy_factory/proxyfac.component
deleted file mode 100644
index bfe2c9c42..000000000
--- a/stoc/source/proxy_factory/proxyfac.component
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--**********************************************************************
-*
-* 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.
-*
-**********************************************************************-->
-
-<component loader="com.sun.star.loader.SharedLibrary"
- xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.comp.reflection.ProxyFactory">
- <service name="com.sun.star.reflection.ProxyFactory"/>
- </implementation>
-</component>
diff --git a/stoc/source/proxy_factory/proxyfac.cxx b/stoc/source/proxy_factory/proxyfac.cxx
deleted file mode 100644
index 84833f379..000000000
--- a/stoc/source/proxy_factory/proxyfac.cxx
+++ /dev/null
@@ -1,533 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "osl/diagnose.h"
-#include "osl/interlck.h"
-#include "osl/doublecheckedlocking.h"
-#include "osl/mutex.hxx"
-#include "rtl/ref.hxx"
-#include "uno/dispatcher.hxx"
-#include "uno/data.h"
-#include "uno/mapping.hxx"
-#include "uno/environment.hxx"
-#include "typelib/typedescription.hxx"
-#include "cppuhelper/exc_hlp.hxx"
-#include "cppuhelper/implbase2.hxx"
-#include "cppuhelper/implementationentry.hxx"
-#include "cppuhelper/factory.hxx"
-#include "com/sun/star/lang/XServiceInfo.hpp"
-#include "com/sun/star/registry/XRegistryKey.hpp"
-#include "com/sun/star/reflection/XProxyFactory.hpp"
-#include "com/sun/star/uno/RuntimeException.hpp"
-
-#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
-#define SERVICE_NAME "com.sun.star.reflection.ProxyFactory"
-#define IMPL_NAME "com.sun.star.comp.reflection.ProxyFactory"
-
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using ::rtl::OUString;
-
-
-namespace
-{
-
-static rtl_StandardModuleCount g_moduleCount = MODULE_COUNT_INIT;
-
-static OUString proxyfac_getImplementationName()
-{
- return OUSTR(IMPL_NAME);
-}
-
-static Sequence< OUString > proxyfac_getSupportedServiceNames()
-{
- OUString str_name = OUSTR(SERVICE_NAME);
- return Sequence< OUString >( &str_name, 1 );
-}
-
-//==============================================================================
-struct FactoryImpl : public ::cppu::WeakImplHelper2< lang::XServiceInfo,
- reflection::XProxyFactory >
-{
- Environment m_uno_env;
- Environment m_cpp_env;
- Mapping m_uno2cpp;
- Mapping m_cpp2uno;
-
- UnoInterfaceReference binuno_queryInterface(
- UnoInterfaceReference const & unoI,
- typelib_InterfaceTypeDescription * pTypeDescr );
-
- FactoryImpl();
- virtual ~FactoryImpl();
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName()
- throw (RuntimeException);
- virtual sal_Bool SAL_CALL supportsService( const OUString & rServiceName )
- throw (RuntimeException);
- virtual Sequence< OUString > SAL_CALL getSupportedServiceNames()
- throw (RuntimeException);
-
- // XProxyFactory
- virtual Reference< XAggregation > SAL_CALL createProxy(
- Reference< XInterface > const & xTarget )
- throw (RuntimeException);
-};
-
-//______________________________________________________________________________
-UnoInterfaceReference FactoryImpl::binuno_queryInterface(
- UnoInterfaceReference const & unoI,
- typelib_InterfaceTypeDescription * pTypeDescr )
-{
- // init queryInterface() td
- static typelib_TypeDescription * s_pQITD = 0;
- if (s_pQITD == 0)
- {
- ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
- if (s_pQITD == 0)
- {
- typelib_TypeDescription * pTXInterfaceDescr = 0;
- TYPELIB_DANGER_GET(
- &pTXInterfaceDescr,
- ::getCppuType( reinterpret_cast< Reference< XInterface >
- const * >(0) ).getTypeLibType() );
- typelib_TypeDescription * pQITD = 0;
- typelib_typedescriptionreference_getDescription(
- &pQITD, reinterpret_cast< typelib_InterfaceTypeDescription * >(
- pTXInterfaceDescr )->ppAllMembers[ 0 ] );
- TYPELIB_DANGER_RELEASE( pTXInterfaceDescr );
- OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();
- s_pQITD = pQITD;
- }
- }
- else
- {
- OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();
- }
-
- void * args[ 1 ];
- args[ 0 ] = &reinterpret_cast< typelib_TypeDescription * >(
- pTypeDescr )->pWeakRef;
- uno_Any ret_val, exc_space;
- uno_Any * exc = &exc_space;
-
- unoI.dispatch( s_pQITD, &ret_val, args, &exc );
-
- if (exc == 0)
- {
- UnoInterfaceReference ret;
- if (ret_val.pType->eTypeClass == typelib_TypeClass_INTERFACE)
- {
- ret.set( *reinterpret_cast< uno_Interface ** >(ret_val.pData),
- SAL_NO_ACQUIRE );
- typelib_typedescriptionreference_release( ret_val.pType );
- }
- else
- {
- uno_any_destruct( &ret_val, 0 );
- }
- return ret;
- }
- else
- {
- // exception occurred:
- OSL_ENSURE(
- typelib_typedescriptionreference_isAssignableFrom(
- ::getCppuType( reinterpret_cast<
- RuntimeException const * >(0) ).getTypeLibType(),
- exc->pType ),
- "### RuntimeException expected!" );
- Any cpp_exc;
- uno_type_copyAndConvertData(
- &cpp_exc, exc, ::getCppuType( &cpp_exc ).getTypeLibType(),
- m_uno2cpp.get() );
- uno_any_destruct( exc, 0 );
- ::cppu::throwException( cpp_exc );
- OSL_ASSERT( 0 ); // way of no return
- return UnoInterfaceReference(); // for dummy
- }
-}
-
-//==============================================================================
-struct ProxyRoot : public ::cppu::OWeakAggObject
-{
- // XAggregation
- virtual Any SAL_CALL queryAggregation( Type const & rType )
- throw (RuntimeException);
-
- virtual ~ProxyRoot();
- inline ProxyRoot( ::rtl::Reference< FactoryImpl > const & factory,
- Reference< XInterface > const & xTarget );
-
- ::rtl::Reference< FactoryImpl > m_factory;
-
-private:
- UnoInterfaceReference m_target;
-};
-
-//==============================================================================
-struct binuno_Proxy : public uno_Interface
-{
- oslInterlockedCount m_nRefCount;
- ::rtl::Reference< ProxyRoot > m_root;
- UnoInterfaceReference m_target;
- OUString m_oid;
- TypeDescription m_typeDescr;
-
- inline binuno_Proxy(
- ::rtl::Reference< ProxyRoot > const & root,
- UnoInterfaceReference const & target,
- OUString const & oid, TypeDescription const & typeDescr );
-};
-
-extern "C"
-{
-
-//------------------------------------------------------------------------------
-static void SAL_CALL binuno_proxy_free(
- uno_ExtEnvironment * pEnv, void * pProxy )
-{
- (void) pEnv; // avoid warning about unused parameter
- binuno_Proxy * proxy = static_cast< binuno_Proxy * >(
- reinterpret_cast< uno_Interface * >( pProxy ) );
- OSL_ASSERT( proxy->m_root->m_factory->m_uno_env.get()->pExtEnv == pEnv );
- delete proxy;
-}
-
-//------------------------------------------------------------------------------
-static void SAL_CALL binuno_proxy_acquire( uno_Interface * pUnoI )
-{
- binuno_Proxy * that = static_cast< binuno_Proxy * >( pUnoI );
- if (osl_incrementInterlockedCount( &that->m_nRefCount ) == 1)
- {
- // rebirth of zombie
- uno_ExtEnvironment * uno_env =
- that->m_root->m_factory->m_uno_env.get()->pExtEnv;
- OSL_ASSERT( uno_env != 0 );
- (*uno_env->registerProxyInterface)(
- uno_env, reinterpret_cast< void ** >( &pUnoI ), binuno_proxy_free,
- that->m_oid.pData,
- reinterpret_cast< typelib_InterfaceTypeDescription * >(
- that->m_typeDescr.get() ) );
- OSL_ASSERT( that == static_cast< binuno_Proxy * >( pUnoI ) );
- }
-}
-
-//------------------------------------------------------------------------------
-static void SAL_CALL binuno_proxy_release( uno_Interface * pUnoI )
-{
- binuno_Proxy * that = static_cast< binuno_Proxy * >( pUnoI );
- if (osl_decrementInterlockedCount( &that->m_nRefCount ) == 0)
- {
- uno_ExtEnvironment * uno_env =
- that->m_root->m_factory->m_uno_env.get()->pExtEnv;
- OSL_ASSERT( uno_env != 0 );
- (*uno_env->revokeInterface)( uno_env, pUnoI );
- }
-}
-
-//------------------------------------------------------------------------------
-static void SAL_CALL binuno_proxy_dispatch(
- uno_Interface * pUnoI, const typelib_TypeDescription * pMemberType,
- void * pReturn, void * pArgs [], uno_Any ** ppException )
-{
- binuno_Proxy * that = static_cast< binuno_Proxy * >( pUnoI );
- switch (reinterpret_cast< typelib_InterfaceMemberTypeDescription const * >(
- pMemberType )->nPosition)
- {
- case 0: // queryInterface()
- {
- try
- {
- Type const & rType =
- *reinterpret_cast< Type const * >( pArgs[ 0 ] );
- Any ret( that->m_root->queryInterface( rType ) );
- uno_type_copyAndConvertData(
- pReturn, &ret, ::getCppuType( &ret ).getTypeLibType(),
- that->m_root->m_factory->m_cpp2uno.get() );
- *ppException = 0; // no exc
- }
- catch (RuntimeException &)
- {
- Any exc( ::cppu::getCaughtException() );
- uno_type_any_constructAndConvert(
- *ppException, const_cast< void * >(exc.getValue()),
- exc.getValueTypeRef(),
- that->m_root->m_factory->m_cpp2uno.get() );
- }
- break;
- }
- case 1: // acquire()
- binuno_proxy_acquire( pUnoI );
- *ppException = 0; // no exc
- break;
- case 2: // release()
- binuno_proxy_release( pUnoI );
- *ppException = 0; // no exc
- break;
- default:
- that->m_target.dispatch( pMemberType, pReturn, pArgs, ppException );
- break;
- }
-}
-
-}
-
-//______________________________________________________________________________
-inline binuno_Proxy::binuno_Proxy(
- ::rtl::Reference< ProxyRoot > const & root,
- UnoInterfaceReference const & target,
- OUString const & oid, TypeDescription const & typeDescr )
- : m_nRefCount( 1 ),
- m_root( root ),
- m_target( target ),
- m_oid( oid ),
- m_typeDescr( typeDescr )
-{
- uno_Interface::acquire = binuno_proxy_acquire;
- uno_Interface::release = binuno_proxy_release;
- uno_Interface::pDispatcher = binuno_proxy_dispatch;
-}
-
-//______________________________________________________________________________
-ProxyRoot::~ProxyRoot()
-{
-}
-
-//______________________________________________________________________________
-inline ProxyRoot::ProxyRoot(
- ::rtl::Reference< FactoryImpl > const & factory,
- Reference< XInterface > const & xTarget )
- : m_factory( factory )
-{
- m_factory->m_cpp2uno.mapInterface(
- reinterpret_cast< void ** >( &m_target.m_pUnoI ), xTarget.get(),
- ::getCppuType( &xTarget ) );
- OSL_ENSURE( m_target.is(), "### mapping interface failed!" );
-}
-
-//______________________________________________________________________________
-Any ProxyRoot::queryAggregation( Type const & rType )
- throw (RuntimeException)
-{
- Any ret( OWeakAggObject::queryAggregation( rType ) );
- if (! ret.hasValue())
- {
- typelib_TypeDescription * pTypeDescr = 0;
- TYPELIB_DANGER_GET( &pTypeDescr, rType.getTypeLibType() );
- try
- {
- Reference< XInterface > xProxy;
- uno_ExtEnvironment * cpp_env = m_factory->m_cpp_env.get()->pExtEnv;
- OSL_ASSERT( cpp_env != 0 );
-
- // mind a new delegator, calculate current root:
- Reference< XInterface > xRoot(
- static_cast< OWeakObject * >(this), UNO_QUERY_THROW );
- OUString oid;
- (*cpp_env->getObjectIdentifier)( cpp_env, &oid.pData, xRoot.get() );
- OSL_ASSERT( oid.getLength() > 0 );
-
- (*cpp_env->getRegisteredInterface)(
- cpp_env, reinterpret_cast< void ** >( &xProxy ),
- oid.pData, reinterpret_cast<
- typelib_InterfaceTypeDescription * >(pTypeDescr) );
- if (! xProxy.is())
- {
- // perform query on target:
- UnoInterfaceReference proxy_target(
- m_factory->binuno_queryInterface(
- m_target, reinterpret_cast<
- typelib_InterfaceTypeDescription * >(pTypeDescr) ) );
- if (proxy_target.is())
- {
- // ensure root's object entries:
- UnoInterfaceReference root;
- m_factory->m_cpp2uno.mapInterface(
- reinterpret_cast< void ** >( &root.m_pUnoI ),
- xRoot.get(), ::getCppuType( &xRoot ) );
-
- UnoInterfaceReference proxy(
- // ref count initially 1:
- new binuno_Proxy( this, proxy_target, oid, pTypeDescr ),
- SAL_NO_ACQUIRE );
- uno_ExtEnvironment * uno_env =
- m_factory->m_uno_env.get()->pExtEnv;
- OSL_ASSERT( uno_env != 0 );
- (*uno_env->registerProxyInterface)(
- uno_env, reinterpret_cast< void ** >( &proxy.m_pUnoI ),
- binuno_proxy_free, oid.pData,
- reinterpret_cast< typelib_InterfaceTypeDescription * >(
- pTypeDescr ) );
-
- m_factory->m_uno2cpp.mapInterface(
- reinterpret_cast< void ** >( &xProxy ),
- proxy.get(), pTypeDescr );
- }
- }
- if (xProxy.is())
- ret.setValue( &xProxy, pTypeDescr );
- }
- catch (...) // finally
- {
- TYPELIB_DANGER_RELEASE( pTypeDescr );
- throw;
- }
- TYPELIB_DANGER_RELEASE( pTypeDescr );
- }
- return ret;
-}
-
-//##############################################################################
-
-//______________________________________________________________________________
-FactoryImpl::FactoryImpl()
-{
- OUString uno = OUSTR(UNO_LB_UNO);
- OUString cpp = OUSTR(CPPU_CURRENT_LANGUAGE_BINDING_NAME);
-
- uno_getEnvironment(
- reinterpret_cast< uno_Environment ** >( &m_uno_env ), uno.pData, 0 );
- OSL_ENSURE( m_uno_env.is(), "### cannot get binary uno env!" );
-
- uno_getEnvironment(
- reinterpret_cast< uno_Environment ** >( &m_cpp_env ), cpp.pData, 0 );
- OSL_ENSURE( m_cpp_env.is(), "### cannot get C++ uno env!" );
-
- uno_getMapping(
- reinterpret_cast< uno_Mapping ** >( &m_uno2cpp ),
- m_uno_env.get(), m_cpp_env.get(), 0 );
- OSL_ENSURE( m_uno2cpp.is(), "### cannot get bridge uno <-> C++!" );
-
- uno_getMapping(
- reinterpret_cast< uno_Mapping ** >( &m_cpp2uno ),
- m_cpp_env.get(), m_uno_env.get(), 0 );
- OSL_ENSURE( m_cpp2uno.is(), "### cannot get bridge C++ <-> uno!" );
-
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-}
-
-//______________________________________________________________________________
-FactoryImpl::~FactoryImpl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XProxyFactory
-//______________________________________________________________________________
-Reference< XAggregation > FactoryImpl::createProxy(
- Reference< XInterface > const & xTarget )
- throw (RuntimeException)
-{
- return new ProxyRoot( this, xTarget );
-}
-
-// XServiceInfo
-//______________________________________________________________________________
-OUString FactoryImpl::getImplementationName()
- throw (RuntimeException)
-{
- return proxyfac_getImplementationName();;
-}
-
-//______________________________________________________________________________
-sal_Bool FactoryImpl::supportsService( const OUString & rServiceName )
- throw (RuntimeException)
-{
- Sequence< OUString > const & rSNL = getSupportedServiceNames();
- OUString const * pArray = rSNL.getConstArray();
- for ( sal_Int32 nPos = rSNL.getLength(); nPos--; )
- {
- if (rServiceName.equals( pArray[ nPos ] ))
- return true;
- }
- return false;
-}
-
-//______________________________________________________________________________
-Sequence< OUString > FactoryImpl::getSupportedServiceNames()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return proxyfac_getSupportedServiceNames();
-}
-
-//==============================================================================
-static Reference< XInterface > SAL_CALL proxyfac_create(
- Reference< XComponentContext > const & )
- throw (Exception)
-{
- Reference< XInterface > xRet;
- {
- ::osl::MutexGuard guard( ::osl::Mutex::getGlobalMutex() );
- static WeakReference < XInterface > rwInstance;
- xRet = rwInstance;
-
- if (! xRet.is())
- {
- xRet = static_cast< ::cppu::OWeakObject * >(new FactoryImpl);
- rwInstance = xRet;
- }
- }
- return xRet;
-}
-
-static ::cppu::ImplementationEntry g_entries [] =
-{
- {
- proxyfac_create, proxyfac_getImplementationName,
- proxyfac_getSupportedServiceNames, ::cppu::createSingleComponentFactory,
- &g_moduleCount.modCnt, 0
- },
- { 0, 0, 0, 0, 0, 0 }
-};
-
-}
-
-extern "C"
-{
-
-sal_Bool SAL_CALL component_canUnload( TimeValue * pTime )
-{
- return g_moduleCount.canUnload( &g_moduleCount, pTime );
-}
-
-SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
- const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey )
-{
- return ::cppu::component_getFactoryHelper(
- pImplName, pServiceManager, pRegistryKey, g_entries );
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/proxy_factory/proxyfac.xml b/stoc/source/proxy_factory/proxyfac.xml
deleted file mode 100644
index 0bad02b30..000000000
--- a/stoc/source/proxy_factory/proxyfac.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name> proxyfac.uno </module-name>
- <component-description>
- <author> Daniel Boelzle </author>
- <name> com.sun.star.comp.stoc.ProxyFactory </name>
- <description>
-Specifies a factory object to create proxy objects.
-These proxy object represent a given target object and can be
-be aggregated. The proxy objects act UNO conform and do NOT provide
-original target interfaces on queryInterface() calls.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> C++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.reflection.ProxyFactory </supported-service>
- <service-dependency> ... </service-dependency>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.registry.XSimpleRegistry </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.uno.XComponentContext </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.reflection.XProxyFactory </type>
- </component-description>
- <project-build-dependency> cppuhelper </project-build-dependency>
- <project-build-dependency> cppu </project-build-dependency>
- <project-build-dependency> sal </project-build-dependency>
- <runtime-module-dependency> cppuhelper2$(COM) </runtime-module-dependency>
- <runtime-module-dependency> cppu2 </runtime-module-dependency>
- <runtime-module-dependency> sal2 </runtime-module-dependency>
-</module-description>
diff --git a/stoc/source/registry_tdprovider/base.hxx b/stoc/source/registry_tdprovider/base.hxx
deleted file mode 100644
index a2669ccfc..000000000
--- a/stoc/source/registry_tdprovider/base.hxx
+++ /dev/null
@@ -1,649 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 _STOC_RDBTDP_BASE_HXX
-#define _STOC_RDBTDP_BASE_HXX
-
-#include <osl/diagnose.h>
-#include <osl/mutex.hxx>
-#include <cppuhelper/weak.hxx>
-#include <cppuhelper/implbase1.hxx>
-#include <cppuhelper/implbase2.hxx>
-#include <cppuhelper/implementationentry.hxx>
-
-#include "registry/refltype.hxx"
-
-#include <list>
-#include <memory>
-#include <vector>
-
-#include <com/sun/star/reflection/XTypeDescription.hpp>
-#include <com/sun/star/reflection/XTypeDescriptionEnumerationAccess.hpp>
-#include <com/sun/star/reflection/XInterfaceTypeDescription.hpp>
-#include <com/sun/star/reflection/XInterfaceTypeDescription2.hpp>
-#include <com/sun/star/reflection/XCompoundTypeDescription.hpp>
-#include <com/sun/star/reflection/XConstantTypeDescription.hpp>
-#include <com/sun/star/reflection/XConstantsTypeDescription.hpp>
-#include <com/sun/star/reflection/XEnumTypeDescription.hpp>
-#include <com/sun/star/reflection/XIndirectTypeDescription.hpp>
-#include <com/sun/star/reflection/XServiceConstructorDescription.hpp>
-#include <com/sun/star/reflection/XServiceTypeDescription.hpp>
-#include <com/sun/star/reflection/XServiceTypeDescription2.hpp>
-#include <com/sun/star/reflection/XSingletonTypeDescription2.hpp>
-#include <com/sun/star/reflection/XModuleTypeDescription.hpp>
-#include <com/sun/star/reflection/XPublished.hpp>
-#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/registry/XRegistryKey.hpp>
-
-using namespace std;
-using namespace osl;
-using namespace cppu;
-using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::container;
-using namespace com::sun::star::reflection;
-
-using ::rtl::OUString;
-
-//--------------------------------------------------------------------------------------------------
-
-extern rtl_StandardModuleCount g_moduleCount;
-
-namespace stoc_rdbtdp
-{
-
-com::sun::star::uno::Reference< XTypeDescription > resolveTypedefs(
- com::sun::star::uno::Reference< XTypeDescription > const & type);
-
-
-::osl::Mutex & getMutex();
-
-//--------------------------------------------------------------------------------------------------
-
-typedef ::std::list< ::com::sun::star::uno::Reference<
- ::com::sun::star::registry::XRegistryKey > > RegistryKeyList;
-
-//--------------------------------------------------------------------------------------------------
-
-class RegistryKeyCloser
-{
-public:
- RegistryKeyCloser( const ::com::sun::star::uno::Reference<
- ::com::sun::star::registry::XRegistryKey > & xKey )
- : m_xKey( xKey ) {}
- ~RegistryKeyCloser()
- { if ( m_xKey.is() ) { try { if ( m_xKey->isValid() ) m_xKey->closeKey(); } catch (...) {} } }
-
- void reset() { m_xKey.clear(); }
-private:
- ::com::sun::star::uno::Reference<
- ::com::sun::star::registry::XRegistryKey > m_xKey;
-};
-
-//--------------------------------------------------------------------------------------------------
-
-// helper to create XTypeDescription instances using typereg::Reader
-// (used from Type Provider and Type Description Enumeration implementation)
-::com::sun::star::uno::Reference<
- ::com::sun::star::reflection::XTypeDescription >
-createTypeDescription(
- const ::com::sun::star::uno::Sequence< sal_Int8 > & rData,
- const ::com::sun::star::uno::Reference<
- ::com::sun::star::container::XHierarchicalNameAccess > & xNameAccess,
- bool bReturnEmptyRefForUnknownType );
-
-
-//--------------------------------------------------------------------------------------------------
-inline sal_Int32 getRTValueAsInt32( const RTConstValue & rVal )
-{
- switch (rVal.m_type)
- {
- case RT_TYPE_BYTE:
- return rVal.m_value.aByte;
- case RT_TYPE_INT16:
- return rVal.m_value.aShort;
- case RT_TYPE_UINT16:
- return rVal.m_value.aUShort;
- case RT_TYPE_INT32:
- return rVal.m_value.aLong;
- case RT_TYPE_UINT32:
- return rVal.m_value.aULong;
- default:
- OSL_FAIL( "### unexpected value type!" );
- return 0;
- }
-}
-//--------------------------------------------------------------------------------------------------
-inline Any getRTValue( const RTConstValue & rVal )
-{
- switch (rVal.m_type)
- {
- case RT_TYPE_BOOL:
- return Any( &rVal.m_value.aBool, ::getCppuBooleanType() );
- case RT_TYPE_BYTE:
- return Any( &rVal.m_value.aByte, ::getCppuType( (const sal_Int8 *)0 ) );
- case RT_TYPE_INT16:
- return Any( &rVal.m_value.aShort, ::getCppuType( (const sal_Int16 *)0 ) );
- case RT_TYPE_UINT16:
- return Any( &rVal.m_value.aUShort, ::getCppuType( (const sal_uInt16 *)0 ) );
- case RT_TYPE_INT32:
- return Any( &rVal.m_value.aLong, ::getCppuType( (const sal_Int32 *)0 ) );
- case RT_TYPE_UINT32:
- return Any( &rVal.m_value.aULong, ::getCppuType( (const sal_uInt32 *)0 ) );
- case RT_TYPE_INT64:
- return Any( &rVal.m_value.aHyper, ::getCppuType( (const sal_Int64 *)0 ) );
- case RT_TYPE_UINT64:
- return Any( &rVal.m_value.aUHyper, ::getCppuType( (const sal_uInt64 *)0 ) );
- case RT_TYPE_FLOAT:
- return Any( &rVal.m_value.aFloat, ::getCppuType( (const float *)0 ) );
- case RT_TYPE_DOUBLE:
- return Any( &rVal.m_value.aDouble, ::getCppuType( (const double *)0 ) );
- case RT_TYPE_STRING:
- {
- OUString aStr( rVal.m_value.aString );
- return Any( &aStr, ::getCppuType( (const OUString *)0 ) );
- }
- default:
- OSL_FAIL( "### unexpected RTValue!" );
- return Any();
- }
-}
-
-//==================================================================================================
-class TypeDescriptionImpl : public WeakImplHelper1< XTypeDescription >
-{
- TypeClass _eTypeClass;
- OUString _aName;
-
-public:
- TypeDescriptionImpl( TypeClass eTypeClass, const OUString & rName )
- : _eTypeClass( eTypeClass )
- , _aName( rName )
- {
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- }
- virtual ~TypeDescriptionImpl();
-
- // XTypeDescription
- virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
-};
-
-//==================================================================================================
-class InterfaceTypeDescriptionImpl:
- public WeakImplHelper2< XInterfaceTypeDescription2, XPublished >
-{
- com::sun::star::uno::Reference< XHierarchicalNameAccess > _xTDMgr;
- Sequence< sal_Int8 > _aBytes;
-
- OUString _aName;
-
- Sequence< OUString > _aBaseTypes;
- Sequence< com::sun::star::uno::Reference< XTypeDescription > > _xBaseTDs;
- Sequence< OUString > _aOptionalBaseTypes;
- Sequence< com::sun::star::uno::Reference< XTypeDescription > >
- _xOptionalBaseTDs;
-
- sal_Int32 _nBaseOffset;
- Sequence<
- com::sun::star::uno::Reference< XInterfaceMemberTypeDescription > >
- _members;
- bool _membersInit;
-
- bool _published;
-
- void checkInterfaceType(
- com::sun::star::uno::Reference< XTypeDescription > const & type);
-
-public:
- InterfaceTypeDescriptionImpl(
- const com::sun::star::uno::Reference< XHierarchicalNameAccess > &
- xTDMgr,
- const OUString & rName, const Sequence< OUString > & rBaseTypes,
- const Sequence< OUString > & rOptionalBaseTypes,
- const Sequence< sal_Int8 > & rBytes, bool published );
- virtual ~InterfaceTypeDescriptionImpl();
-
- // XTypeDescription
- virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
-
- // XInterfaceTypeDescription2
- virtual Uik SAL_CALL getUik() throw(::com::sun::star::uno::RuntimeException);
- virtual com::sun::star::uno::Reference< XTypeDescription > SAL_CALL
- getBaseType() throw(::com::sun::star::uno::RuntimeException);
- virtual
- Sequence<
- com::sun::star::uno::Reference< XInterfaceMemberTypeDescription > >
- SAL_CALL getMembers() throw(::com::sun::star::uno::RuntimeException);
-
- virtual Sequence< com::sun::star::uno::Reference< XTypeDescription > >
- SAL_CALL getBaseTypes() throw (RuntimeException);
-
- virtual Sequence< com::sun::star::uno::Reference< XTypeDescription > >
- SAL_CALL getOptionalBaseTypes() throw (RuntimeException);
-
- virtual sal_Bool SAL_CALL isPublished()
- throw (::com::sun::star::uno::RuntimeException)
- { return _published; }
-};
-
-//==================================================================================================
-class CompoundTypeDescriptionImpl:
- public WeakImplHelper2< XCompoundTypeDescription, XPublished >
-{
- com::sun::star::uno::Reference< XHierarchicalNameAccess > _xTDMgr;
- TypeClass _eTypeClass;
- Sequence< sal_Int8 > _aBytes;
- OUString _aName;
-
- OUString _aBaseType;
- com::sun::star::uno::Reference< XTypeDescription > _xBaseTD;
-
- Sequence< com::sun::star::uno::Reference< XTypeDescription > > * _pMembers;
- Sequence< OUString > * _pMemberNames;
-
- bool _published;
-
-public:
- CompoundTypeDescriptionImpl(
- const com::sun::star::uno::Reference< XHierarchicalNameAccess > &
- xTDMgr,
- TypeClass eTypeClass,
- const OUString & rName, const OUString & rBaseName,
- const Sequence< sal_Int8 > & rBytes,
- bool published )
- : _xTDMgr( xTDMgr )
- , _eTypeClass( eTypeClass )
- , _aBytes( rBytes )
- , _aName( rName )
- , _aBaseType( rBaseName )
- , _pMembers( 0 )
- , _pMemberNames( 0 )
- , _published( published )
- {
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- }
- virtual ~CompoundTypeDescriptionImpl();
-
- // XTypeDescription
- virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
-
- // XCompoundTypeDescription
- virtual com::sun::star::uno::Reference< XTypeDescription > SAL_CALL
- getBaseType() throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< com::sun::star::uno::Reference< XTypeDescription > >
- SAL_CALL getMemberTypes() throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< OUString > SAL_CALL getMemberNames() throw(::com::sun::star::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isPublished()
- throw (::com::sun::star::uno::RuntimeException)
- { return _published; }
-};
-
-//==================================================================================================
-class EnumTypeDescriptionImpl:
- public WeakImplHelper2< XEnumTypeDescription, XPublished >
-{
- com::sun::star::uno::Reference< XHierarchicalNameAccess > _xTDMgr;
- Sequence< sal_Int8 > _aBytes;
-
- OUString _aName;
- sal_Int32 _nDefaultValue;
-
- Sequence< OUString > * _pEnumNames;
- Sequence< sal_Int32 > * _pEnumValues;
-
- bool _published;
-
-public:
- EnumTypeDescriptionImpl(
- const com::sun::star::uno::Reference< XHierarchicalNameAccess > &
- xTDMgr,
- const OUString & rName, sal_Int32 nDefaultValue,
- const Sequence< sal_Int8 > & rBytes, bool published )
- : _xTDMgr( xTDMgr )
- , _aBytes( rBytes )
- , _aName( rName )
- , _nDefaultValue( nDefaultValue )
- , _pEnumNames( 0 )
- , _pEnumValues( 0 )
- , _published( published )
- {
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- }
- virtual ~EnumTypeDescriptionImpl();
-
- // XTypeDescription
- virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
-
- // XEnumTypeDescription
- virtual sal_Int32 SAL_CALL getDefaultEnumValue() throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< OUString > SAL_CALL getEnumNames() throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< sal_Int32 > SAL_CALL getEnumValues() throw(::com::sun::star::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isPublished()
- throw (::com::sun::star::uno::RuntimeException)
- { return _published; }
-};
-
-//==================================================================================================
-class TypedefTypeDescriptionImpl:
- public WeakImplHelper2< XIndirectTypeDescription, XPublished >
-{
- com::sun::star::uno::Reference< XHierarchicalNameAccess > _xTDMgr;
- OUString _aName;
-
- OUString _aRefName;
- com::sun::star::uno::Reference< XTypeDescription > _xRefTD;
-
- bool _published;
-
-public:
- TypedefTypeDescriptionImpl(
- const com::sun::star::uno::Reference< XHierarchicalNameAccess > &
- xTDMgr,
- const OUString & rName, const OUString & rRefName, bool published )
- : _xTDMgr( xTDMgr )
- , _aName( rName )
- , _aRefName( rRefName )
- , _published( published )
- {
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- }
- virtual ~TypedefTypeDescriptionImpl();
-
- // XTypeDescription
- virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
-
- // XIndirectTypeDescription
- virtual com::sun::star::uno::Reference< XTypeDescription > SAL_CALL
- getReferencedType() throw(::com::sun::star::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isPublished()
- throw (::com::sun::star::uno::RuntimeException)
- { return _published; }
-};
-
-//==================================================================================================
-class ServiceTypeDescriptionImpl:
- public WeakImplHelper2< XServiceTypeDescription2, XPublished >
-{
- OUString _aName;
- Sequence< sal_Int8 > _aBytes;
- com::sun::star::uno::Reference< XHierarchicalNameAccess > _xTDMgr;
- bool _bInitReferences;
-
- com::sun::star::uno::Reference< XTypeDescription > _xInterfaceTD;
- std::auto_ptr<
- Sequence<
- com::sun::star::uno::Reference< XServiceConstructorDescription > > >
- _pCtors;
- Sequence< com::sun::star::uno::Reference< XServiceTypeDescription > >
- _aMandatoryServices;
- Sequence< com::sun::star::uno::Reference< XServiceTypeDescription > >
- _aOptionalServices;
- Sequence< com::sun::star::uno::Reference< XInterfaceTypeDescription > >
- _aMandatoryInterfaces;
- Sequence< com::sun::star::uno::Reference< XInterfaceTypeDescription > >
- _aOptionalInterfaces;
- std::auto_ptr<
- Sequence< com::sun::star::uno::Reference< XPropertyTypeDescription > > >
- _pProps;
-
- bool _published;
-
-public:
- ServiceTypeDescriptionImpl(
- const com::sun::star::uno::Reference< XHierarchicalNameAccess > &
- xTDMgr,
- const OUString & rName, const Sequence< sal_Int8 > & rBytes,
- bool published)
- : _aName( rName ), _aBytes( rBytes ), _xTDMgr( xTDMgr ),
- _bInitReferences( false ), _published( published )
- {
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- }
- virtual ~ServiceTypeDescriptionImpl();
-
- // XTypeDescription
- virtual TypeClass SAL_CALL
- getTypeClass()
- throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL
- getName()
- throw(::com::sun::star::uno::RuntimeException);
-
- // XServiceTypeDescription
- virtual ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::Reference<
- ::com::sun::star::reflection::XServiceTypeDescription > > SAL_CALL
- getMandatoryServices()
- throw (::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::Reference<
- ::com::sun::star::reflection::XServiceTypeDescription > > SAL_CALL
- getOptionalServices()
- throw (::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::Reference<
- ::com::sun::star::reflection::XInterfaceTypeDescription > > SAL_CALL
- getMandatoryInterfaces()
- throw (::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::Reference<
- ::com::sun::star::reflection::XInterfaceTypeDescription > > SAL_CALL
- getOptionalInterfaces()
- throw (::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::Reference<
- ::com::sun::star::reflection::XPropertyTypeDescription > > SAL_CALL
- getProperties()
- throw (::com::sun::star::uno::RuntimeException);
-
- // XServiceTypeDescription2
- virtual sal_Bool SAL_CALL isSingleInterfaceBased()
- throw (::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Reference< XTypeDescription > SAL_CALL
- getInterface() throw (::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::Reference<
- ::com::sun::star::reflection::XServiceConstructorDescription > >
- SAL_CALL getConstructors()
- throw (::com::sun::star::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isPublished()
- throw (::com::sun::star::uno::RuntimeException)
- { return _published; }
-
-private:
- void getReferences()
- throw (::com::sun::star::uno::RuntimeException);
-};
-
-//==================================================================================================
-class ModuleTypeDescriptionImpl : public WeakImplHelper1< XModuleTypeDescription >
-{
- OUString _aName;
- com::sun::star::uno::Reference< XTypeDescriptionEnumerationAccess > _xTDMgr;
-
- Sequence< com::sun::star::uno::Reference< XTypeDescription > > * _pMembers;
-
-public:
- ModuleTypeDescriptionImpl(
- const com::sun::star::uno::Reference<
- XTypeDescriptionEnumerationAccess > & xTDMgr,
- const OUString & rName )
- : _aName( rName ), _xTDMgr( xTDMgr ), _pMembers( 0 )
- {
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- }
- virtual ~ModuleTypeDescriptionImpl();
-
- // XTypeDescription
- virtual TypeClass SAL_CALL
- getTypeClass()
- throw( ::com::sun::star::uno::RuntimeException );
- virtual OUString SAL_CALL
- getName()
- throw( ::com::sun::star::uno::RuntimeException );
-
- // XModuleTypeDescription
- virtual ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::Reference<
- ::com::sun::star::reflection::XTypeDescription > > SAL_CALL
- getMembers()
- throw ( ::com::sun::star::uno::RuntimeException );
-};
-
-//==================================================================================================
-class ConstantTypeDescriptionImpl : public WeakImplHelper1< XConstantTypeDescription >
-{
- OUString _aName;
- Any _aValue;
-
-public:
- ConstantTypeDescriptionImpl( const OUString & rName,
- const Any & rValue )
- : _aName( rName ), _aValue( rValue )
- {
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- }
- virtual ~ConstantTypeDescriptionImpl();
-
- // XTypeDescription
- virtual TypeClass SAL_CALL
- getTypeClass()
- throw( ::com::sun::star::uno::RuntimeException );
- virtual OUString SAL_CALL
- getName()
- throw( ::com::sun::star::uno::RuntimeException );
-
- // XConstantTypeDescription
- virtual ::com::sun::star::uno::Any SAL_CALL
- getConstantValue()
- throw ( ::com::sun::star::uno::RuntimeException );
-};
-
-//==================================================================================================
-class ConstantsTypeDescriptionImpl:
- public WeakImplHelper2< XConstantsTypeDescription, XPublished >
-{
- OUString _aName;
- Sequence< sal_Int8 > _aBytes;
- Sequence< com::sun::star::uno::Reference< XConstantTypeDescription > > *
- _pMembers;
-
- bool _published;
-
-public:
- ConstantsTypeDescriptionImpl( const OUString & rName,
- const Sequence< sal_Int8 > & rBytes,
- bool published )
- : _aName( rName ), _aBytes( rBytes), _pMembers( 0 ), _published( published )
- {
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- }
- virtual ~ConstantsTypeDescriptionImpl();
-
- // XTypeDescription
- virtual TypeClass SAL_CALL
- getTypeClass()
- throw( ::com::sun::star::uno::RuntimeException );
- virtual OUString SAL_CALL
- getName()
- throw( ::com::sun::star::uno::RuntimeException );
-
- // XConstantsTypeDescription
- virtual
- Sequence< com::sun::star::uno::Reference< XConstantTypeDescription > >
- SAL_CALL getConstants() throw ( RuntimeException );
-
- virtual sal_Bool SAL_CALL isPublished()
- throw (::com::sun::star::uno::RuntimeException)
- { return _published; }
-};
-
-//==================================================================================================
-class SingletonTypeDescriptionImpl:
- public WeakImplHelper2< XSingletonTypeDescription2, XPublished >
-{
- OUString _aName;
- OUString _aBaseName;
- com::sun::star::uno::Reference< XHierarchicalNameAccess > _xTDMgr;
- com::sun::star::uno::Reference< XTypeDescription > _xInterfaceTD;
- com::sun::star::uno::Reference< XServiceTypeDescription > _xServiceTD;
-
- bool _published;
-
- void init();
-
-public:
- SingletonTypeDescriptionImpl(
- const com::sun::star::uno::Reference< XHierarchicalNameAccess > &
- xTDMgr,
- const OUString & rName, const OUString & rBaseName, bool published )
- : _aName( rName ), _aBaseName( rBaseName), _xTDMgr( xTDMgr ),
- _published( published )
- {
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- }
- virtual ~SingletonTypeDescriptionImpl();
-
- // XTypeDescription
- virtual TypeClass SAL_CALL
- getTypeClass()
- throw( ::com::sun::star::uno::RuntimeException );
- virtual OUString SAL_CALL
- getName()
- throw( ::com::sun::star::uno::RuntimeException );
-
- // XSingletonTypeDescription
- virtual com::sun::star::uno::Reference< XServiceTypeDescription > SAL_CALL
- getService() throw ( ::com::sun::star::uno::RuntimeException );
-
- // XSingletonTypeDescription2
- virtual sal_Bool SAL_CALL isInterfaceBased()
- throw (::com::sun::star::uno::RuntimeException);
- virtual com::sun::star::uno::Reference< XTypeDescription > SAL_CALL
- getInterface() throw (::com::sun::star::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isPublished()
- throw (::com::sun::star::uno::RuntimeException)
- { return _published; }
-};
-
-}
-
-#endif /* _STOC_RDBTDP_BASE_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/functiondescription.cxx b/stoc/source/registry_tdprovider/functiondescription.cxx
deleted file mode 100644
index 99a070f77..000000000
--- a/stoc/source/registry_tdprovider/functiondescription.cxx
+++ /dev/null
@@ -1,118 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "functiondescription.hxx"
-
-#include "com/sun/star/container/NoSuchElementException.hpp"
-#include "com/sun/star/container/XHierarchicalNameAccess.hpp"
-#include "com/sun/star/reflection/XCompoundTypeDescription.hpp"
-#include "com/sun/star/uno/Any.hxx"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/RuntimeException.hpp"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "com/sun/star/uno/TypeClass.hpp"
-#include "com/sun/star/uno/XInterface.hpp"
-#include "cppuhelper/implbase1.hxx"
-#include "osl/diagnose.h"
-#include "osl/mutex.hxx"
-#include "registry/reader.hxx"
-#include "registry/version.h"
-#include "rtl/ustring.h"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-
-namespace css = com::sun::star;
-
-using stoc::registry_tdprovider::FunctionDescription;
-
-FunctionDescription::FunctionDescription(
- css::uno::Reference< css::container::XHierarchicalNameAccess > const &
- manager,
- com::sun::star::uno::Sequence< sal_Int8 > const & bytes,
- sal_uInt16 index):
- m_manager(manager), m_bytes(bytes), m_index(index), m_exceptionsInit(false)
-{}
-
-FunctionDescription::~FunctionDescription() {}
-
-css::uno::Sequence<
- css::uno::Reference< css::reflection::XCompoundTypeDescription > >
-FunctionDescription::getExceptions() const {
- {
- osl::MutexGuard guard(m_mutex);
- if (m_exceptionsInit) {
- return m_exceptions;
- }
- }
- typereg::Reader reader(getReader());
- sal_uInt16 n = reader.getMethodExceptionCount(m_index);
- css::uno::Sequence<
- css::uno::Reference< css::reflection::XCompoundTypeDescription > >
- exceptions(n);
- for (sal_uInt16 i = 0; i < n; ++i) {
- rtl::OUString name(
- reader.getMethodExceptionTypeName(m_index, i).replace('/', '.'));
- css::uno::Any any;
- try {
- any = m_manager->getByHierarchicalName(name);
- } catch (css::container::NoSuchElementException & e) {
- throw new css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.container.NoSuchElementException: "))
- + e.Message),
- css::uno::Reference< css::uno::XInterface >()); //TODO
- }
- if (!(any >>= exceptions[i])
- || exceptions[i]->getTypeClass() != css::uno::TypeClass_EXCEPTION)
- {
- throw new css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("not an exception type: "))
- + name),
- css::uno::Reference< css::uno::XInterface >()); //TODO
- }
- OSL_ASSERT(exceptions[i].is());
- }
- osl::MutexGuard guard(m_mutex);
- if (!m_exceptionsInit) {
- m_exceptions = exceptions;
- m_exceptionsInit = true;
- }
- return m_exceptions;
-}
-
-typereg::Reader FunctionDescription::getReader() const {
- return typereg::Reader(
- m_bytes.getConstArray(), m_bytes.getLength(), false, TYPEREG_VERSION_1);
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/functiondescription.hxx b/stoc/source/registry_tdprovider/functiondescription.hxx
deleted file mode 100644
index 6b7d890af..000000000
--- a/stoc/source/registry_tdprovider/functiondescription.hxx
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 INCLUDED_stoc_source_registry_tdprovider_functiondescription_hxx
-#define INCLUDED_stoc_source_registry_tdprovider_functiondescription_hxx
-
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "osl/mutex.hxx"
-#include "sal/types.h"
-
-namespace com { namespace sun { namespace star {
- namespace container {
- class XHierarchicalNameAccess;
- }
- namespace reflection {
- class XCompoundTypeDescription;
- }
-} } }
-namespace typereg { class Reader; }
-
-namespace stoc { namespace registry_tdprovider {
-
-class FunctionDescription {
-public:
- FunctionDescription(
- com::sun::star::uno::Reference<
- com::sun::star::container::XHierarchicalNameAccess > const &
- manager,
- com::sun::star::uno::Sequence< sal_Int8 > const & bytes,
- sal_uInt16 index);
-
- ~FunctionDescription();
-
- com::sun::star::uno::Sequence<
- com::sun::star::uno::Reference<
- com::sun::star::reflection::XCompoundTypeDescription > >
- getExceptions() const;
-
-protected:
- typereg::Reader getReader() const;
-
- com::sun::star::uno::Reference<
- com::sun::star::container::XHierarchicalNameAccess > m_manager;
- com::sun::star::uno::Sequence< sal_Int8 > m_bytes;
- sal_uInt16 m_index;
-
- mutable osl::Mutex m_mutex;
- mutable com::sun::star::uno::Sequence<
- com::sun::star::uno::Reference<
- com::sun::star::reflection::XCompoundTypeDescription > >
- m_exceptions;
- mutable bool m_exceptionsInit;
-
-private:
- FunctionDescription(FunctionDescription &); // not implemented
- void operator =(FunctionDescription); // not implemented
-};
-
-} }
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/makefile.mk b/stoc/source/registry_tdprovider/makefile.mk
deleted file mode 100644
index 6b5970154..000000000
--- a/stoc/source/registry_tdprovider/makefile.mk
+++ /dev/null
@@ -1,61 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME= stoc
-TARGET = regtypeprov
-ENABLE_EXCEPTIONS=TRUE
-BOOTSTRAP_SERVICE=TRUE
-UNOUCROUT= $(OUT)$/inc$/bootstrap
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-
-# ------------------------------------------------------------------
-
-SLOFILES= \
- $(SLO)$/tdprovider.obj \
- $(SLO)$/td.obj \
- $(SLO)$/tdef.obj \
- $(SLO)$/tdenum.obj \
- $(SLO)$/tdcomp.obj \
- $(SLO)$/tdconsts.obj \
- $(SLO)$/tdiface.obj \
- $(SLO)$/tdmodule.obj \
- $(SLO)$/tdprop.obj \
- $(SLO)$/tdservice.obj \
- $(SLO)$/tdsingleton.obj \
- $(SLO)$/rdbtdp_tdenumeration.obj \
- $(SLO)$/functiondescription.obj \
- $(SLO)$/methoddescription.obj \
- $(SLO)$/structtypedescription.obj
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
diff --git a/stoc/source/registry_tdprovider/methoddescription.cxx b/stoc/source/registry_tdprovider/methoddescription.cxx
deleted file mode 100644
index 9852d86d7..000000000
--- a/stoc/source/registry_tdprovider/methoddescription.cxx
+++ /dev/null
@@ -1,147 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "methoddescription.hxx"
-
-#include "com/sun/star/container/NoSuchElementException.hpp"
-#include "com/sun/star/container/XHierarchicalNameAccess.hpp"
-#include "com/sun/star/reflection/XParameter.hpp"
-#include "com/sun/star/reflection/XTypeDescription.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/RuntimeException.hpp"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "cppuhelper/implbase1.hxx"
-#include "cppuhelper/weak.hxx"
-#include "osl/mutex.hxx"
-#include "registry/reader.hxx"
-#include "registry/types.h"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-
-namespace css = com::sun::star;
-
-using stoc::registry_tdprovider::MethodDescription;
-
-namespace {
-
-class Parameter: public cppu::WeakImplHelper1< css::reflection::XParameter > {
-public:
- Parameter(
- css::uno::Reference< css::container::XHierarchicalNameAccess > const &
- manager,
- rtl::OUString const & name, rtl::OUString const & typeName,
- RTParamMode mode, sal_Int32 position):
- m_manager(manager), m_name(name),
- m_typeName(typeName.replace('/', '.')), m_mode(mode),
- m_position(position) {}
-
- virtual ~Parameter() {}
-
- virtual rtl::OUString SAL_CALL getName() throw (css::uno::RuntimeException)
- { return m_name; }
-
- virtual css::uno::Reference< css::reflection::XTypeDescription > SAL_CALL
- getType() throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isIn() throw (css::uno::RuntimeException)
- { return (m_mode & RT_PARAM_IN) != 0; }
-
- virtual sal_Bool SAL_CALL isOut() throw (css::uno::RuntimeException)
- { return (m_mode & RT_PARAM_OUT) != 0; }
-
- virtual sal_Int32 SAL_CALL getPosition() throw (css::uno::RuntimeException)
- { return m_position; }
-
- virtual sal_Bool SAL_CALL isRestParameter()
- throw (css::uno::RuntimeException)
- { return (m_mode & RT_PARAM_REST) != 0; }
-
-private:
- Parameter(Parameter &); // not implemented
- void operator =(Parameter); // not implemented
-
- css::uno::Reference< css::container::XHierarchicalNameAccess > m_manager;
- rtl::OUString m_name;
- rtl::OUString m_typeName;
- RTParamMode m_mode;
- sal_Int32 m_position;
-};
-
-css::uno::Reference< css::reflection::XTypeDescription > Parameter::getType()
- throw (css::uno::RuntimeException)
-{
- try {
- return css::uno::Reference< css::reflection::XTypeDescription >(
- m_manager->getByHierarchicalName(m_typeName),
- css::uno::UNO_QUERY_THROW);
- } catch (css::container::NoSuchElementException & e) {
- throw new css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.container.NoSuchElementException: "))
- + e.Message),
- static_cast< cppu::OWeakObject * >(this));
- }
-}
-
-}
-
-MethodDescription::MethodDescription(
- css::uno::Reference< css::container::XHierarchicalNameAccess > const &
- manager,
- rtl::OUString const & name,
- com::sun::star::uno::Sequence< sal_Int8 > const & bytes,
- sal_uInt16 index):
- FunctionDescription(manager, bytes, index), m_name(name),
- m_parametersInit(false)
-{}
-
-MethodDescription::~MethodDescription() {}
-
-css::uno::Sequence< css::uno::Reference< css::reflection::XParameter > >
-MethodDescription::getParameters() const {
- osl::MutexGuard guard(m_mutex);
- if (!m_parametersInit) {
- typereg::Reader reader(getReader());
- sal_uInt16 n = reader.getMethodParameterCount(m_index);
- m_parameters.realloc(n);
- for (sal_uInt16 i = 0; i < n; ++i) {
- m_parameters[i] = new Parameter(
- m_manager, reader.getMethodParameterName(m_index, i),
- reader.getMethodParameterTypeName(m_index, i),
- reader.getMethodParameterFlags(m_index, i), i);
- }
- m_parametersInit = true;
- }
- return m_parameters;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/methoddescription.hxx b/stoc/source/registry_tdprovider/methoddescription.hxx
deleted file mode 100644
index f8f7c9d50..000000000
--- a/stoc/source/registry_tdprovider/methoddescription.hxx
+++ /dev/null
@@ -1,85 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 INCLUDED_stoc_source_registry_tdprovider_methoddescription_hxx
-#define INCLUDED_stoc_source_registry_tdprovider_methoddescription_hxx
-
-#include "functiondescription.hxx"
-
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-
-namespace com { namespace sun { namespace star {
- namespace container {
- class XHierarchicalNameAccess;
- }
- namespace reflection {
- class XParameter;
- }
-} } }
-namespace typereg { class Reader; }
-
-namespace stoc { namespace registry_tdprovider {
-
-class MethodDescription: public FunctionDescription {
-public:
- MethodDescription(
- com::sun::star::uno::Reference<
- com::sun::star::container::XHierarchicalNameAccess > const &
- manager,
- rtl::OUString const & name,
- com::sun::star::uno::Sequence< sal_Int8 > const & bytes,
- sal_uInt16 index);
-
- ~MethodDescription();
-
- rtl::OUString getName() const { return m_name; }
-
- com::sun::star::uno::Sequence<
- com::sun::star::uno::Reference<
- com::sun::star::reflection::XParameter > >
- getParameters() const;
-
-private:
- MethodDescription(MethodDescription &); // not implemented
- void operator =(MethodDescription); // not implemented
-
- rtl::OUString m_name;
- mutable com::sun::star::uno::Sequence<
- com::sun::star::uno::Reference<
- com::sun::star::reflection::XParameter > > m_parameters;
- mutable bool m_parametersInit;
-};
-
-} }
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/rdbtdp_tdenumeration.cxx b/stoc/source/registry_tdprovider/rdbtdp_tdenumeration.cxx
deleted file mode 100644
index da20d04e2..000000000
--- a/stoc/source/registry_tdprovider/rdbtdp_tdenumeration.cxx
+++ /dev/null
@@ -1,634 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-//=========================================================================
-// Todo:
-//
-// - closeKey() calls (according to JSC not really needed because XRegistry
-// implementation closes key in it's dtor.
-//
-//=========================================================================
-#include <osl/diagnose.h>
-#include <rtl/ustrbuf.hxx>
-#include "com/sun/star/reflection/XPublished.hpp"
-#include "cppuhelper/implbase1.hxx"
-#include "registry/reader.hxx"
-#include "registry/version.h"
-#include "base.hxx"
-#include "rdbtdp_tdenumeration.hxx"
-
-using namespace com::sun::star;
-
-namespace {
-
-class IndividualConstantTypeDescriptionImpl:
- public cppu::ImplInheritanceHelper1<
- stoc_rdbtdp::ConstantTypeDescriptionImpl,
- com::sun::star::reflection::XPublished >
-{
-public:
- IndividualConstantTypeDescriptionImpl(
- rtl::OUString const & name, com::sun::star::uno::Any const & value,
- bool published):
- cppu::ImplInheritanceHelper1<
- stoc_rdbtdp::ConstantTypeDescriptionImpl,
- com::sun::star::reflection::XPublished >(name, value),
- m_published(published) {}
-
- virtual sal_Bool SAL_CALL isPublished()
- throw (::com::sun::star::uno::RuntimeException)
- { return m_published; }
-
-private:
- bool m_published;
-};
-
-}
-
-namespace stoc_rdbtdp
-{
-
-//=========================================================================
-//=========================================================================
-//
-// TypeDescriptionEnumerationImpl Implementation.
-//
-//=========================================================================
-//=========================================================================
-
-// static
-rtl::Reference< TypeDescriptionEnumerationImpl >
-TypeDescriptionEnumerationImpl::createInstance(
- const uno::Reference< container::XHierarchicalNameAccess > & xTDMgr,
- const rtl::OUString & rModuleName,
- const uno::Sequence< uno::TypeClass > & rTypes,
- reflection::TypeDescriptionSearchDepth eDepth,
- const RegistryKeyList & rBaseKeys )
- throw ( reflection::NoSuchTypeNameException,
- reflection::InvalidTypeNameException,
- uno::RuntimeException )
-{
- if ( rModuleName.getLength() == 0 )
- {
- // Enumeration for root requested.
- return rtl::Reference< TypeDescriptionEnumerationImpl >(
- new TypeDescriptionEnumerationImpl(
- xTDMgr, rBaseKeys, rTypes, eDepth ) );
- }
-
- RegistryKeyList aModuleKeys;
-
- rtl::OUString aKey( rModuleName.replace( '.', '/' ) );
-
- bool bOpenKeySucceeded = false;
-
- const RegistryKeyList::const_iterator end = rBaseKeys.end();
- RegistryKeyList::const_iterator it = rBaseKeys.begin();
-
- while ( it != end )
- {
- uno::Reference< registry::XRegistryKey > xKey;
- try
- {
- xKey = (*it)->openKey( aKey );
- if ( xKey.is() )
- {
- // closes key in it's dtor (which is
- // called even in case of exceptions).
- RegistryKeyCloser aCloser( xKey );
-
- if ( xKey->isValid() )
- {
- bOpenKeySucceeded = true;
-
- if ( xKey->getValueType()
- == registry::RegistryValueType_BINARY )
- {
- uno::Sequence< sal_Int8 > aBytes(
- xKey->getBinaryValue() );
-
- typereg::Reader aReader(
- aBytes.getConstArray(), aBytes.getLength(), false,
- TYPEREG_VERSION_1);
-
- rtl::OUString aName(
- aReader.getTypeName().replace( '/', '.' ) );
-
- if ( aReader.getTypeClass() == RT_TYPE_MODULE )
- {
- // Do not close xKey!
- aCloser.reset();
-
- aModuleKeys.push_back( xKey );
- }
- }
- }
- else
- {
- OSL_FAIL(
- "TypeDescriptionEnumerationImpl::createInstance "
- "- Invalid registry key!" );
- }
- }
- }
- catch ( registry::InvalidRegistryException const & )
- {
- // openKey, getValueType, getBinaryValue
-
- OSL_FAIL( "TypeDescriptionEnumerationImpl::createInstance "
- "- Caught InvalidRegistryException!" );
- }
-
- ++it;
- }
-
- if ( !bOpenKeySucceeded )
- throw reflection::NoSuchTypeNameException();
-
- if ( aModuleKeys.size() == 0 )
- throw reflection::InvalidTypeNameException();
-
- return rtl::Reference< TypeDescriptionEnumerationImpl >(
- new TypeDescriptionEnumerationImpl(
- xTDMgr, aModuleKeys, rTypes, eDepth ) );
-}
-
-//=========================================================================
-TypeDescriptionEnumerationImpl::TypeDescriptionEnumerationImpl(
- const uno::Reference< container::XHierarchicalNameAccess > & xTDMgr,
- const RegistryKeyList & rModuleKeys,
- const uno::Sequence< uno::TypeClass > & rTypes,
- reflection::TypeDescriptionSearchDepth eDepth )
-: m_aModuleKeys( rModuleKeys ),
- m_aTypes( rTypes ),
- m_eDepth( eDepth ),
- m_xTDMgr( xTDMgr )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-}
-
-//=========================================================================
-// virtual
-TypeDescriptionEnumerationImpl::~TypeDescriptionEnumerationImpl()
-{
- RegistryKeyList::const_iterator it = m_aModuleKeys.begin();
- RegistryKeyList::const_iterator end = m_aModuleKeys.end();
-/*
- @@@ in case we enumerate root and queryMore was never called, then
- m_aModuleKeys contains open root keys which where passed from
- tdprov and must not be closed by us.
-
- while ( it != end )
- {
- try
- {
- if ( (*it)->isValid() )
- (*it)->closeKey();
- }
- catch (...)
- {
- // No exceptions from dtors, please!
- OSL_FAIL( "TypeDescriptionEnumerationImpl::~TypeDescriptionEnumerationImpl "
- "- Caught exception!" );
- }
-
- it++;
- }
-*/
- it = m_aCurrentModuleSubKeys.begin();
- end = m_aCurrentModuleSubKeys.end();
- while ( it != end )
- {
- try
- {
- if ( (*it)->isValid() )
- (*it)->closeKey();
- }
- catch (Exception &)
- {
- // No exceptions from dtors, please!
- OSL_FAIL( "TypeDescriptionEnumerationImpl::~TypeDescriptionEnumerationImpl "
- "- Caught exception!" );
- }
-
- ++it;
- }
-
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-//=========================================================================
-//
-// XEnumeration (base of XTypeDescriptionEnumeration) methods
-//
-//=========================================================================
-
-// virtual
-sal_Bool SAL_CALL TypeDescriptionEnumerationImpl::hasMoreElements()
- throw ( uno::RuntimeException )
-{
- return queryMore();
-}
-
-//=========================================================================
-// virtual
-uno::Any SAL_CALL TypeDescriptionEnumerationImpl::nextElement()
- throw ( container::NoSuchElementException,
- lang::WrappedTargetException,
- uno::RuntimeException )
-{
- return uno::Any( uno::makeAny( nextTypeDescription() ) );
-}
-
-//=========================================================================
-//
-// XTypeDescriptionEnumeration methods
-//
-//=========================================================================
-
-// virtual
-uno::Reference< reflection::XTypeDescription > SAL_CALL
-TypeDescriptionEnumerationImpl::nextTypeDescription()
- throw ( container::NoSuchElementException,
- uno::RuntimeException )
-{
- uno::Reference< reflection::XTypeDescription > xTD( queryNext() );
-
- if ( xTD.is() )
- return xTD;
-
- throw container::NoSuchElementException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("No further elements in enumeration!") ),
- static_cast< cppu::OWeakObject * >( this ) );
-}
-
-//=========================================================================
-bool TypeDescriptionEnumerationImpl::match(
- RTTypeClass eType1, uno::TypeClass eType2 )
-{
- switch ( eType1 )
- {
- case RT_TYPE_INTERFACE:
- return eType2 == uno::TypeClass_INTERFACE;
-
- case RT_TYPE_MODULE:
- return eType2 == uno::TypeClass_MODULE;
-
- case RT_TYPE_STRUCT:
- return eType2 == uno::TypeClass_STRUCT;
-
- case RT_TYPE_ENUM:
- return eType2 == uno::TypeClass_ENUM;
-
- case RT_TYPE_EXCEPTION:
- return eType2 == uno::TypeClass_EXCEPTION;
-
- case RT_TYPE_TYPEDEF:
- return eType2 == uno::TypeClass_TYPEDEF;
-
- case RT_TYPE_SERVICE:
- return eType2 == uno::TypeClass_SERVICE;
-
- case RT_TYPE_SINGLETON:
- return eType2 == uno::TypeClass_SINGLETON;
-
- case RT_TYPE_CONSTANTS:
- return eType2 == uno::TypeClass_CONSTANTS;
-
- case RT_TYPE_UNION:
- return eType2 == uno::TypeClass_UNION;
-
- default:
- return false;
- }
-}
-
-//=========================================================================
-bool TypeDescriptionEnumerationImpl::queryMore()
-{
- osl::MutexGuard aGuard( m_aMutex );
-
- for (;;)
- {
- if ( !m_aCurrentModuleSubKeys.empty() || !m_aTypeDescs.empty() )
- {
- // Okay, there is at least one more element.
- return true;
- }
-
- if ( m_aModuleKeys.empty() )
- {
- // No module keys (therefore no elements) left.
- return false;
- }
-
- // Note: m_aCurrentModuleSubKeys is always empty AND m_aModuleKeys is
- // never empty when ariving here.
- // ==> select new module key, fill m_aCurrentModuleSubKeys
-
- uno::Sequence< uno::Reference< registry::XRegistryKey > > aKeys;
- try
- {
- aKeys = m_aModuleKeys.front()->openKeys();
- for ( sal_Int32 n = 0; n < aKeys.getLength(); ++n )
- {
- uno::Reference< registry::XRegistryKey > xKey = aKeys[ n ];
-
- // closes key in it's dtor (which is
- // called even in case of exceptions).
- RegistryKeyCloser aCloser( xKey );
-
- try
- {
- if ( xKey->isValid() )
- {
- if ( xKey->getValueType()
- == registry::RegistryValueType_BINARY )
- {
- bool bIncludeIt = (m_aTypes.getLength() == 0);
- bool bNeedTypeClass =
- ((m_aTypes.getLength() > 0) ||
- (m_eDepth
- == reflection::TypeDescriptionSearchDepth_INFINITE));
- if ( bNeedTypeClass )
- {
- uno::Sequence< sal_Int8 > aBytes(
- xKey->getBinaryValue() );
-
- typereg::Reader aReader(
- aBytes.getConstArray(), aBytes.getLength(),
- false, TYPEREG_VERSION_1);
-
- RTTypeClass eTypeClass = aReader.getTypeClass();
-
- // Does key match requested types? Empty
- // sequence means include all.
- if ( m_aTypes.getLength() > 0 )
- {
- for ( sal_Int32 m = 0;
- m < m_aTypes.getLength();
- ++m )
- {
- if ( match(eTypeClass, m_aTypes[ m ]) )
- {
- bIncludeIt = true;
- break;
- }
- }
- }
-
- if ( m_eDepth ==
- reflection::TypeDescriptionSearchDepth_INFINITE )
- {
- if ( eTypeClass == RT_TYPE_MODULE )
- {
- // Do not close xKey!
- aCloser.reset();
-
- // Remember new module key.
- m_aModuleKeys.push_back( xKey );
- }
- }
- }
-
- if ( bIncludeIt )
- {
- // Do not close xKey!
- aCloser.reset();
-
- m_aCurrentModuleSubKeys.push_back( xKey );
- }
- }
- }
- else
- {
- OSL_FAIL( "TypeDescriptionEnumerationImpl::queryMore "
- "- Invalid registry key!" );
- }
-
- }
- catch ( registry::InvalidRegistryException const & )
- {
- // getValueType, getBinaryValue
-
- OSL_FAIL( "TypeDescriptionEnumerationImpl::queryMore "
- "- Caught InvalidRegistryException!" );
-
- // Don't stop iterating!
- }
- }
- }
- catch ( registry::InvalidRegistryException const & )
- {
- // openKeys
-
- for ( sal_Int32 n = 0; n < aKeys.getLength(); ++n )
- {
- try
- {
- aKeys[ n ]->closeKey();
- }
- catch ( registry::InvalidRegistryException const & )
- {
- OSL_FAIL( "TypeDescriptionEnumerationImpl::queryMore "
- "- Caught InvalidRegistryException!" );
- }
- }
- }
-
- /////////////////////////////////////////////////////////////////////
- // Special handling for constants contained directly in module.
- /////////////////////////////////////////////////////////////////////
-
- // Constants requested?
- bool bIncludeConstants = ( m_aTypes.getLength() == 0 );
- if ( !bIncludeConstants )
- {
- for ( sal_Int32 m = 0; m < m_aTypes.getLength(); ++m )
- {
- if ( m_aTypes[ m ] == uno::TypeClass_CONSTANT )
- {
- bIncludeConstants = true;
- break;
- }
- }
-
- }
-
- if ( bIncludeConstants )
- {
- if ( m_aModuleKeys.front()->getValueType()
- == registry::RegistryValueType_BINARY )
- {
- try
- {
- uno::Sequence< sal_Int8 > aBytes(
- m_aModuleKeys.front()->getBinaryValue() );
-
- typereg::Reader aReader(
- aBytes.getConstArray(), aBytes.getLength(), false,
- TYPEREG_VERSION_1);
-
- if ( aReader.getTypeClass() == RT_TYPE_MODULE )
- {
- sal_uInt16 nFields = aReader.getFieldCount();
- while ( nFields-- )
- {
- rtl::OUStringBuffer aName(
- aReader.getTypeName().replace( '/', '.' ) );
- aName.appendAscii( "." );
- aName.append( aReader.getFieldName( nFields ) );
-
- uno::Any aValue(
- getRTValue(
- aReader.getFieldValue( nFields ) ) );
-
- m_aTypeDescs.push_back(
- new IndividualConstantTypeDescriptionImpl(
- aName.makeStringAndClear(), aValue,
- ( ( aReader.getFieldFlags( nFields )
- & RT_ACCESS_PUBLISHED )
- != 0 ) ) );
- }
- }
- }
- catch ( registry::InvalidRegistryException const & )
- {
- // getBinaryValue
-
- OSL_FAIL( "TypeDescriptionEnumerationImpl::queryMore "
- "- Caught InvalidRegistryException!" );
- }
- }
- }
-
- /////////////////////////////////////////////////////////////////////
-
-/*
- @@@ m_aModuleKeys.front() may have open sub keys (may be contained in
- both m_aModuleKeys and m_aCurrentModuleSubKeys)!
-
- try
- {
- m_aModuleKeys.front()->closeKey();
- }
- catch ( registry::InvalidRegistryException const & )
- {
- OSL_FAIL( "TypeDescriptionEnumerationImpl::queryMore "
- "- Caught InvalidRegistryException!" );
- }
-*/
- // We're done with this module key, even if there were errors.
- m_aModuleKeys.pop_front();
- }
-
- // unreachable
-}
-
-//=========================================================================
-uno::Reference< reflection::XTypeDescription >
-TypeDescriptionEnumerationImpl::queryNext()
-{
- osl::MutexGuard aGuard( m_aMutex );
-
- for (;;)
- {
- if ( !queryMore() )
- return uno::Reference< reflection::XTypeDescription >();
-
- uno::Reference< reflection::XTypeDescription > xTD;
-
- if ( !m_aTypeDescs.empty() )
- {
- xTD = m_aTypeDescs.front();
- m_aTypeDescs.pop_front();
- return xTD;
- }
-
- // Note: xKey is already opened.
- uno::Reference< registry::XRegistryKey >
- xKey( m_aCurrentModuleSubKeys.front() );
-/*
- @@@ xKey may still be contained in m_aModuleKeys, too
-
- // closes key in it's dtor (which is
- // called even in case of exceptions).
- RegistryKeyCloser aCloser( xKey );
-*/
- try
- {
- {
- if ( xKey->isValid() )
- {
- if ( xKey->getValueType()
- == registry::RegistryValueType_BINARY )
- {
- uno::Sequence< sal_Int8 > aBytes(
- xKey->getBinaryValue() );
-
- xTD = createTypeDescription( aBytes,
- m_xTDMgr,
- false );
- OSL_ENSURE( xTD.is(),
- "TypeDescriptionEnumerationImpl::queryNext "
- "- No XTypeDescription created!" );
- }
- }
- else
- {
- OSL_FAIL( "TypeDescriptionEnumerationImpl::queryNext "
- "- Invalid registry key!" );
- }
- }
- }
- catch ( registry::InvalidRegistryException const & )
- {
- // getValueType, getBinaryValue
-
- OSL_FAIL( "TypeDescriptionEnumerationImpl::queryNext "
- "- Caught InvalidRegistryException!" );
- }
-
- // We're done with this key, even if there were errors.
- m_aCurrentModuleSubKeys.pop_front();
-
- if ( xTD.is() )
- return xTD;
-
- // next try...
-
- } // for (;;)
-}
-
-} // namespace stoc_rdbtdp
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/rdbtdp_tdenumeration.hxx b/stoc/source/registry_tdprovider/rdbtdp_tdenumeration.hxx
deleted file mode 100644
index 1d489ba7e..000000000
--- a/stoc/source/registry_tdprovider/rdbtdp_tdenumeration.hxx
+++ /dev/null
@@ -1,118 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 _STOC_RDBTDP_TDENUMERATION_HXX
-#define _STOC_RDBTDP_TDENUMERATION_HXX
-
-#include <list>
-#include <osl/mutex.hxx>
-#include <rtl/ref.hxx>
-#include <registry/refltype.hxx>
-#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
-#include <com/sun/star/reflection/InvalidTypeNameException.hpp>
-#include <com/sun/star/reflection/NoSuchTypeNameException.hpp>
-#include <com/sun/star/reflection/TypeDescriptionSearchDepth.hpp>
-#include <com/sun/star/reflection/XTypeDescriptionEnumeration.hpp>
-#include <com/sun/star/uno/Sequence.hxx>
-#include <com/sun/star/uno/TypeClass.hpp>
-#include <cppuhelper/implbase1.hxx>
-#include "base.hxx"
-
-namespace stoc_rdbtdp
-{
-
-typedef ::std::list< ::com::sun::star::uno::Reference<
- ::com::sun::star::reflection::XTypeDescription > > TypeDescriptionList;
-
-class TypeDescriptionEnumerationImpl
- : public cppu::WeakImplHelper1<
- com::sun::star::reflection::XTypeDescriptionEnumeration >
-{
-public:
- static rtl::Reference< TypeDescriptionEnumerationImpl > createInstance(
- const ::com::sun::star::uno::Reference<
- ::com::sun::star::container::XHierarchicalNameAccess > & xTDMgr,
- const rtl::OUString & rModuleName,
- const ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::TypeClass > & rTypes,
- ::com::sun::star::reflection::TypeDescriptionSearchDepth eDepth,
- const RegistryKeyList & rBaseKeys )
- throw ( ::com::sun::star::reflection::NoSuchTypeNameException,
- ::com::sun::star::reflection::InvalidTypeNameException,
- ::com::sun::star::uno::RuntimeException );
-
- virtual ~TypeDescriptionEnumerationImpl();
-
- // XEnumeration (base of XTypeDescriptionEnumeration)
- virtual sal_Bool SAL_CALL hasMoreElements()
- throw ( ::com::sun::star::uno::RuntimeException );
- virtual ::com::sun::star::uno::Any SAL_CALL nextElement()
- throw ( ::com::sun::star::container::NoSuchElementException,
- ::com::sun::star::lang::WrappedTargetException,
- ::com::sun::star::uno::RuntimeException );
-
- // XTypeDescriptionEnumeration
- virtual ::com::sun::star::uno::Reference<
- ::com::sun::star::reflection::XTypeDescription > SAL_CALL
- nextTypeDescription()
- throw ( ::com::sun::star::container::NoSuchElementException,
- ::com::sun::star::uno::RuntimeException );
-
-private:
- // Note: keys must be open (XRegistryKey->openKey(...)).
- TypeDescriptionEnumerationImpl(
- const ::com::sun::star::uno::Reference<
- ::com::sun::star::container::XHierarchicalNameAccess > & xTDMgr,
- const RegistryKeyList & rModuleKeys,
- const ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::TypeClass > & rTypes,
- ::com::sun::star::reflection::TypeDescriptionSearchDepth eDepth );
-
- static bool match( ::RTTypeClass eType1,
- ::com::sun::star::uno::TypeClass eType2 );
- bool queryMore();
- ::com::sun::star::uno::Reference<
- ::com::sun::star::reflection::XTypeDescription > queryNext();
-
- // members
- osl::Mutex m_aMutex;
- RegistryKeyList m_aModuleKeys;
- RegistryKeyList m_aCurrentModuleSubKeys;
- TypeDescriptionList m_aTypeDescs;
- ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::TypeClass > m_aTypes;
- ::com::sun::star::reflection::TypeDescriptionSearchDepth m_eDepth;
- ::com::sun::star::uno::Reference<
- ::com::sun::star::container::XHierarchicalNameAccess > m_xTDMgr;
-};
-
-} // namespace stoc_rdbtdp
-
-#endif /* _STOC_RDBTDP_TDENUMERATION_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/structtypedescription.cxx b/stoc/source/registry_tdprovider/structtypedescription.cxx
deleted file mode 100644
index b553ca472..000000000
--- a/stoc/source/registry_tdprovider/structtypedescription.cxx
+++ /dev/null
@@ -1,142 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "structtypedescription.hxx"
-
-#include "base.hxx"
-
-#include "com/sun/star/reflection/XTypeDescription.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/RuntimeException.hpp"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "com/sun/star/uno/TypeClass.hpp"
-#include "cppuhelper/weak.hxx"
-#include "osl/diagnose.h"
-#include "registry/reader.hxx"
-#include "registry/types.h"
-#include "registry/version.h"
-#include "rtl/ustring.h"
-#include "rtl/ustring.hxx"
-
-#include <new>
-
-namespace css = com::sun::star;
-using stoc::registry_tdprovider::StructTypeDescription;
-
-StructTypeDescription::StructTypeDescription(
- css::uno::Reference< css::container::XHierarchicalNameAccess > const &
- manager,
- rtl::OUString const & name, rtl::OUString const & baseTypeName,
- css::uno::Sequence< sal_Int8 > const & data, bool published):
- m_data(data),
- m_base(
- new stoc_rdbtdp::CompoundTypeDescriptionImpl(
- manager, css::uno::TypeClass_STRUCT, name, baseTypeName, data,
- published))
-{}
-
-StructTypeDescription::~StructTypeDescription()
-{}
-
-css::uno::TypeClass StructTypeDescription::getTypeClass()
- throw (css::uno::RuntimeException)
-{
- return m_base->getTypeClass();
-}
-
-rtl::OUString StructTypeDescription::getName()
- throw (css::uno::RuntimeException)
-{
- return m_base->getName();
-}
-
-css::uno::Reference< css::reflection::XTypeDescription >
-StructTypeDescription::getBaseType() throw (css::uno::RuntimeException)
-{
- return m_base->getBaseType();
-}
-
-css::uno::Sequence< css::uno::Reference< css::reflection::XTypeDescription > >
-StructTypeDescription::getMemberTypes() throw (css::uno::RuntimeException)
-{
- return m_base->getMemberTypes();
-}
-
-css::uno::Sequence< rtl::OUString > StructTypeDescription::getMemberNames()
- throw (css::uno::RuntimeException)
-{
- return m_base->getMemberNames();
-}
-
-css::uno::Sequence< rtl::OUString > StructTypeDescription::getTypeParameters()
- throw (css::uno::RuntimeException)
-{
- try {
- typereg::Reader reader(
- m_data.getConstArray(), m_data.getLength(), false,
- TYPEREG_VERSION_1);
- OSL_ASSERT(reader.isValid());
- sal_uInt16 n = reader.getReferenceCount();
- css::uno::Sequence< rtl::OUString > parameters(n);
- for (sal_uInt16 i = 0; i < n; ++i) {
- if (reader.getReferenceFlags(i) != RT_ACCESS_INVALID
- || reader.getReferenceSort(i) != RT_REF_TYPE_PARAMETER)
- {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "type parameter of polymorphic struct type template"
- " not RT_ACCESS_INVALID/RT_REF_TYPE_PARAMETER")),
- static_cast< cppu::OWeakObject * >(this));
- }
- parameters[i] = reader.getReferenceTypeName(i);
- }
- return parameters;
- } catch (std::bad_alloc &) {
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("std::bad_alloc")),
- static_cast< cppu::OWeakObject * >(this));
- }
-}
-
-css::uno::Sequence< css::uno::Reference< css::reflection::XTypeDescription > >
-StructTypeDescription::getTypeArguments() throw (css::uno::RuntimeException)
-{
- return css::uno::Sequence<
- css::uno::Reference< css::reflection::XTypeDescription > >();
-}
-
-sal_Bool StructTypeDescription::isPublished() throw (css::uno::RuntimeException)
-{
- return m_base->isPublished();
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/structtypedescription.hxx b/stoc/source/registry_tdprovider/structtypedescription.hxx
deleted file mode 100644
index a0c91bd81..000000000
--- a/stoc/source/registry_tdprovider/structtypedescription.hxx
+++ /dev/null
@@ -1,108 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 INCLUDED_stoc_source_registry_tdprovider_structtypedescription_hxx
-#define INCLUDED_stoc_source_registry_tdprovider_structtypedescription_hxx
-
-#include "com/sun/star/reflection/XPublished.hpp"
-#include "com/sun/star/reflection/XStructTypeDescription.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "cppuhelper/implbase2.hxx"
-#include "rtl/ref.hxx"
-#include "sal/types.h"
-
-namespace com { namespace sun { namespace star {
- namespace container { class XHierarchicalNameAccess; }
- namespace reflection { class XCompoundTypeDescription; }
-} } }
-namespace rtl { class OUString; }
-namespace stoc_rdbtdp { class CompoundTypeDescriptionImpl; }
-
-namespace stoc { namespace registry_tdprovider {
-
-class StructTypeDescription:
- public cppu::WeakImplHelper2<
- com::sun::star::reflection::XStructTypeDescription,
- com::sun::star::reflection::XPublished >
-{
-public:
- StructTypeDescription(
- com::sun::star::uno::Reference<
- com::sun::star::container::XHierarchicalNameAccess > const &
- manager,
- rtl::OUString const & name, rtl::OUString const & baseTypeName,
- com::sun::star::uno::Sequence< sal_Int8 > const & data, bool published);
-
- virtual ~StructTypeDescription();
-
- virtual com::sun::star::uno::TypeClass SAL_CALL getTypeClass()
- throw (com::sun::star::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getName()
- throw (com::sun::star::uno::RuntimeException);
-
- virtual
- com::sun::star::uno::Reference<
- com::sun::star::reflection::XTypeDescription >
- SAL_CALL getBaseType() throw (com::sun::star::uno::RuntimeException);
-
- virtual
- com::sun::star::uno::Sequence<
- com::sun::star::uno::Reference<
- com::sun::star::reflection::XTypeDescription > >
- SAL_CALL getMemberTypes() throw (com::sun::star::uno::RuntimeException);
-
- virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL
- getMemberNames() throw (com::sun::star::uno::RuntimeException);
-
- virtual com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL
- getTypeParameters() throw (com::sun::star::uno::RuntimeException);
-
- virtual
- com::sun::star::uno::Sequence<
- com::sun::star::uno::Reference<
- com::sun::star::reflection::XTypeDescription > >
- SAL_CALL getTypeArguments() throw (com::sun::star::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isPublished()
- throw (com::sun::star::uno::RuntimeException);
-
-private:
- StructTypeDescription(StructTypeDescription &); // not implemented
- void operator =(StructTypeDescription); // not implemented
-
- com::sun::star::uno::Sequence< sal_Int8 > m_data;
- rtl::Reference< stoc_rdbtdp::CompoundTypeDescriptionImpl > m_base;
-};
-
-} }
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/td.cxx b/stoc/source/registry_tdprovider/td.cxx
deleted file mode 100644
index 1adb6d6d7..000000000
--- a/stoc/source/registry_tdprovider/td.cxx
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "osl/doublecheckedlocking.h"
-#include "base.hxx"
-
-namespace stoc_rdbtdp
-{
-
-//------------------------------------------------------------------------------
-::osl::Mutex & getMutex()
-{
- static ::osl::Mutex * s_pmutex = 0;
- if (s_pmutex == 0)
- {
- ::osl::MutexGuard guard( ::osl::Mutex::getGlobalMutex() );
- if (s_pmutex == 0)
- {
- static ::osl::Mutex s_mutex;
- OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();
- s_pmutex = &s_mutex;
- }
- }
- else
- {
- OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();
- }
- return *s_pmutex;
-}
-
-
-TypeDescriptionImpl::~TypeDescriptionImpl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-TypeClass TypeDescriptionImpl::getTypeClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _eTypeClass;
-}
-//__________________________________________________________________________________________________
-OUString TypeDescriptionImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _aName;
-}
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/tdcomp.cxx b/stoc/source/registry_tdprovider/tdcomp.cxx
deleted file mode 100644
index f0b8cec96..000000000
--- a/stoc/source/registry_tdprovider/tdcomp.cxx
+++ /dev/null
@@ -1,189 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include "base.hxx"
-
-#include "registry/reader.hxx"
-#include "registry/version.h"
-
-namespace stoc_rdbtdp
-{
-
-//__________________________________________________________________________________________________
-CompoundTypeDescriptionImpl::~CompoundTypeDescriptionImpl()
-{
- delete _pMembers;
- delete _pMemberNames;
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-TypeClass CompoundTypeDescriptionImpl::getTypeClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _eTypeClass;
-}
-//__________________________________________________________________________________________________
-OUString CompoundTypeDescriptionImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _aName;
-}
-
-// XCompoundTypeDescription
-//__________________________________________________________________________________________________
-Reference< XTypeDescription > CompoundTypeDescriptionImpl::getBaseType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (!_xBaseTD.is() && _aBaseType.getLength())
- {
- try
- {
- Reference< XTypeDescription > xBaseTD;
- if (_xTDMgr->getByHierarchicalName( _aBaseType ) >>= xBaseTD)
- {
- MutexGuard aGuard( getMutex() );
- if (! _xBaseTD.is())
- _xBaseTD = xBaseTD;
- return _xBaseTD;
- }
- }
- catch (NoSuchElementException &)
- {
- }
- // never try again, if no base td was found
- _aBaseType = OUString();
- }
- return _xBaseTD;
-}
-//__________________________________________________________________________________________________
-
-namespace {
-
-class TypeParameter: public WeakImplHelper1< XTypeDescription > {
-public:
- explicit TypeParameter(OUString const & name): m_name(name) {}
-
- virtual TypeClass SAL_CALL getTypeClass() throw (RuntimeException)
- { return TypeClass_UNKNOWN; }
-
- virtual OUString SAL_CALL getName() throw (RuntimeException)
- { return m_name; }
-
-private:
- OUString m_name;
-};
-
-}
-
-Sequence< Reference< XTypeDescription > > CompoundTypeDescriptionImpl::getMemberTypes()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _pMembers)
- {
- typereg::Reader aReader(
- _aBytes.getConstArray(), _aBytes.getLength(), false,
- TYPEREG_VERSION_1);
-
- sal_uInt16 nFields = aReader.getFieldCount();
- Sequence< Reference< XTypeDescription > > * pTempMembers =
- new Sequence< Reference< XTypeDescription > >( nFields );
- Reference< XTypeDescription > * pMembers = pTempMembers->getArray();
-
- while (nFields--)
- {
- if ((aReader.getFieldFlags(nFields) & RT_ACCESS_PARAMETERIZED_TYPE)
- != 0)
- {
- pMembers[nFields] = new TypeParameter(
- aReader.getFieldTypeName(nFields));
- } else {
- try {
- _xTDMgr->getByHierarchicalName(
- aReader.getFieldTypeName(nFields).replace('/', '.'))
- >>= pMembers[nFields];
- } catch (NoSuchElementException &) {}
- OSL_ENSURE(
- pMembers[nFields].is(), "### compound member unknown!");
- }
- }
-
- ClearableMutexGuard aGuard( getMutex() );
- if (_pMembers)
- {
- aGuard.clear();
- delete pTempMembers;
- }
- else
- {
- _pMembers = pTempMembers;
- }
- }
-
- return *_pMembers;
-}
-//__________________________________________________________________________________________________
-Sequence< OUString > CompoundTypeDescriptionImpl::getMemberNames()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _pMemberNames)
- {
- typereg::Reader aReader(
- _aBytes.getConstArray(), _aBytes.getLength(), false,
- TYPEREG_VERSION_1);
-
- sal_uInt16 nFields = aReader.getFieldCount();
- Sequence< OUString > * pTempMemberNames = new Sequence< OUString >( nFields );
- OUString * pMemberNames = pTempMemberNames->getArray();
-
- while (nFields--)
- {
- pMemberNames[nFields] = aReader.getFieldName( nFields );
- }
-
- ClearableMutexGuard aGuard( getMutex() );
- if (_pMemberNames)
- {
- aGuard.clear();
- delete pTempMemberNames;
- }
- else
- {
- _pMemberNames = pTempMemberNames;
- }
- }
- return *_pMemberNames;
-}
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/tdconsts.cxx b/stoc/source/registry_tdprovider/tdconsts.cxx
deleted file mode 100644
index 55eb066c6..000000000
--- a/stoc/source/registry_tdprovider/tdconsts.cxx
+++ /dev/null
@@ -1,113 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <osl/diagnose.h>
-#include <rtl/ustrbuf.hxx>
-#include "registry/reader.hxx"
-#include "registry/version.h"
-#include "base.hxx"
-
-namespace stoc_rdbtdp
-{
-
-//__________________________________________________________________________________________________
-// virtual
-ConstantsTypeDescriptionImpl::~ConstantsTypeDescriptionImpl()
-{
- delete _pMembers;
-
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-// virtual
-TypeClass ConstantsTypeDescriptionImpl::getTypeClass()
- throw( RuntimeException )
-{
- return TypeClass_CONSTANTS;
-}
-//__________________________________________________________________________________________________
-// virtual
-OUString ConstantsTypeDescriptionImpl::getName()
- throw( RuntimeException )
-{
- return _aName;
-}
-
-// XConstantsTypeDescription
-//__________________________________________________________________________________________________
-// virtual
-Sequence< Reference< XConstantTypeDescription > > SAL_CALL
-ConstantsTypeDescriptionImpl::getConstants()
- throw ( RuntimeException )
-{
- if ( !_pMembers )
- {
- typereg::Reader aReader(
- _aBytes.getConstArray(), _aBytes.getLength(), false,
- TYPEREG_VERSION_1);
-
- sal_uInt16 nFields = aReader.getFieldCount();
- Sequence< Reference< XConstantTypeDescription > > * pTempConsts
- = new Sequence< Reference< XConstantTypeDescription > >( nFields );
- Reference< XConstantTypeDescription > * pConsts
- = pTempConsts->getArray();
-
- while ( nFields-- )
- {
- rtl::OUStringBuffer aName( _aName );
- aName.appendAscii( "." );
- aName.append( aReader.getFieldName( nFields ) );
-
- Any aValue( getRTValue( aReader.getFieldValue( nFields ) ) );
-
- pConsts[ nFields ]
- = new ConstantTypeDescriptionImpl( aName.makeStringAndClear(),
- aValue );
- }
-
- ClearableMutexGuard aGuard( getMutex() );
- if ( _pMembers )
- {
- aGuard.clear();
- delete pTempConsts;
- }
- else
- {
- _pMembers = pTempConsts;
- }
- }
- return *_pMembers;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/tdef.cxx b/stoc/source/registry_tdprovider/tdef.cxx
deleted file mode 100644
index 3b537e547..000000000
--- a/stoc/source/registry_tdprovider/tdef.cxx
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include "base.hxx"
-
-namespace stoc_rdbtdp
-{
-TypedefTypeDescriptionImpl::~TypedefTypeDescriptionImpl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-TypeClass TypedefTypeDescriptionImpl::getTypeClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return TypeClass_TYPEDEF;
-}
-//__________________________________________________________________________________________________
-OUString TypedefTypeDescriptionImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _aName;
-}
-
-// XIndirectTypeDescription
-//__________________________________________________________________________________________________
-Reference< XTypeDescription > TypedefTypeDescriptionImpl::getReferencedType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (!_xRefTD.is() && _aRefName.getLength())
- {
- try
- {
- Reference< XTypeDescription > xRefTD;
- if (_xTDMgr->getByHierarchicalName( _aRefName ) >>= xRefTD)
- {
- MutexGuard aGuard( getMutex() );
- if (! _xRefTD.is())
- _xRefTD = xRefTD;
- return _xRefTD;
- }
- }
- catch (NoSuchElementException &)
- {
- }
- // never try again, if no base td was found
- _aRefName = OUString();
- }
- return _xRefTD;
-}
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/tdenum.cxx b/stoc/source/registry_tdprovider/tdenum.cxx
deleted file mode 100644
index 87500fee3..000000000
--- a/stoc/source/registry_tdprovider/tdenum.cxx
+++ /dev/null
@@ -1,137 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include "base.hxx"
-
-#include "registry/reader.hxx"
-#include "registry/version.h"
-
-namespace stoc_rdbtdp
-{
-
-//__________________________________________________________________________________________________
-EnumTypeDescriptionImpl::~EnumTypeDescriptionImpl()
-{
- delete _pEnumNames;
- delete _pEnumValues;
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-TypeClass EnumTypeDescriptionImpl::getTypeClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return TypeClass_ENUM;
-}
-//__________________________________________________________________________________________________
-OUString EnumTypeDescriptionImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _aName;
-}
-
-// XEnumTypeDescription
-//__________________________________________________________________________________________________
-sal_Int32 EnumTypeDescriptionImpl::getDefaultEnumValue()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _nDefaultValue;
-}
-//__________________________________________________________________________________________________
-Sequence< OUString > EnumTypeDescriptionImpl::getEnumNames()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _pEnumNames)
- {
- typereg::Reader aReader(
- _aBytes.getConstArray(), _aBytes.getLength(), false,
- TYPEREG_VERSION_1);
-
- sal_uInt16 nFields = aReader.getFieldCount();
- Sequence< OUString > * pTempEnumNames = new Sequence< OUString >( nFields );
- OUString * pEnumNames = pTempEnumNames->getArray();
-
- while (nFields--)
- {
- pEnumNames[nFields] = aReader.getFieldName( nFields );
- }
-
- ClearableMutexGuard aGuard( getMutex() );
- if (_pEnumNames)
- {
- aGuard.clear();
- delete pTempEnumNames;
- }
- else
- {
- _pEnumNames = pTempEnumNames;
- }
- }
- return *_pEnumNames;
-}
-//__________________________________________________________________________________________________
-Sequence< sal_Int32 > EnumTypeDescriptionImpl::getEnumValues()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (! _pEnumValues)
- {
- typereg::Reader aReader(
- _aBytes.getConstArray(), _aBytes.getLength(), false,
- TYPEREG_VERSION_1);
-
- sal_uInt16 nFields = aReader.getFieldCount();
- Sequence< sal_Int32 > * pTempEnumValues = new Sequence< sal_Int32 >( nFields );
- sal_Int32 * pEnumValues = pTempEnumValues->getArray();
-
- while (nFields--)
- {
- pEnumValues[nFields] = getRTValueAsInt32(
- aReader.getFieldValue( nFields ) );
- }
-
- ClearableMutexGuard aGuard( getMutex() );
- if (_pEnumValues)
- {
- aGuard.clear();
- delete pTempEnumValues;
- }
- else
- {
- _pEnumValues = pTempEnumValues;
- }
- }
- return *_pEnumValues;
-}
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/tdiface.cxx b/stoc/source/registry_tdprovider/tdiface.cxx
deleted file mode 100644
index 3a9d89173..000000000
--- a/stoc/source/registry_tdprovider/tdiface.cxx
+++ /dev/null
@@ -1,588 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <osl/diagnose.h>
-#include <rtl/ustrbuf.hxx>
-#include "registry/reader.hxx"
-#include "registry/version.h"
-
-#include <com/sun/star/reflection/XInterfaceMemberTypeDescription.hpp>
-#include <com/sun/star/reflection/XInterfaceAttributeTypeDescription2.hpp>
-#include <com/sun/star/reflection/XInterfaceMethodTypeDescription.hpp>
-#include <com/sun/star/reflection/XMethodParameter.hpp>
-#include <com/sun/star/reflection/XParameter.hpp>
-#include "com/sun/star/uno/RuntimeException.hpp"
-#include "base.hxx"
-#include "functiondescription.hxx"
-#include "methoddescription.hxx"
-
-#include <memory>
-#include <set>
-
-namespace stoc_rdbtdp
-{
-
-//==================================================================================================
-class InterfaceMethodImpl : public WeakImplHelper1< XInterfaceMethodTypeDescription >
-{
- stoc::registry_tdprovider::MethodDescription _desc;
-
- Reference< XHierarchicalNameAccess > _xTDMgr;
-
- OUString _aTypeName;
-
- OUString _aReturnType;
- Reference< XTypeDescription > _xReturnTD;
-
- sal_Bool _bIsOneWay;
- sal_Int32 _nPosition;
-
-public:
- InterfaceMethodImpl( const Reference< XHierarchicalNameAccess > & xTDMgr,
- const OUString & rTypeName,
- const OUString & rMemberName,
- const OUString & rReturnType,
- const Sequence< sal_Int8 > & rBytes,
- sal_uInt16 nMethodIndex,
- sal_Bool bIsOneWay,
- sal_Int32 nPosition )
- : _desc(xTDMgr, rMemberName, rBytes, nMethodIndex)
- , _xTDMgr( xTDMgr )
- , _aTypeName( rTypeName )
- , _aReturnType( rReturnType )
- , _bIsOneWay( bIsOneWay )
- , _nPosition( nPosition )
- {
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- }
- virtual ~InterfaceMethodImpl();
-
- // XTypeDescription
- virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
-
- // XInterfaceMemberTypeDescription
- virtual OUString SAL_CALL getMemberName() throw(::com::sun::star::uno::RuntimeException)
- { return _desc.getName(); }
- virtual sal_Int32 SAL_CALL getPosition() throw(::com::sun::star::uno::RuntimeException);
-
- // XInterfaceMethodTypeDescription
- virtual Reference< XTypeDescription > SAL_CALL getReturnType() throw(::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL isOneway() throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< Reference< XMethodParameter > > SAL_CALL getParameters() throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< Reference< XTypeDescription > > SAL_CALL getExceptions() throw(::com::sun::star::uno::RuntimeException);
-};
-//__________________________________________________________________________________________________
-InterfaceMethodImpl::~InterfaceMethodImpl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-TypeClass InterfaceMethodImpl::getTypeClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return TypeClass_INTERFACE_METHOD;
-}
-//__________________________________________________________________________________________________
-OUString InterfaceMethodImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _aTypeName;
-}
-
-// XInterfaceMemberTypeDescription
-//__________________________________________________________________________________________________
-sal_Int32 InterfaceMethodImpl::getPosition()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _nPosition;
-}
-
-// XInterfaceMethodTypeDescription
-//__________________________________________________________________________________________________
-Reference<XTypeDescription > InterfaceMethodImpl::getReturnType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (!_xReturnTD.is() && _aReturnType.getLength())
- {
- try
- {
- Reference< XTypeDescription > xReturnTD;
- if (_xTDMgr->getByHierarchicalName( _aReturnType ) >>= xReturnTD)
- {
- MutexGuard aGuard( getMutex() );
- if (! _xReturnTD.is())
- _xReturnTD = xReturnTD;
- return _xReturnTD;
- }
- }
- catch (NoSuchElementException &)
- {
- }
- // never try again, if no td was found
- _aReturnType = OUString();
- }
- return _xReturnTD;
-}
-//__________________________________________________________________________________________________
-sal_Bool InterfaceMethodImpl::isOneway()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _bIsOneWay;
-}
-//__________________________________________________________________________________________________
-Sequence<Reference<XMethodParameter > > InterfaceMethodImpl::getParameters()
- throw(::com::sun::star::uno::RuntimeException)
-{
- Sequence< Reference< XParameter > > s1(_desc.getParameters());
- Sequence< Reference< XMethodParameter > > s2(s1.getLength());
- for (sal_Int32 i = 0; i < s1.getLength(); ++i) {
- s2[i] = s1[i].get();
- }
- return s2;
-}
-//__________________________________________________________________________________________________
-Sequence<Reference<XTypeDescription > > InterfaceMethodImpl::getExceptions()
- throw(::com::sun::star::uno::RuntimeException)
-{
- Sequence< Reference< XCompoundTypeDescription > > s1(
- _desc.getExceptions());
- Sequence< Reference< XTypeDescription > > s2(s1.getLength());
- for (sal_Int32 i = 0; i < s1.getLength(); ++i) {
- s2[i] = s1[i].get();
- }
- return s2;
-}
-
-
-//##################################################################################################
-//##################################################################################################
-//##################################################################################################
-
-
-//==================================================================================================
-class InterfaceAttributeImpl : public WeakImplHelper1< XInterfaceAttributeTypeDescription2 >
-{
- Reference< XHierarchicalNameAccess > _xTDMgr;
-
- OUString _aTypeName;
- OUString _aMemberName;
-
- OUString _aMemberTypeName;
- Reference< XTypeDescription > _xMemberTD;
-
- sal_Bool _bReadOnly;
- sal_Bool _bBound;
- sal_Int32 _nPosition;
-
- std::auto_ptr< stoc::registry_tdprovider::FunctionDescription > _getter;
- std::auto_ptr< stoc::registry_tdprovider::FunctionDescription > _setter;
-
-public:
- InterfaceAttributeImpl(
- const Reference< XHierarchicalNameAccess > & xTDMgr,
- const OUString & rTypeName,
- const OUString & rMemberName,
- const OUString & rMemberTypeName,
- sal_Bool bReadOnly,
- sal_Bool bBound,
- std::auto_ptr< stoc::registry_tdprovider::FunctionDescription > &
- getter,
- std::auto_ptr< stoc::registry_tdprovider::FunctionDescription > &
- setter,
- sal_Int32 nPosition )
- : _xTDMgr( xTDMgr )
- , _aTypeName( rTypeName )
- , _aMemberName( rMemberName )
- , _aMemberTypeName( rMemberTypeName )
- , _bReadOnly( bReadOnly )
- , _bBound( bBound )
- , _nPosition( nPosition )
- , _getter( getter )
- , _setter( setter )
- {
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- }
- virtual ~InterfaceAttributeImpl();
-
- // XTypeDescription
- virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
-
- // XInterfaceMemberTypeDescription
- virtual OUString SAL_CALL getMemberName() throw(::com::sun::star::uno::RuntimeException);
- virtual sal_Int32 SAL_CALL getPosition() throw(::com::sun::star::uno::RuntimeException);
-
- // XInterfaceAttributeTypeDescription2
- virtual sal_Bool SAL_CALL isReadOnly() throw(::com::sun::star::uno::RuntimeException);
- virtual Reference< XTypeDescription > SAL_CALL getType() throw(::com::sun::star::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isBound() throw (RuntimeException)
- { return _bBound; }
-
- virtual Sequence< Reference< XCompoundTypeDescription > > SAL_CALL
- getGetExceptions() throw (RuntimeException)
- {
- if (_getter.get() != 0) {
- return _getter->getExceptions();
- } else {
- return Sequence< Reference< XCompoundTypeDescription > >();
- }
- }
-
- virtual Sequence< Reference< XCompoundTypeDescription > > SAL_CALL
- getSetExceptions() throw (RuntimeException)
- {
- if (_setter.get() != 0) {
- return _setter->getExceptions();
- } else {
- return Sequence< Reference< XCompoundTypeDescription > >();
- }
- }
-};
-
-InterfaceAttributeImpl::~InterfaceAttributeImpl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-// XTypeDescription
-//__________________________________________________________________________________________________
-TypeClass InterfaceAttributeImpl::getTypeClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return TypeClass_INTERFACE_ATTRIBUTE;
-}
-//__________________________________________________________________________________________________
-OUString InterfaceAttributeImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _aTypeName;
-}
-
-// XInterfaceMemberTypeDescription
-//__________________________________________________________________________________________________
-OUString InterfaceAttributeImpl::getMemberName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _aMemberName;
-}
-//__________________________________________________________________________________________________
-sal_Int32 InterfaceAttributeImpl::getPosition()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _nPosition;
-}
-
-// XInterfaceAttributeTypeDescription2
-//__________________________________________________________________________________________________
-sal_Bool InterfaceAttributeImpl::isReadOnly()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _bReadOnly;
-}
-//__________________________________________________________________________________________________
-Reference<XTypeDescription > InterfaceAttributeImpl::getType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (!_xMemberTD.is() && _aMemberTypeName.getLength())
- {
- try
- {
- Reference< XTypeDescription > xMemberTD;
- if (_xTDMgr->getByHierarchicalName( _aMemberTypeName ) >>= xMemberTD)
- {
- MutexGuard aGuard( getMutex() );
- if (! _xMemberTD.is())
- _xMemberTD = xMemberTD;
- return _xMemberTD;
- }
- }
- catch (NoSuchElementException &)
- {
- }
- // never try again, if no td was found
- _aMemberTypeName = OUString();
- }
- return _xMemberTD;
-}
-
-
-//##################################################################################################
-//##################################################################################################
-//##################################################################################################
-
-void InterfaceTypeDescriptionImpl::checkInterfaceType(
- Reference< XTypeDescription > const & type)
-{
- if (resolveTypedefs(type)->getTypeClass() != TypeClass_INTERFACE) {
- throw RuntimeException(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "Interface base is not an interface type")),
- static_cast< OWeakObject * >(this));
- }
-}
-
-namespace {
-
-class BaseOffset {
-public:
- BaseOffset(Reference< XInterfaceTypeDescription2 > const & desc);
-
- sal_Int32 get() const { return offset; }
-
-private:
- void calculateBases(Reference< XInterfaceTypeDescription2 > const & desc);
-
- void calculate(Reference< XInterfaceTypeDescription2 > const & desc);
-
- std::set< rtl::OUString > set;
- sal_Int32 offset;
-};
-
-BaseOffset::BaseOffset(Reference< XInterfaceTypeDescription2 > const & desc) {
- offset = 0;
- calculateBases(desc);
-}
-
-void BaseOffset::calculateBases(
- Reference< XInterfaceTypeDescription2 > const & desc)
-{
- Sequence< Reference < XTypeDescription > > bases(desc->getBaseTypes());
- for (sal_Int32 i = 0; i < bases.getLength(); ++i) {
- calculate(
- Reference< XInterfaceTypeDescription2 >(
- resolveTypedefs(bases[i]), UNO_QUERY_THROW));
- }
-}
-
-void BaseOffset::calculate(Reference< XInterfaceTypeDescription2 > const & desc)
-{
- if (set.insert(desc->getName()).second) {
- calculateBases(desc);
- offset += desc->getMembers().getLength();
- }
-}
-
-}
-
-//__________________________________________________________________________________________________
-InterfaceTypeDescriptionImpl::InterfaceTypeDescriptionImpl(
- const Reference< XHierarchicalNameAccess > & xTDMgr,
- const OUString & rName, const Sequence< OUString > & rBaseTypes,
- const Sequence< OUString > & rOptionalBaseTypes,
- const Sequence< sal_Int8 > & rBytes, bool published )
- : _xTDMgr( xTDMgr )
- , _aBytes( rBytes )
- , _aName( rName )
- , _aBaseTypes( rBaseTypes )
- , _aOptionalBaseTypes( rOptionalBaseTypes )
- , _membersInit( false )
- , _published( published )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-}
-//__________________________________________________________________________________________________
-InterfaceTypeDescriptionImpl::~InterfaceTypeDescriptionImpl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-TypeClass InterfaceTypeDescriptionImpl::getTypeClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return TypeClass_INTERFACE;
-}
-//__________________________________________________________________________________________________
-OUString InterfaceTypeDescriptionImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _aName;
-}
-
-// XInterfaceTypeDescription2
-//__________________________________________________________________________________________________
-Reference< XTypeDescription > InterfaceTypeDescriptionImpl::getBaseType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- Sequence< Reference< XTypeDescription > > aBaseTypes(getBaseTypes());
- return aBaseTypes.getLength() >= 1 ? aBaseTypes[0] : 0;
-}
-//__________________________________________________________________________________________________
-Uik SAL_CALL InterfaceTypeDescriptionImpl::getUik()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return Uik();
-}
-//__________________________________________________________________________________________________
-Sequence< Reference< XInterfaceMemberTypeDescription > > InterfaceTypeDescriptionImpl::getMembers()
- throw(::com::sun::star::uno::RuntimeException)
-{
- osl::MutexGuard guard(getMutex());
- if (!_membersInit) {
- _nBaseOffset = BaseOffset(this).get();
- typereg::Reader reader(
- _aBytes.getConstArray(), _aBytes.getLength(), false,
- TYPEREG_VERSION_1);
- sal_Int32 count = 0;
- sal_uInt16 methodCount = reader.getMethodCount();
- {for (sal_uInt16 i = 0; i < methodCount; ++i) {
- RTMethodMode flags = reader.getMethodFlags(i);
- if (flags != RT_MODE_ATTRIBUTE_GET
- && flags != RT_MODE_ATTRIBUTE_SET)
- {
- ++count;
- }
- }}
- sal_uInt16 fieldCount = reader.getFieldCount();
- count += fieldCount;
- _members.realloc(count);
- sal_Int32 index = 0;
- {for (sal_uInt16 i = 0; i < fieldCount; ++i) {
- rtl::OUString name(reader.getFieldName(i));
- rtl::OUStringBuffer typeName(getName());
- typeName.appendAscii(RTL_CONSTASCII_STRINGPARAM("::"));
- typeName.append(name);
- RTFieldAccess flags = reader.getFieldFlags(i);
- std::auto_ptr< stoc::registry_tdprovider::FunctionDescription >
- getter;
- std::auto_ptr< stoc::registry_tdprovider::FunctionDescription >
- setter;
- for (sal_uInt16 j = 0; j < methodCount; ++j) {
- if (reader.getMethodName(j) == name) {
- switch (reader.getMethodFlags(j)) {
- case RT_MODE_ATTRIBUTE_GET:
- OSL_ASSERT(getter.get() == 0);
- getter.reset(
- new stoc::registry_tdprovider::FunctionDescription(
- _xTDMgr, _aBytes, j));
- break;
-
- case RT_MODE_ATTRIBUTE_SET:
- OSL_ASSERT(setter.get() == 0);
- setter.reset(
- new stoc::registry_tdprovider::FunctionDescription(
- _xTDMgr, _aBytes, j));
- break;
-
- default:
- OSL_ASSERT(false);
- break;
- }
- }
- }
- _members[index] = new InterfaceAttributeImpl(
- _xTDMgr, typeName.makeStringAndClear(), name,
- reader.getFieldTypeName(i).replace('/', '.'),
- (flags & RT_ACCESS_READONLY) != 0,
- (flags & RT_ACCESS_BOUND) != 0, getter, setter,
- _nBaseOffset + index);
- ++index;
- }}
- {for (sal_uInt16 i = 0; i < methodCount; ++i) {
- RTMethodMode flags = reader.getMethodFlags(i);
- if (flags != RT_MODE_ATTRIBUTE_GET
- && flags != RT_MODE_ATTRIBUTE_SET)
- {
- rtl::OUString name(reader.getMethodName(i));
- rtl::OUStringBuffer typeName(getName());
- typeName.appendAscii(RTL_CONSTASCII_STRINGPARAM("::"));
- typeName.append(name);
- _members[index] = new InterfaceMethodImpl(
- _xTDMgr, typeName.makeStringAndClear(), name,
- reader.getMethodReturnTypeName(i).replace('/', '.'),
- _aBytes, i, flags == RT_MODE_ONEWAY, _nBaseOffset + index);
- ++index;
- }
- }}
- _membersInit = true;
- }
- return _members;
-}
-
-Sequence< Reference< XTypeDescription > >
-InterfaceTypeDescriptionImpl::getBaseTypes() throw (RuntimeException) {
- MutexGuard guard(getMutex());
- if (_xBaseTDs.getLength() == 0 && _aBaseTypes.getLength() != 0) {
- Sequence< Reference< XTypeDescription > > tds(_aBaseTypes.getLength());
- for (sal_Int32 i = 0; i < _aBaseTypes.getLength(); ++i) {
- try {
- _xTDMgr->getByHierarchicalName(_aBaseTypes[i]) >>= tds[i];
- } catch (NoSuchElementException & e) {
- throw RuntimeException(
- (OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.container.NoSuchElementException: "))
- + e.Message),
- static_cast< OWeakObject * >(this));
- }
- OSL_ASSERT(tds[i].is());
- checkInterfaceType(tds[i]);
- }
- _xBaseTDs = tds;
- }
- return _xBaseTDs;
-}
-
-Sequence< Reference< XTypeDescription > >
-InterfaceTypeDescriptionImpl::getOptionalBaseTypes() throw (RuntimeException) {
- MutexGuard guard(getMutex());
- if (_xOptionalBaseTDs.getLength() == 0
- && _aOptionalBaseTypes.getLength() != 0)
- {
- Sequence< Reference< XTypeDescription > > tds(
- _aOptionalBaseTypes.getLength());
- for (sal_Int32 i = 0; i < _aOptionalBaseTypes.getLength(); ++i) {
- try {
- _xTDMgr->getByHierarchicalName(_aOptionalBaseTypes[i])
- >>= tds[i];
- } catch (NoSuchElementException & e) {
- throw RuntimeException(
- (OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.container.NoSuchElementException: "))
- + e.Message),
- static_cast< OWeakObject * >(this));
- }
- OSL_ASSERT(tds[i].is());
- checkInterfaceType(tds[i]);
- }
- _xOptionalBaseTDs = tds;
- }
- return _xOptionalBaseTDs;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/tdmodule.cxx b/stoc/source/registry_tdprovider/tdmodule.cxx
deleted file mode 100644
index 434c07783..000000000
--- a/stoc/source/registry_tdprovider/tdmodule.cxx
+++ /dev/null
@@ -1,128 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include <vector>
-#include <osl/diagnose.h>
-#include "base.hxx"
-
-namespace stoc_rdbtdp
-{
-
-//__________________________________________________________________________________________________
-// virtual
-ModuleTypeDescriptionImpl::~ModuleTypeDescriptionImpl()
-{
- delete _pMembers;
-
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-// virtual
-TypeClass ModuleTypeDescriptionImpl::getTypeClass()
- throw( RuntimeException )
-{
- return TypeClass_MODULE;
-}
-//__________________________________________________________________________________________________
-// virtual
-OUString ModuleTypeDescriptionImpl::getName()
- throw( RuntimeException )
-{
- return _aName;
-}
-
-// XModuleTypeDescription
-//__________________________________________________________________________________________________
-// virtual
-Sequence< Reference< XTypeDescription > > SAL_CALL
-ModuleTypeDescriptionImpl::getMembers()
- throw ( RuntimeException )
-{
- if ( !_pMembers )
- {
- Reference< XTypeDescriptionEnumeration > xEnum;
- try
- {
- xEnum = _xTDMgr->createTypeDescriptionEnumeration(
- _aName,
- Sequence< TypeClass >(),
- TypeDescriptionSearchDepth_ONE );
- }
- catch ( NoSuchTypeNameException const & )
- {
- }
- catch ( InvalidTypeNameException const & )
- {
- }
-
- OSL_ENSURE( xEnum.is(),
- "ModuleTypeDescriptionImpl::getMembers - No enumeration!" );
-
- std::vector< Reference< XTypeDescription > > aTDs;
- while ( xEnum->hasMoreElements() )
- {
- try
- {
- Reference< XTypeDescription > xTD(
- xEnum->nextTypeDescription() );
- aTDs.push_back( xTD );
- }
- catch ( NoSuchElementException const & )
- {
- OSL_FAIL( "ModuleTypeDescriptionImpl::getMembers - "
- " Caught NoSuchElementException!" );
- }
- }
-
- Sequence< Reference< XTypeDescription > > * pMembers
- = new Sequence< Reference< XTypeDescription > >( aTDs.size() );
- for ( sal_Int32 n = 0; n < pMembers->getLength(); n++ )
- (*pMembers)[ n ] = aTDs[ n ];
-
- ClearableMutexGuard aGuard( getMutex() );
- if ( _pMembers )
- {
- aGuard.clear();
- delete pMembers;
- }
- else
- {
- _pMembers = pMembers;
- }
- }
- return *_pMembers;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/tdprop.cxx b/stoc/source/registry_tdprovider/tdprop.cxx
deleted file mode 100644
index c5bea55c1..000000000
--- a/stoc/source/registry_tdprovider/tdprop.cxx
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <osl/diagnose.h>
-#include "base.hxx"
-
-namespace stoc_rdbtdp
-{
-
-//__________________________________________________________________________________________________
-// virtual
-ConstantTypeDescriptionImpl::~ConstantTypeDescriptionImpl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-// virtual
-TypeClass ConstantTypeDescriptionImpl::getTypeClass()
- throw( RuntimeException )
-{
- return TypeClass_CONSTANT;
-}
-//__________________________________________________________________________________________________
-// virtual
-OUString ConstantTypeDescriptionImpl::getName()
- throw( RuntimeException )
-{
- return _aName;
-}
-
-// XConstantTypeDescription
-//__________________________________________________________________________________________________
-// virtual
-Any SAL_CALL ConstantTypeDescriptionImpl::getConstantValue()
- throw( RuntimeException )
-{
- return _aValue;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/tdprovider.cxx b/stoc/source/registry_tdprovider/tdprovider.cxx
deleted file mode 100644
index 6c0ef2cc0..000000000
--- a/stoc/source/registry_tdprovider/tdprovider.cxx
+++ /dev/null
@@ -1,612 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <osl/diagnose.h>
-#include <osl/mutex.hxx>
-#include <uno/dispatcher.h>
-#include <uno/mapping.hxx>
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/compbase4.hxx>
-#include <cppuhelper/implbase2.hxx>
-#include <cppuhelper/typeprovider.hxx>
-
-#include <cppuhelper/weakref.hxx>
-
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XComponent.hpp>
-#include <com/sun/star/lang/XTypeProvider.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/registry/XSimpleRegistry.hpp>
-#include <com/sun/star/registry/XRegistryKey.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/reflection/XTypeDescriptionEnumerationAccess.hpp>
-#include "com/sun/star/uno/RuntimeException.hpp"
-
-#include "registry/reader.hxx"
-#include "registry/version.h"
-#include "base.hxx"
-#include "rdbtdp_tdenumeration.hxx"
-#include "structtypedescription.hxx"
-
-#define SERVICENAME "com.sun.star.reflection.TypeDescriptionProvider"
-#define IMPLNAME "com.sun.star.comp.stoc.RegistryTypeDescriptionProvider"
-
-using namespace com::sun::star;
-using namespace com::sun::star::beans;
-using namespace com::sun::star::registry;
-
-extern rtl_StandardModuleCount g_moduleCount;
-
-namespace stoc_bootstrap
-{
-uno::Sequence< OUString > rdbtdp_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] = OUString(RTL_CONSTASCII_USTRINGPARAM(SERVICENAME));
- return seqNames;
-}
-
-OUString rdbtdp_getImplementationName()
-{
- return OUString(RTL_CONSTASCII_USTRINGPARAM(IMPLNAME));
-}
-}
-
-namespace stoc_rdbtdp
-{
-struct MutexHolder
-{
- Mutex _aComponentMutex;
-};
-//==================================================================================================
-class ProviderImpl
- : public MutexHolder
- , public WeakComponentImplHelper4< XServiceInfo,
- XHierarchicalNameAccess,
- XTypeDescriptionEnumerationAccess,
- XInitialization >
-{
- // XHierarchicalNameAccess + XTypeDescriptionEnumerationAccess wrapper
- // first asking the tdmgr instance, then looking up locally
- class TypeDescriptionManagerWrapper
- : public ::cppu::WeakImplHelper2<
- container::XHierarchicalNameAccess,
- reflection::XTypeDescriptionEnumerationAccess>
- {
- com::sun::star::uno::Reference<container::XHierarchicalNameAccess>
- m_xTDMgr;
- com::sun::star::uno::Reference<container::XHierarchicalNameAccess>
- m_xThisProvider;
- public:
- TypeDescriptionManagerWrapper( ProviderImpl * pProvider )
- : m_xTDMgr( pProvider->_xContext->getValueByName(
- OUString( RTL_CONSTASCII_USTRINGPARAM(
- "/singletons/com.sun.star.reflection."
- "theTypeDescriptionManager") ) ),
- UNO_QUERY_THROW ),
- m_xThisProvider( pProvider )
- {}
- // XHierarchicalNameAccess
- virtual Any SAL_CALL getByHierarchicalName( OUString const & name )
- throw (container::NoSuchElementException, RuntimeException);
- virtual sal_Bool SAL_CALL hasByHierarchicalName( OUString const & name )
- throw (RuntimeException);
-
- // XTypeDescriptionEnumerationAccess
- virtual uno::Reference<
- reflection::XTypeDescriptionEnumeration > SAL_CALL
- createTypeDescriptionEnumeration(
- const ::rtl::OUString& moduleName,
- const uno::Sequence< uno::TypeClass >& types,
- reflection::TypeDescriptionSearchDepth depth )
- throw ( reflection::NoSuchTypeNameException,
- reflection::InvalidTypeNameException,
- uno::RuntimeException );
- };
- friend class TypeDescriptionManagerWrapper;
-
- com::sun::star::uno::Reference< XComponentContext > _xContext;
- com::sun::star::uno::WeakReference<XHierarchicalNameAccess> _xTDMgr;
- com::sun::star::uno::Reference< XHierarchicalNameAccess > getTDMgr() SAL_THROW( () );
-
- RegistryKeyList _aBaseKeys;
-
-protected:
- virtual void SAL_CALL disposing();
-
-public:
- ProviderImpl( const com::sun::star::uno::Reference< XComponentContext > & xContext );
- virtual ~ProviderImpl();
-
- // XInitialization
- virtual void SAL_CALL initialize( const Sequence< Any > & args ) throw (Exception, RuntimeException);
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL supportsService( const OUString & rServiceName ) throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException);
-
- // XHierarchicalNameAccess
- Any getByHierarchicalNameImpl( const OUString & rName );
-
- virtual Any SAL_CALL getByHierarchicalName( const OUString & rName ) throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL hasByHierarchicalName( const OUString & rName ) throw(::com::sun::star::uno::RuntimeException);
-
- // XTypeDescriptionEnumerationAccess
- virtual ::com::sun::star::uno::Reference<
- ::com::sun::star::reflection::XTypeDescriptionEnumeration > SAL_CALL
- createTypeDescriptionEnumeration(
- const ::rtl::OUString& moduleName,
- const ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::TypeClass >& types,
- ::com::sun::star::reflection::TypeDescriptionSearchDepth depth )
- throw ( ::com::sun::star::reflection::NoSuchTypeNameException,
- ::com::sun::star::reflection::InvalidTypeNameException,
- ::com::sun::star::uno::RuntimeException );
-};
-//__________________________________________________________________________________________________
-ProviderImpl::ProviderImpl( const com::sun::star::uno::Reference< XComponentContext > & xContext )
- : WeakComponentImplHelper4<
- XServiceInfo, XHierarchicalNameAccess,
- XTypeDescriptionEnumerationAccess, XInitialization >( _aComponentMutex )
- , _xContext( xContext )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-}
-//__________________________________________________________________________________________________
-ProviderImpl::~ProviderImpl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-//______________________________________________________________________________
-Any ProviderImpl::TypeDescriptionManagerWrapper::getByHierarchicalName(
- OUString const & name ) throw (container::NoSuchElementException,
- RuntimeException)
-{
- try
- {
- // first try tdmgr:
- return m_xTDMgr->getByHierarchicalName( name );
- }
- catch (container::NoSuchElementException &)
- {
- // then lookup locally:
- return m_xThisProvider->getByHierarchicalName( name );
- }
-}
-
-//______________________________________________________________________________
-sal_Bool ProviderImpl::TypeDescriptionManagerWrapper::hasByHierarchicalName(
- OUString const & name ) throw (RuntimeException)
-{
- return m_xTDMgr->hasByHierarchicalName( name ) || m_xThisProvider->hasByHierarchicalName( name );
-}
-
-//______________________________________________________________________________
-uno::Reference< reflection::XTypeDescriptionEnumeration > SAL_CALL
-ProviderImpl::TypeDescriptionManagerWrapper::createTypeDescriptionEnumeration(
- const ::rtl::OUString& moduleName,
- const uno::Sequence< uno::TypeClass >& types,
- reflection::TypeDescriptionSearchDepth depth )
- throw ( reflection::NoSuchTypeNameException,
- reflection::InvalidTypeNameException,
- uno::RuntimeException )
-{
- try
- {
- // first try tdmgr:
- uno::Reference< reflection::XTypeDescriptionEnumerationAccess > xTDEA(
- m_xTDMgr, uno::UNO_QUERY_THROW );
- return
- xTDEA->createTypeDescriptionEnumeration( moduleName, types, depth );
- }
- catch (reflection::NoSuchTypeNameException &)
- {
- // then lookup locally:
- uno::Reference< reflection::XTypeDescriptionEnumerationAccess > xTDEA(
- m_xThisProvider, uno::UNO_QUERY_THROW );
- return
- xTDEA->createTypeDescriptionEnumeration( moduleName, types, depth );
- }
-}
-
-//__________________________________________________________________________________________________
-com::sun::star::uno::Reference< XHierarchicalNameAccess > ProviderImpl::getTDMgr()
- SAL_THROW( () )
-{
- // harden weak reference:
- com::sun::star::uno::Reference<container::XHierarchicalNameAccess> xTDMgr(
- _xTDMgr );
- if (! xTDMgr.is())
- {
- xTDMgr.set( new TypeDescriptionManagerWrapper(this) );
- {
- MutexGuard guard( _aComponentMutex );
- _xTDMgr = xTDMgr;
- }
- }
- return xTDMgr;
-}
-
-//__________________________________________________________________________________________________
-void ProviderImpl::disposing()
-{
- _xContext.clear();
-
- for ( RegistryKeyList::const_iterator iPos( _aBaseKeys.begin() );
- iPos != _aBaseKeys.end(); ++iPos )
- {
- (*iPos)->closeKey();
- }
- _aBaseKeys.clear();
-}
-
-// XInitialization
-//__________________________________________________________________________________________________
-void ProviderImpl::initialize(
- const Sequence< Any > & args )
- throw (Exception, RuntimeException)
-{
- // registries to read from
- Any const * pRegistries = args.getConstArray();
- for ( sal_Int32 nPos = 0; nPos < args.getLength(); ++nPos )
- {
- com::sun::star::uno::Reference< XSimpleRegistry > xRegistry( pRegistries[ nPos ], UNO_QUERY );
- if (xRegistry.is() && xRegistry->isValid())
- {
- com::sun::star::uno::Reference< XRegistryKey > xKey( xRegistry->getRootKey()->openKey(
- OUString( RTL_CONSTASCII_USTRINGPARAM("/UCR") ) ) );
- if (xKey.is() && xKey->isValid())
- {
- _aBaseKeys.push_back( xKey );
- }
- }
- }
-}
-
-// XServiceInfo
-//__________________________________________________________________________________________________
-OUString ProviderImpl::getImplementationName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return stoc_bootstrap::rdbtdp_getImplementationName();
-}
-//__________________________________________________________________________________________________
-sal_Bool ProviderImpl::supportsService( const OUString & rServiceName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- const Sequence< OUString > & rSNL = getSupportedServiceNames();
- const OUString * pArray = rSNL.getConstArray();
- for ( sal_Int32 nPos = rSNL.getLength(); nPos--; )
- {
- if (pArray[nPos] == rServiceName)
- return sal_True;
- }
- return sal_False;
-}
-//__________________________________________________________________________________________________
-Sequence< OUString > ProviderImpl::getSupportedServiceNames()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return stoc_bootstrap::rdbtdp_getSupportedServiceNames();
-}
-
-// XHierarchicalNameAccess
-//__________________________________________________________________________________________________
-Any ProviderImpl::getByHierarchicalNameImpl( const OUString & rName )
-{
- Any aRet;
-
- // read from registry
- OUString aKey( rName.replace( '.', '/' ) );
- for ( RegistryKeyList::const_iterator iPos( _aBaseKeys.begin() );
- !aRet.hasValue() && iPos != _aBaseKeys.end(); ++iPos )
- {
- try
- {
- com::sun::star::uno::Reference< XRegistryKey > xBaseKey( *iPos );
- com::sun::star::uno::Reference< XRegistryKey > xKey( xBaseKey->openKey( aKey ) );
- if (xKey.is())
- {
- // closes key in it's dtor (which is
- // called even in case of exceptions).
- RegistryKeyCloser aCloser( xKey );
-
- if ( xKey->isValid() )
- {
- if (xKey->getValueType() == RegistryValueType_BINARY)
- {
- Sequence< sal_Int8 > aBytes( xKey->getBinaryValue() );
- com::sun::star::uno::Reference< XTypeDescription > xTD(
- createTypeDescription( aBytes,
- getTDMgr(),
- true ) );
- if ( xTD.is() )
- aRet <<= xTD;
- }
- }
- }
- else // might be a constant
- {
- sal_Int32 nIndex = aKey.lastIndexOf( '/' );
- if (nIndex > 0)
- {
- // open module
- com::sun::star::uno::Reference< XRegistryKey > xKey2( xBaseKey->openKey( aKey.copy( 0, nIndex ) ) );
- if (xKey2.is())
- {
- // closes key in it's dtor (which is
- // called even in case of exceptions).
- RegistryKeyCloser aCloser( xKey2 );
-
- if ( xKey2->isValid() )
- {
- if (xKey2->getValueType() == RegistryValueType_BINARY)
- {
- Sequence< sal_Int8 > aBytes( xKey2->getBinaryValue() );
- typereg::Reader aReader(
- aBytes.getConstArray(), aBytes.getLength(),
- false, TYPEREG_VERSION_1);
-
- if (aReader.getTypeClass() == RT_TYPE_MODULE ||
- aReader.getTypeClass() == RT_TYPE_CONSTANTS ||
- aReader.getTypeClass() == RT_TYPE_ENUM)
- {
- OUString aFieldName( aKey.copy( nIndex+1, aKey.getLength() - nIndex -1 ) );
- sal_Int16 nPos = aReader.getFieldCount();
- while (nPos--)
- {
- if (aFieldName.equals(
- aReader.getFieldName(nPos)))
- break;
- }
- if (nPos >= 0)
- aRet = getRTValue(
- aReader.getFieldValue(nPos));
- }
- }
- }
- }
- }
- }
- }
- catch ( InvalidRegistryException const & )
- {
- OSL_FAIL( "ProviderImpl::getByHierarchicalName "
- "- Caught InvalidRegistryException!" );
-
- // openKey, closeKey, getValueType, getBinaryValue, isValid
-
- // Don't stop iteration in this case.
- }
- catch ( NoSuchElementException const & )
- {
- }
- }
- return aRet;
-}
-
-Any SAL_CALL ProviderImpl::getByHierarchicalName( const OUString & rName )
- throw(::com::sun::star::uno::RuntimeException, com::sun::star::container::NoSuchElementException)
-{
- Any aRet( getByHierarchicalNameImpl( rName ) );
-
- if ( !aRet.hasValue() )
- throw NoSuchElementException(
- rName, static_cast< cppu::OWeakObject * >( this ) );
-
- return aRet;
-}
-
-//__________________________________________________________________________________________________
-sal_Bool ProviderImpl::hasByHierarchicalName( const OUString & rName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- return getByHierarchicalNameImpl( rName ).hasValue();
-}
-
-// XTypeDescriptionEnumerationAccess
-//__________________________________________________________________________________________________
-// virtual
-com::sun::star::uno::Reference< XTypeDescriptionEnumeration > SAL_CALL
-ProviderImpl::createTypeDescriptionEnumeration(
- const OUString & moduleName,
- const Sequence< TypeClass > & types,
- TypeDescriptionSearchDepth depth )
- throw ( NoSuchTypeNameException,
- InvalidTypeNameException,
- RuntimeException )
-{
- return com::sun::star::uno::Reference< XTypeDescriptionEnumeration >(
- TypeDescriptionEnumerationImpl::createInstance( getTDMgr(),
- moduleName,
- types,
- depth,
- _aBaseKeys ).get() );
-}
-
-//__________________________________________________________________________________________________
-// global helper function
-
-com::sun::star::uno::Reference< XTypeDescription > resolveTypedefs(
- com::sun::star::uno::Reference< XTypeDescription > const & type)
-{
- com::sun::star::uno::Reference< XTypeDescription > resolved(type);
- while (resolved->getTypeClass() == TypeClass_TYPEDEF) {
- resolved = com::sun::star::uno::Reference< XIndirectTypeDescription >(
- resolved, UNO_QUERY_THROW)->getReferencedType();
- }
- return resolved;
-}
-
-com::sun::star::uno::Reference< XTypeDescription > createTypeDescription(
- const Sequence< sal_Int8 > & rData,
- const com::sun::star::uno::Reference< XHierarchicalNameAccess > & xNameAccess,
- bool bReturnEmptyRefForUnknownType )
-{
- typereg::Reader aReader(
- rData.getConstArray(), rData.getLength(), false, TYPEREG_VERSION_1);
-
- OUString aName( aReader.getTypeName().replace( '/', '.' ) );
-
- switch (aReader.getTypeClass())
- {
- case RT_TYPE_INTERFACE:
- {
- sal_uInt16 n = aReader.getSuperTypeCount();
- com::sun::star::uno::Sequence< rtl::OUString > aBaseTypeNames(n);
- {for (sal_uInt16 i = 0; i < n; ++i) {
- aBaseTypeNames[i] = aReader.getSuperTypeName(i).replace(
- '/', '.');
- }}
- sal_uInt16 n2 = aReader.getReferenceCount();
- com::sun::star::uno::Sequence< rtl::OUString >
- aOptionalBaseTypeNames(n2);
- {for (sal_uInt16 i = 0; i < n2; ++i) {
- OSL_ASSERT(
- aReader.getReferenceSort(i) == RT_REF_SUPPORTS
- && aReader.getReferenceFlags(i) == RT_ACCESS_OPTIONAL);
- aOptionalBaseTypeNames[i] = aReader.getReferenceTypeName(i);
- }}
- return com::sun::star::uno::Reference< XTypeDescription >(
- new InterfaceTypeDescriptionImpl( xNameAccess,
- aName,
- aBaseTypeNames,
- aOptionalBaseTypeNames,
- rData,
- aReader.isPublished() ) );
- }
-
- case RT_TYPE_MODULE:
- {
- com::sun::star::uno::Reference<
- XTypeDescriptionEnumerationAccess > xTDEA(
- xNameAccess, UNO_QUERY );
-
- OSL_ENSURE( xTDEA.is(),
- "No XTypeDescriptionEnumerationAccess!" );
-
- return com::sun::star::uno::Reference< XTypeDescription >(
- new ModuleTypeDescriptionImpl( xTDEA, aName ) );
- }
-
- case RT_TYPE_STRUCT:
- {
- rtl::OUString superTypeName;
- if (aReader.getSuperTypeCount() == 1) {
- superTypeName = aReader.getSuperTypeName(0).replace(
- '/', '.');
- }
- return com::sun::star::uno::Reference< XTypeDescription >(
- new stoc::registry_tdprovider::StructTypeDescription(
- xNameAccess, aName, superTypeName, rData,
- aReader.isPublished()));
- }
-
- case RT_TYPE_ENUM:
- return com::sun::star::uno::Reference< XTypeDescription >(
- new EnumTypeDescriptionImpl( xNameAccess,
- aName,
- getRTValueAsInt32(
- aReader.getFieldValue( 0 ) ),
- rData, aReader.isPublished() ) );
-
- case RT_TYPE_EXCEPTION:
- {
- rtl::OUString superTypeName;
- if (aReader.getSuperTypeCount() == 1) {
- superTypeName = aReader.getSuperTypeName(0).replace(
- '/', '.');
- }
- return com::sun::star::uno::Reference< XTypeDescription >(
- new CompoundTypeDescriptionImpl(
- xNameAccess, TypeClass_EXCEPTION, aName, superTypeName,
- rData, aReader.isPublished()));
- }
-
- case RT_TYPE_TYPEDEF:
- return com::sun::star::uno::Reference< XTypeDescription >(
- new TypedefTypeDescriptionImpl( xNameAccess,
- aName,
- aReader.getSuperTypeName(0)
- .replace( '/', '.' ),
- aReader.isPublished() ) );
- case RT_TYPE_SERVICE:
- return com::sun::star::uno::Reference< XTypeDescription >(
- new ServiceTypeDescriptionImpl(
- xNameAccess, aName, rData, aReader.isPublished() ) );
-
- case RT_TYPE_CONSTANTS:
- return com::sun::star::uno::Reference< XTypeDescription >(
- new ConstantsTypeDescriptionImpl(
- aName, rData, aReader.isPublished() ) );
-
- case RT_TYPE_SINGLETON:
- return com::sun::star::uno::Reference< XTypeDescription >(
- new SingletonTypeDescriptionImpl( xNameAccess,
- aName,
- aReader.getSuperTypeName(0)
- .replace( '/', '.' ),
- aReader.isPublished() ) );
- case RT_TYPE_INVALID:
- case RT_TYPE_OBJECT: // deprecated and not used
- case RT_TYPE_UNION: // deprecated and not used
- OSL_FAIL( "createTypeDescription - Unsupported Type!" );
- break;
-
- default:
- OSL_FAIL( "createTypeDescription - Unknown Type!" );
- break;
- }
-
- // Unknown type.
-
- if ( bReturnEmptyRefForUnknownType )
- return com::sun::star::uno::Reference< XTypeDescription >();
-
- return com::sun::star::uno::Reference< XTypeDescription >(
- new TypeDescriptionImpl( TypeClass_UNKNOWN, aName ) );
-}
-
-}
-
-namespace stoc_bootstrap
-{
-//==================================================================================================
-com::sun::star::uno::Reference< XInterface > SAL_CALL ProviderImpl_create(
- com::sun::star::uno::Reference< XComponentContext > const & xContext )
- throw(::com::sun::star::uno::Exception)
-{
- return com::sun::star::uno::Reference< XInterface >( *new stoc_rdbtdp::ProviderImpl( xContext ) );
-}
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/tdservice.cxx b/stoc/source/registry_tdprovider/tdservice.cxx
deleted file mode 100644
index 031f1a2cf..000000000
--- a/stoc/source/registry_tdprovider/tdservice.cxx
+++ /dev/null
@@ -1,569 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <osl/diagnose.h>
-#include <rtl/ustrbuf.hxx>
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-#include "com/sun/star/uno/RuntimeException.hpp"
-
-#include "registry/reader.hxx"
-#include "registry/version.h"
-#include "base.hxx"
-#include "methoddescription.hxx"
-
-#include <memory>
-
-using namespace com::sun::star;
-using ::rtl::OUStringBuffer;
-
-namespace {
-
-class Constructor:
- public cppu::WeakImplHelper1< XServiceConstructorDescription >
-{
-public:
- Constructor(
- Reference< XHierarchicalNameAccess > const & manager,
- rtl::OUString const & name, Sequence< sal_Int8 > const & bytes,
- sal_uInt16 index):
- m_desc(manager, name, bytes, index) {}
-
- virtual ~Constructor() {}
-
- virtual sal_Bool SAL_CALL isDefaultConstructor() throw (RuntimeException)
- { return m_desc.getName().getLength() == 0; }
-
- virtual rtl::OUString SAL_CALL getName() throw (RuntimeException)
- { return m_desc.getName(); }
-
- virtual Sequence< Reference< XParameter > > SAL_CALL getParameters()
- throw (RuntimeException)
- { return m_desc.getParameters(); }
-
- virtual Sequence< Reference<XCompoundTypeDescription > > SAL_CALL
- getExceptions() throw (RuntimeException)
- { return m_desc.getExceptions(); }
-
-private:
- Constructor(Constructor &); // not implemented
- void operator =(Constructor); // not implemented
-
- stoc::registry_tdprovider::MethodDescription m_desc;
-};
-
-}
-
-namespace stoc_rdbtdp
-{
-
-//==================================================================================================
-//
-// class PropertyTypeDescriptionImpl
-//
-//==================================================================================================
-class PropertyTypeDescriptionImpl : public WeakImplHelper1< XPropertyTypeDescription >
-{
- OUString _aName;
- Reference< XTypeDescription > _xTD;
- sal_Int16 _nFlags;
-
-public:
- PropertyTypeDescriptionImpl( const OUString & rName,
- const Reference< XTypeDescription > & xTD,
- sal_Int16 nFlags )
- : _aName( rName ), _xTD( xTD ), _nFlags( nFlags )
- {
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- }
- virtual ~PropertyTypeDescriptionImpl();
-
- // XTypeDescription
- virtual TypeClass SAL_CALL getTypeClass()
- throw( RuntimeException );
- virtual OUString SAL_CALL getName()
- throw( RuntimeException );
-
- // XPropertyTypeDescription
- virtual sal_Int16 SAL_CALL getPropertyFlags()
- throw ( RuntimeException );
- virtual Reference< XTypeDescription > SAL_CALL getPropertyTypeDescription()
- throw ( RuntimeException );
-};
-
-//__________________________________________________________________________________________________
-// virtual
-PropertyTypeDescriptionImpl::~PropertyTypeDescriptionImpl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-// virtual
-TypeClass PropertyTypeDescriptionImpl::getTypeClass()
- throw ( RuntimeException )
-{
- return TypeClass_PROPERTY;
-}
-//__________________________________________________________________________________________________
-// virtual
-OUString PropertyTypeDescriptionImpl::getName()
- throw ( RuntimeException )
-{
- return _aName;
-}
-
-// XPropertyTypeDescription
-//__________________________________________________________________________________________________
-// virtual
-sal_Int16 SAL_CALL PropertyTypeDescriptionImpl::getPropertyFlags()
- throw ( RuntimeException )
-{
- return _nFlags;
-}
-
-//__________________________________________________________________________________________________
-// virtual
-Reference< XTypeDescription > SAL_CALL
-PropertyTypeDescriptionImpl::getPropertyTypeDescription()
- throw ( RuntimeException )
-{
- return _xTD;
-}
-
-//==================================================================================================
-//
-// ServiceTypeDescriptionImpl implementation
-//
-//==================================================================================================
-
-//__________________________________________________________________________________________________
-// virtual
-ServiceTypeDescriptionImpl::~ServiceTypeDescriptionImpl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-// virtual
-TypeClass ServiceTypeDescriptionImpl::getTypeClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return TypeClass_SERVICE;
-}
-//__________________________________________________________________________________________________
-// virtual
-OUString ServiceTypeDescriptionImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _aName;
-}
-
-// XServiceTypeDescription
-//__________________________________________________________________________________________________
-// virtual
-Sequence< Reference< XServiceTypeDescription > > SAL_CALL
-ServiceTypeDescriptionImpl::getMandatoryServices()
- throw ( RuntimeException )
-{
- getReferences();
- return _aMandatoryServices;
-}
-
-//__________________________________________________________________________________________________
-// virtual
-Sequence< Reference< XServiceTypeDescription > > SAL_CALL
-ServiceTypeDescriptionImpl::getOptionalServices()
- throw ( RuntimeException )
-{
- getReferences();
- return _aOptionalServices;
-}
-
-//__________________________________________________________________________________________________
-// virtual
-Sequence< Reference< XInterfaceTypeDescription > > SAL_CALL
-ServiceTypeDescriptionImpl::getMandatoryInterfaces()
- throw ( RuntimeException )
-{
- getReferences();
- return _aMandatoryInterfaces;
-}
-
-//__________________________________________________________________________________________________
-// virtual
-Sequence< Reference< XInterfaceTypeDescription > > SAL_CALL
-ServiceTypeDescriptionImpl::getOptionalInterfaces()
- throw ( RuntimeException )
-{
- getReferences();
- return _aOptionalInterfaces;
-}
-
-//__________________________________________________________________________________________________
-// virtual
-Sequence< Reference< XPropertyTypeDescription > > SAL_CALL
-ServiceTypeDescriptionImpl::getProperties()
- throw ( RuntimeException )
-{
- {
- MutexGuard guard(getMutex());
- if (_pProps.get() != 0) {
- return *_pProps;
- }
- }
-
- typereg::Reader aReader(
- _aBytes.getConstArray(), _aBytes.getLength(), false, TYPEREG_VERSION_1);
-
- sal_uInt16 nFields = (sal_uInt16)aReader.getFieldCount();
- std::auto_ptr< Sequence< Reference< XPropertyTypeDescription > > >
- pTempProps(
- new Sequence< Reference< XPropertyTypeDescription > >(nFields));
- Reference< XPropertyTypeDescription > * pProps = pTempProps->getArray();
-
- while ( nFields-- )
- {
- // name
- OUStringBuffer aName( _aName );
- aName.appendAscii( "." );
- aName.append( aReader.getFieldName( nFields ) );
-
- // type description
- Reference< XTypeDescription > xTD;
- try
- {
- _xTDMgr->getByHierarchicalName(
- aReader.getFieldTypeName( nFields ).replace( '/', '.' ) )
- >>= xTD;
- }
- catch ( NoSuchElementException const & )
- {
- }
- OSL_ENSURE( xTD.is(), "### no type description for property!" );
-
- // flags
- RTFieldAccess nFlags = aReader.getFieldFlags( nFields );
-
- sal_Int16 nAttribs = 0;
- if ( nFlags & RT_ACCESS_READONLY )
- nAttribs |= beans::PropertyAttribute::READONLY;
- if ( nFlags & RT_ACCESS_OPTIONAL )
- nAttribs |= beans::PropertyAttribute::OPTIONAL;
- if ( nFlags & RT_ACCESS_MAYBEVOID )
- nAttribs |= beans::PropertyAttribute::MAYBEVOID;
- if ( nFlags & RT_ACCESS_BOUND )
- nAttribs |= beans::PropertyAttribute::BOUND;
- if ( nFlags & RT_ACCESS_CONSTRAINED )
- nAttribs |= beans::PropertyAttribute::CONSTRAINED;
- if ( nFlags & RT_ACCESS_TRANSIENT )
- nAttribs |= beans::PropertyAttribute::TRANSIENT;
- if ( nFlags & RT_ACCESS_MAYBEAMBIGUOUS )
- nAttribs |= beans::PropertyAttribute::MAYBEAMBIGUOUS;
- if ( nFlags & RT_ACCESS_MAYBEDEFAULT )
- nAttribs |= beans::PropertyAttribute::MAYBEDEFAULT;
- if ( nFlags & RT_ACCESS_REMOVEABLE )
- nAttribs |= beans::PropertyAttribute::REMOVEABLE;
-
- OSL_ENSURE( !(nFlags & RT_ACCESS_PROPERTY),
- "### RT_ACCESS_PROPERTY is unexpected here!" );
- OSL_ENSURE( !(nFlags & RT_ACCESS_ATTRIBUTE),
- "### RT_ACCESS_ATTRIBUTE is unexpected here!" );
- OSL_ENSURE( !(nFlags & RT_ACCESS_CONST),
- "### RT_ACCESS_CONST is unexpected here!" );
- // always set, unless RT_ACCESS_READONLY is set.
- //OSL_ENSURE( !(nFlags & RT_ACCESS_READWRITE),
- // "### RT_ACCESS_READWRITE is unexpected here" );
- OSL_ENSURE( !(nFlags & RT_ACCESS_DEFAULT),
- "### RT_ACCESS_DEAFAULT is unexpected here" );
-
- pProps[ nFields ]
- = new PropertyTypeDescriptionImpl( aName.makeStringAndClear(),
- xTD,
- nAttribs );
- }
-
- MutexGuard guard(getMutex());
- if (_pProps.get() == 0) {
- _pProps = pTempProps;
- }
- return *_pProps;
-}
-
-sal_Bool ServiceTypeDescriptionImpl::isSingleInterfaceBased()
- throw (RuntimeException)
-{
- getReferences();
- return _xInterfaceTD.is();
-}
-
-Reference< XTypeDescription > ServiceTypeDescriptionImpl::getInterface()
- throw (RuntimeException)
-{
- getReferences();
- return _xInterfaceTD;
-}
-
-Sequence< Reference< XServiceConstructorDescription > >
-ServiceTypeDescriptionImpl::getConstructors() throw (RuntimeException) {
- MutexGuard guard(getMutex());
- if (_pCtors.get() == 0) {
- typereg::Reader reader(
- _aBytes.getConstArray(), _aBytes.getLength(), false,
- TYPEREG_VERSION_1);
- sal_uInt16 ctorCount = reader.getMethodCount();
- std::auto_ptr< Sequence< Reference< XServiceConstructorDescription > > >
- ctors(
- new Sequence< Reference< XServiceConstructorDescription > >(
- ctorCount));
- for (sal_uInt16 i = 0; i < ctorCount; ++i) {
- rtl::OUString name(reader.getMethodName(i));
- if (reader.getMethodFlags(i) != RT_MODE_TWOWAY
- || (!reader.getMethodReturnTypeName(i).equalsAsciiL(
- RTL_CONSTASCII_STRINGPARAM("void")))
- || (name.getLength() == 0
- && (ctorCount != 1 || reader.getMethodParameterCount(i) != 0
- || reader.getMethodExceptionCount(i) != 0)))
- {
- throw RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "Service has bad constructors")),
- static_cast< OWeakObject * >(this));
- }
- (*ctors)[i] = new Constructor(
- _xTDMgr, reader.getMethodName(i), _aBytes, i);
- }
- _pCtors = ctors;
- }
- return *_pCtors;
-}
-
-//__________________________________________________________________________________________________
-void ServiceTypeDescriptionImpl::getReferences()
- throw ( RuntimeException )
-{
- {
- MutexGuard guard(getMutex());
- if (_bInitReferences) {
- return;
- }
- }
- typereg::Reader aReader(
- _aBytes.getConstArray(), _aBytes.getLength(), false, TYPEREG_VERSION_1);
- sal_uInt16 superTypes = aReader.getSuperTypeCount();
- if (superTypes > 1) {
- throw RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "Service has more than one supertype")),
- static_cast< OWeakObject * >(this));
- }
- if (superTypes == 1) {
- OUString aBaseName( aReader.getSuperTypeName(0).replace( '/', '.' ) );
- if ( aReader.getReferenceCount() != 0
- || aReader.getFieldCount() != 0 )
- throw RuntimeException(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "Service is single-interface--based but also has"
- " references and/or properties" ) ),
- static_cast< OWeakObject * >( this ) );
- Reference< XTypeDescription > ifc;
- try
- {
- _xTDMgr->getByHierarchicalName( aBaseName ) >>= ifc;
- }
- catch ( NoSuchElementException const & e )
- {
- throw RuntimeException(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.container.NoSuchElementException: " ) )
- + e.Message,
- static_cast< OWeakObject * >( this ) );
- }
- OSL_ASSERT(ifc.is());
- if (resolveTypedefs(ifc)->getTypeClass() != TypeClass_INTERFACE) {
- throw RuntimeException(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "Single-interface--based service is not based on"
- " interface type" ) ),
- static_cast< OWeakObject * >( this ) );
- }
- MutexGuard guard(getMutex());
- if (!_bInitReferences) {
- _xInterfaceTD = ifc;
- _bInitReferences = true;
- }
- }
- else
- {
- sal_uInt16 nRefs = aReader.getReferenceCount();
- Sequence< Reference< XServiceTypeDescription > > aMandatoryServices(
- nRefs);
- Sequence< Reference< XServiceTypeDescription > > aOptionalServices(
- nRefs);
- Sequence< Reference< XInterfaceTypeDescription > > aMandatoryInterfaces(
- nRefs);
- Sequence< Reference< XInterfaceTypeDescription > > aOptionalInterfaces(
- nRefs);
- sal_uInt32 nMS = 0;
- sal_uInt32 nOS = 0;
- sal_uInt32 nMI = 0;
- sal_uInt32 nOI = 0;
-
- for ( sal_uInt16 nPos = 0; nPos < nRefs; ++nPos )
- {
- RTReferenceType eType = aReader.getReferenceSort( nPos );
- switch ( eType )
- {
- case RT_REF_EXPORTS: // service
- {
- uno::Any aTypeDesc;
- try
- {
- aTypeDesc = _xTDMgr->getByHierarchicalName(
- aReader.getReferenceTypeName( nPos ).replace(
- '/', '.' ) );
- }
- catch ( NoSuchElementException const & e )
- {
- throw RuntimeException(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.container."
- "NoSuchElementException: " ) )
- + e.Message,
- static_cast< OWeakObject * >( this ) );
- }
-
- RTFieldAccess nAccess = aReader.getReferenceFlags( nPos );
- if ( nAccess & RT_ACCESS_OPTIONAL )
- {
- // optional service
- if ( !( aTypeDesc >>= aOptionalServices[ nOS ] ) )
- throw RuntimeException(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "Service 'export' is not a service" ) ),
- static_cast< OWeakObject * >( this ) );
- nOS++;
- }
- else
- {
- // mandatory service
- if ( !( aTypeDesc >>= aMandatoryServices[ nMS ] ) )
- throw RuntimeException(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "Service 'export' is not a service" ) ),
- static_cast< OWeakObject * >( this ) );
- nMS++;
- }
- break;
- }
- case RT_REF_SUPPORTS: // interface
- {
- uno::Any aTypeDesc;
- try
- {
- aTypeDesc = _xTDMgr->getByHierarchicalName(
- aReader.getReferenceTypeName( nPos ).replace(
- '/', '.' ) );
- }
- catch ( NoSuchElementException const & e )
- {
- throw RuntimeException(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.container."
- "NoSuchElementException: " ) )
- + e.Message,
- static_cast< OWeakObject * >( this ) );
- }
-
- RTFieldAccess nAccess = aReader.getReferenceFlags( nPos );
- if ( nAccess & RT_ACCESS_OPTIONAL )
- {
- // optional interface
- if ( !( aTypeDesc >>= aOptionalInterfaces[ nOI ] ) )
- throw RuntimeException(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "Service 'supports' is not an"
- " interface" ) ),
- static_cast< OWeakObject * >( this ) );
- nOI++;
- }
- else
- {
- // mandatory interface
- if ( !( aTypeDesc >>= aMandatoryInterfaces[ nMI ] ) )
- throw RuntimeException(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "Service 'supports' is not an"
- " interface" ) ),
- static_cast< OWeakObject * >( this ) );
- nMI++;
- }
- break;
- }
- case RT_REF_OBSERVES:
- case RT_REF_NEEDS:
- break;
- default:
- OSL_FAIL( "### unsupported reference type!" );
- break;
- }
- }
- aMandatoryServices.realloc( nMS );
- aOptionalServices.realloc( nOS );
- aMandatoryInterfaces.realloc( nMI );
- aOptionalInterfaces.realloc( nOI );
-
- MutexGuard guard(getMutex());
- if (!_bInitReferences) {
- _aMandatoryServices = aMandatoryServices;
- _aOptionalServices = aOptionalServices;
- _aMandatoryInterfaces = aMandatoryInterfaces;
- _aOptionalInterfaces = aOptionalInterfaces;
- _bInitReferences = true;
- }
- }
-}
-
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/registry_tdprovider/tdsingleton.cxx b/stoc/source/registry_tdprovider/tdsingleton.cxx
deleted file mode 100644
index 3e70d06b7..000000000
--- a/stoc/source/registry_tdprovider/tdsingleton.cxx
+++ /dev/null
@@ -1,135 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <osl/diagnose.h>
-#include "base.hxx"
-
-#include "com/sun/star/uno/RuntimeException.hpp"
-
-using namespace com::sun::star;
-
-namespace stoc_rdbtdp
-{
-
-void SingletonTypeDescriptionImpl::init() {
- {
- MutexGuard guard(getMutex());
- if (_xInterfaceTD.is() || _xServiceTD.is()) {
- return;
- }
- }
- Reference< XTypeDescription > base;
- try {
- base = Reference< XTypeDescription >(
- _xTDMgr->getByHierarchicalName(_aBaseName), UNO_QUERY_THROW);
- } catch (NoSuchElementException const & e) {
- throw RuntimeException(
- (OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.container.NoSuchElementException: "))
- + e.Message),
- static_cast< OWeakObject * >(this));
- }
- MutexGuard guard(getMutex());
- if (!_xInterfaceTD.is() && !_xServiceTD.is()) {
- if (resolveTypedefs(base)->getTypeClass() == TypeClass_INTERFACE) {
- _xInterfaceTD = base;
- } else if (base->getTypeClass() == TypeClass_SERVICE) {
- _xServiceTD = Reference< XServiceTypeDescription >(
- base, UNO_QUERY_THROW);
- } else {
- throw RuntimeException(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "Singleton is based on neither interface nor service")),
- static_cast< OWeakObject * >(this));
- }
- }
- OSL_ASSERT(_xInterfaceTD.is() ^ _xServiceTD.is());
-}
-
-//__________________________________________________________________________________________________
-// virtual
-SingletonTypeDescriptionImpl::~SingletonTypeDescriptionImpl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-// virtual
-TypeClass SingletonTypeDescriptionImpl::getTypeClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return TypeClass_SINGLETON;
-}
-//__________________________________________________________________________________________________
-// virtual
-OUString SingletonTypeDescriptionImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _aName;
-}
-
-// XSingletonTypeDescription
-//__________________________________________________________________________________________________
-// virtual
-Reference< XServiceTypeDescription > SAL_CALL
-SingletonTypeDescriptionImpl::getService()
- throw(::com::sun::star::uno::RuntimeException)
-{
- init();
- return _xServiceTD;
-}
-
-// XSingletonTypeDescription2
-//______________________________________________________________________________
-// virtual
-sal_Bool SAL_CALL
-SingletonTypeDescriptionImpl::isInterfaceBased()
- throw(::com::sun::star::uno::RuntimeException)
-{
- init();
- return _xInterfaceTD.is();
-}
-
-//______________________________________________________________________________
-// virtual
-Reference< XTypeDescription > SAL_CALL
-SingletonTypeDescriptionImpl::getInterface()
- throw(::com::sun::star::uno::RuntimeException)
-{
- init();
- return _xInterfaceTD;
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/security/access_controller.cxx b/stoc/source/security/access_controller.cxx
deleted file mode 100644
index b42ab0efb..000000000
--- a/stoc/source/security/access_controller.cxx
+++ /dev/null
@@ -1,1066 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include <vector>
-#include <memory>
-
-#include <osl/diagnose.h>
-#include <osl/interlck.h>
-#include <osl/mutex.hxx>
-#include <osl/thread.hxx>
-
-#include <rtl/ustrbuf.hxx>
-#include <rtl/string.hxx>
-
-#include <uno/current_context.h>
-
-#include <cppuhelper/implbase1.hxx>
-#include <cppuhelper/compbase3.hxx>
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/implementationentry.hxx>
-
-#include <com/sun/star/uno/XCurrentContext.hpp>
-#include <com/sun/star/uno/DeploymentException.hpp>
-#include <com/sun/star/lang/DisposedException.hpp>
-#include <com/sun/star/lang/XComponent.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/security/XAccessController.hpp>
-#include <com/sun/star/security/XPolicy.hpp>
-
-#include "lru_cache.h"
-#include "permissions.h"
-#include "bootstrapservices.hxx"
-
-
-#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
-#define SERVICE_NAME "com.sun.star.security.AccessController"
-#define IMPL_NAME "com.sun.star.security.comp.stoc.AccessController"
-#define USER_CREDS "access-control.user-credentials"
-
-
-using namespace ::std;
-using namespace ::osl;
-using namespace ::cppu;
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using ::rtl::OUString;
-using ::rtl::OUStringBuffer;
-using ::rtl::OString;
-
-extern ::rtl_StandardModuleCount g_moduleCount;
-
-namespace stoc_sec
-{
-// static stuff initialized when loading lib
-static OUString s_envType = OUSTR(CPPU_CURRENT_LANGUAGE_BINDING_NAME);
-static OUString s_acRestriction = OUSTR("access-control.restriction");
-
-//##################################################################################################
-
-/** ac context intersects permissions of two ac contexts
-*/
-class acc_Intersection
- : public WeakImplHelper1< security::XAccessControlContext >
-{
- Reference< security::XAccessControlContext > m_x1, m_x2;
-
- inline acc_Intersection(
- Reference< security::XAccessControlContext > const & x1,
- Reference< security::XAccessControlContext > const & x2 )
- SAL_THROW( () );
-
-public:
- virtual ~acc_Intersection()
- SAL_THROW( () );
-
- static inline Reference< security::XAccessControlContext > create(
- Reference< security::XAccessControlContext > const & x1,
- Reference< security::XAccessControlContext > const & x2 )
- SAL_THROW( () );
-
- // XAccessControlContext impl
- virtual void SAL_CALL checkPermission(
- Any const & perm )
- throw (RuntimeException);
-};
-//__________________________________________________________________________________________________
-inline acc_Intersection::acc_Intersection(
- Reference< security::XAccessControlContext > const & x1,
- Reference< security::XAccessControlContext > const & x2 )
- SAL_THROW( () )
- : m_x1( x1 )
- , m_x2( x2 )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-}
-//__________________________________________________________________________________________________
-acc_Intersection::~acc_Intersection()
- SAL_THROW( () )
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-//--------------------------------------------------------------------------------------------------
-inline Reference< security::XAccessControlContext > acc_Intersection::create(
- Reference< security::XAccessControlContext > const & x1,
- Reference< security::XAccessControlContext > const & x2 )
- SAL_THROW( () )
-{
- if (! x1.is())
- return x2;
- if (! x2.is())
- return x1;
- return new acc_Intersection( x1, x2 );
-}
-//__________________________________________________________________________________________________
-void acc_Intersection::checkPermission(
- Any const & perm )
- throw (RuntimeException)
-{
- m_x1->checkPermission( perm );
- m_x2->checkPermission( perm );
-}
-
-/** ac context unifies permissions of two ac contexts
-*/
-class acc_Union
- : public WeakImplHelper1< security::XAccessControlContext >
-{
- Reference< security::XAccessControlContext > m_x1, m_x2;
-
- inline acc_Union(
- Reference< security::XAccessControlContext > const & x1,
- Reference< security::XAccessControlContext > const & x2 )
- SAL_THROW( () );
-
-public:
- virtual ~acc_Union()
- SAL_THROW( () );
-
- static inline Reference< security::XAccessControlContext > create(
- Reference< security::XAccessControlContext > const & x1,
- Reference< security::XAccessControlContext > const & x2 )
- SAL_THROW( () );
-
- // XAccessControlContext impl
- virtual void SAL_CALL checkPermission(
- Any const & perm )
- throw (RuntimeException);
-};
-//__________________________________________________________________________________________________
-inline acc_Union::acc_Union(
- Reference< security::XAccessControlContext > const & x1,
- Reference< security::XAccessControlContext > const & x2 )
- SAL_THROW( () )
- : m_x1( x1 )
- , m_x2( x2 )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-}
-//__________________________________________________________________________________________________
-acc_Union::~acc_Union()
- SAL_THROW( () )
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-//--------------------------------------------------------------------------------------------------
-inline Reference< security::XAccessControlContext > acc_Union::create(
- Reference< security::XAccessControlContext > const & x1,
- Reference< security::XAccessControlContext > const & x2 )
- SAL_THROW( () )
-{
- if (! x1.is())
- return Reference< security::XAccessControlContext >(); // unrestricted
- if (! x2.is())
- return Reference< security::XAccessControlContext >(); // unrestricted
- return new acc_Union( x1, x2 );
-}
-//__________________________________________________________________________________________________
-void acc_Union::checkPermission(
- Any const & perm )
- throw (RuntimeException)
-{
- try
- {
- m_x1->checkPermission( perm );
- }
- catch (security::AccessControlException &)
- {
- m_x2->checkPermission( perm );
- }
-}
-
-/** ac context doing permission checks on static permissions
-*/
-class acc_Policy
- : public WeakImplHelper1< security::XAccessControlContext >
-{
- PermissionCollection m_permissions;
-
-public:
- inline acc_Policy(
- PermissionCollection const & permissions )
- SAL_THROW( () );
- virtual ~acc_Policy()
- SAL_THROW( () );
-
- // XAccessControlContext impl
- virtual void SAL_CALL checkPermission(
- Any const & perm )
- throw (RuntimeException);
-};
-//__________________________________________________________________________________________________
-inline acc_Policy::acc_Policy(
- PermissionCollection const & permissions )
- SAL_THROW( () )
- : m_permissions( permissions )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-}
-//__________________________________________________________________________________________________
-acc_Policy::~acc_Policy()
- SAL_THROW( () )
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-//__________________________________________________________________________________________________
-void acc_Policy::checkPermission(
- Any const & perm )
- throw (RuntimeException)
-{
- m_permissions.checkPermission( perm );
-}
-
-/** current context overriding dynamic ac restriction
-*/
-class acc_CurrentContext
- : public ImplHelper1< XCurrentContext >
-{
- oslInterlockedCount m_refcount;
-
- Reference< XCurrentContext > m_xDelegate;
- Any m_restriction;
-
-public:
- inline acc_CurrentContext(
- Reference< XCurrentContext > const & xDelegate,
- Reference< security::XAccessControlContext > const & xRestriction )
- SAL_THROW( () );
- virtual ~acc_CurrentContext() SAL_THROW( () );
-
- // XInterface impl
- virtual void SAL_CALL acquire()
- throw ();
- virtual void SAL_CALL release()
- throw ();
-
- // XCurrentContext impl
- virtual Any SAL_CALL getValueByName( OUString const & name )
- throw (RuntimeException);
-};
-//__________________________________________________________________________________________________
-inline acc_CurrentContext::acc_CurrentContext(
- Reference< XCurrentContext > const & xDelegate,
- Reference< security::XAccessControlContext > const & xRestriction )
- SAL_THROW( () )
- : m_refcount( 0 )
- , m_xDelegate( xDelegate )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-
- if (xRestriction.is())
- {
- m_restriction = makeAny( xRestriction );
- }
- // return empty any otherwise on getValueByName(), not null interface
-}
-//__________________________________________________________________________________________________
-acc_CurrentContext::~acc_CurrentContext()
- SAL_THROW( () )
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-//__________________________________________________________________________________________________
-void acc_CurrentContext::acquire()
- throw ()
-{
- ::osl_incrementInterlockedCount( &m_refcount );
-}
-//__________________________________________________________________________________________________
-void acc_CurrentContext::release()
- throw ()
-{
- if (! ::osl_decrementInterlockedCount( &m_refcount ))
- {
- delete this;
- }
-}
-//__________________________________________________________________________________________________
-Any acc_CurrentContext::getValueByName( OUString const & name )
- throw (RuntimeException)
-{
- if (name.equals( s_acRestriction ))
- {
- return m_restriction;
- }
- else if (m_xDelegate.is())
- {
- return m_xDelegate->getValueByName( name );
- }
- else
- {
- return Any();
- }
-}
-
-//##################################################################################################
-
-//--------------------------------------------------------------------------------------------------
-static inline void dispose( Reference< XInterface > const & x )
- SAL_THROW( (RuntimeException) )
-{
- Reference< lang::XComponent > xComp( x, UNO_QUERY );
- if (xComp.is())
- {
- xComp->dispose();
- }
-}
-//--------------------------------------------------------------------------------------------------
-static inline Reference< security::XAccessControlContext > getDynamicRestriction(
- Reference< XCurrentContext > const & xContext )
- SAL_THROW( (RuntimeException) )
-{
- if (xContext.is())
- {
- Any acc( xContext->getValueByName( s_acRestriction ) );
- if (typelib_TypeClass_INTERFACE == acc.pType->eTypeClass)
- {
- // avoid ref-counting
- OUString const & typeName =
- *reinterpret_cast< OUString const * >( &acc.pType->pTypeName );
- if (typeName.equalsAsciiL(
- RTL_CONSTASCII_STRINGPARAM("com.sun.star.security.XAccessControlContext") ))
- {
- return Reference< security::XAccessControlContext >(
- *reinterpret_cast< security::XAccessControlContext ** const >( acc.pData ) );
- }
- else // try to query
- {
- return Reference< security::XAccessControlContext >::query(
- *reinterpret_cast< XInterface ** const >( acc.pData ) );
- }
- }
- }
- return Reference< security::XAccessControlContext >();
-}
-//==================================================================================================
-class cc_reset
-{
- void * m_cc;
-public:
- inline cc_reset( void * cc ) SAL_THROW( () )
- : m_cc( cc ) {}
- inline ~cc_reset() SAL_THROW( () )
- { ::uno_setCurrentContext( m_cc, s_envType.pData, 0 ); }
-};
-
-//##################################################################################################
-
-struct MutexHolder
-{
- Mutex m_mutex;
-};
-typedef WeakComponentImplHelper3<
- security::XAccessController, lang::XServiceInfo, lang::XInitialization > t_helper;
-
-//==================================================================================================
-class AccessController
- : public MutexHolder
- , public t_helper
-{
- Reference< XComponentContext > m_xComponentContext;
-
- Reference< security::XPolicy > m_xPolicy;
- Reference< security::XPolicy > const & getPolicy()
- SAL_THROW( (RuntimeException) );
-
- // mode
- enum Mode { OFF, ON, DYNAMIC_ONLY, SINGLE_USER, SINGLE_DEFAULT_USER } m_mode;
-
- PermissionCollection m_defaultPermissions;
- // for single-user mode
- PermissionCollection m_singleUserPermissions;
- OUString m_singleUserId;
- bool m_defaultPerm_init;
- bool m_singleUser_init;
- // for multi-user mode
- lru_cache< OUString, PermissionCollection, ::rtl::OUStringHash, equal_to< OUString > >
- m_user2permissions;
-
- ThreadData m_rec;
- typedef vector< pair< OUString, Any > > t_rec_vec;
- inline void clearPostPoned() SAL_THROW( () );
- void checkAndClearPostPoned() SAL_THROW( (RuntimeException) );
-
- PermissionCollection getEffectivePermissions(
- Reference< XCurrentContext > const & xContext,
- Any const & demanded_perm )
- SAL_THROW( (RuntimeException) );
-
-protected:
- virtual void SAL_CALL disposing();
-
-public:
- AccessController( Reference< XComponentContext > const & xComponentContext )
- SAL_THROW( (RuntimeException) );
- virtual ~AccessController()
- SAL_THROW( () );
-
- // XInitialization impl
- virtual void SAL_CALL initialize(
- Sequence< Any > const & arguments )
- throw (Exception);
-
- // XAccessController impl
- virtual void SAL_CALL checkPermission(
- Any const & perm )
- throw (RuntimeException);
- virtual Any SAL_CALL doRestricted(
- Reference< security::XAction > const & xAction,
- Reference< security::XAccessControlContext > const & xRestriction )
- throw (Exception);
- virtual Any SAL_CALL doPrivileged(
- Reference< security::XAction > const & xAction,
- Reference< security::XAccessControlContext > const & xRestriction )
- throw (Exception);
- virtual Reference< security::XAccessControlContext > SAL_CALL getContext()
- throw (RuntimeException);
-
- // XServiceInfo impl
- virtual OUString SAL_CALL getImplementationName()
- throw (RuntimeException);
- virtual sal_Bool SAL_CALL supportsService( OUString const & serviceName )
- throw (RuntimeException);
- virtual Sequence< OUString > SAL_CALL getSupportedServiceNames()
- throw (RuntimeException);
-};
-//__________________________________________________________________________________________________
-AccessController::AccessController( Reference< XComponentContext > const & xComponentContext )
- SAL_THROW( (RuntimeException) )
- : t_helper( m_mutex )
- , m_xComponentContext( xComponentContext )
- , m_mode( ON ) // default
- , m_defaultPerm_init( false )
- , m_singleUser_init( false )
- , m_rec( 0 )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-
- OUString mode;
- if (m_xComponentContext->getValueByName( OUSTR("/services/" SERVICE_NAME "/mode") ) >>= mode)
- {
- if (mode.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("off") ))
- {
- m_mode = OFF;
- }
- else if (mode.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("on") ))
- {
- m_mode = ON;
- }
- else if (mode.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("dynamic-only") ))
- {
- m_mode = DYNAMIC_ONLY;
- }
- else if (mode.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("single-user") ))
- {
- m_xComponentContext->getValueByName(
- OUSTR("/services/" SERVICE_NAME "/single-user-id") ) >>= m_singleUserId;
- if (! m_singleUserId.getLength())
- {
- throw RuntimeException(
- OUSTR("expected a user id in component context entry "
- "\"/services/" SERVICE_NAME "/single-user-id\"!"),
- (OWeakObject *)this );
- }
- m_mode = SINGLE_USER;
- }
- else if (mode.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("single-default-user") ))
- {
- m_mode = SINGLE_DEFAULT_USER;
- }
- }
-
- // switch on caching for DYNAMIC_ONLY and ON (sharable multi-user process)
- if (ON == m_mode || DYNAMIC_ONLY == m_mode)
- {
- sal_Int32 cacheSize = 0; // multi-user cache size
- if (! (m_xComponentContext->getValueByName(
- OUSTR("/services/" SERVICE_NAME "/user-cache-size") ) >>= cacheSize))
- {
- cacheSize = 128; // reasonable default?
- }
-#ifdef __CACHE_DIAGNOSE
- cacheSize = 2;
-#endif
- m_user2permissions.setSize( cacheSize );
- }
-}
-//__________________________________________________________________________________________________
-AccessController::~AccessController()
- SAL_THROW( () )
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-//__________________________________________________________________________________________________
-void AccessController::disposing()
-{
- m_mode = OFF; // avoid checks from now on xxx todo review/ better DYNAMIC_ONLY?
- m_xPolicy.clear();
- m_xComponentContext.clear();
-}
-
-// XInitialization impl
-//__________________________________________________________________________________________________
-void AccessController::initialize(
- Sequence< Any > const & arguments )
- throw (Exception)
-{
- // xxx todo: review for forking
- // portal forking hack: re-initialize for another user-id
- if (SINGLE_USER != m_mode) // only if in single-user mode
- {
- throw RuntimeException(
- OUSTR("invalid call: ac must be in \"single-user\" mode!"), (OWeakObject *)this );
- }
- OUString userId;
- arguments[ 0 ] >>= userId;
- if (! userId.getLength())
- {
- throw RuntimeException(
- OUSTR("expected a user-id as first argument!"), (OWeakObject *)this );
- }
- // assured that no sync is necessary: no check happens at this forking time
- m_singleUserId = userId;
- m_singleUser_init = false;
-}
-
-//__________________________________________________________________________________________________
-Reference< security::XPolicy > const & AccessController::getPolicy()
- SAL_THROW( (RuntimeException) )
-{
- // get policy singleton
- if (! m_xPolicy.is())
- {
- Reference< security::XPolicy > xPolicy;
- m_xComponentContext->getValueByName(
- OUSTR("/singletons/com.sun.star.security.thePolicy") ) >>= xPolicy;
- if (xPolicy.is())
- {
- MutexGuard guard( m_mutex );
- if (! m_xPolicy.is())
- {
- m_xPolicy = xPolicy;
- }
- }
- else
- {
- throw SecurityException(
- OUSTR("cannot get policy singleton!"), (OWeakObject *)this );
- }
- }
- return m_xPolicy;
-}
-
-#ifdef __DIAGNOSE
-static void dumpPermissions(
- PermissionCollection const & collection, OUString const & userId = OUString() ) SAL_THROW( () )
-{
- OUStringBuffer buf( 48 );
- if (userId.getLength())
- {
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("> dumping permissions of user \"") );
- buf.append( userId );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\":") );
- }
- else
- {
- buf.appendAscii(
- RTL_CONSTASCII_STRINGPARAM("> dumping default permissions:") );
- }
- OString str( ::rtl::OUStringToOString( buf.makeStringAndClear(), RTL_TEXTENCODING_ASCII_US ) );
- OSL_TRACE( "%s", str.getStr() );
- Sequence< OUString > permissions( collection.toStrings() );
- OUString const * p = permissions.getConstArray();
- for ( sal_Int32 nPos = 0; nPos < permissions.getLength(); ++nPos )
- {
- OString str( ::rtl::OUStringToOString( p[ nPos ], RTL_TEXTENCODING_ASCII_US ) );
- OSL_TRACE( "%s", str.getStr() );
- }
- OSL_TRACE( "> permission dump done" );
-}
-#endif
-
-
-//__________________________________________________________________________________________________
-inline void AccessController::clearPostPoned() SAL_THROW( () )
-{
- delete reinterpret_cast< t_rec_vec * >( m_rec.getData() );
- m_rec.setData( 0 );
-}
-//__________________________________________________________________________________________________
-void AccessController::checkAndClearPostPoned() SAL_THROW( (RuntimeException) )
-{
- // check postponed permissions
- auto_ptr< t_rec_vec > rec( reinterpret_cast< t_rec_vec * >( m_rec.getData() ) );
- m_rec.setData( 0 ); // takeover ownership
- OSL_ASSERT( rec.get() );
- if (rec.get())
- {
- t_rec_vec const & vec = *rec.get();
- switch (m_mode)
- {
- case SINGLE_USER:
- {
- OSL_ASSERT( m_singleUser_init );
- for ( size_t nPos = 0; nPos < vec.size(); ++nPos )
- {
- pair< OUString, Any > const & p = vec[ nPos ];
- OSL_ASSERT( m_singleUserId.equals( p.first ) );
- m_singleUserPermissions.checkPermission( p.second );
- }
- break;
- }
- case SINGLE_DEFAULT_USER:
- {
- OSL_ASSERT( m_defaultPerm_init );
- for ( size_t nPos = 0; nPos < vec.size(); ++nPos )
- {
- pair< OUString, Any > const & p = vec[ nPos ];
- OSL_ASSERT( !p.first.getLength() ); // default-user
- m_defaultPermissions.checkPermission( p.second );
- }
- break;
- }
- case ON:
- {
- for ( size_t nPos = 0; nPos < vec.size(); ++nPos )
- {
- pair< OUString, Any > const & p = vec[ nPos ];
- PermissionCollection const * pPermissions;
- // lookup policy for user
- {
- MutexGuard guard( m_mutex );
- pPermissions = m_user2permissions.lookup( p.first );
- }
- OSL_ASSERT( pPermissions );
- if (pPermissions)
- {
- pPermissions->checkPermission( p.second );
- }
- }
- break;
- }
- default:
- OSL_FAIL( "### this should never be called in this ac mode!" );
- break;
- }
- }
-}
-//__________________________________________________________________________________________________
-/** this is the only function calling the policy singleton and thus has to take care
- of recurring calls!
-
- @param demanded_perm (if not empty) is the demanded permission of a checkPermission() call
- which will be postponed for recurring calls
-*/
-PermissionCollection AccessController::getEffectivePermissions(
- Reference< XCurrentContext > const & xContext,
- Any const & demanded_perm )
- SAL_THROW( (RuntimeException) )
-{
- OUString userId;
-
- switch (m_mode)
- {
- case SINGLE_USER:
- {
- if (m_singleUser_init)
- return m_singleUserPermissions;
- userId = m_singleUserId;
- break;
- }
- case SINGLE_DEFAULT_USER:
- {
- if (m_defaultPerm_init)
- return m_defaultPermissions;
- break;
- }
- case ON:
- {
- if (xContext.is())
- {
- xContext->getValueByName( OUSTR(USER_CREDS ".id") ) >>= userId;
- }
- if (! userId.getLength())
- {
- throw SecurityException(
- OUSTR("cannot determine current user in multi-user ac!"), (OWeakObject *)this );
- }
-
- // lookup policy for user
- MutexGuard guard( m_mutex );
- PermissionCollection const * pPermissions = m_user2permissions.lookup( userId );
- if (pPermissions)
- return *pPermissions;
- break;
- }
- default:
- OSL_FAIL( "### this should never be called in this ac mode!" );
- return PermissionCollection();
- }
-
- // call on policy
- // iff this is a recurring call for the default user, then grant all permissions
- t_rec_vec * rec = reinterpret_cast< t_rec_vec * >( m_rec.getData() );
- if (rec) // tls entry exists => this is recursive call
- {
- if (demanded_perm.hasValue())
- {
- // enqueue
- rec->push_back( pair< OUString, Any >( userId, demanded_perm ) );
- }
-#ifdef __DIAGNOSE
- OUStringBuffer buf( 48 );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("> info: recurring call of user \"") );
- buf.append( userId );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\"") );
- OString str(
- ::rtl::OUStringToOString( buf.makeStringAndClear(), RTL_TEXTENCODING_ASCII_US ) );
- OSL_TRACE( "%s", str.getStr() );
-#endif
- return PermissionCollection( new AllPermission() );
- }
- else // no tls
- {
- rec = new t_rec_vec;
- m_rec.setData( rec );
- }
-
- try // calls on API
- {
- // init default permissions
- if (! m_defaultPerm_init)
- {
- PermissionCollection defaultPermissions(
- getPolicy()->getDefaultPermissions() );
- // assign
- MutexGuard guard( m_mutex );
- if (! m_defaultPerm_init)
- {
- m_defaultPermissions = defaultPermissions;
- m_defaultPerm_init = true;
- }
-#ifdef __DIAGNOSE
- dumpPermissions( m_defaultPermissions );
-#endif
- }
-
- PermissionCollection ret;
-
- // init user permissions
- switch (m_mode)
- {
- case SINGLE_USER:
- {
- ret = PermissionCollection(
- getPolicy()->getPermissions( userId ), m_defaultPermissions );
- {
- // assign
- MutexGuard guard( m_mutex );
- if (m_singleUser_init)
- {
- ret = m_singleUserPermissions;
- }
- else
- {
- m_singleUserPermissions = ret;
- m_singleUser_init = true;
- }
- }
-#ifdef __DIAGNOSE
- dumpPermissions( ret, userId );
-#endif
- break;
- }
- case SINGLE_DEFAULT_USER:
- {
- ret = m_defaultPermissions;
- break;
- }
- case ON:
- {
- ret = PermissionCollection(
- getPolicy()->getPermissions( userId ), m_defaultPermissions );
- {
- // cache
- MutexGuard guard( m_mutex );
- m_user2permissions.set( userId, ret );
- }
-#ifdef __DIAGNOSE
- dumpPermissions( ret, userId );
-#endif
- break;
- }
- default:
- break;
- }
-
- // check postponed
- checkAndClearPostPoned();
- return ret;
- }
- catch (security::AccessControlException & exc) // wrapped into DeploymentException
- {
- clearPostPoned(); // safety: exception could have happened before checking postponed?
- OUStringBuffer buf( 64 );
- buf.appendAscii(
- RTL_CONSTASCII_STRINGPARAM("deployment error (AccessControlException occurred): ") );
- buf.append( exc.Message );
- throw DeploymentException( buf.makeStringAndClear(), exc.Context );
- }
- catch (RuntimeException &)
- {
- // dont check postponed, just cleanup
- clearPostPoned();
- delete reinterpret_cast< t_rec_vec * >( m_rec.getData() );
- m_rec.setData( 0 );
- throw;
- }
- catch (Exception &)
- {
- // check postponed permissions first
- // => AccessControlExceptions are errors, user exceptions not!
- checkAndClearPostPoned();
- throw;
- }
- catch (...)
- {
- // dont check postponed, just cleanup
- clearPostPoned();
- throw;
- }
-}
-
-// XAccessController impl
-//__________________________________________________________________________________________________
-void AccessController::checkPermission(
- Any const & perm )
- throw (RuntimeException)
-{
- if (rBHelper.bDisposed)
- {
- throw lang::DisposedException(
- OUSTR("checkPermission() call on disposed AccessController!"), (OWeakObject *)this );
- }
-
- if (OFF == m_mode)
- return;
-
- // first dynamic check of ac contexts
- Reference< XCurrentContext > xContext;
- ::uno_getCurrentContext( (void **)&xContext, s_envType.pData, 0 );
- Reference< security::XAccessControlContext > xACC( getDynamicRestriction( xContext ) );
- if (xACC.is())
- {
- xACC->checkPermission( perm );
- }
-
- if (DYNAMIC_ONLY == m_mode)
- return;
-
- // then static check
- getEffectivePermissions( xContext, perm ).checkPermission( perm );
-}
-//__________________________________________________________________________________________________
-Any AccessController::doRestricted(
- Reference< security::XAction > const & xAction,
- Reference< security::XAccessControlContext > const & xRestriction )
- throw (Exception)
-{
- if (rBHelper.bDisposed)
- {
- throw lang::DisposedException(
- OUSTR("doRestricted() call on disposed AccessController!"), (OWeakObject *)this );
- }
-
- if (OFF == m_mode) // optimize this way, because no dynamic check will be performed
- return xAction->run();
-
- if (xRestriction.is())
- {
- Reference< XCurrentContext > xContext;
- ::uno_getCurrentContext( (void **)&xContext, s_envType.pData, 0 );
-
- // override restriction
- Reference< XCurrentContext > xNewContext(
- new acc_CurrentContext( xContext, acc_Intersection::create(
- xRestriction, getDynamicRestriction( xContext ) ) ) );
- ::uno_setCurrentContext( xNewContext.get(), s_envType.pData, 0 );
- cc_reset reset( xContext.get() );
- return xAction->run();
- }
- else
- {
- return xAction->run();
- }
-}
-//__________________________________________________________________________________________________
-Any AccessController::doPrivileged(
- Reference< security::XAction > const & xAction,
- Reference< security::XAccessControlContext > const & xRestriction )
- throw (Exception)
-{
- if (rBHelper.bDisposed)
- {
- throw lang::DisposedException(
- OUSTR("doPrivileged() call on disposed AccessController!"), (OWeakObject *)this );
- }
-
- if (OFF == m_mode) // no dynamic check will be performed
- {
- return xAction->run();
- }
-
- Reference< XCurrentContext > xContext;
- ::uno_getCurrentContext( (void **)&xContext, s_envType.pData, 0 );
-
- Reference< security::XAccessControlContext > xOldRestr(
- getDynamicRestriction( xContext ) );
-
- if (xOldRestr.is()) // previous restriction
- {
- // override restriction
- Reference< XCurrentContext > xNewContext(
- new acc_CurrentContext( xContext, acc_Union::create( xRestriction, xOldRestr ) ) );
- ::uno_setCurrentContext( xNewContext.get(), s_envType.pData, 0 );
- cc_reset reset( xContext.get() );
- return xAction->run();
- }
- else // no previous restriction => never current restriction
- {
- return xAction->run();
- }
-}
-//__________________________________________________________________________________________________
-Reference< security::XAccessControlContext > AccessController::getContext()
- throw (RuntimeException)
-{
- if (rBHelper.bDisposed)
- {
- throw lang::DisposedException(
- OUSTR("getContext() call on disposed AccessController!"), (OWeakObject *)this );
- }
-
- if (OFF == m_mode) // optimize this way, because no dynamic check will be performed
- {
- return new acc_Policy( PermissionCollection( new AllPermission() ) );
- }
-
- Reference< XCurrentContext > xContext;
- ::uno_getCurrentContext( (void **)&xContext, s_envType.pData, 0 );
-
- return acc_Intersection::create(
- getDynamicRestriction( xContext ),
- new acc_Policy( getEffectivePermissions( xContext, Any() ) ) );
-}
-
-// XServiceInfo impl
-//__________________________________________________________________________________________________
-OUString AccessController::getImplementationName()
- throw (RuntimeException)
-{
- return stoc_bootstrap::ac_getImplementationName();
-}
-//__________________________________________________________________________________________________
-sal_Bool AccessController::supportsService( OUString const & serviceName )
- throw (RuntimeException)
-{
- Sequence< OUString > aSNL = getSupportedServiceNames();
- const OUString * pNames = aSNL.getConstArray();
- for ( sal_Int32 nPos = aSNL.getLength(); --nPos; )
- {
- if (serviceName.equals( pNames[ nPos ] ))
- {
- return sal_True;
- }
- }
- return sal_False;
-}
-//__________________________________________________________________________________________________
-Sequence< OUString > AccessController::getSupportedServiceNames()
- throw (RuntimeException)
-{
- return stoc_bootstrap::ac_getSupportedServiceNames();
-}
-}
-//##################################################################################################
-namespace stoc_bootstrap {
-//--------------------------------------------------------------------------------------------------
-Reference< XInterface > SAL_CALL ac_create(
- Reference< XComponentContext > const & xComponentContext )
- SAL_THROW( (Exception) )
-{
- return (OWeakObject *)new stoc_sec::AccessController( xComponentContext );
-}
-//--------------------------------------------------------------------------------------------------
-Sequence< OUString > ac_getSupportedServiceNames() SAL_THROW( () )
-{
- Sequence< OUString > aSNS( 1 );
- aSNS.getArray()[0] = OUString(RTL_CONSTASCII_USTRINGPARAM(SERVICE_NAME));
- return aSNS;
-}
-//--------------------------------------------------------------------------------------------------
-OUString ac_getImplementationName() SAL_THROW( () )
-{
- static OUString s_implName = OUSTR(IMPL_NAME);
- return s_implName;
-}
-//--------------------------------------------------------------------------------------------------
-Reference< XInterface > SAL_CALL filepolicy_create(
- Reference< XComponentContext > const & xComponentContext )
- SAL_THROW( (Exception) );
-//--------------------------------------------------------------------------------------------------
-Sequence< OUString > filepolicy_getSupportedServiceNames() SAL_THROW( () );
-//--------------------------------------------------------------------------------------------------
-OUString filepolicy_getImplementationName() SAL_THROW( () );
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/security/file_policy.cxx b/stoc/source/security/file_policy.cxx
deleted file mode 100644
index 109fecc0b..000000000
--- a/stoc/source/security/file_policy.cxx
+++ /dev/null
@@ -1,604 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include <boost/unordered_map.hpp>
-
-#include <osl/diagnose.h>
-#include <osl/file.h>
-#include <rtl/byteseq.hxx>
-#include <rtl/string.hxx>
-#include <rtl/ustrbuf.hxx>
-
-#include <cppuhelper/access_control.hxx>
-#include <cppuhelper/compbase2.hxx>
-#include <cppuhelper/implementationentry.hxx>
-
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/security/XAccessController.hpp>
-#include <com/sun/star/security/XPolicy.hpp>
-#include <com/sun/star/security/AllPermission.hpp>
-#include <com/sun/star/security/RuntimePermission.hpp>
-#include <com/sun/star/io/FilePermission.hpp>
-#include <com/sun/star/connection/SocketPermission.hpp>
-
-#include "bootstrapservices.hxx"
-
-#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
-#define SERVICE_NAME "com.sun.star.security.Policy"
-#define IMPL_NAME "com.sun.star.security.comp.stoc.FilePolicy"
-
-using namespace ::osl;
-using namespace ::rtl;
-using namespace ::cppu;
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-
-extern ::rtl_StandardModuleCount g_moduleCount;
-
-namespace stoc_sec
-{
-//--------------------------------------------------------------------------------------------------
-static inline void dispose( Reference< XInterface > const & x )
- SAL_THROW( (RuntimeException) )
-{
- Reference< lang::XComponent > xComp( x, UNO_QUERY );
- if (xComp.is())
- {
- xComp->dispose();
- }
-}
-
-//##################################################################################################
-
-struct MutexHolder
-{
- Mutex m_mutex;
-};
-typedef WeakComponentImplHelper2< security::XPolicy, lang::XServiceInfo > t_helper;
-
-//==================================================================================================
-class FilePolicy
- : public MutexHolder
- , public t_helper
-{
- Reference< XComponentContext > m_xComponentContext;
- AccessControl m_ac;
-
- Sequence< Any > m_defaultPermissions;
- typedef boost::unordered_map< OUString, Sequence< Any >, OUStringHash > t_permissions;
- t_permissions m_userPermissions;
- bool m_init;
-
-protected:
- virtual void SAL_CALL disposing();
-
-public:
- FilePolicy( Reference< XComponentContext > const & xComponentContext )
- SAL_THROW( () );
- virtual ~FilePolicy()
- SAL_THROW( () );
-
- // XPolicy impl
- virtual Sequence< Any > SAL_CALL getPermissions(
- OUString const & userId )
- throw (RuntimeException);
- virtual Sequence< Any > SAL_CALL getDefaultPermissions()
- throw (RuntimeException);
- virtual void SAL_CALL refresh()
- throw (RuntimeException);
-
- // XServiceInfo impl
- virtual OUString SAL_CALL getImplementationName()
- throw (RuntimeException);
- virtual sal_Bool SAL_CALL supportsService( OUString const & serviceName )
- throw (RuntimeException);
- virtual Sequence< OUString > SAL_CALL getSupportedServiceNames()
- throw (RuntimeException);
-};
-//__________________________________________________________________________________________________
-FilePolicy::FilePolicy( Reference< XComponentContext > const & xComponentContext )
- SAL_THROW( () )
- : t_helper( m_mutex )
- , m_xComponentContext( xComponentContext )
- , m_ac( xComponentContext )
- , m_init( false )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-}
-//__________________________________________________________________________________________________
-FilePolicy::~FilePolicy()
- SAL_THROW( () )
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-//__________________________________________________________________________________________________
-void FilePolicy::disposing()
-{
- m_userPermissions.clear();
- m_defaultPermissions = Sequence< Any >();
- m_xComponentContext.clear();
-}
-
-//__________________________________________________________________________________________________
-Sequence< Any > FilePolicy::getPermissions(
- OUString const & userId )
- throw (RuntimeException)
-{
- if (! m_init)
- {
- refresh();
- m_init = true;
- }
-
- MutexGuard guard( m_mutex );
- t_permissions::iterator iFind( m_userPermissions.find( userId ) );
- if (m_userPermissions.end() == iFind)
- {
- return Sequence< Any >();
- }
- else
- {
- return iFind->second;
- }
-}
-//__________________________________________________________________________________________________
-Sequence< Any > FilePolicy::getDefaultPermissions()
- throw (RuntimeException)
-{
- if (! m_init)
- {
- refresh();
- m_init = true;
- }
-
- MutexGuard guard( m_mutex );
- return m_defaultPermissions;
-}
-
-//==================================================================================================
-class PolicyReader
-{
- OUString m_fileName;
- oslFileHandle m_file;
-
- sal_Int32 m_linepos;
- ByteSequence m_line;
- sal_Int32 m_pos;
- sal_Unicode m_back;
-
- sal_Unicode get()
- SAL_THROW( (RuntimeException) );
- inline void back( sal_Unicode c ) SAL_THROW( () )
- { m_back = c; }
-
- inline bool isWhiteSpace( sal_Unicode c ) const SAL_THROW( () )
- { return (' ' == c || '\t' == c || '\n' == c || '\r' == c); }
- void skipWhiteSpace()
- SAL_THROW( (RuntimeException) );
-
- inline bool isCharToken( sal_Unicode c ) const SAL_THROW( () )
- { return (';' == c || ',' == c || '{' == c || '}' == c); }
-
-public:
- PolicyReader( OUString const & file, AccessControl & ac )
- SAL_THROW( (RuntimeException) );
- ~PolicyReader()
- SAL_THROW( () );
-
- void error( OUString const & msg )
- SAL_THROW( (RuntimeException) );
-
- OUString getToken()
- SAL_THROW( (RuntimeException) );
- OUString assureToken()
- SAL_THROW( (RuntimeException) );
- OUString getQuotedToken()
- SAL_THROW( (RuntimeException) );
- OUString assureQuotedToken()
- SAL_THROW( (RuntimeException) );
- void assureToken( sal_Unicode token )
- SAL_THROW( (RuntimeException) );
-};
-//__________________________________________________________________________________________________
-void PolicyReader::assureToken( sal_Unicode token )
- SAL_THROW( (RuntimeException) )
-{
- skipWhiteSpace();
- sal_Unicode c = get();
- if (c == token)
- return;
- OUStringBuffer buf( 16 );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("expected >") );
- buf.append( c );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("<!") );
- error( buf.makeStringAndClear() );
-}
-//__________________________________________________________________________________________________
-OUString PolicyReader::assureQuotedToken()
- SAL_THROW( (RuntimeException) )
-{
- OUString token( getQuotedToken() );
- if (! token.getLength())
- error( OUSTR("unexpected end of file!") );
- return token;
-}
-//__________________________________________________________________________________________________
-OUString PolicyReader::getQuotedToken()
- SAL_THROW( (RuntimeException) )
-{
- skipWhiteSpace();
- OUStringBuffer buf( 32 );
- sal_Unicode c = get();
- if ('\"' != c)
- error( OUSTR("expected quoting >\"< character!") );
- c = get();
- while ('\0' != c && '\"' != c)
- {
- buf.append( c );
- c = get();
- }
- return buf.makeStringAndClear();
-}
-//__________________________________________________________________________________________________
-OUString PolicyReader::assureToken()
- SAL_THROW( (RuntimeException) )
-{
- OUString token( getToken() );
- if (! token.getLength())
- error( OUSTR("unexpected end of file!") );
- return token;
-}
-//__________________________________________________________________________________________________
-OUString PolicyReader::getToken()
- SAL_THROW( (RuntimeException) )
-{
- skipWhiteSpace();
- sal_Unicode c = get();
- if (isCharToken( c ))
- return OUString( &c, 1 );
- OUStringBuffer buf( 32 );
- while ('\0' != c && !isCharToken( c ) && !isWhiteSpace( c ))
- {
- buf.append( c );
- c = get();
- }
- back( c );
- return buf.makeStringAndClear();
-}
-//__________________________________________________________________________________________________
-void PolicyReader::skipWhiteSpace()
- SAL_THROW( (RuntimeException) )
-{
- sal_Unicode c;
- do
- {
- c = get();
- }
- while (isWhiteSpace( c )); // seeking next non-whitespace char
-
- if ('/' == c) // C/C++ like comment
- {
- c = get();
- if ('/' == c) // C++ like comment
- {
- do
- {
- c = get();
- }
- while ('\n' != c && '\0' != c); // seek eol/eof
- skipWhiteSpace(); // cont skip on next line
- }
- else if ('*' == c) // C like comment
- {
- bool fini = true;
- do
- {
- c = get();
- if ('*' == c)
- {
- c = get();
- fini = ('/' == c || '\0' == c);
- }
- else
- {
- fini = ('\0' == c);
- }
- }
- while (! fini);
- skipWhiteSpace(); // cont skip on next line
- }
- else
- {
- error( OUSTR("expected C/C++ like comment!") );
- }
- }
- else if ('#' == c) // script like comment
- {
- do
- {
- c = get();
- }
- while ('\n' != c && '\0' != c); // seek eol/eof
- skipWhiteSpace(); // cont skip on next line
- }
-
- else // is token char
- {
- back( c );
- }
-}
-//__________________________________________________________________________________________________
-sal_Unicode PolicyReader::get()
- SAL_THROW( (RuntimeException) )
-{
- if ('\0' != m_back) // one char push back possible
- {
- sal_Unicode c = m_back;
- m_back = '\0';
- return c;
- }
- else if (m_pos == m_line.getLength()) // provide newline as whitespace
- {
- ++m_pos;
- return '\n';
- }
- else if (m_pos > m_line.getLength()) // read new line
- {
- sal_Bool eof;
- oslFileError rc = ::osl_isEndOfFile( m_file, &eof );
- if (osl_File_E_None != rc)
- error( OUSTR("checking eof failed!") );
- if (eof)
- return '\0';
-
- rc = ::osl_readLine( m_file, reinterpret_cast< sal_Sequence ** >( &m_line ) );
- if (osl_File_E_None != rc)
- error( OUSTR("read line failed!") );
- ++m_linepos;
- if (! m_line.getLength()) // empty line read
- {
- m_pos = 1; // read new line next time
- return '\n';
- }
- m_pos = 0;
- }
- return (m_line.getConstArray()[ m_pos++ ]);
-}
-//__________________________________________________________________________________________________
-void PolicyReader::error( OUString const & msg )
- SAL_THROW( (RuntimeException) )
-{
- OUStringBuffer buf( 32 );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("error processing file \"") );
- buf.append( m_fileName );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\" [line ") );
- buf.append( m_linepos );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(", column ") );
- buf.append( m_pos );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("] ") );
- buf.append( msg );
- throw RuntimeException( buf.makeStringAndClear(), Reference< XInterface >() );
-}
-//__________________________________________________________________________________________________
-PolicyReader::PolicyReader( OUString const & fileName, AccessControl & ac )
- SAL_THROW( (RuntimeException) )
- : m_fileName( fileName )
- , m_linepos( 0 )
- , m_pos( 1 ) // force readline
- , m_back( '\0' )
-{
- ac.checkFilePermission( m_fileName, OUSTR("read") );
- if (osl_File_E_None != ::osl_openFile( m_fileName.pData, &m_file, osl_File_OpenFlag_Read ))
- {
- OUStringBuffer buf( 32 );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("cannot open file \"") );
- buf.append( m_fileName );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\"!") );
- throw RuntimeException( buf.makeStringAndClear(), Reference< XInterface >() );
- }
-}
-//__________________________________________________________________________________________________
-PolicyReader::~PolicyReader()
- SAL_THROW( () )
-{
- if ( ::osl_closeFile( m_file ) != osl_File_E_None ) {
- OSL_ASSERT( false );
- }
-}
-
-#define s_grant "grant"
-#define s_user "user"
-#define s_permission "permission"
-#define s_openBrace "{"
-#define s_closingBrace "}"
-
-#define s_filePermission "com.sun.star.io.FilePermission"
-#define s_socketPermission "com.sun.star.connection.SocketPermission"
-#define s_runtimePermission "com.sun.star.security.RuntimePermission"
-#define s_allPermission "com.sun.star.security.AllPermission"
-
-//__________________________________________________________________________________________________
-void FilePolicy::refresh()
- throw (RuntimeException)
-{
- // read out file
- OUString fileName;
- m_xComponentContext->getValueByName(
- OUSTR("/implementations/" IMPL_NAME "/file-name") ) >>= fileName;
- if (! fileName.getLength())
- {
- throw RuntimeException(
- OUSTR("name of policy file unknown!"),
- (OWeakObject *)this );
- }
-
- PolicyReader reader( fileName, m_ac );
-
- // fill these two
- Sequence< Any > defaultPermissions;
- t_permissions userPermissions;
-
- OUString token( reader.getToken() );
- while (token.getLength())
- {
- if (!token.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(s_grant)))
- reader.error( OUSTR("expected >grant< token!") );
- OUString userId;
- token = reader.assureToken();
- if (token.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(s_user))) // next token is user-id
- {
- userId = reader.assureQuotedToken();
- token = reader.assureToken();
- }
- if (!token.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(s_openBrace)))
- reader.error( OUSTR("expected opening brace >{<!") );
- token = reader.assureToken();
- // permissions list
- while (!token.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(s_closingBrace)))
- {
- if (!token.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(s_permission)))
- reader.error( OUSTR("expected >permission< or closing brace >}<!") );
-
- token = reader.assureToken(); // permission type
- Any perm;
- if (token.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(s_filePermission))) // FilePermission
- {
- OUString url( reader.assureQuotedToken() );
- reader.assureToken( ',' );
- OUString actions( reader.assureQuotedToken() );
- perm <<= io::FilePermission( url, actions );
- }
- else if (token.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(s_socketPermission))) // SocketPermission
- {
- OUString host( reader.assureQuotedToken() );
- reader.assureToken( ',' );
- OUString actions( reader.assureQuotedToken() );
- perm <<= connection::SocketPermission( host, actions );
- }
- else if (token.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(s_runtimePermission))) // RuntimePermission
- {
- OUString name( reader.assureQuotedToken() );
- perm <<= security::RuntimePermission( name );
- }
- else if (token.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(s_allPermission))) // AllPermission
- {
- perm <<= security::AllPermission();
- }
- else
- {
- reader.error( OUSTR("expected permission type!") );
- }
-
- reader.assureToken( ';' );
-
- // insert
- if (userId.getLength())
- {
- Sequence< Any > perms( userPermissions[ userId ] );
- sal_Int32 len = perms.getLength();
- perms.realloc( len +1 );
- perms[ len ] = perm;
- userPermissions[ userId ] = perms;
- }
- else
- {
- sal_Int32 len = defaultPermissions.getLength();
- defaultPermissions.realloc( len +1 );
- defaultPermissions[ len ] = perm;
- }
-
- token = reader.assureToken(); // next permissions token
- }
-
- reader.assureToken( ';' ); // semi
- token = reader.getToken(); // next grant token
- }
-
- // assign new ones
- MutexGuard guard( m_mutex );
- m_defaultPermissions = defaultPermissions;
- m_userPermissions = userPermissions;
-}
-
-//__________________________________________________________________________________________________
-OUString FilePolicy::getImplementationName()
- throw (RuntimeException)
-{
- return stoc_bootstrap::filepolicy_getImplementationName();
-}
-//__________________________________________________________________________________________________
-sal_Bool FilePolicy::supportsService( OUString const & serviceName )
- throw (RuntimeException)
-{
- Sequence< OUString > aSNL = getSupportedServiceNames();
- const OUString * pNames = aSNL.getConstArray();
- for ( sal_Int32 nPos = aSNL.getLength(); --nPos; )
- {
- if (serviceName.equals( pNames[ nPos ] ))
- {
- return sal_True;
- }
- }
- return sal_False;
-}
-//__________________________________________________________________________________________________
-Sequence< OUString > FilePolicy::getSupportedServiceNames()
- throw (RuntimeException)
-{
- return stoc_bootstrap::filepolicy_getSupportedServiceNames();
-}
-}
-//##################################################################################################
-namespace stoc_bootstrap
-{
-//--------------------------------------------------------------------------------------------------
-Reference< XInterface > SAL_CALL filepolicy_create(
- Reference< XComponentContext > const & xComponentContext )
- SAL_THROW( (Exception) )
-{
- return (OWeakObject *)new stoc_sec::FilePolicy( xComponentContext );
-}
-//--------------------------------------------------------------------------------------------------
-Sequence< OUString > filepolicy_getSupportedServiceNames() SAL_THROW( () )
-{
- Sequence< OUString > aSNS( 1 );
- aSNS.getArray()[0] = OUString(RTL_CONSTASCII_USTRINGPARAM(SERVICE_NAME));
- return aSNS;
-}
-//--------------------------------------------------------------------------------------------------
-OUString filepolicy_getImplementationName() SAL_THROW( () )
-{
- static OUString s_implName = OUSTR(IMPL_NAME);
- return s_implName;
-}
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/security/lru_cache.h b/stoc/source/security/lru_cache.h
deleted file mode 100644
index c259a4a31..000000000
--- a/stoc/source/security/lru_cache.h
+++ /dev/null
@@ -1,282 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 _STOC_SEC_LRU_CACHE_H_
-#define _STOC_SEC_LRU_CACHE_H_
-
-#include <boost/unordered_map.hpp>
-
-// __CACHE_DIAGNOSE works only for OUString keys
-#ifdef __CACHE_DIAGNOSE
-#include <osl/diagnose.h>
-#include <rtl/ustrbuf.hxx>
-#include <rtl/ustring.hxx>
-#include <rtl/string.hxx>
-#endif
-
-
-namespace stoc_sec
-{
-
-/** Implementation of a least recently used (lru) cache.
-*/
-template< typename t_key, typename t_val, typename t_hashKey, typename t_equalKey >
-class lru_cache
-{
- struct Entry
- {
- t_key m_key;
- t_val m_val;
- Entry * m_pred;
- Entry * m_succ;
- };
- typedef ::boost::unordered_map< t_key, Entry *, t_hashKey, t_equalKey > t_key2element;
- t_key2element m_key2element;
- ::std::size_t m_size;
-
- Entry * m_block;
- mutable Entry * m_head;
- mutable Entry * m_tail;
- inline void toFront( Entry * entry ) const SAL_THROW( () );
-
-public:
- /** Default Ctor. Does not cache.
- */
- inline lru_cache() SAL_THROW( () );
- /** Ctor.
-
- @param size number of elements to be cached; default param set to 128
- */
- inline lru_cache( ::std::size_t size ) SAL_THROW( () );
-
- /** Destructor: releases all cached elements and keys.
- */
- inline ~lru_cache() SAL_THROW( () );
-
- /** Retrieves a pointer to value in cache. Returns 0, if none was found.
-
- @param key a key
- @return pointer to value or 0
- */
- inline t_val const * lookup( t_key const & key ) const SAL_THROW( () );
-
- /** Sets a value to be cached for given key.
-
- @param key a key
- @param val a value
- */
- inline void set( t_key const & key, t_val const & val ) SAL_THROW( () );
-
- /** Tests whether a value is cached for given key.
-
- @param key a key
- @return true, if value is cached
- */
- inline bool has( t_key const & key ) const SAL_THROW( () );
-
- /** Clears the cache, releasing all cached elements and keys.
- */
- inline void clear() SAL_THROW( () );
-
- /** Sets the number of elements to be cached. This will clear previous entries.
-
- @param cacheSize number of elements to be cached
- */
- inline void setSize( ::std::size_t size ) SAL_THROW( () );
-};
-//__________________________________________________________________________________________________
-template< typename t_key, typename t_val, typename t_hashKey, typename t_equalKey >
-inline void lru_cache< t_key, t_val, t_hashKey, t_equalKey >::setSize(
- ::std::size_t size ) SAL_THROW( () )
-{
- m_key2element.clear();
- delete [] m_block;
- m_block = 0;
- m_size = size;
-
- if (0 < m_size)
- {
- m_block = new Entry[ m_size ];
- m_head = m_block;
- m_tail = m_block + m_size -1;
- for ( ::std::size_t nPos = m_size; nPos--; )
- {
- m_block[ nPos ].m_pred = m_block + nPos -1;
- m_block[ nPos ].m_succ = m_block + nPos +1;
- }
- }
-}
-//__________________________________________________________________________________________________
-template< typename t_key, typename t_val, typename t_hashKey, typename t_equalKey >
-inline lru_cache< t_key, t_val, t_hashKey, t_equalKey >::lru_cache(
- ::std::size_t size ) SAL_THROW( () )
- : m_size( 0 )
- , m_block( 0 )
-{
- setSize( size );
-}
-//__________________________________________________________________________________________________
-template< typename t_key, typename t_val, typename t_hashKey, typename t_equalKey >
-inline lru_cache< t_key, t_val, t_hashKey, t_equalKey >::lru_cache() SAL_THROW( () )
- : m_size( 0 )
- , m_block( 0 )
-{
-}
-//__________________________________________________________________________________________________
-template< typename t_key, typename t_val, typename t_hashKey, typename t_equalKey >
-inline lru_cache< t_key, t_val, t_hashKey, t_equalKey >::~lru_cache()
- SAL_THROW( () )
-{
- delete [] m_block;
-}
-//__________________________________________________________________________________________________
-template< typename t_key, typename t_val, typename t_hashKey, typename t_equalKey >
-inline void lru_cache< t_key, t_val, t_hashKey, t_equalKey >::toFront(
- Entry * entry ) const SAL_THROW( () )
-{
- if (entry != m_head)
- {
- // cut out element
- if (entry == m_tail)
- {
- m_tail = entry->m_pred;
- }
- else
- {
- entry->m_succ->m_pred = entry->m_pred;
- entry->m_pred->m_succ = entry->m_succ;
- }
- // push to front
- m_head->m_pred = entry;
- entry->m_succ = m_head;
- m_head = entry;
- }
-}
-//__________________________________________________________________________________________________
-template< typename t_key, typename t_val, typename t_hashKey, typename t_equalKey >
-inline bool lru_cache< t_key, t_val, t_hashKey, t_equalKey >::has(
- t_key const & key ) const SAL_THROW( () )
-{
- typename t_key2element::const_iterator const iFind( m_key2element.find( key ) );
- return (iFind != m_key2element.end());
-}
-//__________________________________________________________________________________________________
-template< typename t_key, typename t_val, typename t_hashKey, typename t_equalKey >
-inline t_val const * lru_cache< t_key, t_val, t_hashKey, t_equalKey >::lookup(
- t_key const & key ) const SAL_THROW( () )
-{
- if (0 < m_size)
- {
- typename t_key2element::const_iterator const iFind( m_key2element.find( key ) );
- if (iFind != m_key2element.end())
- {
- Entry * entry = iFind->second;
- toFront( entry );
-#ifdef __CACHE_DIAGNOSE
- ::rtl::OUStringBuffer buf( 48 );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("> retrieved element \"") );
- buf.append( entry->m_key );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\" from cache") );
- ::rtl::OString str( ::rtl::OUStringToOString(
- buf.makeStringAndClear(), RTL_TEXTENCODING_ASCII_US ) );
- OSL_TRACE( "%s", str.getStr() );
-#endif
- return &entry->m_val;
- }
- }
- return 0;
-}
-//__________________________________________________________________________________________________
-template< typename t_key, typename t_val, typename t_hashKey, typename t_equalKey >
-inline void lru_cache< t_key, t_val, t_hashKey, t_equalKey >::set(
- t_key const & key, t_val const & val ) SAL_THROW( () )
-{
- if (0 < m_size)
- {
- typename t_key2element::const_iterator const iFind( m_key2element.find( key ) );
-
- Entry * entry;
- if (iFind == m_key2element.end())
- {
- entry = m_tail; // erase last element
-#ifdef __CACHE_DIAGNOSE
- if (entry->m_key.getLength())
- {
- ::rtl::OUStringBuffer buf( 48 );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("> kicking element \"") );
- buf.append( entry->m_key );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\" from cache") );
- ::rtl::OString str( ::rtl::OUStringToOString(
- buf.makeStringAndClear(), RTL_TEXTENCODING_ASCII_US ) );
- OSL_TRACE( "%s", str.getStr() );
- }
-#endif
- m_key2element.erase( entry->m_key );
- entry->m_key = key;
- ::std::pair< typename t_key2element::iterator, bool > insertion(
- m_key2element.insert( typename t_key2element::value_type( key, entry ) ) );
-#ifdef __CACHE_DIAGNOSE
- OSL_ENSURE( insertion.second, "### inserting new cache entry failed?!" );
-#endif
- }
- else
- {
- entry = iFind->second;
-#ifdef __CACHE_DIAGNOSE
- ::rtl::OUStringBuffer buf( 48 );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("> replacing element \"") );
- buf.append( entry->m_key );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\" in cache") );
- ::rtl::OString str( ::rtl::OUStringToOString(
- buf.makeStringAndClear(), RTL_TEXTENCODING_ASCII_US ) );
- OSL_TRACE( "%s", str.getStr() );
-#endif
- }
- entry->m_val = val;
- toFront( entry );
- }
-}
-//__________________________________________________________________________________________________
-template< typename t_key, typename t_val, typename t_hashKey, typename t_equalKey >
-inline void lru_cache< t_key, t_val, t_hashKey, t_equalKey >::clear() SAL_THROW( () )
-{
- m_key2element.clear();
- for ( ::std::size_t nPos = m_size; nPos--; )
- {
- m_block[ nPos ].m_key = t_key();
- m_block[ nPos ].m_val = t_val();
- }
-#ifdef __CACHE_DIAGNOSE
- OSL_TRACE( "> cleared cache\n" );
-#endif
-}
-
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/security/makefile.mk b/stoc/source/security/makefile.mk
deleted file mode 100644
index 25cddaa22..000000000
--- a/stoc/source/security/makefile.mk
+++ /dev/null
@@ -1,62 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME=stoc
-TARGET = security
-ENABLE_EXCEPTIONS=TRUE
-BOOTSTRAP_SERVICE=TRUE
-UNOUCROUT=$(OUT)$/inc$/bootstrap
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-
-# ------------------------------------------------------------------
-
-SLOFILES= \
- $(SLO)$/permissions.obj \
- $(SLO)$/access_controller.obj \
- $(SLO)$/file_policy.obj
-
-.IF "$(debug)" != ""
-
-# some diagnose
-.IF "$(diag)" == "full"
-CFLAGS += -D__DIAGNOSE -D__CACHE_DIAGNOSE
-.ELIF "$(diag)" == "cache"
-CFLAGS += -D__CACHE_DIAGNOSE
-.ELIF "$(diag)" != ""
-CFLAGS += -D__DIAGNOSE
-.ENDIF
-
-.ENDIF
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
diff --git a/stoc/source/security/permissions.cxx b/stoc/source/security/permissions.cxx
deleted file mode 100644
index dfc43f72e..000000000
--- a/stoc/source/security/permissions.cxx
+++ /dev/null
@@ -1,669 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include <vector>
-
-#include <osl/process.h>
-#include <osl/socket.hxx>
-#include <osl/mutex.hxx>
-
-#include <rtl/string.hxx>
-#include <rtl/ustrbuf.hxx>
-
-#include <com/sun/star/security/RuntimePermission.hpp>
-#include <com/sun/star/security/AllPermission.hpp>
-#include <com/sun/star/io/FilePermission.hpp>
-#include <com/sun/star/connection/SocketPermission.hpp>
-#include <com/sun/star/security/AccessControlException.hpp>
-
-#include "permissions.h"
-
-#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
-
-
-using namespace ::std;
-using namespace ::osl;
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using ::rtl::OUString;
-using ::rtl::OUStringBuffer;
-
-namespace stoc_sec
-{
-
-//--------------------------------------------------------------------------------------------------
-static inline sal_Int32 makeMask(
- OUString const & items, char const * const * strings ) SAL_THROW( () )
-{
- sal_Int32 mask = 0;
-
- sal_Int32 n = 0;
- do
- {
- OUString item( items.getToken( 0, ',', n ).trim() );
- if (! item.getLength())
- continue;
- sal_Int32 nPos = 0;
- while (strings[ nPos ])
- {
- if (item.equalsAscii( strings[ nPos ] ))
- {
- mask |= (0x80000000 >> nPos);
- break;
- }
- ++nPos;
- }
-#if OSL_DEBUG_LEVEL > 0
- if (! strings[ nPos ])
- {
- OUStringBuffer buf( 48 );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("### ignoring unknown socket action: ") );
- buf.append( item );
- ::rtl::OString str( ::rtl::OUStringToOString(
- buf.makeStringAndClear(), RTL_TEXTENCODING_ASCII_US ) );
- OSL_TRACE( "%s", str.getStr() );
- }
-#endif
- }
- while (n >= 0); // all items
- return mask;
-}
-//--------------------------------------------------------------------------------------------------
-static inline OUString makeStrings(
- sal_Int32 mask, char const * const * strings ) SAL_THROW( () )
-{
- OUStringBuffer buf( 48 );
- while (mask)
- {
- if (0x80000000 & mask)
- {
- buf.appendAscii( *strings );
- if (mask << 1) // more items following
- buf.append( (sal_Unicode)',' );
- }
- mask = (mask << 1);
- ++strings;
- }
- return buf.makeStringAndClear();
-}
-
-//##################################################################################################
-
-//==================================================================================================
-class SocketPermission : public Permission
-{
- static char const * s_actions [];
- sal_Int32 m_actions;
-
- OUString m_host;
- sal_Int32 m_lowerPort;
- sal_Int32 m_upperPort;
- mutable OUString m_ip;
- mutable bool m_resolveErr;
- mutable bool m_resolvedHost;
- bool m_wildCardHost;
-
- inline bool resolveHost() const SAL_THROW( () );
-
-public:
- SocketPermission(
- connection::SocketPermission const & perm,
- ::rtl::Reference< Permission > const & next = ::rtl::Reference< Permission >() )
- SAL_THROW( () );
- virtual bool implies( Permission const & perm ) const SAL_THROW( () );
- virtual OUString toString() const SAL_THROW( () );
-};
-//__________________________________________________________________________________________________
-char const * SocketPermission::s_actions [] = { "accept", "connect", "listen", "resolve", 0 };
-//__________________________________________________________________________________________________
-SocketPermission::SocketPermission(
- connection::SocketPermission const & perm,
- ::rtl::Reference< Permission > const & next )
- SAL_THROW( () )
- : Permission( SOCKET, next )
- , m_actions( makeMask( perm.Actions, s_actions ) )
- , m_host( perm.Host )
- , m_lowerPort( 0 )
- , m_upperPort( 65535 )
- , m_resolveErr( false )
- , m_resolvedHost( false )
- , m_wildCardHost( perm.Host.getLength() && '*' == perm.Host.pData->buffer[ 0 ] )
-{
- if (0xe0000000 & m_actions) // if any (except resolve) is given => resolve implied
- m_actions |= 0x10000000;
-
- // separate host from portrange
- sal_Int32 colon = m_host.indexOf( ':' );
- if (colon >= 0) // port [range] given
- {
- sal_Int32 minus = m_host.indexOf( '-', colon +1 );
- if (minus < 0)
- {
- m_lowerPort = m_upperPort = m_host.copy( colon +1 ).toInt32();
- }
- else if (minus == (colon +1)) // -N
- {
- m_upperPort = m_host.copy( minus +1 ).toInt32();
- }
- else if (minus == (m_host.getLength() -1)) // N-
- {
- m_lowerPort = m_host.copy( colon +1, m_host.getLength() -1 -colon -1 ).toInt32();
- }
- else // A-B
- {
- m_lowerPort = m_host.copy( colon +1, minus - colon -1 ).toInt32();
- m_upperPort = m_host.copy( minus +1, m_host.getLength() -minus -1 ).toInt32();
- }
- m_host = m_host.copy( 0, colon );
- }
-}
-//__________________________________________________________________________________________________
-inline bool SocketPermission::resolveHost() const SAL_THROW( () )
-{
- if (m_resolveErr)
- return false;
-
- if (! m_resolvedHost)
- {
- // dns lookup
- SocketAddr addr;
- SocketAddr::resolveHostname( m_host, addr );
- OUString ip;
- m_resolveErr = (::osl_Socket_Ok != ::osl_getDottedInetAddrOfSocketAddr(
- addr.getHandle(), &ip.pData ));
- if (m_resolveErr)
- return false;
-
- MutexGuard guard( Mutex::getGlobalMutex() );
- if (! m_resolvedHost)
- {
- m_ip = ip;
- m_resolvedHost = true;
- }
- }
- return m_resolvedHost;
-}
-//__________________________________________________________________________________________________
-bool SocketPermission::implies( Permission const & perm ) const SAL_THROW( () )
-{
- // check type
- if (SOCKET != perm.m_type)
- return false;
- SocketPermission const & demanded = static_cast< SocketPermission const & >( perm );
-
- // check actions
- if ((m_actions & demanded.m_actions) != demanded.m_actions)
- return false;
-
- // check ports
- if (demanded.m_lowerPort < m_lowerPort)
- return false;
- if (demanded.m_upperPort > m_upperPort)
- return false;
-
- // quick check host (DNS names: RFC 1034/1035)
- if (m_host.equalsIgnoreAsciiCase( demanded.m_host ))
- return true;
- // check for host wildcards
- if (m_wildCardHost)
- {
- OUString const & demanded_host = demanded.m_host;
- if (demanded_host.getLength() <= m_host.getLength())
- return false;
- sal_Int32 len = m_host.getLength() -1; // skip star
- return (0 == ::rtl_ustr_compareIgnoreAsciiCase_WithLength(
- demanded_host.getStr() + demanded_host.getLength() - len, len,
- m_host.pData->buffer + 1, len ));
- }
- if (demanded.m_wildCardHost)
- return false;
-
- // compare IP addresses
- if (! resolveHost())
- return false;
- if (! demanded.resolveHost())
- return false;
- return (sal_False != m_ip.equals( demanded.m_ip ));
-}
-//__________________________________________________________________________________________________
-OUString SocketPermission::toString() const SAL_THROW( () )
-{
- OUStringBuffer buf( 48 );
- // host
- buf.appendAscii(
- RTL_CONSTASCII_STRINGPARAM("com.sun.star.connection.SocketPermission (host=\"") );
- buf.append( m_host );
- if (m_resolvedHost)
- {
- buf.append( (sal_Unicode)'[' );
- buf.append( m_ip );
- buf.append( (sal_Unicode)']' );
- }
- // port
- if (0 != m_lowerPort || 65535 != m_upperPort)
- {
- buf.append( (sal_Unicode)':' );
- if (m_lowerPort > 0)
- buf.append( m_lowerPort );
- if (m_upperPort > m_lowerPort)
- {
- buf.append( (sal_Unicode)'-' );
- if (m_upperPort < 65535)
- buf.append( m_upperPort );
- }
- }
- // actions
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\", actions=\"") );
- buf.append( makeStrings( m_actions, s_actions ) );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\")") );
- return buf.makeStringAndClear();
-}
-
-//##################################################################################################
-
-//==================================================================================================
-class FilePermission : public Permission
-{
- static char const * s_actions [];
- sal_Int32 m_actions;
-
- OUString m_url;
- bool m_allFiles;
-
-public:
- FilePermission(
- io::FilePermission const & perm,
- ::rtl::Reference< Permission > const & next = ::rtl::Reference< Permission >() )
- SAL_THROW( () );
- virtual bool implies( Permission const & perm ) const SAL_THROW( () );
- virtual OUString toString() const SAL_THROW( () );
-};
-//__________________________________________________________________________________________________
-char const * FilePermission::s_actions [] = { "read", "write", "execute", "delete", 0 };
-//--------------------------------------------------------------------------------------------------
-static OUString const & getWorkingDir() SAL_THROW( () )
-{
- static OUString * s_workingDir = 0;
- if (! s_workingDir)
- {
- OUString workingDir;
- ::osl_getProcessWorkingDir( &workingDir.pData );
-
- MutexGuard guard( Mutex::getGlobalMutex() );
- if (! s_workingDir)
- {
- static OUString s_dir( workingDir );
- s_workingDir = &s_dir;
- }
- }
- return *s_workingDir;
-}
-//__________________________________________________________________________________________________
-FilePermission::FilePermission(
- io::FilePermission const & perm,
- ::rtl::Reference< Permission > const & next )
- SAL_THROW( () )
- : Permission( FILE, next )
- , m_actions( makeMask( perm.Actions, s_actions ) )
- , m_url( perm.URL )
- , m_allFiles( sal_False != perm.URL.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("<<ALL FILES>>")) )
-{
- if (! m_allFiles)
- {
- if (m_url.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("*") ))
- {
- OUStringBuffer buf( 64 );
- buf.append( getWorkingDir() );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("/*") );
- m_url = buf.makeStringAndClear();
- }
- else if (m_url.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("-") ))
- {
- OUStringBuffer buf( 64 );
- buf.append( getWorkingDir() );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("/-") );
- m_url = buf.makeStringAndClear();
- }
- else if (0 != m_url.compareToAscii( RTL_CONSTASCII_STRINGPARAM("file:///") ))
- {
- // relative path
- OUString out;
- oslFileError rc = ::osl_getAbsoluteFileURL(
- getWorkingDir().pData, perm.URL.pData, &out.pData );
- m_url = (osl_File_E_None == rc ? out : perm.URL); // fallback
- }
-#ifdef SAL_W32
- // correct win drive letters
- if (9 < m_url.getLength() && '|' == m_url[ 9 ]) // file:///X|
- {
- static OUString s_colon = OUSTR(":");
- // common case in API is a ':' (sal), so convert '|' to ':'
- m_url = m_url.replaceAt( 9, 1, s_colon );
- }
-#endif
- }
-}
-//__________________________________________________________________________________________________
-bool FilePermission::implies( Permission const & perm ) const SAL_THROW( () )
-{
- // check type
- if (FILE != perm.m_type)
- return false;
- FilePermission const & demanded = static_cast< FilePermission const & >( perm );
-
- // check actions
- if ((m_actions & demanded.m_actions) != demanded.m_actions)
- return false;
-
- // check url
- if (m_allFiles)
- return true;
- if (demanded.m_allFiles)
- return false;
-
-#ifdef SAL_W32
- if (m_url.equalsIgnoreAsciiCase( demanded.m_url ))
- return true;
-#else
- if (m_url.equals( demanded.m_url ))
- return true;
-#endif
- if (m_url.getLength() > demanded.m_url.getLength())
- return false;
- // check /- wildcard: all files and recursive in that path
- if (1 < m_url.getLength() &&
- 0 == ::rtl_ustr_ascii_compare_WithLength( m_url.getStr() + m_url.getLength() - 2, 2, "/-" ))
- {
- // demanded url must start with granted path (including path trailing path sep)
- sal_Int32 len = m_url.getLength() -1;
-#ifdef SAL_W32
- return (0 == ::rtl_ustr_compareIgnoreAsciiCase_WithLength(
- demanded.m_url.pData->buffer, len, m_url.pData->buffer, len ));
-#else
- return (0 == ::rtl_ustr_reverseCompare_WithLength(
- demanded.m_url.pData->buffer, len, m_url.pData->buffer, len ));
-#endif
- }
- // check /* wildcard: all files in that path (not recursive!)
- if (1 < m_url.getLength() &&
- 0 == ::rtl_ustr_ascii_compare_WithLength( m_url.getStr() + m_url.getLength() - 2, 2, "/*" ))
- {
- // demanded url must start with granted path (including path trailing path sep)
- sal_Int32 len = m_url.getLength() -1;
-#ifdef SAL_W32
- return ((0 == ::rtl_ustr_compareIgnoreAsciiCase_WithLength(
- demanded.m_url.pData->buffer, len, m_url.pData->buffer, len )) &&
- (0 > demanded.m_url.indexOf( '/', len ))); // in addition, no deeper pathes
-#else
- return ((0 == ::rtl_ustr_reverseCompare_WithLength(
- demanded.m_url.pData->buffer, len, m_url.pData->buffer, len )) &&
- (0 > demanded.m_url.indexOf( '/', len ))); // in addition, no deeper pathes
-#endif
- }
- return false;
-}
-//__________________________________________________________________________________________________
-OUString FilePermission::toString() const SAL_THROW( () )
-{
- OUStringBuffer buf( 48 );
- // url
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("com.sun.star.io.FilePermission (url=\"") );
- buf.append( m_url );
- // actions
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\", actions=\"") );
- buf.append( makeStrings( m_actions, s_actions ) );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\")") );
- return buf.makeStringAndClear();
-}
-
-//##################################################################################################
-
-//==================================================================================================
-class RuntimePermission : public Permission
-{
- OUString m_name;
-
-public:
- inline RuntimePermission(
- security::RuntimePermission const & perm,
- ::rtl::Reference< Permission > const & next = ::rtl::Reference< Permission >() )
- SAL_THROW( () )
- : Permission( RUNTIME, next )
- , m_name( perm.Name )
- {}
- virtual bool implies( Permission const & perm ) const SAL_THROW( () );
- virtual OUString toString() const SAL_THROW( () );
-};
-//__________________________________________________________________________________________________
-bool RuntimePermission::implies( Permission const & perm ) const SAL_THROW( () )
-{
- // check type
- if (RUNTIME != perm.m_type)
- return false;
- RuntimePermission const & demanded = static_cast< RuntimePermission const & >( perm );
-
- // check name
- return (sal_False != m_name.equals( demanded.m_name ));
-}
-//__________________________________________________________________________________________________
-OUString RuntimePermission::toString() const SAL_THROW( () )
-{
- OUStringBuffer buf( 48 );
- buf.appendAscii(
- RTL_CONSTASCII_STRINGPARAM("com.sun.star.security.RuntimePermission (name=\"") );
- buf.append( m_name );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("\")") );
- return buf.makeStringAndClear();
-}
-
-//##################################################################################################
-
-//__________________________________________________________________________________________________
-bool AllPermission::implies( Permission const & ) const SAL_THROW( () )
-{
- return true;
-}
-//__________________________________________________________________________________________________
-OUString AllPermission::toString() const SAL_THROW( () )
-{
- return OUSTR("com.sun.star.security.AllPermission");
-}
-
-//##################################################################################################
-
-//__________________________________________________________________________________________________
-PermissionCollection::PermissionCollection(
- Sequence< Any > const & permissions, PermissionCollection const & addition )
- SAL_THROW( (RuntimeException) )
- : m_head( addition.m_head )
-{
- Any const * perms = permissions.getConstArray();
- for ( sal_Int32 nPos = permissions.getLength(); nPos--; )
- {
- Any const & perm = perms[ nPos ];
- Type const & perm_type = perm.getValueType();
-
- // supported permission types
- if (perm_type.equals( ::getCppuType( (io::FilePermission const *)0 ) ))
- {
- m_head = new FilePermission(
- *reinterpret_cast< io::FilePermission const * >( perm.pData ), m_head );
- }
- else if (perm_type.equals( ::getCppuType( (connection::SocketPermission const *)0 ) ))
- {
- m_head = new SocketPermission(
- *reinterpret_cast< connection::SocketPermission const * >( perm.pData ), m_head );
- }
- else if (perm_type.equals( ::getCppuType( (security::RuntimePermission const *)0 ) ))
- {
- m_head = new RuntimePermission(
- *reinterpret_cast< security::RuntimePermission const * >( perm.pData ), m_head );
- }
- else if (perm_type.equals( ::getCppuType( (security::AllPermission const *)0 ) ))
- {
- m_head = new AllPermission( m_head );
- }
- else
- {
- OUStringBuffer buf( 48 );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(
- "checking for unsupported permission type: ") );
- buf.append( perm_type.getTypeName() );
- throw RuntimeException(
- buf.makeStringAndClear(), Reference< XInterface >() );
- }
- }
-}
-#ifdef __DIAGNOSE
-//__________________________________________________________________________________________________
-Sequence< OUString > PermissionCollection::toStrings() const SAL_THROW( () )
-{
- vector< OUString > strings;
- strings.reserve( 8 );
- for ( Permission * perm = m_head.get(); perm; perm = perm->m_next.get() )
- {
- strings.push_back( perm->toString() );
- }
- return Sequence< OUString >(
- strings.empty() ? 0 : &strings[ 0 ], strings.size() );
-}
-#endif
-//__________________________________________________________________________________________________
-inline static bool __implies(
- ::rtl::Reference< Permission > const & head, Permission const & demanded ) SAL_THROW( () )
-{
- for ( Permission * perm = head.get(); perm; perm = perm->m_next.get() )
- {
- if (perm->implies( demanded ))
- return true;
- }
- return false;
-}
-
-#ifdef __DIAGNOSE
-//--------------------------------------------------------------------------------------------------
-static void demanded_diag(
- Permission const & perm )
- SAL_THROW( () )
-{
- OUStringBuffer buf( 48 );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("demanding ") );
- buf.append( perm.toString() );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(" => ok.") );
- ::rtl::OString str(
- ::rtl::OUStringToOString( buf.makeStringAndClear(), RTL_TEXTENCODING_ASCII_US ) );
- OSL_TRACE( "%s", str.getStr() );
-}
-#endif
-//--------------------------------------------------------------------------------------------------
-static void throwAccessControlException(
- Permission const & perm, Any const & demanded_perm )
- SAL_THROW( (security::AccessControlException) )
-{
- OUStringBuffer buf( 48 );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("access denied: ") );
- buf.append( perm.toString() );
- throw security::AccessControlException(
- buf.makeStringAndClear(), Reference< XInterface >(), demanded_perm );
-}
-//==================================================================================================
-void PermissionCollection::checkPermission( Any const & perm ) const
- SAL_THROW( (RuntimeException) )
-{
- Type const & demanded_type = perm.getValueType();
-
- // supported permission types
- // stack object of SimpleReferenceObject are ok, as long as they are not
- // assigned to a ::rtl::Reference<> (=> delete this)
- if (demanded_type.equals( ::getCppuType( (io::FilePermission const *)0 ) ))
- {
- FilePermission demanded(
- *reinterpret_cast< io::FilePermission const * >( perm.pData ) );
- if (__implies( m_head, demanded ))
- {
-#ifdef __DIAGNOSE
- demanded_diag( demanded );
-#endif
- return;
- }
- throwAccessControlException( demanded, perm );
- }
- else if (demanded_type.equals( ::getCppuType( (connection::SocketPermission const *)0 ) ))
- {
- SocketPermission demanded(
- *reinterpret_cast< connection::SocketPermission const * >( perm.pData ) );
- if (__implies( m_head, demanded ))
- {
-#ifdef __DIAGNOSE
- demanded_diag( demanded );
-#endif
- return;
- }
- throwAccessControlException( demanded, perm );
- }
- else if (demanded_type.equals( ::getCppuType( (security::RuntimePermission const *)0 ) ))
- {
- RuntimePermission demanded(
- *reinterpret_cast< security::RuntimePermission const * >( perm.pData ) );
- if (__implies( m_head, demanded ))
- {
-#ifdef __DIAGNOSE
- demanded_diag( demanded );
-#endif
- return;
- }
- throwAccessControlException( demanded, perm );
- }
- else if (demanded_type.equals( ::getCppuType( (security::AllPermission const *)0 ) ))
- {
- AllPermission demanded;
- if (__implies( m_head, demanded ))
- {
-#ifdef __DIAGNOSE
- demanded_diag( demanded );
-#endif
- return;
- }
- throwAccessControlException( demanded, perm );
- }
- else
- {
- OUStringBuffer buf( 48 );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("checking for unsupported permission type: ") );
- buf.append( demanded_type.getTypeName() );
- throw RuntimeException(
- buf.makeStringAndClear(), Reference< XInterface >() );
- }
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/security/permissions.h b/stoc/source/security/permissions.h
deleted file mode 100644
index 261a854d3..000000000
--- a/stoc/source/security/permissions.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 _STOC_SEC_PERMISSIONS_H_
-#define _STOC_SEC_PERMISSIONS_H_
-
-#include <rtl/unload.h>
-#include <rtl/ref.hxx>
-#include <rtl/ustring.hxx>
-#include <salhelper/simplereferenceobject.hxx>
-
-#include <com/sun/star/uno/Any.hxx>
-#include <com/sun/star/uno/Sequence.hxx>
-#include <com/sun/star/uno/RuntimeException.hpp>
-
-extern ::rtl_StandardModuleCount g_moduleCount;
-
-namespace stoc_sec
-{
-//==================================================================================================
-class Permission : public ::salhelper::SimpleReferenceObject
-{
-public:
- ::rtl::Reference< Permission > m_next;
- // mode
- enum t_type { ALL, RUNTIME, SOCKET, FILE } m_type;
-
- inline Permission(
- t_type type,
- ::rtl::Reference< Permission > const & next = ::rtl::Reference< Permission >() )
- SAL_THROW( () )
- : m_next( next )
- , m_type( type )
- {}
-
- virtual bool implies( Permission const & perm ) const SAL_THROW( () ) = 0;
- virtual ::rtl::OUString toString() const SAL_THROW( () ) = 0;
-};
-//==================================================================================================
-class AllPermission : public Permission
-{
-public:
- inline AllPermission(
- ::rtl::Reference< Permission > const & next = ::rtl::Reference< Permission >() )
- SAL_THROW( () )
- : Permission( ALL, next )
- {}
-
- virtual bool implies( Permission const & ) const SAL_THROW( () );
- virtual ::rtl::OUString toString() const SAL_THROW( () );
-};
-
-//==================================================================================================
-class PermissionCollection
-{
- ::rtl::Reference< Permission > m_head;
-public:
- inline PermissionCollection() SAL_THROW( () )
- {}
- inline PermissionCollection( PermissionCollection const & collection ) SAL_THROW( () )
- : m_head( collection.m_head )
- {}
- inline PermissionCollection( ::rtl::Reference< Permission > const & single ) SAL_THROW( () )
- : m_head( single )
- {}
- PermissionCollection(
- ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > const & permissions,
- PermissionCollection const & addition = PermissionCollection() )
- SAL_THROW( (::com::sun::star::uno::RuntimeException) );
-#ifdef __DIAGNOSE
- ::com::sun::star::uno::Sequence< ::rtl::OUString > toStrings() const SAL_THROW( () );
-#endif
- void checkPermission( ::com::sun::star::uno::Any const & perm ) const
- SAL_THROW( (::com::sun::star::uno::RuntimeException) );
-};
-
-}
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/servicemanager/makefile.mk b/stoc/source/servicemanager/makefile.mk
deleted file mode 100644
index f86c65d5f..000000000
--- a/stoc/source/servicemanager/makefile.mk
+++ /dev/null
@@ -1,47 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME= stoc
-TARGET = servicemgr
-ENABLE_EXCEPTIONS=TRUE
-BOOTSTRAP_SERVICE=TRUE
-UNOUCROUT=$(OUT)$/inc$/bootstrap
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-
-# ------------------------------------------------------------------
-
-SLOFILES= \
- $(SLO)$/servicemanager.obj
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
diff --git a/stoc/source/servicemanager/servicemanager.cxx b/stoc/source/servicemanager/servicemanager.cxx
deleted file mode 100644
index 5c20e952c..000000000
--- a/stoc/source/servicemanager/servicemanager.cxx
+++ /dev/null
@@ -1,2004 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <osl/mutex.hxx>
-#include <osl/diagnose.h>
-#include <rtl/ustrbuf.hxx>
-
-#include <boost/unordered_map.hpp>
-#include <boost/unordered_set.hpp>
-#include <list>
-#include <uno/mapping.hxx>
-#include <uno/dispatcher.h>
-#include <cppuhelper/queryinterface.hxx>
-#include <cppuhelper/weakref.hxx>
-#include <cppuhelper/component.hxx>
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/implbase1.hxx>
-#include <cppuhelper/typeprovider.hxx>
-#include <cppuhelper/implementationentry.hxx>
-#include <rtl/unload.h>
-#include <cppuhelper/component_context.hxx>
-#include <cppuhelper/bootstrap.hxx>
-#include <cppuhelper/compbase8.hxx>
-
-
-#include <com/sun/star/lang/XUnoTunnel.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/lang/XMultiComponentFactory.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/lang/XEventListener.hpp>
-#include <com/sun/star/lang/DisposedException.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-#include <com/sun/star/registry/XRegistryKey.hpp>
-#include <com/sun/star/registry/XSimpleRegistry.hpp>
-#include <com/sun/star/container/XSet.hpp>
-#include <com/sun/star/container/XElementAccess.hpp>
-#include <com/sun/star/container/XEnumeration.hpp>
-#include <com/sun/star/container/XContentEnumerationAccess.hpp>
-#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
-#include <com/sun/star/uno/XUnloadingPreference.hpp>
-
-#include <bootstrapservices.hxx>
-
-#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
-
-
-using namespace com::sun::star;
-using namespace com::sun::star::uno;
-using namespace com::sun::star::beans;
-using namespace com::sun::star::registry;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::container;
-using namespace cppu;
-using namespace osl;
-using namespace std;
-
-using ::rtl::OUString;
-using ::rtl::OUStringToOString;
-using ::rtl::OUStringBuffer;
-using ::rtl::OString;
-
-rtl_StandardModuleCount g_moduleCount = MODULE_COUNT_INIT;
-
-namespace stoc_bootstrap
-{
-Sequence< OUString > smgr_wrapper_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] = OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.lang.MultiServiceFactory") );
- return seqNames;
-}
-
-OUString smgr_wrapper_getImplementationName()
-{
- return OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.stoc.OServiceManagerWrapper"));
-}
-
-Sequence< OUString > smgr_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(2);
- seqNames.getArray()[0] = OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.lang.MultiServiceFactory") );
- seqNames.getArray()[1] = OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.lang.ServiceManager") );
- return seqNames;
-}
-
-OUString smgr_getImplementationName()
-{
- return OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.stoc.OServiceManager"));
-}
-
-Sequence< OUString > regsmgr_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(2);
- seqNames.getArray()[0] = OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.lang.MultiServiceFactory"));
- seqNames.getArray()[1] = OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.lang.RegistryServiceManager"));
- return seqNames;
-}
-
-OUString regsmgr_getImplementationName()
-{
- return OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.stoc.ORegistryServiceManager" ) );
-}
-}
-
-namespace stoc_smgr
-{
-static Sequence< sal_Int8 > smgr_getImplementationId()
-{
- static OImplementationId * s_pId = 0;
- if (! s_pId)
- {
- MutexGuard aGuard( Mutex::getGlobalMutex() );
- if (! s_pId)
- {
- static OImplementationId s_aId;
- s_pId = &s_aId;
- }
- }
- return s_pId->getImplementationId();
-}
-
-
-static Sequence< OUString > retrieveAsciiValueList(
- const Reference< XSimpleRegistry > &xReg, const OUString &keyName )
-{
- Reference< XEnumerationAccess > xAccess( xReg, UNO_QUERY );
- Sequence< OUString > seq;
- if( xAccess.is() )
- {
- Reference< XEnumeration > xEnum = xAccess->createEnumeration();
- while( xEnum.is() && xEnum->hasMoreElements() )
- {
- Reference< XSimpleRegistry > xTempReg;
- xEnum->nextElement() >>= xTempReg;
- if( xTempReg.is() )
- {
- Sequence< OUString > seq2 = retrieveAsciiValueList( xTempReg, keyName );
-
- if( seq2.getLength() )
- {
- sal_Int32 n1Len = seq.getLength();
- sal_Int32 n2Len = seq2.getLength();
-
- seq.realloc( n1Len + n2Len );
- const OUString *pSource = seq2.getConstArray();
- OUString *pTarget = seq.getArray();
- for( int i = 0 ; i < n2Len ; i ++ )
- {
- pTarget[i+n1Len] = pSource[i];
- }
- }
- }
- }
- }
- else if( xReg.is () )
- {
- try
- {
- Reference< XRegistryKey > rRootKey = xReg->getRootKey();
- if( rRootKey.is() )
- {
- Reference<XRegistryKey > xKey = rRootKey->openKey(keyName);
- if( xKey.is() )
- {
- seq = xKey->getAsciiListValue();
- }
- }
- }
- catch( InvalidRegistryException & )
- {
- }
- catch (InvalidValueException &)
- {
- }
- }
- return seq;
-}
-
-/*****************************************************************************
- Enumeration by ServiceName
-*****************************************************************************/
-struct hashRef_Impl
-{
- size_t operator()(const Reference<XInterface > & rName) const
- {
- // query to XInterface. The cast to XInterface* must be the same for the same object
- Reference<XInterface > x( Reference<XInterface >::query( rName ) );
- return (size_t)x.get();
- }
-};
-
-struct equaltoRef_Impl
-{
- size_t operator()(const Reference<XInterface > & rName1, const Reference<XInterface > & rName2 ) const
- { return rName1 == rName2; }
-};
-
-typedef boost::unordered_set
-<
- Reference<XInterface >,
- hashRef_Impl,
- equaltoRef_Impl
-> HashSet_Ref;
-
-
-class ServiceEnumeration_Impl : public WeakImplHelper1< XEnumeration >
-{
-public:
- ServiceEnumeration_Impl( const Sequence< Reference<XInterface > > & rFactories )
- : aFactories( rFactories )
- , nIt( 0 )
- { g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt ); }
- virtual ~ServiceEnumeration_Impl()
- { g_moduleCount.modCnt.release( &g_moduleCount.modCnt ); }
-
- // XEnumeration
- sal_Bool SAL_CALL hasMoreElements()
- throw(::com::sun::star::uno::RuntimeException);
- Any SAL_CALL nextElement()
- throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
-private:
- Mutex aMutex;
- Sequence< Reference<XInterface > > aFactories;
- sal_Int32 nIt;
-};
-
-// XEnumeration
-sal_Bool ServiceEnumeration_Impl::hasMoreElements() throw(::com::sun::star::uno::RuntimeException)
-{
- MutexGuard aGuard( aMutex );
- return nIt != aFactories.getLength();
-}
-
-// XEnumeration
-Any ServiceEnumeration_Impl::nextElement()
- throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
-{
- MutexGuard aGuard( aMutex );
- if( nIt == aFactories.getLength() )
- throw NoSuchElementException();
-
- return Any( &aFactories.getConstArray()[nIt++], ::getCppuType( (const Reference<XInterface > *)0 ) );
-}
-
-//==================================================================================================
-class PropertySetInfo_Impl : public WeakImplHelper1< beans::XPropertySetInfo >
-{
- Sequence< beans::Property > m_properties;
-
-public:
- inline PropertySetInfo_Impl( Sequence< beans::Property > const & properties ) SAL_THROW( () )
- : m_properties( properties )
- {}
-
- // XPropertySetInfo impl
- virtual Sequence< beans::Property > SAL_CALL getProperties()
- throw (RuntimeException);
- virtual beans::Property SAL_CALL getPropertyByName( OUString const & name )
- throw (beans::UnknownPropertyException, RuntimeException);
- virtual sal_Bool SAL_CALL hasPropertyByName( OUString const & name )
- throw (RuntimeException);
-};
-//__________________________________________________________________________________________________
-Sequence< beans::Property > PropertySetInfo_Impl::getProperties()
- throw (RuntimeException)
-{
- return m_properties;
-}
-//__________________________________________________________________________________________________
-beans::Property PropertySetInfo_Impl::getPropertyByName( OUString const & name )
- throw (beans::UnknownPropertyException, RuntimeException)
-{
- beans::Property const * p = m_properties.getConstArray();
- for ( sal_Int32 nPos = m_properties.getLength(); nPos--; )
- {
- if (p[ nPos ].Name.equals( name ))
- return p[ nPos ];
- }
- throw beans::UnknownPropertyException(
- OUSTR("unknown property: ") + name, Reference< XInterface >() );
-}
-//__________________________________________________________________________________________________
-sal_Bool PropertySetInfo_Impl::hasPropertyByName( OUString const & name )
- throw (RuntimeException)
-{
- beans::Property const * p = m_properties.getConstArray();
- for ( sal_Int32 nPos = m_properties.getLength(); nPos--; )
- {
- if (p[ nPos ].Name.equals( name ))
- return sal_True;
- }
- return sal_False;
-}
-
-
-/*****************************************************************************
- Enumeration by implementation
-*****************************************************************************/
-class ImplementationEnumeration_Impl : public WeakImplHelper1< XEnumeration >
-{
-public:
- ImplementationEnumeration_Impl( const HashSet_Ref & rImplementationMap )
- : aImplementationMap( rImplementationMap )
- , aIt( aImplementationMap.begin() )
- {
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- }
- virtual ~ImplementationEnumeration_Impl();
-
- // XEnumeration
- virtual sal_Bool SAL_CALL hasMoreElements()
- throw(::com::sun::star::uno::RuntimeException);
- virtual Any SAL_CALL nextElement()
- throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
-
-private:
- Mutex aMutex;
- HashSet_Ref aImplementationMap;
- HashSet_Ref::iterator aIt;
- sal_Int32 nNext;
- Reference<XInterface > xNext;
-};
-
-ImplementationEnumeration_Impl::~ImplementationEnumeration_Impl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XEnumeration
-sal_Bool ImplementationEnumeration_Impl::hasMoreElements()
- throw(::com::sun::star::uno::RuntimeException)
-{
- MutexGuard aGuard( aMutex );
- return aIt != aImplementationMap.end();
-}
-
-// XEnumeration
-Any ImplementationEnumeration_Impl::nextElement()
- throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
-{
- MutexGuard aGuard( aMutex );
- if( aIt == aImplementationMap.end() )
- throw NoSuchElementException();
-
- Any ret( &(*aIt), ::getCppuType( (const Reference<XInterface > *)0 ) );
- ++aIt;
- return ret;
-}
-
-/*****************************************************************************
- Hash tables
-*****************************************************************************/
-struct equalOWString_Impl
-{
- sal_Bool operator()(const OUString & s1, const OUString & s2) const
- { return s1 == s2; }
-};
-
-struct hashOWString_Impl
-{
- size_t operator()(const OUString & rName) const
- { return rName.hashCode(); }
-};
-
-typedef boost::unordered_set
-<
- OUString,
- hashOWString_Impl,
- equalOWString_Impl
-> HashSet_OWString;
-
-typedef boost::unordered_multimap
-<
- OUString,
- Reference<XInterface >,
- hashOWString_Impl,
- equalOWString_Impl
-> HashMultimap_OWString_Interface;
-
-typedef boost::unordered_map
-<
- OUString,
- Reference<XInterface >,
- hashOWString_Impl,
- equalOWString_Impl
-> HashMap_OWString_Interface;
-
-/*****************************************************************************
- class OServiceManager_Listener
-*****************************************************************************/
-class OServiceManager_Listener : public WeakImplHelper1< XEventListener >
-{
-private:
- WeakReference<XSet > xSMgr;
-
-public:
- OServiceManager_Listener( const Reference<XSet > & rSMgr )
- : xSMgr( rSMgr )
- {}
-
- // XEventListener
- virtual void SAL_CALL disposing(const EventObject & rEvt ) throw(::com::sun::star::uno::RuntimeException);
-};
-
-void OServiceManager_Listener::disposing(const EventObject & rEvt )
- throw(::com::sun::star::uno::RuntimeException)
-{
- Reference<XSet > x( xSMgr );
- if( x.is() )
- {
- try
- {
- x->remove( Any( &rEvt.Source, ::getCppuType( (const Reference<XInterface > *)0 ) ) );
- }
- catch( const IllegalArgumentException & )
- {
- OSL_FAIL( "IllegalArgumentException caught" );
- }
- catch( const NoSuchElementException & )
- {
- OSL_FAIL( "NoSuchElementException caught" );
- }
- }
-}
-
-
-/*****************************************************************************
- class OServiceManager
-*****************************************************************************/
-struct OServiceManagerMutex
-{
- Mutex m_mutex;
-};
-
-extern "C" void SAL_CALL smgrUnloadingListener(void* id);
-
-typedef WeakComponentImplHelper8<
- lang::XMultiServiceFactory, lang::XMultiComponentFactory, lang::XServiceInfo,
- lang::XInitialization, lang::XUnoTunnel,
- container::XSet, container::XContentEnumerationAccess,
- beans::XPropertySet > t_OServiceManager_impl;
-
-class OServiceManager
- : public OServiceManagerMutex
- , public t_OServiceManager_impl
-{
-public:
- friend void SAL_CALL smgrUnloadingListener(void* id);
-
- OServiceManager( Reference< XComponentContext > const & xContext );
- virtual ~OServiceManager();
-
- // XUnoTunnel
- sal_Int64 SAL_CALL getSomething( Sequence< sal_Int8 > const & id )
- throw (RuntimeException);
-
- // XInitialization
- void SAL_CALL initialize( Sequence< Any > const & args )
- throw (Exception);
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException);
- static OUString getImplementationName_Static() throw(::com::sun::star::uno::RuntimeException)
- { return stoc_bootstrap::smgr_getImplementationName(); }
- virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException);
-
- // XMultiComponentFactory
- virtual Reference< XInterface > SAL_CALL createInstanceWithContext(
- OUString const & rServiceSpecifier, Reference< XComponentContext > const & xContext )
- throw (Exception, RuntimeException);
- virtual Reference< XInterface > SAL_CALL createInstanceWithArgumentsAndContext(
- OUString const & rServiceSpecifier,
- Sequence< Any > const & rArguments,
- Reference< XComponentContext > const & xContext )
- throw (Exception, RuntimeException);
-// virtual Sequence< OUString > SAL_CALL getAvailableServiceNames()
-// throw (RuntimeException);
-
- // XMultiServiceFactory
- virtual Sequence< OUString > SAL_CALL getAvailableServiceNames() throw(::com::sun::star::uno::RuntimeException);
- virtual Reference<XInterface > SAL_CALL createInstance(const OUString &) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
- virtual Reference<XInterface > SAL_CALL createInstanceWithArguments(const OUString &, const Sequence<Any >& Arguments) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
-
- // The same as the getAvailableServiceNames, but only uique names
- Sequence< OUString > getUniqueAvailableServiceNames(
- HashSet_OWString & aNameSet );
-
- // XElementAccess
- virtual Type SAL_CALL getElementType() throw(::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
-
- // XEnumerationAccess
- virtual Reference<XEnumeration > SAL_CALL createEnumeration() throw(::com::sun::star::uno::RuntimeException);
-
- // XSet
- virtual sal_Bool SAL_CALL has( const Any & Element ) throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL insert( const Any & Element ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::ElementExistException, ::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL remove( const Any & Element ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException);
-
- // XContentEnumerationAccess
- //Sequence< OUString > getAvailableServiceNames() throw( (Exception) );
- virtual Reference<XEnumeration > SAL_CALL createContentEnumeration(const OUString& aServiceName) throw(::com::sun::star::uno::RuntimeException);
- virtual Reference<XEnumeration > SAL_CALL createContentEnumeration(
- const OUString& aServiceName, Reference< XComponentContext > const & xContext )
- throw(::com::sun::star::uno::RuntimeException);
-
- // XComponent
- virtual void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException);
-
- // XPropertySet
- Reference<XPropertySetInfo > SAL_CALL getPropertySetInfo()
- throw(::com::sun::star::uno::RuntimeException);
- void SAL_CALL setPropertyValue(const OUString& PropertyName, const Any& aValue)
- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
- Any SAL_CALL getPropertyValue(const OUString& PropertyName)
- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
- void SAL_CALL addPropertyChangeListener(const OUString& PropertyName, const Reference<XPropertyChangeListener >& aListener)
- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
- void SAL_CALL removePropertyChangeListener(const OUString& PropertyName, const Reference<XPropertyChangeListener >& aListener)
- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
- void SAL_CALL addVetoableChangeListener(const OUString& PropertyName, const Reference<XVetoableChangeListener >& aListener)
- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
- void SAL_CALL removeVetoableChangeListener(const OUString& PropertyName, const Reference<XVetoableChangeListener >& aListener)
- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
-
-protected:
- inline bool is_disposed() const SAL_THROW( (lang::DisposedException) );
- inline void check_undisposed() const SAL_THROW( (lang::DisposedException) );
- virtual void SAL_CALL disposing();
-
- sal_Bool haveFactoryWithThisImplementation(const OUString& aImplName);
-
- virtual Sequence< Reference< XInterface > > queryServiceFactories(
- const OUString& aServiceName, Reference< XComponentContext > const & xContext );
-
- Reference< XComponentContext > m_xContext;
-
- Reference< beans::XPropertySetInfo > m_xPropertyInfo;
-
- sal_Int32 m_nUnloadingListenerId;
-
- // Does clean up when the unloading mechanism has been set off. It is called from
- // the listener function smgrUnloadingListener.
- void onUnloadingNotify();
- // factories which have been loaded and not inserted( by XSet::insert)
- // are remembered by this set. Those factories
- // are not released on a call to onUnloadingNotify
- HashSet_Ref m_SetLoadedFactories;
-private:
-
- Reference<XEventListener > getFactoryListener();
-
-
- HashMultimap_OWString_Interface m_ServiceMap;
- HashSet_Ref m_ImplementationMap;
- HashMap_OWString_Interface m_ImplementationNameMap;
- Reference<XEventListener > xFactoryListener;
- bool m_bInDisposing;
-};
-
-
-//______________________________________________________________________________
-inline bool OServiceManager::is_disposed() const
- SAL_THROW( (lang::DisposedException) )
-{
- // ought to be guarded by m_mutex:
- return (m_bInDisposing || rBHelper.bDisposed);
-}
-
-//______________________________________________________________________________
-inline void OServiceManager::check_undisposed() const
- SAL_THROW( (lang::DisposedException) )
-{
- if (is_disposed())
- {
- throw lang::DisposedException(
- OUSTR("service manager instance has already been disposed!"),
- (OWeakObject *)this );
- }
-}
-
-//##################################################################################################
-//##################################################################################################
-//##################################################################################################
-
-class OServiceManagerWrapper : public OServiceManagerMutex, public t_OServiceManager_impl
-{
- Reference< XComponentContext > m_xContext;
- OServiceManager * m_root;
- inline OServiceManager * getRoot() SAL_THROW( (RuntimeException) )
- {
- if (! m_root)
- {
- throw lang::DisposedException(
- OUSTR("service manager instance has already been disposed!"),
- Reference< XInterface >() );
- }
- return m_root;
- }
-
-protected:
- virtual void SAL_CALL disposing();
-
-public:
- OServiceManagerWrapper(
- Reference< XComponentContext > const & xContext )
- SAL_THROW( (RuntimeException) );
- virtual ~OServiceManagerWrapper() SAL_THROW( () );
-
- // XUnoTunnel
- sal_Int64 SAL_CALL getSomething( Sequence< sal_Int8 > const & id ) throw (RuntimeException)
- { return getRoot()->getSomething( id ); }
-
- // XInitialization
- void SAL_CALL initialize( Sequence< Any > const & args ) throw (Exception)
- { getRoot()->initialize( args ); }
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName() throw (RuntimeException)
- { return getRoot()->getImplementationName(); }
- virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw (RuntimeException)
- { return getRoot()->supportsService( ServiceName ); }
- virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() throw (RuntimeException)
- { return getRoot()->getSupportedServiceNames(); }
-
- // XMultiComponentFactory
- virtual Reference< XInterface > SAL_CALL createInstanceWithContext(
- OUString const & rServiceSpecifier, Reference< XComponentContext > const & xContext )
- throw (Exception, RuntimeException)
- { return getRoot()->createInstanceWithContext( rServiceSpecifier, xContext ); }
- virtual Reference< XInterface > SAL_CALL createInstanceWithArgumentsAndContext(
- OUString const & rServiceSpecifier,
- Sequence< Any > const & rArguments,
- Reference< XComponentContext > const & xContext )
- throw (Exception, RuntimeException)
- { return getRoot()->createInstanceWithArgumentsAndContext( rServiceSpecifier, rArguments, xContext ); }
-// virtual Sequence< OUString > SAL_CALL getAvailableServiceNames()
-// throw (RuntimeException);
-
- // XMultiServiceFactory
- virtual Sequence< OUString > SAL_CALL getAvailableServiceNames() throw (RuntimeException)
- { return getRoot()->getAvailableServiceNames(); }
- virtual Reference<XInterface > SAL_CALL createInstance(const OUString & name) throw (Exception)
- { return getRoot()->createInstanceWithContext( name, m_xContext ); }
- virtual Reference<XInterface > SAL_CALL createInstanceWithArguments(const OUString & name, const Sequence<Any >& Arguments) throw (Exception)
- { return getRoot()->createInstanceWithArgumentsAndContext( name, Arguments, m_xContext ); }
-
- // XElementAccess
- virtual Type SAL_CALL getElementType() throw (RuntimeException)
- { return getRoot()->getElementType(); }
- virtual sal_Bool SAL_CALL hasElements() throw (RuntimeException)
- { return getRoot()->hasElements(); }
-
- // XEnumerationAccess
- virtual Reference<XEnumeration > SAL_CALL createEnumeration() throw (RuntimeException)
- { return getRoot()->createEnumeration(); }
-
- // XSet
- virtual sal_Bool SAL_CALL has( const Any & Element ) throw (RuntimeException)
- { return getRoot()->has( Element ); }
- virtual void SAL_CALL insert( const Any & Element ) throw (lang::IllegalArgumentException, container::ElementExistException, RuntimeException)
- { getRoot()->insert( Element ); }
- virtual void SAL_CALL remove( const Any & Element ) throw (lang::IllegalArgumentException, container::NoSuchElementException, RuntimeException)
- { getRoot()->remove( Element ); }
-
- // XContentEnumerationAccess
- //Sequence< OUString > getAvailableServiceNames() throw( (Exception) );
- virtual Reference<XEnumeration > SAL_CALL createContentEnumeration(const OUString& aServiceName) throw (RuntimeException)
- { return getRoot()->createContentEnumeration( aServiceName, m_xContext ); }
-
- // XPropertySet
- Reference<XPropertySetInfo > SAL_CALL getPropertySetInfo() throw (RuntimeException)
- { return getRoot()->getPropertySetInfo(); }
-
- void SAL_CALL setPropertyValue(const OUString& PropertyName, const Any& aValue)
- throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, RuntimeException);
- Any SAL_CALL getPropertyValue(const OUString& PropertyName)
- throw (beans::UnknownPropertyException, lang::WrappedTargetException, RuntimeException);
-
- void SAL_CALL addPropertyChangeListener(const OUString& PropertyName, const Reference<XPropertyChangeListener >& aListener)
- throw (beans::UnknownPropertyException, lang::WrappedTargetException, RuntimeException)
- { getRoot()->addPropertyChangeListener( PropertyName, aListener ); }
- void SAL_CALL removePropertyChangeListener(const OUString& PropertyName, const Reference<XPropertyChangeListener >& aListener)
- throw (beans::UnknownPropertyException, lang::WrappedTargetException, RuntimeException)
- { getRoot()->removePropertyChangeListener( PropertyName, aListener ); }
- void SAL_CALL addVetoableChangeListener(const OUString& PropertyName, const Reference<XVetoableChangeListener >& aListener)
- throw (beans::UnknownPropertyException, lang::WrappedTargetException, RuntimeException)
- { getRoot()->addVetoableChangeListener( PropertyName, aListener ); }
- void SAL_CALL removeVetoableChangeListener(const OUString& PropertyName, const Reference<XVetoableChangeListener >& aListener)
- throw (beans::UnknownPropertyException, lang::WrappedTargetException, RuntimeException)
- { getRoot()->removeVetoableChangeListener( PropertyName, aListener ); }
-};
-//__________________________________________________________________________________________________
-void SAL_CALL OServiceManagerWrapper::setPropertyValue(
- const OUString& PropertyName, const Any& aValue )
- throw (beans::UnknownPropertyException, beans::PropertyVetoException,
- lang::IllegalArgumentException, lang::WrappedTargetException, RuntimeException)
-{
- if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("DefaultContext") ))
- {
- Reference< XComponentContext > xContext;
- if (aValue >>= xContext)
- {
- MutexGuard aGuard( m_mutex );
- m_xContext = xContext;
- }
- else
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("no XComponentContext given!") ),
- (OWeakObject *)this, 1 );
- }
- }
- else
- {
- getRoot()->setPropertyValue( PropertyName, aValue );
- }
-}
-//__________________________________________________________________________________________________
-Any SAL_CALL OServiceManagerWrapper::getPropertyValue(
- const OUString& PropertyName )
- throw (beans::UnknownPropertyException, lang::WrappedTargetException, RuntimeException)
-{
- if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("DefaultContext") ))
- {
- MutexGuard aGuard( m_mutex );
- if( m_xContext.is() )
- return makeAny( m_xContext );
- else
- return Any();
- }
- else
- {
- return getRoot()->getPropertyValue( PropertyName );
- }
-}
-//__________________________________________________________________________________________________
-void OServiceManagerWrapper::disposing()
-{
- m_xContext.clear();
-
- if (m_root)
- {
-// no m_root->dispose(), because every context disposes its service manager...
- m_root->release();
- m_root = 0;
- }
-}
-//__________________________________________________________________________________________________
-OServiceManagerWrapper::~OServiceManagerWrapper() SAL_THROW( () )
-{
- if (m_root)
- {
- m_root->release();
- m_root = 0;
- }
-
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-//__________________________________________________________________________________________________
-OServiceManagerWrapper::OServiceManagerWrapper(
- Reference< XComponentContext > const & xContext )
- SAL_THROW( (RuntimeException) )
- : t_OServiceManager_impl( m_mutex )
- , m_xContext( xContext )
- , m_root( 0 )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-
- Reference< XUnoTunnel > xTunnel( m_xContext->getServiceManager(), UNO_QUERY );
- OSL_ASSERT( xTunnel.is() );
- if (xTunnel.is())
- {
- m_root = reinterpret_cast< OServiceManager * >(
- xTunnel->getSomething( smgr_getImplementationId() ) );
- OSL_ASSERT( m_root );
- if (m_root)
- {
- m_root->acquire();
- }
- }
-
- if (! m_root)
- {
- throw RuntimeException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("can only wrap OServiceManager instances!") ),
- Reference< XInterface >() );
- }
-}
-
-//##################################################################################################
-//##################################################################################################
-//##################################################################################################
-
-// XUnoTunnel
-sal_Int64 OServiceManager::getSomething( Sequence< sal_Int8 > const & id )
- throw (RuntimeException)
-{
- check_undisposed();
- if (id == smgr_getImplementationId())
- return reinterpret_cast< sal_Int64 >(this);
- else
- return 0;
-}
-
-/**
- * Create a ServiceManager
- */
-OServiceManager::OServiceManager( Reference< XComponentContext > const & xContext )
- : t_OServiceManager_impl( m_mutex )
- , m_xContext( xContext )
- , m_bInDisposing( false )
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
- m_nUnloadingListenerId= rtl_addUnloadingListener( smgrUnloadingListener, this);
-}
-
-/**
- * Destroy the ServiceManager
- */
-OServiceManager::~OServiceManager()
-{
- if( m_nUnloadingListenerId != 0)
- rtl_removeUnloadingListener( m_nUnloadingListenerId );
-
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// Removes entries in m_ServiceMap, m_ImplementationNameMap and m_ImplementationNameMap
-// if those entries have not been inserted through XSet::insert. Therefore the entries
-// are compared with the entries in m_SetLoadedFactories.
-void OServiceManager::onUnloadingNotify()
-{
- MutexGuard aGuard( m_mutex);
-
- typedef HashSet_Ref::const_iterator CIT_S;
- typedef HashMultimap_OWString_Interface::iterator IT_MM;
-
- CIT_S it_SetEnd= m_SetLoadedFactories.end();
- IT_MM it_end1= m_ServiceMap.end();
- list<IT_MM> listDeleteServiceMap;
- typedef list<IT_MM>::const_iterator CIT_DMM;
- // find occurrences in m_ServiceMap
- for(IT_MM it_i1= m_ServiceMap.begin(); it_i1 != it_end1; ++it_i1)
- {
- if( m_SetLoadedFactories.find( it_i1->second) != it_SetEnd)
- {
- Reference<XUnloadingPreference> xunl( it_i1->second, UNO_QUERY);
- if( xunl.is())
- {
- if( xunl->releaseOnNotification())
- listDeleteServiceMap.push_front( it_i1);
- }
- else
- listDeleteServiceMap.push_front( it_i1);
- }
- }
- // delete elements from m_ServiceMap
- CIT_DMM it_end2= listDeleteServiceMap.end();
- for( CIT_DMM it_i2= listDeleteServiceMap.begin(); it_i2 != it_end2; it_i2++)
- m_ServiceMap.erase( *it_i2);
-
- // find elements in m_ImplementationNameMap
- typedef HashMap_OWString_Interface::iterator IT_M;
- IT_M it_end3= m_ImplementationNameMap.end();
- list<IT_M> listDeleteImplementationNameMap;
- typedef list<IT_M>::const_iterator CIT_DM;
- for( IT_M it_i3= m_ImplementationNameMap.begin(); it_i3 != it_end3; ++it_i3)
- {
- if( m_SetLoadedFactories.find( it_i3->second) != it_SetEnd)
- {
- Reference<XUnloadingPreference> xunl( it_i3->second, UNO_QUERY);
- if( xunl.is())
- {
- if( xunl->releaseOnNotification())
- listDeleteImplementationNameMap.push_front( it_i3);
- }
- else
- listDeleteImplementationNameMap.push_front( it_i3);
- }
- }
- // delete elements from m_ImplementationNameMap
- CIT_DM it_end4= listDeleteImplementationNameMap.end();
- for( CIT_DM it_i4= listDeleteImplementationNameMap.begin(); it_i4 != it_end4; it_i4++)
- m_ImplementationNameMap.erase( *it_i4);
-
- // find elements in m_ImplementationMap
- typedef HashSet_Ref::iterator IT_S;
- IT_S it_end5= m_ImplementationMap.end();
- list<IT_S> listDeleteImplementationMap;
- typedef list<IT_S>::const_iterator CIT_DS;
- for( IT_S it_i5= m_ImplementationMap.begin(); it_i5 != it_end5; ++it_i5)
- {
- if( m_SetLoadedFactories.find( *it_i5) != it_SetEnd)
- {
- Reference<XUnloadingPreference> xunl( *it_i5, UNO_QUERY);
- if( xunl.is())
- {
- if( xunl->releaseOnNotification())
- listDeleteImplementationMap.push_front( it_i5);
- }
- else
- listDeleteImplementationMap.push_front( it_i5);
- }
- }
- // delete elements from m_ImplementationMap
- CIT_DS it_end6= listDeleteImplementationMap.end();
- for( CIT_DS it_i6= listDeleteImplementationMap.begin(); it_i6 != it_end6; it_i6++)
- m_ImplementationMap.erase( *it_i6);
-
- // remove Event listener before the factories are released.
- IT_S it_end7= m_SetLoadedFactories.end();
-
- Reference<XEventListener> xlistener= getFactoryListener();
- for( IT_S it_i7= m_SetLoadedFactories.begin(); it_i7 != it_end7; ++it_i7)
- {
- Reference<XComponent> xcomp( *it_i7, UNO_QUERY);
- if( xcomp.is())
- xcomp->removeEventListener( xlistener);
- }
- // release the factories in m_SetLoadedFactories
- m_SetLoadedFactories.clear();
-}
-
-// XComponent
-void OServiceManager::dispose()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (rBHelper.bDisposed || rBHelper.bInDispose)
- return;
- t_OServiceManager_impl::dispose();
-}
-
-void OServiceManager::disposing()
-{
- // dispose all factories
- HashSet_Ref aImpls;
- {
- MutexGuard aGuard( m_mutex );
- m_bInDisposing = true;
- aImpls = m_ImplementationMap;
- }
- HashSet_Ref::iterator aIt = aImpls.begin();
- while( aIt != aImpls.end() )
- {
- try
- {
- Reference<XComponent > xComp( Reference<XComponent >::query( *aIt++ ) );
- if( xComp.is() )
- xComp->dispose();
- }
- catch (RuntimeException & exc)
- {
-#if OSL_DEBUG_LEVEL > 1
- OString str( OUStringToOString( exc.Message, RTL_TEXTENCODING_ASCII_US ) );
- OSL_TRACE( "### RuntimeException occurred upon disposing factory: %s", str.getStr() );
-#else
- (void) exc; // unused
-#endif
- }
- }
-
- // dispose
- HashSet_Ref aImplMap;
- {
- MutexGuard aGuard( m_mutex );
- // erase all members
- m_ServiceMap = HashMultimap_OWString_Interface();
- aImplMap = m_ImplementationMap;
- m_ImplementationMap = HashSet_Ref();
- m_ImplementationNameMap = HashMap_OWString_Interface();
- m_SetLoadedFactories= HashSet_Ref();
- }
-
- m_xContext.clear();
-
- // not only the Event should hold the object
- OSL_ASSERT( m_refCount != 1 );
-
- // Revoke this service manager as unloading listener
- rtl_removeUnloadingListener( m_nUnloadingListenerId);
- m_nUnloadingListenerId=0;
-}
-
-// XPropertySet
-Reference<XPropertySetInfo > OServiceManager::getPropertySetInfo()
- throw(::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- if (! m_xPropertyInfo.is())
- {
- Sequence< beans::Property > seq( 1 );
- seq[ 0 ] = beans::Property(
- OUSTR("DefaultContext"), -1, ::getCppuType( &m_xContext ), 0 );
- Reference< beans::XPropertySetInfo > xInfo( new PropertySetInfo_Impl( seq ) );
-
- MutexGuard aGuard( m_mutex );
- if (! m_xPropertyInfo.is())
- {
- m_xPropertyInfo = xInfo;
- }
- }
- return m_xPropertyInfo;
-}
-
-void OServiceManager::setPropertyValue(
- const OUString& PropertyName, const Any& aValue )
- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("DefaultContext") ))
- {
- Reference< XComponentContext > xContext;
- if (aValue >>= xContext)
- {
- MutexGuard aGuard( m_mutex );
- m_xContext = xContext;
- }
- else
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("no XComponentContext given!") ),
- (OWeakObject *)this, 1 );
- }
- }
- else
- {
- throw UnknownPropertyException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("unknown property ") ) + PropertyName,
- (OWeakObject *)this );
- }
-}
-
-Any OServiceManager::getPropertyValue(const OUString& PropertyName)
- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("DefaultContext") ))
- {
- MutexGuard aGuard( m_mutex );
- if( m_xContext.is() )
- return makeAny( m_xContext );
- else
- return Any();
- }
- else
- {
- UnknownPropertyException except;
- except.Message = OUString( RTL_CONSTASCII_USTRINGPARAM( "ServiceManager : unknown property " ) );
- except.Message += PropertyName;
- throw except;
- }
-}
-
-void OServiceManager::addPropertyChangeListener(
- const OUString&, const Reference<XPropertyChangeListener >&)
- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- throw UnknownPropertyException();
-}
-
-void OServiceManager::removePropertyChangeListener(
- const OUString&, const Reference<XPropertyChangeListener >&)
- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- throw UnknownPropertyException();
-}
-
-void OServiceManager::addVetoableChangeListener(
- const OUString&, const Reference<XVetoableChangeListener >&)
- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- throw UnknownPropertyException();
-}
-
-void OServiceManager::removeVetoableChangeListener(
- const OUString&, const Reference<XVetoableChangeListener >&)
- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- throw UnknownPropertyException();
-}
-
-// OServiceManager
-Reference<XEventListener > OServiceManager::getFactoryListener()
-{
- check_undisposed();
- MutexGuard aGuard( m_mutex );
- if( !xFactoryListener.is() )
- xFactoryListener = new OServiceManager_Listener( this );
- return xFactoryListener;
-}
-
-// XMultiServiceFactory, XContentEnumeration
-Sequence< OUString > OServiceManager::getUniqueAvailableServiceNames(
- HashSet_OWString & aNameSet )
-{
- check_undisposed();
- MutexGuard aGuard( m_mutex );
- HashMultimap_OWString_Interface::iterator aSIt = m_ServiceMap.begin();
- while( aSIt != m_ServiceMap.end() )
- aNameSet.insert( (*aSIt++).first );
-
- /* do not return the implementation names
- HashMap_OWString_Interface m_ImplementationNameMap;
- HashMap_OWString_Interface::iterator aIt = m_ImplementationNameMap.begin();
- while( aIt != m_ImplementationNameMap.end() )
- aNameSet.insert( (*aIt++).first );
- */
-
- Sequence< OUString > aNames( aNameSet.size() );
- OUString * pArray = aNames.getArray();
- sal_Int32 i = 0;
- HashSet_OWString::iterator next = aNameSet.begin();
- while( next != aNameSet.end() )
- pArray[i++] = (*next++);
-
- return aNames;
-}
-
-// XMultiComponentFactory
-Reference< XInterface > OServiceManager::createInstanceWithContext(
- OUString const & rServiceSpecifier,
- Reference< XComponentContext > const & xContext )
- throw (Exception, RuntimeException)
-{
- check_undisposed();
-#if OSL_DEBUG_LEVEL > 0
- Reference< beans::XPropertySet > xProps( xContext->getServiceManager(), UNO_QUERY );
- OSL_ASSERT( xProps.is() );
- if (xProps.is())
- {
- Reference< XComponentContext > xDefContext;
- xProps->getPropertyValue(
- OUString( RTL_CONSTASCII_USTRINGPARAM("DefaultContext") ) ) >>= xDefContext;
- OSL_ENSURE(
- xContext == xDefContext,
- "### default context of service manager singleton differs from context holding it!" );
- }
-#endif
-
- Sequence< Reference< XInterface > > factories(
- queryServiceFactories( rServiceSpecifier, xContext ) );
- Reference< XInterface > const * p = factories.getConstArray();
- for ( sal_Int32 nPos = 0; nPos < factories.getLength(); ++nPos )
- {
- try
- {
- Reference< XInterface > const & xFactory = p[ nPos ];
- if (xFactory.is())
- {
- Reference< XSingleComponentFactory > xFac( xFactory, UNO_QUERY );
- if (xFac.is())
- {
- return xFac->createInstanceWithContext( xContext );
- }
- else
- {
- Reference< XSingleServiceFactory > xFac2( xFactory, UNO_QUERY );
- if (xFac2.is())
- {
-#if OSL_DEBUG_LEVEL > 1
- OString aStr( OUStringToOString( rServiceSpecifier, RTL_TEXTENCODING_ASCII_US ) );
- OSL_TRACE( "### ignoring given context raising service %s !!!\n", aStr.getStr() );
-#endif
- return xFac2->createInstance();
- }
- }
- }
- }
- catch (lang::DisposedException & exc)
- {
-#if OSL_DEBUG_LEVEL > 1
- OString str( OUStringToOString( exc.Message, RTL_TEXTENCODING_ASCII_US ) );
- OSL_TRACE( "### DisposedException occurred: %s", str.getStr() );
-#else
- (void) exc; // unused
-#endif
- }
- }
-
- return Reference< XInterface >();
-}
-// XMultiComponentFactory
-Reference< XInterface > OServiceManager::createInstanceWithArgumentsAndContext(
- OUString const & rServiceSpecifier,
- Sequence< Any > const & rArguments,
- Reference< XComponentContext > const & xContext )
- throw (Exception, RuntimeException)
-{
- check_undisposed();
-#if OSL_DEBUG_LEVEL > 0
- Reference< beans::XPropertySet > xProps( xContext->getServiceManager(), UNO_QUERY );
- OSL_ASSERT( xProps.is() );
- if (xProps.is())
- {
- Reference< XComponentContext > xDefContext;
- xProps->getPropertyValue(
- OUString( RTL_CONSTASCII_USTRINGPARAM("DefaultContext") ) ) >>= xDefContext;
- OSL_ENSURE(
- xContext == xDefContext,
- "### default context of service manager singleton differs from context holding it!" );
- }
-#endif
-
- Sequence< Reference< XInterface > > factories(
- queryServiceFactories( rServiceSpecifier, xContext ) );
- Reference< XInterface > const * p = factories.getConstArray();
- for ( sal_Int32 nPos = 0; nPos < factories.getLength(); ++nPos )
- {
- try
- {
- Reference< XInterface > const & xFactory = p[ nPos ];
- if (xFactory.is())
- {
- Reference< XSingleComponentFactory > xFac( xFactory, UNO_QUERY );
- if (xFac.is())
- {
- return xFac->createInstanceWithArgumentsAndContext( rArguments, xContext );
- }
- else
- {
- Reference< XSingleServiceFactory > xFac2( xFactory, UNO_QUERY );
- if (xFac2.is())
- {
-#if OSL_DEBUG_LEVEL > 1
- OString aStr( OUStringToOString( rServiceSpecifier, RTL_TEXTENCODING_ASCII_US ) );
- OSL_TRACE( "### ignoring given context raising service %s !!!\n", aStr.getStr() );
-#endif
- return xFac2->createInstanceWithArguments( rArguments );
- }
- }
- }
- }
- catch (lang::DisposedException & exc)
- {
-#if OSL_DEBUG_LEVEL > 1
- OString str( OUStringToOString( exc.Message, RTL_TEXTENCODING_ASCII_US ) );
- OSL_TRACE( "### DisposedException occurred: %s", str.getStr() );
-#else
- (void) exc; // unused
-#endif
- }
- }
-
- return Reference< XInterface >();
-}
-
-// XMultiServiceFactory, XMultiComponentFactory, XContentEnumeration
-Sequence< OUString > OServiceManager::getAvailableServiceNames()
- throw(::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- // all names
- HashSet_OWString aNameSet;
- return getUniqueAvailableServiceNames( aNameSet );
-}
-
-// XMultibleServiceFactory
-Reference<XInterface > OServiceManager::createInstance(
- const OUString& rServiceSpecifier )
- throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
-{
- return createInstanceWithContext(
- rServiceSpecifier, m_xContext );
-}
-
-// XMultibleServiceFactory
-Reference<XInterface > OServiceManager::createInstanceWithArguments(
- const OUString& rServiceSpecifier,
- const Sequence<Any >& rArguments )
- throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
-{
- return createInstanceWithArgumentsAndContext(
- rServiceSpecifier, rArguments, m_xContext );
-}
-
-// XInitialization
-void OServiceManager::initialize( Sequence< Any > const & )
- throw (Exception)
-{
- check_undisposed();
- OSL_FAIL( "not impl!" );
-}
-
-// XServiceInfo
-OUString OServiceManager::getImplementationName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- return getImplementationName_Static();
-}
-
-// XServiceInfo
-sal_Bool OServiceManager::supportsService(const OUString& ServiceName)
- throw(::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- Sequence< OUString > aSNL = getSupportedServiceNames();
- const OUString * pArray = aSNL.getConstArray();
- for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
- if( pArray[i] == ServiceName )
- return sal_True;
- return sal_False;
-}
-
-// XServiceInfo
-Sequence< OUString > OServiceManager::getSupportedServiceNames()
- throw(::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- return stoc_bootstrap::smgr_getSupportedServiceNames();
-}
-
-
-Sequence< Reference< XInterface > > OServiceManager::queryServiceFactories(
- const OUString& aServiceName, Reference< XComponentContext > const & )
-{
- Sequence< Reference< XInterface > > ret;
-
- MutexGuard aGuard( m_mutex );
- ::std::pair<
- HashMultimap_OWString_Interface::iterator,
- HashMultimap_OWString_Interface::iterator> p(
- m_ServiceMap.equal_range( aServiceName ) );
-
- if (p.first == p.second) // no factories
- {
- // no service found, look for an implementation
- HashMap_OWString_Interface::iterator aIt = m_ImplementationNameMap.find( aServiceName );
- if( aIt != m_ImplementationNameMap.end() )
- {
- Reference< XInterface > const & x = aIt->second;
- // an implementation found
- ret = Sequence< Reference< XInterface > >( &x, 1 );
- }
- }
- else
- {
- ::std::vector< Reference< XInterface > > vec;
- vec.reserve( 4 );
- while (p.first != p.second)
- {
- vec.push_back( p.first->second );
- ++p.first;
- }
- ret = Sequence< Reference< XInterface > >(
- vec.empty() ? 0 : &vec[ 0 ], vec.size() );
- }
-
- return ret;
-}
-
-// XContentEnumerationAccess
-Reference<XEnumeration > OServiceManager::createContentEnumeration(
- const OUString& aServiceName, Reference< XComponentContext > const & xContext )
- throw(::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- Sequence< Reference< XInterface > > factories(
- OServiceManager::queryServiceFactories( aServiceName, xContext ) );
- if (factories.getLength())
- return new ServiceEnumeration_Impl( factories );
- else
- return Reference< XEnumeration >();
-}
-Reference<XEnumeration > OServiceManager::createContentEnumeration(
- const OUString& aServiceName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- return createContentEnumeration( aServiceName, m_xContext );
-}
-
-// XEnumeration
-Reference<XEnumeration > OServiceManager::createEnumeration() throw(::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- MutexGuard aGuard( m_mutex );
- return new ImplementationEnumeration_Impl( m_ImplementationMap );
-}
-
-// XElementAccess
-Type OServiceManager::getElementType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- return ::getCppuType( (const Reference< XInterface > *)0 );
-}
-
-// XElementAccess
-sal_Bool OServiceManager::hasElements()
- throw(::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- MutexGuard aGuard( m_mutex );
- return !m_ImplementationMap.empty();
-}
-
-// XSet
-sal_Bool OServiceManager::has( const Any & Element )
- throw(::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- if( Element.getValueTypeClass() == TypeClass_INTERFACE )
- {
- Reference<XInterface > xEle( Element, UNO_QUERY_THROW );
- MutexGuard aGuard( m_mutex );
- return m_ImplementationMap.find( xEle ) !=
- m_ImplementationMap.end();
- }
- else if (Element.getValueTypeClass() == TypeClass_STRING)
- {
- OUString const & implName =
- *reinterpret_cast< OUString const * >(Element.getValue());
- MutexGuard aGuard( m_mutex );
- return m_ImplementationNameMap.find( implName ) !=
- m_ImplementationNameMap.end();
- }
- return sal_False;
-}
-
-// XSet
-void OServiceManager::insert( const Any & Element )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::ElementExistException, ::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- if( Element.getValueTypeClass() != TypeClass_INTERFACE )
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("no interface given!") ),
- Reference< XInterface >(), 0 );
- }
- Reference<XInterface > xEle( Element, UNO_QUERY_THROW );
-
- {
- MutexGuard aGuard( m_mutex );
- HashSet_Ref::iterator aIt = m_ImplementationMap.find( xEle );
- if( aIt != m_ImplementationMap.end() )
- {
- throw ElementExistException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("element already exists!") ),
- Reference< XInterface >() );
- }
-
- // put into the implementation hashmap
- m_ImplementationMap.insert( xEle );
-
- // put into the implementation name hashmap
- Reference<XServiceInfo > xInfo( Reference<XServiceInfo >::query( xEle ) );
- if( xInfo.is() )
- {
- OUString aImplName = xInfo->getImplementationName();
- if( aImplName.getLength() )
- m_ImplementationNameMap[ aImplName ] = xEle;
-
- //put into the service map
- Sequence< OUString > aServiceNames = xInfo->getSupportedServiceNames();
- const OUString * pArray = aServiceNames.getConstArray();
- for( sal_Int32 i = 0; i < aServiceNames.getLength(); i++ )
- {
- m_ServiceMap.insert( HashMultimap_OWString_Interface::value_type(
- pArray[i], *(Reference<XInterface > *)Element.getValue() ) );
- }
- }
- }
- // add the disposing listener to the factory
- Reference<XComponent > xComp( Reference<XComponent >::query( xEle ) );
- if( xComp.is() )
- xComp->addEventListener( getFactoryListener() );
-}
-
-// helper function
-sal_Bool OServiceManager::haveFactoryWithThisImplementation(const OUString& aImplName)
-{
- return ( m_ImplementationNameMap.find(aImplName) != m_ImplementationNameMap.end());
-}
-
-// XSet
-void OServiceManager::remove( const Any & Element )
- throw(::com::sun::star::lang::IllegalArgumentException,
- ::com::sun::star::container::NoSuchElementException,
- ::com::sun::star::uno::RuntimeException)
-{
- if (is_disposed())
- return;
-
- Reference<XInterface > xEle;
- if (Element.getValueTypeClass() == TypeClass_INTERFACE)
- {
- xEle.set( Element, UNO_QUERY_THROW );
- }
- else if (Element.getValueTypeClass() == TypeClass_STRING)
- {
- OUString const & implName =
- *reinterpret_cast< OUString const * >(Element.getValue());
- MutexGuard aGuard( m_mutex );
- HashMap_OWString_Interface::const_iterator const iFind(
- m_ImplementationNameMap.find( implName ) );
- if (iFind == m_ImplementationNameMap.end())
- {
- throw NoSuchElementException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("element is not in: ") )
- + implName, static_cast< OWeakObject * >(this) );
- }
- xEle = iFind->second;
- }
- else
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM(
- "neither interface nor string given!") ),
- Reference< XInterface >(), 0 );
- }
-
- // remove the disposing listener from the factory
- Reference<XComponent > xComp( Reference<XComponent >::query( xEle ) );
- if( xComp.is() )
- xComp->removeEventListener( getFactoryListener() );
-
- MutexGuard aGuard( m_mutex );
- HashSet_Ref::iterator aIt = m_ImplementationMap.find( xEle );
- if( aIt == m_ImplementationMap.end() )
- {
- throw NoSuchElementException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("element is not in!") ),
- static_cast< OWeakObject * >(this) );
- }
- //First remove all factories which have been loaded by ORegistryServiceManager.
- m_SetLoadedFactories.erase( *aIt);
- //Remove from the implementation map. It contains all factories of m_SetLoadedFactories
- //which have been added directly through XSet, that is not via ORegistryServiceManager
- m_ImplementationMap.erase( aIt );
-
- // remove from the implementation name hashmap
- Reference<XServiceInfo > xInfo( Reference<XServiceInfo >::query( xEle ) );
- if( xInfo.is() )
- {
- OUString aImplName = xInfo->getImplementationName();
- if( aImplName.getLength() )
- m_ImplementationNameMap.erase( aImplName );
- }
-
- //remove from the service map
- Reference<XServiceInfo > xSF( Reference<XServiceInfo >::query( xEle ) );
- if( xSF.is() )
- {
- Sequence< OUString > aServiceNames = xSF->getSupportedServiceNames();
- const OUString * pArray = aServiceNames.getConstArray();
- for( sal_Int32 i = 0; i < aServiceNames.getLength(); i++ )
- {
- pair<HashMultimap_OWString_Interface::iterator, HashMultimap_OWString_Interface::iterator> p =
- m_ServiceMap.equal_range( pArray[i] );
-
- while( p.first != p.second )
- {
- if( xEle == (*p.first).second )
- {
- m_ServiceMap.erase( p.first );
- break;
- }
- ++p.first;
- }
- }
- }
-}
-
-/*****************************************************************************
- class ORegistryServiceManager
-*****************************************************************************/
-class ORegistryServiceManager : public OServiceManager
-{
-public:
- ORegistryServiceManager( Reference< XComponentContext > const & xContext );
- virtual ~ORegistryServiceManager();
-
- // XInitialization
- void SAL_CALL initialize(const Sequence< Any >& Arguments)
- throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
-
- // XServiceInfo
- OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException)
- { return stoc_bootstrap::regsmgr_getImplementationName(); }
-
- Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException);
-
- // XMultiServiceFactory
- Sequence< OUString > SAL_CALL getAvailableServiceNames() throw(::com::sun::star::uno::RuntimeException);
-
- // XContentEnumerationAccess
- //Sequence< OUString > getAvailableServiceNames() throw( (Exception) );
- Reference<XEnumeration > SAL_CALL createContentEnumeration(const OUString& aServiceName) throw(::com::sun::star::uno::RuntimeException);
- virtual Reference<XEnumeration > SAL_CALL createContentEnumeration(
- const OUString& aServiceName, Reference< XComponentContext > const & xContext )
- throw(::com::sun::star::uno::RuntimeException);
-
- // XComponent
- void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException);
-
- // OServiceManager
- Reference<XPropertySetInfo > SAL_CALL getPropertySetInfo()
- throw(::com::sun::star::uno::RuntimeException);
- Any SAL_CALL getPropertyValue(const OUString& PropertyName)
- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
-
-protected:
- //OServiceManager
- Sequence< Reference< XInterface > > queryServiceFactories(
- const OUString& aServiceName, Reference< XComponentContext > const & xContext );
-private:
- Reference<XRegistryKey > getRootKey();
- Reference<XInterface > loadWithImplementationName(
- const OUString & rImplName, Reference< XComponentContext > const & xContext );
- Sequence<OUString> getFromServiceName(const OUString& serviceName);
- Reference<XInterface > loadWithServiceName(
- const OUString & rImplName, Reference< XComponentContext > const & xContext );
- void fillAllNamesFromRegistry( HashSet_OWString & );
-
- sal_Bool m_searchedRegistry;
- Reference<XSimpleRegistry > m_xRegistry; // readonly property Registry
- Reference<XRegistryKey > m_xRootKey;
-
-#if OSL_DEBUG_LEVEL > 0
- bool m_init;
-#endif
-};
-
-/**
- * Create a ServiceManager
- */
-ORegistryServiceManager::ORegistryServiceManager( Reference< XComponentContext > const & xContext )
- : OServiceManager( xContext )
- , m_searchedRegistry(sal_False)
-#if OSL_DEBUG_LEVEL > 0
- , m_init( false )
-#endif
-{
-}
-
-/**
- * Destroy the ServiceManager
- */
-ORegistryServiceManager::~ORegistryServiceManager()
-{
-}
-
-// XComponent
-void ORegistryServiceManager::dispose()
- throw(::com::sun::star::uno::RuntimeException)
-{
- if (rBHelper.bDisposed || rBHelper.bInDispose)
- return;
- OServiceManager::dispose();
- // dispose
- MutexGuard aGuard( m_mutex );
- // erase all members
- m_xRegistry = Reference<XSimpleRegistry >();
- m_xRootKey = Reference<XRegistryKey >();
-}
-
-/**
- * Return the root key of the registry. The Default registry service is ordered
- * if no registry is set.
- */
-//Reference<XServiceProvider > create_DefaultRegistry_ServiceProvider();
-
-Reference<XRegistryKey > ORegistryServiceManager::getRootKey()
-{
- if( !m_xRootKey.is() )
- {
- MutexGuard aGuard( m_mutex );
- // DefaultRegistry suchen !!!!
- if( !m_xRegistry.is() && !m_searchedRegistry )
- {
- // merken, es wird nur einmal gesucht
- m_searchedRegistry = sal_True;
-
- m_xRegistry.set(
- createInstanceWithContext(
- OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.registry.DefaultRegistry") ),
- m_xContext ),
- UNO_QUERY );
- }
- if( m_xRegistry.is() && !m_xRootKey.is() )
- m_xRootKey = m_xRegistry->getRootKey();
- }
-
- return m_xRootKey;
-}
-
-/**
- * Create a service provider from the registry with an implementation name
- */
-Reference<XInterface > ORegistryServiceManager::loadWithImplementationName(
- const OUString& name, Reference< XComponentContext > const & xContext )
-{
- Reference<XInterface > ret;
-
- Reference<XRegistryKey > xRootKey = getRootKey();
- if( !xRootKey.is() )
- return ret;
-
- try
- {
- OUString implementationName = OUString( RTL_CONSTASCII_USTRINGPARAM("/IMPLEMENTATIONS/") ) + name;
- Reference<XRegistryKey > xImpKey = m_xRootKey->openKey(implementationName);
-
- if( xImpKey.is() )
- {
- Reference< lang::XMultiServiceFactory > xMgr;
- if (xContext.is())
- xMgr.set( xContext->getServiceManager(), UNO_QUERY_THROW );
- else
- xMgr.set( this );
- ret = createSingleRegistryFactory( xMgr, name, xImpKey );
- insert( makeAny( ret ) );
- // Remember this factory as loaded in contrast to inserted ( XSet::insert)
- // factories. Those loaded factories in this set are candidates for being
- // released on an unloading notification.
- m_SetLoadedFactories.insert( ret);
- }
- }
- catch (InvalidRegistryException &)
- {
- }
-
- return ret;
-}
-
-/**
- * Return all implementation out of the registry.
- */
-Sequence<OUString> ORegistryServiceManager::getFromServiceName(
- const OUString& serviceName )
-{
- OUStringBuffer buf;
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM( "/SERVICES/" ) );
- buf.append( serviceName );
- return retrieveAsciiValueList( m_xRegistry, buf.makeStringAndClear() );
-}
-
-/**
- * Create a service provider from the registry
- */
-Reference<XInterface > ORegistryServiceManager::loadWithServiceName(
- const OUString& serviceName, Reference< XComponentContext > const & xContext )
-{
- Sequence<OUString> implEntries = getFromServiceName( serviceName );
- for (sal_Int32 i = 0; i < implEntries.getLength(); i++)
- {
- Reference< XInterface > x(
- loadWithImplementationName( implEntries.getConstArray()[i], xContext ) );
- if (x.is())
- return x;
- }
-
- return Reference<XInterface >();
-}
-
-/**
- * Return a sequence of all service names from the registry.
- */
-void ORegistryServiceManager::fillAllNamesFromRegistry( HashSet_OWString & rSet )
-{
- Reference<XRegistryKey > xRootKey = getRootKey();
- if( !xRootKey.is() )
- return;
-
- try
- {
- Reference<XRegistryKey > xServicesKey = xRootKey->openKey(
- OUString( RTL_CONSTASCII_USTRINGPARAM("SERVICES") ) );
- // root + /Services + /
- if( xServicesKey.is() )
- {
- sal_Int32 nPrefix = xServicesKey->getKeyName().getLength() +1;
- Sequence<Reference<XRegistryKey > > aKeys = xServicesKey->openKeys();
- for( sal_Int32 i = 0; i < aKeys.getLength(); i++ )
- rSet.insert( aKeys.getConstArray()[i]->getKeyName().copy( nPrefix ) );
- }
- }
- catch (InvalidRegistryException &)
- {
- }
-}
-
-// XInitialization
-void ORegistryServiceManager::initialize(const Sequence< Any >& Arguments)
- throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- MutexGuard aGuard( m_mutex );
- if (Arguments.getLength() > 0)
- {
- m_xRootKey.clear();
- Arguments[ 0 ] >>= m_xRegistry;
- }
-#if OSL_DEBUG_LEVEL > 0
- // to find all bootstrapping processes to be fixed...
- OSL_ENSURE( !m_init, "### second init of service manager instance!" );
- m_init = true;
-#endif
-}
-
-// XMultiServiceFactory, XContentEnumeration
-Sequence< OUString > ORegistryServiceManager::getAvailableServiceNames()
- throw(::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- MutexGuard aGuard( m_mutex );
- // all names
- HashSet_OWString aNameSet;
-
- // all names from the registry
- fillAllNamesFromRegistry( aNameSet );
-
- return OServiceManager::getUniqueAvailableServiceNames( aNameSet );
-}
-
-// XServiceInfo
-Sequence< OUString > ORegistryServiceManager::getSupportedServiceNames()
- throw(::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- return stoc_bootstrap::regsmgr_getSupportedServiceNames();
-}
-
-
-// OServiceManager
-Sequence< Reference< XInterface > > ORegistryServiceManager::queryServiceFactories(
- const OUString& aServiceName, Reference< XComponentContext > const & xContext )
-{
- Sequence< Reference< XInterface > > ret(
- OServiceManager::queryServiceFactories( aServiceName, xContext ) );
- if (ret.getLength())
- {
- return ret;
- }
- else
- {
- MutexGuard aGuard( m_mutex );
- Reference< XInterface > x( loadWithServiceName( aServiceName, xContext ) );
- if (! x.is())
- x = loadWithImplementationName( aServiceName, xContext );
- return Sequence< Reference< XInterface > >( &x, 1 );
- }
-}
-
-// XContentEnumerationAccess
-Reference<XEnumeration > ORegistryServiceManager::createContentEnumeration(
- const OUString& aServiceName, Reference< XComponentContext > const & xContext )
- throw(::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- MutexGuard aGuard( ((ORegistryServiceManager *)this)->m_mutex );
- // get all implementation names registered under this service name from the registry
- Sequence<OUString> aImpls = ((ORegistryServiceManager *)this)->getFromServiceName( aServiceName );
- // load and insert all factories specified by the registry
- sal_Int32 i;
- OUString aImplName;
- for( i = 0; i < aImpls.getLength(); i++ )
- {
- aImplName = aImpls.getConstArray()[i];
- if ( !haveFactoryWithThisImplementation(aImplName) )
- {
- loadWithImplementationName( aImplName, xContext );
- }
- }
- // call the superclass to enumerate all contents
- return OServiceManager::createContentEnumeration( aServiceName, xContext );
-}
-Reference<XEnumeration > ORegistryServiceManager::createContentEnumeration(
- const OUString& aServiceName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- return createContentEnumeration( aServiceName, m_xContext );
-}
-
-// OServiceManager
-Reference<XPropertySetInfo > ORegistryServiceManager::getPropertySetInfo()
- throw(::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- if (! m_xPropertyInfo.is())
- {
- Sequence< beans::Property > seq( 2 );
- seq[ 0 ] = beans::Property(
- OUSTR("DefaultContext"), -1, ::getCppuType( &m_xContext ), 0 );
- seq[ 1 ] = beans::Property(
- OUSTR("Registry"), -1, ::getCppuType( &m_xRegistry ),
- beans::PropertyAttribute::READONLY );
- Reference< beans::XPropertySetInfo > xInfo( new PropertySetInfo_Impl( seq ) );
-
- MutexGuard aGuard( m_mutex );
- if (! m_xPropertyInfo.is())
- {
- m_xPropertyInfo = xInfo;
- }
- }
- return m_xPropertyInfo;
-}
-
-Any ORegistryServiceManager::getPropertyValue(const OUString& PropertyName)
- throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
-{
- check_undisposed();
- if (PropertyName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("Registry") ))
- {
- MutexGuard aGuard( m_mutex );
- if( m_xRegistry.is() )
- return makeAny( m_xRegistry );
- else
- return Any();
- }
- return OServiceManager::getPropertyValue( PropertyName );
-}
-
-/* This is the listener function used by the service manager in order
-to implement the unloading mechanism, id is the this pointer of the
-service manager instances. On notification, that is the function is being called
-by rtl_unloadUnusedModules, the cached factroies are being removed from the
-service manager ( except manually inserted factories).
-*/
-extern "C" void SAL_CALL smgrUnloadingListener(void* id)
-{
- stoc_smgr::OServiceManager* pMgr= reinterpret_cast<stoc_smgr::OServiceManager*>( id);
- pMgr->onUnloadingNotify();
-}
-
-} // namespace
-
-namespace stoc_bootstrap
-{
-/**
- * Create the ServiceManager
- */
-Reference<XInterface > SAL_CALL OServiceManager_CreateInstance(
- const Reference< XComponentContext > & xContext )
-{
- return Reference<XInterface >(
- SAL_STATIC_CAST(
- XInterface *, SAL_STATIC_CAST(
- OWeakObject *, new stoc_smgr::OServiceManager( xContext ) ) ) );
-}
-
-/**
- * Create the ServiceManager
- */
-Reference<XInterface > SAL_CALL ORegistryServiceManager_CreateInstance(
- const Reference< XComponentContext > & xContext )
- throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
-{
- return Reference<XInterface >(
- SAL_STATIC_CAST(
- XInterface *, SAL_STATIC_CAST(
- OWeakObject *, new stoc_smgr::ORegistryServiceManager( xContext ) ) ) );
-}
-
-Reference<XInterface > SAL_CALL OServiceManagerWrapper_CreateInstance(
- const Reference< XComponentContext > & xContext )
- throw (Exception)
-{
- return (OWeakObject *)new stoc_smgr::OServiceManagerWrapper( xContext );
-}
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/simpleregistry/makefile.mk b/stoc/source/simpleregistry/makefile.mk
deleted file mode 100644
index bc0ddf7cc..000000000
--- a/stoc/source/simpleregistry/makefile.mk
+++ /dev/null
@@ -1,47 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME= stoc
-TARGET = simplereg
-ENABLE_EXCEPTIONS=TRUE
-BOOTSTRAP_SERVICE=TRUE
-UNOUCROUT=$(OUT)$/inc$/bootstrap
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-
-# ------------------------------------------------------------------
-
-SLOFILES= \
- $(SLO)/simpleregistry.obj \
- $(SLO)/textualservices.obj
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
diff --git a/stoc/source/simpleregistry/simpleregistry.cxx b/stoc/source/simpleregistry/simpleregistry.cxx
deleted file mode 100644
index 4485f69e0..000000000
--- a/stoc/source/simpleregistry/simpleregistry.cxx
+++ /dev/null
@@ -1,1322 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
-*
-* 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.
-*
-************************************************************************/
-
-#include "precompiled_stoc.hxx"
-#include "sal/config.h"
-
-#include <cstdlib>
-#include <memory>
-#include <vector>
-
-#include "com/sun/star/lang/XServiceInfo.hpp"
-#include "com/sun/star/registry/InvalidRegistryException.hpp"
-#include "com/sun/star/registry/InvalidValueException.hpp"
-#include "com/sun/star/registry/MergeConflictException.hpp"
-#include "com/sun/star/registry/RegistryKeyType.hpp"
-#include "com/sun/star/registry/XRegistryKey.hpp"
-#include "com/sun/star/registry/XSimpleRegistry.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/RuntimeException.hpp"
-#include "com/sun/star/uno/XComponentContext.hpp"
-#include "com/sun/star/uno/XInterface.hpp"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "cppuhelper/implbase1.hxx"
-#include "cppuhelper/implbase2.hxx"
-#include "cppuhelper/weak.hxx"
-#include "osl/mutex.hxx"
-#include "registry/registry.hxx"
-#include "registry/regtype.h"
-#include "rtl/ref.hxx"
-#include "rtl/string.h"
-#include "rtl/string.hxx"
-#include "rtl/textcvt.h"
-#include "rtl/textenc.h"
-#include "rtl/unload.h"
-#include "rtl/ustring.h"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-
-#include "bootstrapservices.hxx"
-
-#include "textualservices.hxx"
-
-extern rtl_StandardModuleCount g_moduleCount;
-
-namespace {
-
-namespace css = com::sun::star;
-
-class SimpleRegistry:
- public cppu::WeakImplHelper2<
- css::registry::XSimpleRegistry, css::lang::XServiceInfo >
-{
-public:
- SimpleRegistry() { g_moduleCount.modCnt.acquire(&g_moduleCount.modCnt); }
-
- ~SimpleRegistry() { g_moduleCount.modCnt.release(&g_moduleCount.modCnt); }
-
- osl::Mutex mutex_;
-
-private:
- virtual rtl::OUString SAL_CALL getURL() throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL open(
- rtl::OUString const & rURL, sal_Bool bReadOnly, sal_Bool bCreate)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isValid() throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL close() throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual void SAL_CALL destroy() throw(
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL
- getRootKey() throw(
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isReadOnly() throw(
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual void SAL_CALL mergeKey(
- rtl::OUString const & aKeyName, rtl::OUString const & aUrl)
- throw (
- css::registry::InvalidRegistryException,
- css::registry::MergeConflictException, css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getImplementationName()
- throw (css::uno::RuntimeException)
- { return stoc_bootstrap::simreg_getImplementationName(); }
-
- virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & ServiceName)
- throw (css::uno::RuntimeException)
- { return ServiceName == getSupportedServiceNames()[0]; }
-
- virtual css::uno::Sequence< rtl::OUString > SAL_CALL
- getSupportedServiceNames() throw (css::uno::RuntimeException)
- { return stoc_bootstrap::simreg_getSupportedServiceNames(); }
-
- Registry registry_;
- std::auto_ptr< stoc::simpleregistry::TextualServices > textual_;
-};
-
-class Key: public cppu::WeakImplHelper1< css::registry::XRegistryKey > {
-public:
- Key(
- rtl::Reference< SimpleRegistry > const & registry,
- RegistryKey const & key):
- registry_(registry), key_(key) {}
-
-private:
- virtual rtl::OUString SAL_CALL getKeyName()
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isReadOnly() throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isValid() throw(css::uno::RuntimeException);
-
- virtual css::registry::RegistryKeyType SAL_CALL getKeyType(
- rtl::OUString const & rKeyName)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual css::registry::RegistryValueType SAL_CALL getValueType() throw(
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual sal_Int32 SAL_CALL getLongValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setLongValue(sal_Int32 value) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual css::uno::Sequence< sal_Int32 > SAL_CALL getLongListValue() throw(
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setLongListValue(
- com::sun::star::uno::Sequence< sal_Int32 > const & seqValue)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getAsciiValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setAsciiValue(rtl::OUString const & value) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual css::uno::Sequence< rtl::OUString > SAL_CALL getAsciiListValue()
- throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setAsciiListValue(
- css::uno::Sequence< rtl::OUString > const & seqValue)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getStringValue() throw(
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setStringValue(rtl::OUString const & value) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual css::uno::Sequence< rtl::OUString > SAL_CALL getStringListValue()
- throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setStringListValue(
- css::uno::Sequence< rtl::OUString > const & seqValue)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual css::uno::Sequence< sal_Int8 > SAL_CALL getBinaryValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setBinaryValue(
- css::uno::Sequence< sal_Int8 > const & value)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL openKey(
- rtl::OUString const & aKeyName)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL
- createKey(rtl::OUString const & aKeyName) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual void SAL_CALL closeKey() throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual void SAL_CALL deleteKey(rtl::OUString const & rKeyName) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual
- css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > >
- SAL_CALL openKeys() throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual css::uno::Sequence< rtl::OUString > SAL_CALL getKeyNames() throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL createLink(
- rtl::OUString const & aLinkName, rtl::OUString const & aLinkTarget)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual void SAL_CALL deleteLink(rtl::OUString const & rLinkName) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getLinkTarget(
- rtl::OUString const & rLinkName)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getResolvedName(
- rtl::OUString const & aKeyName)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- rtl::Reference< SimpleRegistry > registry_;
- RegistryKey key_;
-};
-
-rtl::OUString Key::getKeyName() throw (css::uno::RuntimeException) {
- osl::MutexGuard guard(registry_->mutex_);
- return key_.getName();
-}
-
-sal_Bool Key::isReadOnly()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- return key_.isReadOnly();
-}
-
-sal_Bool Key::isValid() throw (css::uno::RuntimeException) {
- osl::MutexGuard guard(registry_->mutex_);
- return key_.isValid();
-}
-
-css::registry::RegistryKeyType Key::getKeyType(rtl::OUString const & rKeyName)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegKeyType type;
- RegError err = key_.getKeyType(rKeyName, &type);
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getKeyType:"
- " underlying RegistryKey::getKeyType() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- switch (type) {
- default:
- std::abort(); // this cannot happen
- // pseudo-fall-through to avoid warnings on MSC
- case RG_KEYTYPE:
- return css::registry::RegistryKeyType_KEY;
- case RG_LINKTYPE:
- return css::registry::RegistryKeyType_LINK;
- }
-}
-
-css::registry::RegistryValueType Key::getValueType()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegValueType type;
- sal_uInt32 size;
- RegError err = key_.getValueInfo(rtl::OUString(), &type, &size);
- switch (err) {
- case REG_NO_ERROR:
- break;
- case REG_INVALID_VALUE:
- type = RG_VALUETYPE_NOT_DEFINED;
- break;
- default:
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getValueType:"
- " underlying RegistryKey::getValueInfo() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- switch (type) {
- default:
- std::abort(); // this cannot happen
- // pseudo-fall-through to avoid warnings on MSC
- case RG_VALUETYPE_NOT_DEFINED:
- return css::registry::RegistryValueType_NOT_DEFINED;
- case RG_VALUETYPE_LONG:
- return css::registry::RegistryValueType_LONG;
- case RG_VALUETYPE_STRING:
- return css::registry::RegistryValueType_ASCII;
- case RG_VALUETYPE_UNICODE:
- return css::registry::RegistryValueType_STRING;
- case RG_VALUETYPE_BINARY:
- return css::registry::RegistryValueType_BINARY;
- case RG_VALUETYPE_LONGLIST:
- return css::registry::RegistryValueType_LONGLIST;
- case RG_VALUETYPE_STRINGLIST:
- return css::registry::RegistryValueType_ASCIILIST;
- case RG_VALUETYPE_UNICODELIST:
- return css::registry::RegistryValueType_STRINGLIST;
- }
-}
-
-sal_Int32 Key::getLongValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- sal_Int32 value;
- RegError err = key_.getValue(rtl::OUString(), &value);
- switch (err) {
- case REG_NO_ERROR:
- break;
- case REG_INVALID_VALUE:
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getLongValue:"
- " underlying RegistryKey::getValue() = REG_INVALID_VALUE")),
- static_cast< OWeakObject * >(this));
- default:
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getLongValue:"
- " underlying RegistryKey::getValue() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- return value;
-}
-
-void Key::setLongValue(sal_Int32 value)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegError err = key_.setValue(
- rtl::OUString(), RG_VALUETYPE_LONG, &value, sizeof (sal_Int32));
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key setLongValue:"
- " underlying RegistryKey::setValue() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-css::uno::Sequence< sal_Int32 > Key::getLongListValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegistryValueList< sal_Int32 > list;
- RegError err = key_.getLongListValue(rtl::OUString(), list);
- switch (err) {
- case REG_NO_ERROR:
- break;
- case REG_VALUE_NOT_EXISTS:
- return css::uno::Sequence< sal_Int32 >();
- case REG_INVALID_VALUE:
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getLongListValue:"
- " underlying RegistryKey::getLongListValue() ="
- " REG_INVALID_VALUE")),
- static_cast< OWeakObject * >(this));
- default:
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getLongListValue:"
- " underlying RegistryKey::getLongListValue() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- sal_uInt32 n = list.getLength();
- if (n > SAL_MAX_INT32) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getLongListValue:"
- " underlying RegistryKey::getLongListValue() too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< sal_Int32 > value(static_cast< sal_Int32 >(n));
- for (sal_uInt32 i = 0; i < n; ++i) {
- value[static_cast< sal_Int32 >(i)] = list.getElement(i);
- }
- return value;
-}
-
-void Key::setLongListValue(css::uno::Sequence< sal_Int32 > const & seqValue)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- std::vector< sal_Int32 > list;
- for (sal_Int32 i = 0; i < seqValue.getLength(); ++i) {
- list.push_back(seqValue[i]);
- }
- RegError err = key_.setLongListValue(
- rtl::OUString(), list.empty() ? 0 : &list[0],
- static_cast< sal_uInt32 >(list.size()));
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key setLongListValue:"
- " underlying RegistryKey::setLongListValue() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-rtl::OUString Key::getAsciiValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegValueType type;
- sal_uInt32 size;
- RegError err = key_.getValueInfo(rtl::OUString(), &type, &size);
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getAsciiValue:"
- " underlying RegistryKey::getValueInfo() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- if (type != RG_VALUETYPE_STRING) {
- throw css::registry::InvalidValueException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getAsciiValue:"
- " underlying RegistryKey type = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(type))),
- static_cast< OWeakObject * >(this));
- }
- // size contains terminating null (error in underlying registry.cxx):
- if (size == 0) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getAsciiValue:"
- " underlying RegistryKey size 0 cannot happen due to"
- " design error")),
- static_cast< OWeakObject * >(this));
- }
- if (size > SAL_MAX_INT32) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getAsciiValue:"
- " underlying RegistryKey size too large")),
- static_cast< OWeakObject * >(this));
- }
- std::vector< char > list(size);
- err = key_.getValue(rtl::OUString(), &list[0]);
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getAsciiValue:"
- " underlying RegistryKey::getValue() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- if (list[size - 1] != '\0') {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getAsciiValue:"
- " underlying RegistryKey value must be null-terminated due"
- " to design error")),
- static_cast< OWeakObject * >(this));
- }
- rtl::OUString value;
- if (!rtl_convertStringToUString(
- &value.pData, &list[0],
- static_cast< sal_Int32 >(size - 1), RTL_TEXTENCODING_UTF8,
- (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
- RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
- RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)))
- {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getAsciiValue:"
- " underlying RegistryKey not UTF-8")),
- static_cast< OWeakObject * >(this));
- }
- return value;
-}
-
-void Key::setAsciiValue(rtl::OUString const & value)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- rtl::OString utf8;
- if (!value.convertToString(
- &utf8, RTL_TEXTENCODING_UTF8,
- (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR |
- RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR)))
- {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key setAsciiValue:"
- " value not UTF-16")),
- static_cast< OWeakObject * >(this));
- }
- RegError err = key_.setValue(
- rtl::OUString(), RG_VALUETYPE_STRING,
- const_cast< char * >(utf8.getStr()), utf8.getLength() + 1);
- // +1 for terminating null (error in underlying registry.cxx)
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key setAsciiValue:"
- " underlying RegistryKey::setValue() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-css::uno::Sequence< rtl::OUString > Key::getAsciiListValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegistryValueList< char * > list;
- RegError err = key_.getStringListValue(rtl::OUString(), list);
- switch (err) {
- case REG_NO_ERROR:
- break;
- case REG_VALUE_NOT_EXISTS:
- return css::uno::Sequence< rtl::OUString >();
- case REG_INVALID_VALUE:
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key"
- " getAsciiListValue: underlying"
- " RegistryKey::getStringListValue() = REG_INVALID_VALUE")),
- static_cast< OWeakObject * >(this));
- default:
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key"
- " getAsciiListValue: underlying"
- " RegistryKey::getStringListValue() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- sal_uInt32 n = list.getLength();
- if (n > SAL_MAX_INT32) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key"
- " getAsciiListValue: underlying"
- " RegistryKey::getStringListValue() too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > value(static_cast< sal_Int32 >(n));
- for (sal_uInt32 i = 0; i < n; ++i) {
- char * el = list.getElement(i);
- sal_Int32 size = rtl_str_getLength(el);
- if (!rtl_convertStringToUString(
- &value[static_cast< sal_Int32 >(i)].pData, el, size,
- RTL_TEXTENCODING_UTF8,
- (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR |
- RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR |
- RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR)))
- {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key"
- " getAsciiListValue: underlying RegistryKey not"
- " UTF-8")),
- static_cast< OWeakObject * >(this));
- }
- }
- return value;
-}
-
-void Key::setAsciiListValue(
- css::uno::Sequence< rtl::OUString > const & seqValue)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- std::vector< rtl::OString > list;
- for (sal_Int32 i = 0; i < seqValue.getLength(); ++i) {
- rtl::OString utf8;
- if (!seqValue[i].convertToString(
- &utf8, RTL_TEXTENCODING_UTF8,
- (RTL_UNICODETOTEXT_FLAGS_UNDEFINED_ERROR |
- RTL_UNICODETOTEXT_FLAGS_INVALID_ERROR)))
- {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key"
- " setAsciiListValue: value not UTF-16")),
- static_cast< OWeakObject * >(this));
- }
- list.push_back(utf8);
- }
- std::vector< char * > list2;
- for (std::vector< rtl::OString >::iterator i(list.begin()); i != list.end();
- ++i)
- {
- list2.push_back(const_cast< char * >(i->getStr()));
- }
- RegError err = key_.setStringListValue(
- rtl::OUString(), list2.empty() ? 0 : &list2[0],
- static_cast< sal_uInt32 >(list2.size()));
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key"
- " setAsciiListValue: underlying"
- " RegistryKey::setStringListValue() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-rtl::OUString Key::getStringValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegValueType type;
- sal_uInt32 size;
- RegError err = key_.getValueInfo(rtl::OUString(), &type, &size);
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getStringValue:"
- " underlying RegistryKey::getValueInfo() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- if (type != RG_VALUETYPE_UNICODE) {
- throw css::registry::InvalidValueException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getStringValue:"
- " underlying RegistryKey type = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(type))),
- static_cast< OWeakObject * >(this));
- }
- // size contains terminating null and is *2 (error in underlying
- // registry.cxx):
- if (size == 0 || (size & 1) == 1) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getStringValue:"
- " underlying RegistryKey size 0 or odd cannot happen due to"
- " design error")),
- static_cast< OWeakObject * >(this));
- }
- if (size > SAL_MAX_INT32) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getStringValue:"
- " underlying RegistryKey size too large")),
- static_cast< OWeakObject * >(this));
- }
- std::vector< sal_Unicode > list(size);
- err = key_.getValue(rtl::OUString(), &list[0]);
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getStringValue:"
- " underlying RegistryKey::getValue() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- if (list[size/2 - 1] != 0) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getStringValue:"
- " underlying RegistryKey value must be null-terminated due"
- " to design error")),
- static_cast< OWeakObject * >(this));
- }
- return rtl::OUString(&list[0], static_cast< sal_Int32 >(size/2 - 1));
-}
-
-void Key::setStringValue(rtl::OUString const & value)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegError err = key_.setValue(
- rtl::OUString(), RG_VALUETYPE_UNICODE,
- const_cast< sal_Unicode * >(value.getStr()),
- (value.getLength() + 1) * sizeof (sal_Unicode));
- // +1 for terminating null (error in underlying registry.cxx)
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key setStringValue:"
- " underlying RegistryKey::setValue() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-css::uno::Sequence< rtl::OUString > Key::getStringListValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegistryValueList< sal_Unicode * > list;
- RegError err = key_.getUnicodeListValue(rtl::OUString(), list);
- switch (err) {
- case REG_NO_ERROR:
- break;
- case REG_VALUE_NOT_EXISTS:
- return css::uno::Sequence< rtl::OUString >();
- case REG_INVALID_VALUE:
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key"
- " getStringListValue: underlying"
- " RegistryKey::getUnicodeListValue() = REG_INVALID_VALUE")),
- static_cast< OWeakObject * >(this));
- default:
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key"
- " getStringListValue: underlying"
- " RegistryKey::getUnicodeListValue() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- sal_uInt32 n = list.getLength();
- if (n > SAL_MAX_INT32) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key"
- " getStringListValue: underlying"
- " RegistryKey::getUnicodeListValue() too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > value(static_cast< sal_Int32 >(n));
- for (sal_uInt32 i = 0; i < n; ++i) {
- value[static_cast< sal_Int32 >(i)] = list.getElement(i);
- }
- return value;
-}
-
-void Key::setStringListValue(
- css::uno::Sequence< rtl::OUString > const & seqValue)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- std::vector< sal_Unicode * > list;
- for (sal_Int32 i = 0; i < seqValue.getLength(); ++i) {
- list.push_back(const_cast< sal_Unicode * >(seqValue[i].getStr()));
- }
- RegError err = key_.setUnicodeListValue(
- rtl::OUString(), list.empty() ? 0 : &list[0],
- static_cast< sal_uInt32 >(list.size()));
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key"
- " setStringListValue: underlying"
- " RegistryKey::setUnicodeListValue() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-css::uno::Sequence< sal_Int8 > Key::getBinaryValue()
- throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegValueType type;
- sal_uInt32 size;
- RegError err = key_.getValueInfo(rtl::OUString(), &type, &size);
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getBinaryValue:"
- " underlying RegistryKey::getValueInfo() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- if (type != RG_VALUETYPE_BINARY) {
- throw css::registry::InvalidValueException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getBinaryValue:"
- " underlying RegistryKey type = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(type))),
- static_cast< OWeakObject * >(this));
- }
- if (size > SAL_MAX_INT32) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getBinaryValue:"
- " underlying RegistryKey size too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< sal_Int8 > value(static_cast< sal_Int32 >(size));
- err = key_.getValue(rtl::OUString(), value.getArray());
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getBinaryValue:"
- " underlying RegistryKey::getValue() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- return value;
-}
-
-void Key::setBinaryValue(css::uno::Sequence< sal_Int8 > const & value)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegError err = key_.setValue(
- rtl::OUString(), RG_VALUETYPE_BINARY,
- const_cast< sal_Int8 * >(value.getConstArray()),
- static_cast< sal_uInt32 >(value.getLength()));
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key setBinaryValue:"
- " underlying RegistryKey::setValue() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-css::uno::Reference< css::registry::XRegistryKey > Key::openKey(
- rtl::OUString const & aKeyName)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegistryKey key;
- RegError err = key_.openKey(aKeyName, key);
- switch (err) {
- case REG_NO_ERROR:
- return new Key(registry_, key);
- case REG_KEY_NOT_EXISTS:
- return css::uno::Reference< css::registry::XRegistryKey >();
- default:
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key openKey:"
- " underlying RegistryKey::openKey() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-css::uno::Reference< css::registry::XRegistryKey > Key::createKey(
- rtl::OUString const & aKeyName)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegistryKey key;
- RegError err = key_.createKey(aKeyName, key);
- switch (err) {
- case REG_NO_ERROR:
- return new Key(registry_, key);
- case REG_INVALID_KEYNAME:
- return css::uno::Reference< css::registry::XRegistryKey >();
- default:
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key createKey:"
- " underlying RegistryKey::createKey() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-void Key::closeKey()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegError err = key_.closeKey();
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key closeKey:"
- " underlying RegistryKey::closeKey() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-void Key::deleteKey(rtl::OUString const & rKeyName)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegError err = key_.deleteKey(rKeyName);
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key deleteKey:"
- " underlying RegistryKey::deleteKey() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > >
-Key::openKeys()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegistryKeyArray list;
- RegError err = key_.openSubKeys(rtl::OUString(), list);
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key openKeys:"
- " underlying RegistryKey::openSubKeys() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- sal_uInt32 n = list.getLength();
- if (n > SAL_MAX_INT32) {
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getKeyNames:"
- " underlying RegistryKey::getKeyNames() too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > >
- keys(static_cast< sal_Int32 >(n));
- for (sal_uInt32 i = 0; i < n; ++i) {
- keys[static_cast< sal_Int32 >(i)] = new Key(
- registry_, list.getElement(i));
- }
- return keys;
-}
-
-css::uno::Sequence< rtl::OUString > Key::getKeyNames()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegistryKeyNames list;
- RegError err = key_.getKeyNames(rtl::OUString(), list);
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getKeyNames:"
- " underlying RegistryKey::getKeyNames() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- sal_uInt32 n = list.getLength();
- if (n > SAL_MAX_INT32) {
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getKeyNames:"
- " underlying RegistryKey::getKeyNames() too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > names(static_cast< sal_Int32 >(n));
- for (sal_uInt32 i = 0; i < n; ++i) {
- names[static_cast< sal_Int32 >(i)] = list.getElement(i);
- }
- return names;
-}
-
-sal_Bool Key::createLink(
- rtl::OUString const & aLinkName, rtl::OUString const & aLinkTarget)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegError err = key_.createLink(aLinkName, aLinkTarget);
- switch (err) {
- case REG_NO_ERROR:
- return true;
- case REG_INVALID_KEY:
- case REG_DETECT_RECURSION:
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key createLink:"
- " underlying RegistryKey::createLink() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- default:
- return false;
- }
-}
-
-void Key::deleteLink(rtl::OUString const & rLinkName)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- RegError err = key_.deleteLink(rLinkName);
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key deleteLink:"
- " underlying RegistryKey::deleteLink() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-rtl::OUString Key::getLinkTarget(rtl::OUString const & rLinkName)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- rtl::OUString target;
- RegError err = key_.getLinkTarget(rLinkName, target);
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getLinkTarget:"
- " underlying RegistryKey::getLinkTarget() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- return target;
-}
-
-rtl::OUString Key::getResolvedName(rtl::OUString const & aKeyName)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(registry_->mutex_);
- rtl::OUString resolved;
- RegError err = key_.getResolvedKeyName(aKeyName, true, resolved);
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry key getResolvedName:"
- " underlying RegistryKey::getResolvedName() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- return resolved;
-}
-
-rtl::OUString SimpleRegistry::getURL() throw (css::uno::RuntimeException) {
- osl::MutexGuard guard(mutex_);
- return textual_.get() == 0 ? registry_.getName() : textual_->getUri();
-}
-
-void SimpleRegistry::open(
- rtl::OUString const & rURL, sal_Bool bReadOnly, sal_Bool bCreate)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(mutex_);
- if (textual_.get() != 0) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry.open(")) +
- rURL +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "): instance already open"))),
- static_cast< OWeakObject * >(this));
- }
- RegError err = (rURL.getLength() == 0 && bCreate)
- ? REG_REGISTRY_NOT_EXISTS
- : registry_.open(rURL, bReadOnly ? REG_READONLY : REG_READWRITE);
- if (err == REG_REGISTRY_NOT_EXISTS && bCreate) {
- err = registry_.create(rURL);
- }
- switch (err) {
- case REG_NO_ERROR:
- break;
- case REG_INVALID_REGISTRY:
- if (bReadOnly && !bCreate) {
- textual_.reset(new stoc::simpleregistry::TextualServices(rURL));
- break;
- }
- // fall through
- default:
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry.open(")) +
- rURL +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "): underlying Registry::open/create() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-sal_Bool SimpleRegistry::isValid() throw (css::uno::RuntimeException) {
- osl::MutexGuard guard(mutex_);
- return textual_.get() != 0 || registry_.isValid();
-}
-
-void SimpleRegistry::close()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(mutex_);
- if (textual_.get() != 0) {
- textual_.reset();
- return;
- }
- RegError err = registry_.close();
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry.close:"
- " underlying Registry::close() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-void SimpleRegistry::destroy()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(mutex_);
- if (textual_.get() != 0) {
- textual_.reset();
- return;
- }
- RegError err = registry_.destroy(rtl::OUString());
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry.destroy:"
- " underlying Registry::destroy() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-css::uno::Reference< css::registry::XRegistryKey > SimpleRegistry::getRootKey()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(mutex_);
- if (textual_.get() != 0) {
- return textual_->getRootKey();
- }
- RegistryKey root;
- RegError err = registry_.openRootKey(root);
- if (err != REG_NO_ERROR) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry.getRootKey:"
- " underlying Registry::getRootKey() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
- return new Key(this, root);
-}
-
-sal_Bool SimpleRegistry::isReadOnly()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(mutex_);
- return textual_.get() != 0 || registry_.isReadOnly();
-}
-
-void SimpleRegistry::mergeKey(
- rtl::OUString const & aKeyName, rtl::OUString const & aUrl)
- throw (
- css::registry::InvalidRegistryException,
- css::registry::MergeConflictException, css::uno::RuntimeException)
-{
- osl::MutexGuard guard(mutex_);
- if (textual_.get() != 0) {
- throw css::uno::RuntimeException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry.mergeKey: not"
- " supported for textual representation")),
- static_cast< cppu::OWeakObject * >(this));
- }
- RegistryKey root;
- RegError err = registry_.openRootKey(root);
- if (err == REG_NO_ERROR) {
- err = registry_.mergeKey(root, aKeyName, aUrl, false, false);
- }
- switch (err) {
- case REG_NO_ERROR:
- case REG_MERGE_CONFLICT:
- break;
- case REG_MERGE_ERROR:
- throw css::registry::MergeConflictException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry.mergeKey:"
- " underlying Registry::mergeKey() = REG_MERGE_ERROR")),
- static_cast< cppu::OWeakObject * >(this));
- default:
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry.mergeKey:"
- " underlying Registry::getRootKey/mergeKey() = ")) +
- rtl::OUString::valueOf(static_cast< sal_Int32 >(err))),
- static_cast< OWeakObject * >(this));
- }
-}
-
-}
-
-namespace stoc_bootstrap {
-
-css::uno::Reference< css::uno::XInterface > SimpleRegistry_CreateInstance(
- css::uno::Reference< css::uno::XComponentContext > const &)
-{
- return static_cast< cppu::OWeakObject * >(new SimpleRegistry);
-}
-
-css::uno::Sequence< rtl::OUString > simreg_getSupportedServiceNames() {
- css::uno::Sequence< rtl::OUString > names(1);
- names[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.registry.SimpleRegistry"));
- return names;
-}
-
-rtl::OUString simreg_getImplementationName() {
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.stoc.SimpleRegistry"));
-}
-
-}
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/simpleregistry/textualservices.cxx b/stoc/source/simpleregistry/textualservices.cxx
deleted file mode 100644
index a5dd8f5fa..000000000
--- a/stoc/source/simpleregistry/textualservices.cxx
+++ /dev/null
@@ -1,1255 +0,0 @@
-/*************************************************************************
-*
-* 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.
-*
-************************************************************************/
-
-#include "precompiled_stoc.hxx"
-#include "sal/config.h"
-
-#include <cstddef>
-#include <cstdlib>
-#include <map>
-#include <vector>
-
-#include "boost/noncopyable.hpp"
-#include "com/sun/star/container/NoSuchElementException.hpp"
-#include "com/sun/star/registry/InvalidRegistryException.hpp"
-#include "com/sun/star/registry/XRegistryKey.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/XInterface.hpp"
-#include "cppuhelper/implbase1.hxx"
-#include "osl/diagnose.h"
-#include "rtl/malformeduriexception.hxx"
-#include "rtl/ref.hxx"
-#include "rtl/string.h"
-#include "rtl/uri.hxx"
-#include "rtl/ustrbuf.hxx"
-#include "rtl/ustring.h"
-#include "rtl/ustring.hxx"
-#include "salhelper/simplereferenceobject.hxx"
-#include "xmlreader/span.hxx"
-#include "xmlreader/xmlreader.hxx"
-
-#include "textualservices.hxx"
-
-namespace stoc { namespace simpleregistry {
-
-namespace {
-
-namespace css = com::sun::star;
-
-struct Implementation {
- rtl::OUString uri;
- rtl::OUString loader;
- rtl::OUString prefix;
- std::vector< rtl::OUString > services;
- std::vector< rtl::OUString > singletons;
-};
-
-typedef std::map< rtl::OUString, Implementation > Implementations;
-
-typedef std::map< rtl::OUString, std::vector< rtl::OUString > >
- ImplementationMap;
-
-}
-
-class Data: public salhelper::SimpleReferenceObject, private boost::noncopyable
-{
-public:
- Implementations implementations;
- ImplementationMap services;
- ImplementationMap singletons;
-};
-
-namespace {
-
-class Parser: private boost::noncopyable {
-public:
- Parser(rtl::OUString const & uri, rtl::Reference< Data > const & data);
-
-private:
- void handleComponent();
-
- void handleImplementation();
-
- void handleService();
-
- void handleSingleton();
-
- rtl::OUString getNameAttribute();
-
- xmlreader::XmlReader reader_;
- rtl::Reference< Data > data_;
- rtl::OUString attrUri_;
- rtl::OUString attrLoader_;
- rtl::OUString attrPrefix_;
- rtl::OUString attrImplementation_;
-};
-
-Parser::Parser(rtl::OUString const & uri, rtl::Reference< Data > const & data):
- reader_(uri), data_(data)
-{
- OSL_ASSERT(data.is());
- int ucNsId = reader_.registerNamespaceIri(
- xmlreader::Span(
- RTL_CONSTASCII_STRINGPARAM(
- "http://openoffice.org/2010/uno-components")));
- enum State {
- STATE_BEGIN, STATE_END, STATE_COMPONENTS, STATE_COMPONENT_INITIAL,
- STATE_COMPONENT, STATE_IMPLEMENTATION, STATE_SERVICE, STATE_SINGLETON };
- for (State state = STATE_BEGIN;;) {
- xmlreader::Span name;
- int nsId;
- xmlreader::XmlReader::Result res = reader_.nextItem(
- xmlreader::XmlReader::TEXT_NONE, &name, &nsId);
- switch (state) {
- case STATE_BEGIN:
- if (res == xmlreader::XmlReader::RESULT_BEGIN && nsId == ucNsId &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("components")))
- {
- state = STATE_COMPONENTS;
- break;
- }
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": unexpected item in outer level"))),
- css::uno::Reference< css::uno::XInterface >());
- case STATE_END:
- if (res == xmlreader::XmlReader::RESULT_DONE) {
- return;
- }
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": unexpected item in outer level"))),
- css::uno::Reference< css::uno::XInterface >());
- case STATE_COMPONENTS:
- if (res == xmlreader::XmlReader::RESULT_END) {
- state = STATE_END;
- break;
- }
- if (res == xmlreader::XmlReader::RESULT_BEGIN && nsId == ucNsId &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("component")))
- {
- handleComponent();
- state = STATE_COMPONENT_INITIAL;
- break;
- }
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": unexpected item in <components>"))),
- css::uno::Reference< css::uno::XInterface >());
- case STATE_COMPONENT:
- if (res == xmlreader::XmlReader::RESULT_END) {
- state = STATE_COMPONENTS;
- break;
- }
- // fall through
- case STATE_COMPONENT_INITIAL:
- if (res == xmlreader::XmlReader::RESULT_BEGIN && nsId == ucNsId &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("implementation")))
- {
- handleImplementation();
- state = STATE_IMPLEMENTATION;
- break;
- }
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": unexpected item in <component>"))),
- css::uno::Reference< css::uno::XInterface >());
- case STATE_IMPLEMENTATION:
- if (res == xmlreader::XmlReader::RESULT_END) {
- state = STATE_COMPONENT;
- break;
- }
- if (res == xmlreader::XmlReader::RESULT_BEGIN && nsId == ucNsId &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("service")))
- {
- handleService();
- state = STATE_SERVICE;
- break;
- }
- if (res == xmlreader::XmlReader::RESULT_BEGIN && nsId == ucNsId &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("singleton")))
- {
- handleSingleton();
- state = STATE_SINGLETON;
- break;
- }
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": unexpected item in <implementation>"))),
- css::uno::Reference< css::uno::XInterface >());
- case STATE_SERVICE:
- if (res == xmlreader::XmlReader::RESULT_END) {
- state = STATE_IMPLEMENTATION;
- break;
- }
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": unexpected item in <service>"))),
- css::uno::Reference< css::uno::XInterface >());
- case STATE_SINGLETON:
- if (res == xmlreader::XmlReader::RESULT_END) {
- state = STATE_IMPLEMENTATION;
- break;
- }
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": unexpected item in <service>"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- }
-}
-
-void Parser::handleComponent() {
- attrUri_ = rtl::OUString();
- attrLoader_ = rtl::OUString();
- attrPrefix_ = rtl::OUString();
- xmlreader::Span name;
- int nsId;
- while (reader_.nextAttribute(&nsId, &name)) {
- if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("uri")))
- {
- if (attrUri_.getLength() != 0) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> has multiple \"uri\" attributes"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- attrUri_ = reader_.getAttributeValue(false).convertFromUtf8();
- if (attrUri_.getLength() == 0) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> has empty \"uri\" attribute"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- } else if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("loader")))
- {
- if (attrLoader_.getLength() != 0) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> has multiple \"loader\""
- " attributes"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- attrLoader_ = reader_.getAttributeValue(false).convertFromUtf8();
- if (attrLoader_.getLength() == 0) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> has empty \"loader\" attribute"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- } else if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("prefix")))
- {
- if (attrPrefix_.getLength() != 0) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> has multiple \"prefix\""
- " attributes"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- attrPrefix_ = reader_.getAttributeValue(false).convertFromUtf8();
- if (attrPrefix_.getLength() == 0) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> has empty \"prefix\" attribute"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- } else {
- OSL_FAIL ("unexpected component attribute, expected 'uri' or 'loader' or 'prefix'");
- }
- }
- if (attrUri_.getLength() == 0) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> is missing \"uri\" attribute"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- if (attrLoader_.getLength() == 0) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": <component> is missing \"loader\" attribute"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- try {
- attrUri_ = rtl::Uri::convertRelToAbs(reader_.getUrl(), attrUri_);
- } catch (rtl::MalformedUriException & e) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(": bad \"uri\" attribute: ")) +
- e.getMessage()),
- css::uno::Reference< css::uno::XInterface >());
- }
-}
-
-void Parser::handleImplementation() {
- attrImplementation_ = getNameAttribute();
- if (data_->implementations.find(attrImplementation_) !=
- data_->implementations.end())
- {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": duplicate <implementation name=\"")) +
- attrImplementation_ +
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\">"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- data_->implementations[attrImplementation_].uri = attrUri_;
- data_->implementations[attrImplementation_].loader = attrLoader_;
- data_->implementations[attrImplementation_].prefix = attrPrefix_;
-}
-
-void Parser::handleService() {
- rtl::OUString name = getNameAttribute();
- data_->implementations[attrImplementation_].services.push_back(name);
- data_->services[name].push_back(attrImplementation_);
-}
-
-void Parser::handleSingleton() {
- rtl::OUString name = getNameAttribute();
- data_->implementations[attrImplementation_].singletons.push_back(name);
- data_->singletons[name].push_back(attrImplementation_);
-}
-
-rtl::OUString Parser::getNameAttribute() {
- rtl::OUString attrName;
- xmlreader::Span name;
- int nsId;
- while (reader_.nextAttribute(&nsId, &name)) {
- if (nsId == xmlreader::XmlReader::NAMESPACE_NONE &&
- name.equals(RTL_CONSTASCII_STRINGPARAM("name")))
- {
- if (attrName.getLength() != 0) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": element has multiple \"name\" attributes"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- attrName = reader_.getAttributeValue(false).convertFromUtf8();
- if (attrName.getLength() == 0) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": element has empty \"name\" attribute"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- } else {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": expected element attribute \"name\""))),
- css::uno::Reference< css::uno::XInterface >());
- }
- }
- if (attrName.getLength() == 0) {
- throw css::registry::InvalidRegistryException(
- (reader_.getUrl() +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- ": element is missing \"name\" attribute"))),
- css::uno::Reference< css::uno::XInterface >());
- }
- return attrName;
-}
-
-rtl::OUString pathToString(std::vector< rtl::OUString > const & path) {
- rtl::OUStringBuffer buf;
- for (std::vector< rtl::OUString >::const_iterator i(path.begin());
- i != path.end(); ++i)
- {
- buf.append(sal_Unicode('/'));
- buf.append(*i);
- }
- if (buf.getLength() == 0) {
- buf.append(sal_Unicode('/'));
- }
- return buf.makeStringAndClear();
-}
-
-class Key: public cppu::WeakImplHelper1< css::registry::XRegistryKey > {
-public:
- Key(
- rtl::Reference< Data > const & data,
- std::vector< rtl::OUString > const & path):
- data_(data), path_(path) { OSL_ASSERT(data.is());
- }
-
-private:
- /*
- /
- IMPLEMENTATIONS
- <implementation>
- UNO
- LOCATION utf-8
- ACTIVATOR utf-8
- PREFIX utf-8
- SERVICES
- <service>
- ...
- SINGLETONS
- <singleton> utf-16
- ...
- ...
- SERVICES
- <service> utf-8-list
- ...
- SINGLETONS
- <singleton> utf-16
- REGISTERED_BY utf-8-list
- ...
- */
- enum State {
- STATE_ROOT, STATE_IMPLEMENTATIONS, STATE_IMPLEMENTATION, STATE_UNO,
- STATE_LOCATION, STATE_ACTIVATOR, STATE_PREFIX, STATE_IMPLEMENTATION_SERVICES,
- STATE_IMPLEMENTATION_SERVICE, STATE_IMPLEMENTATION_SINGLETONS,
- STATE_IMPLEMENTATION_SINGLETON, STATE_SERVICES, STATE_SERVICE,
- STATE_SINGLETONS, STATE_SINGLETON, STATE_REGISTEREDBY };
-
- virtual rtl::OUString SAL_CALL getKeyName()
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isReadOnly() throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL isValid() throw(css::uno::RuntimeException);
-
- virtual css::registry::RegistryKeyType SAL_CALL getKeyType(
- rtl::OUString const & rKeyName)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual css::registry::RegistryValueType SAL_CALL getValueType() throw(
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual sal_Int32 SAL_CALL getLongValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setLongValue(sal_Int32 value) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual css::uno::Sequence< sal_Int32 > SAL_CALL getLongListValue() throw(
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setLongListValue(
- com::sun::star::uno::Sequence< sal_Int32 > const & seqValue)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getAsciiValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setAsciiValue(rtl::OUString const & value) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual css::uno::Sequence< rtl::OUString > SAL_CALL getAsciiListValue()
- throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setAsciiListValue(
- css::uno::Sequence< rtl::OUString > const & seqValue)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getStringValue() throw(
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setStringValue(rtl::OUString const & value) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual css::uno::Sequence< rtl::OUString > SAL_CALL getStringListValue()
- throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setStringListValue(
- css::uno::Sequence< rtl::OUString > const & seqValue)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual css::uno::Sequence< sal_Int8 > SAL_CALL getBinaryValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException);
-
- virtual void SAL_CALL setBinaryValue(
- css::uno::Sequence< sal_Int8 > const & value)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL openKey(
- rtl::OUString const & aKeyName)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual css::uno::Reference< css::registry::XRegistryKey > SAL_CALL
- createKey(rtl::OUString const & aKeyName) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual void SAL_CALL closeKey() throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual void SAL_CALL deleteKey(rtl::OUString const & rKeyName) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual
- css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > >
- SAL_CALL openKeys() throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual css::uno::Sequence< rtl::OUString > SAL_CALL getKeyNames() throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL createLink(
- rtl::OUString const & aLinkName, rtl::OUString const & aLinkTarget)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual void SAL_CALL deleteLink(rtl::OUString const & rLinkName) throw (
- css::registry::InvalidRegistryException, css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getLinkTarget(
- rtl::OUString const & rLinkName)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getResolvedName(
- rtl::OUString const & aKeyName)
- throw (
- css::registry::InvalidRegistryException,
- css::uno::RuntimeException);
-
- bool find(
- rtl::OUString const & relative, std::vector< rtl::OUString > * path,
- State * state, css::registry::RegistryValueType * type) const;
-
- css::uno::Sequence< rtl::OUString > getChildren();
-
- rtl::Reference< Data > data_;
- std::vector< rtl::OUString > path_;
-};
-
-rtl::OUString Key::getKeyName() throw (css::uno::RuntimeException) {
- return pathToString(path_);
-}
-
-sal_Bool Key::isReadOnly()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- return true;
-}
-
-sal_Bool Key::isValid() throw(css::uno::RuntimeException) {
- return true;
-}
-
-css::registry::RegistryKeyType Key::getKeyType(rtl::OUString const & rKeyName)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- if (!find(rtl::OUString(), 0, 0, 0)) {
- throw css::registry::InvalidRegistryException(
- (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("unknown key ")) +
- rKeyName),
- static_cast< cppu::OWeakObject * >(this));
- }
- return css::registry::RegistryKeyType_KEY;
-}
-
-css::registry::RegistryValueType Key::getValueType()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- css::registry::RegistryValueType type =
- css::registry::RegistryValueType_NOT_DEFINED;
- OSL_VERIFY(find(rtl::OUString(), 0, 0, &type));
- return type;
-}
-
-sal_Int32 Key::getLongValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getLongValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-void Key::setLongValue(sal_Int32)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " setLongValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-css::uno::Sequence< sal_Int32 > Key::getLongListValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getLongListValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-void Key::setLongListValue(css::uno::Sequence< sal_Int32 > const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " setLongListValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-rtl::OUString Key::getAsciiValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- State state = STATE_ROOT;
- OSL_VERIFY(find(rtl::OUString(), 0, &state, 0));
- switch (state) {
- case STATE_LOCATION:
- return data_->implementations[path_[1]].uri;
- case STATE_ACTIVATOR:
- return data_->implementations[path_[1]].loader;
- case STATE_PREFIX:
- return data_->implementations[path_[1]].prefix;
- default:
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getAsciiValue: wrong type")),
- static_cast< OWeakObject * >(this));
- }
-}
-
-void Key::setAsciiValue(rtl::OUString const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " setAsciiValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-css::uno::Sequence< rtl::OUString > Key::getAsciiListValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- State state = STATE_ROOT;
- OSL_VERIFY(find(rtl::OUString(), 0, &state, 0));
- std::vector< rtl::OUString > const * list;
- switch (state) {
- case STATE_SERVICE:
- list = &data_->services[path_[1]];
- break;
- case STATE_REGISTEREDBY:
- list = &data_->singletons[path_[1]];
- break;
- default:
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getAsciiListValue: wrong type")),
- static_cast< OWeakObject * >(this));
- }
- if (list->size() > SAL_MAX_INT32) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getAsciiListValue: too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > seq(
- static_cast< sal_Int32 >(list->size()));
- sal_Int32 i = 0;
- for (std::vector< rtl::OUString >::const_iterator j(list->begin());
- j != list->end(); ++j)
- {
- seq[i++] = *j;
- }
- return seq;
-}
-
-void Key::setAsciiListValue(css::uno::Sequence< rtl::OUString > const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " setAsciiListValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-rtl::OUString Key::getStringValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- State state = STATE_ROOT;
- OSL_VERIFY(find(rtl::OUString(), 0, &state, 0));
- switch (state) {
- case STATE_IMPLEMENTATION_SINGLETON:
- case STATE_SINGLETON:
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getStringValue: does not associate singletons with"
- " services")),
- static_cast< OWeakObject * >(this));
- default:
- break;
- }
- // default case extracted from switch to avoid erroneous compiler warnings
- // on Solaris:
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getStringValue: wrong type")),
- static_cast< OWeakObject * >(this));
-}
-
-void Key::setStringValue(rtl::OUString const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " setStringValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-css::uno::Sequence< rtl::OUString > Key::getStringListValue() throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getStringListValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-void Key::setStringListValue(css::uno::Sequence< rtl::OUString > const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " setStringListValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-css::uno::Sequence< sal_Int8 > Key::getBinaryValue()
- throw (
- css::registry::InvalidRegistryException,
- css::registry::InvalidValueException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getBinarValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-void Key::setBinaryValue(css::uno::Sequence< sal_Int8 > const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " setBinaryValue not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-css::uno::Reference< css::registry::XRegistryKey > Key::openKey(
- rtl::OUString const & aKeyName)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- std::vector< rtl::OUString > path;
- if (!find(aKeyName, &path, 0, 0)) {
- return css::uno::Reference< css::registry::XRegistryKey >();
- }
- return new Key(data_, path);
-}
-
-css::uno::Reference< css::registry::XRegistryKey > Key::createKey(
- rtl::OUString const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " createKey not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-void Key::closeKey()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{}
-
-void Key::deleteKey(rtl::OUString const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " deleteKey not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > >
-Key::openKeys()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- css::uno::Sequence< rtl::OUString > names(getChildren());
- css::uno::Sequence< css::uno::Reference< css::registry::XRegistryKey > >
- keys(names.getLength());
- for (sal_Int32 i = 0; i < keys.getLength(); ++i) {
- keys[i] = openKey(names[i]);
- OSL_ASSERT(keys[i].is());
- }
- return keys;
-}
-
-css::uno::Sequence< rtl::OUString > Key::getKeyNames()
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- css::uno::Sequence< rtl::OUString > names(getChildren());
- rtl::OUString prefix(pathToString(path_));
- prefix += rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/"));
- for (sal_Int32 i = 0; i < names.getLength(); ++i) {
- names[i] = prefix + names[i];
- }
- return names;
-}
-
-sal_Bool Key::createLink(rtl::OUString const &, rtl::OUString const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " createLink not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-void Key::deleteLink(rtl::OUString const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " deleteLink not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-rtl::OUString Key::getLinkTarget(rtl::OUString const &)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- throw css::registry::InvalidRegistryException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual services key"
- " getLinkTarget not supported")),
- static_cast< OWeakObject * >(this));
-}
-
-rtl::OUString Key::getResolvedName(rtl::OUString const & aKeyName)
- throw (css::registry::InvalidRegistryException, css::uno::RuntimeException)
-{
- std::vector< rtl::OUString > path;
- find(aKeyName, &path, 0, 0);
- return pathToString(path);
-}
-
-bool Key::find(
- rtl::OUString const & relative, std::vector< rtl::OUString > * path,
- State * state, css::registry::RegistryValueType * type) const
-{
- std::vector< rtl::OUString > p(path_);
- sal_Int32 i = 0;
- do {
- rtl::OUString seg(relative.getToken(0, '/', i));
- if (seg.getLength() != 0) {
- p.push_back(seg);
- }
- } while (i >= 0);
- if (path != 0) {
- *path = p;
- }
- std::size_t const MAX_TRANSITIONS = 5;
- struct StateInfo {
- css::registry::RegistryValueType type;
- std::size_t count;
- struct { char const * segment; State state; }
- transitions[MAX_TRANSITIONS];
- };
- static StateInfo const info[] = {
- // STATE_ROOT:
- { css::registry::RegistryValueType_NOT_DEFINED, 3,
- { { "IMPLEMENTATIONS", STATE_IMPLEMENTATIONS },
- { "SERVICES", STATE_SERVICES },
- { "SINGLETONS", STATE_SINGLETONS } } },
- // STATE_IMPLEMENTATIONS:
- { css::registry::RegistryValueType_NOT_DEFINED, 1,
- { { 0, STATE_IMPLEMENTATION } } },
- // STATE_IMPLEMENTATION:
- { css::registry::RegistryValueType_NOT_DEFINED, 1,
- { { "UNO", STATE_UNO } } },
- // STATE_UNO:
- { css::registry::RegistryValueType_NOT_DEFINED, 5,
- { { "LOCATION", STATE_LOCATION },
- { "ACTIVATOR", STATE_ACTIVATOR },
- { "PREFIX", STATE_PREFIX },
- { "SERVICES", STATE_IMPLEMENTATION_SERVICES },
- { "SINGLETONS", STATE_IMPLEMENTATION_SINGLETONS } } },
- // STATE_LOCATION:
- { css::registry::RegistryValueType_ASCII, 0, {} },
- // STATE_ACTIVATOR:
- { css::registry::RegistryValueType_ASCII, 0, {} },
- // STATE_PREFIX:
- { css::registry::RegistryValueType_ASCII, 0, {} },
- // STATE_IMPLEMENTATION_SERVICES:
- { css::registry::RegistryValueType_NOT_DEFINED, 1,
- { { 0, STATE_IMPLEMENTATION_SERVICE } } },
- // STATE_IMPLEMENTATION_SERVICE:
- { css::registry::RegistryValueType_NOT_DEFINED, 0, {} },
- // STATE_IMPLEMENTATION_SINGLETONS:
- { css::registry::RegistryValueType_NOT_DEFINED, 1,
- { { 0, STATE_IMPLEMENTATION_SINGLETON } } },
- // STATE_IMPLEMENTATION_SINGLETON:
- { css::registry::RegistryValueType_STRING, 0, {} },
- // STATE_SERVICES:
- { css::registry::RegistryValueType_NOT_DEFINED, 1,
- { { 0, STATE_SERVICE } } },
- // STATE_SERVICE:
- { css::registry::RegistryValueType_ASCIILIST, 0, {} },
- // STATE_SINGLETONS:
- { css::registry::RegistryValueType_NOT_DEFINED, 1,
- { { 0, STATE_SINGLETON } } },
- // STATE_SINGLETON:
- { css::registry::RegistryValueType_STRING, 1,
- { { "REGISTERED_BY", STATE_REGISTEREDBY } } },
- // STATE_REGISTEREDBY:
- { css::registry::RegistryValueType_ASCIILIST, 0, {} } };
- State s = STATE_ROOT;
- for (std::vector< rtl::OUString >::iterator j(p.begin()); j != p.end(); ++j)
- {
- bool found = false;
- for (std::size_t k = 0; k < info[s].count; ++k) {
- if (info[s].transitions[k].segment == 0) {
- switch (info[s].transitions[k].state) {
- case STATE_IMPLEMENTATION:
- found = data_->implementations.find(*j) !=
- data_->implementations.end();
- break;
- case STATE_IMPLEMENTATION_SERVICE:
- case STATE_IMPLEMENTATION_SINGLETON:
- found = true; //TODO
- break;
- case STATE_SERVICE:
- found = data_->services.find(*j) != data_->services.end();
- break;
- case STATE_SINGLETON:
- found = data_->singletons.find(*j) !=
- data_->singletons.end();
- break;
- default:
- std::abort(); // this cannot happen
- }
- } else {
- found = j->equalsAscii(info[s].transitions[k].segment);
- }
- if (found) {
- s = info[s].transitions[k].state;
- break;
- }
- }
- if (!found) {
- return false;
- }
- }
- if (state != 0) {
- *state = s;
- }
- if (type != 0) {
- *type = info[s].type;
- }
- return true;
-}
-
-css::uno::Sequence< rtl::OUString > Key::getChildren() {
- State state = STATE_ROOT;
- OSL_VERIFY(find(rtl::OUString(), 0, &state, 0));
- switch (state) {
- default:
- std::abort(); // this cannot happen
- // pseudo-fall-through to avoid warnings on MSC
- case STATE_ROOT:
- {
- css::uno::Sequence< rtl::OUString > seq(3);
- seq[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("IMPLEMENTATIONS"));
- seq[1] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SERVICES"));
- seq[2] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SINGLETONS"));
- return seq;
- }
- case STATE_IMPLEMENTATIONS:
- {
- if (data_->implementations.size() > SAL_MAX_INT32) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual"
- " services key openKeys: too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > seq(
- static_cast< sal_Int32 >(data_->implementations.size()));
- sal_Int32 i = 0;
- for (Implementations::iterator j(data_->implementations.begin());
- j != data_->implementations.end(); ++j)
- {
- seq[i++] = j->first;
- }
- return seq;
- }
- case STATE_UNO:
- {
- css::uno::Sequence< rtl::OUString > seq(5);
- seq[0] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LOCATION"));
- seq[1] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ACTIVATOR"));
- seq[2] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PREFIX"));
- seq[3] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SERVICES"));
- seq[4] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SINGLETONS"));
- return seq;
- }
- case STATE_LOCATION:
- case STATE_ACTIVATOR:
- case STATE_PREFIX:
- case STATE_IMPLEMENTATION_SERVICE:
- case STATE_IMPLEMENTATION_SINGLETON:
- case STATE_SERVICE:
- case STATE_REGISTEREDBY:
- return css::uno::Sequence< rtl::OUString >();
- case STATE_IMPLEMENTATION_SERVICES:
- {
- if (data_->implementations[path_[1]].services.size() >
- SAL_MAX_INT32)
- {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual"
- " services key openKeys: too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > seq(
- static_cast< sal_Int32 >(
- data_->implementations[path_[1]].services.size()));
- sal_Int32 i = 0;
- for (std::vector< rtl::OUString >::iterator j(
- data_->implementations[path_[1]].services.begin());
- j != data_->implementations[path_[1]].services.end(); ++j)
- {
- seq[i++] = *j;
- }
- return seq;
- }
- case STATE_IMPLEMENTATION_SINGLETONS:
- {
- if (data_->implementations[path_[1]].singletons.size() >
- SAL_MAX_INT32)
- {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual"
- " services key openKeys: too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > seq(
- static_cast< sal_Int32 >(
- data_->implementations[path_[1]].singletons.size()));
- sal_Int32 i = 0;
- for (std::vector< rtl::OUString >::iterator j(
- data_->implementations[path_[1]].singletons.begin());
- j != data_->implementations[path_[1]].singletons.end(); ++j)
- {
- seq[i++] = *j;
- }
- return seq;
- }
- case STATE_SERVICES:
- {
- if (data_->services.size() > SAL_MAX_INT32) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual"
- " services key openKeys: too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > seq(
- static_cast< sal_Int32 >(data_->services.size()));
- sal_Int32 i = 0;
- for (ImplementationMap::iterator j(data_->services.begin());
- j != data_->services.end(); ++j)
- {
- seq[i++] = j->first;
- }
- return seq;
- }
- case STATE_SINGLETONS:
- {
- if (data_->singletons.size() > SAL_MAX_INT32) {
- throw css::registry::InvalidValueException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.registry.SimpleRegistry textual"
- " services key openKeys: too large")),
- static_cast< OWeakObject * >(this));
- }
- css::uno::Sequence< rtl::OUString > seq(
- static_cast< sal_Int32 >(data_->singletons.size()));
- sal_Int32 i = 0;
- for (ImplementationMap::iterator j(data_->singletons.begin());
- j != data_->singletons.end(); ++j)
- {
- seq[i++] = j->first;
- }
- return seq;
- }
- case STATE_SINGLETON:
- {
- css::uno::Sequence< rtl::OUString > seq(1);
- seq[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("REGISTERED_BY"));
- return seq;
- }
- }
-}
-
-}
-
-TextualServices::TextualServices(rtl::OUString const & uri):
- uri_(uri), data_(new Data)
-{
- try {
- Parser(uri, data_);
- } catch (css::container::NoSuchElementException &) {
- throw css::registry::InvalidRegistryException(
- (uri +
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(": no such file"))),
- css::uno::Reference< css::uno::XInterface >());
- }
-}
-
-TextualServices::~TextualServices() {}
-
-css::uno::Reference< css::registry::XRegistryKey > TextualServices::getRootKey()
-{
- return new Key(data_, std::vector< rtl::OUString >());
-}
-
-} }
diff --git a/stoc/source/simpleregistry/textualservices.hxx b/stoc/source/simpleregistry/textualservices.hxx
deleted file mode 100644
index 0261e2604..000000000
--- a/stoc/source/simpleregistry/textualservices.hxx
+++ /dev/null
@@ -1,67 +0,0 @@
-/*************************************************************************
-*
-* 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 INCLUDED_STOC_SOURCE_SIMPLEREGISTRY_TEXTUALSERVICES_HXX
-#define INCLUDED_STOC_SOURCE_SIMPLEREGISTRY_TEXTUALSERVICES_HXX
-
-#include "sal/config.h"
-
-#include <memory>
-
-#include "boost/noncopyable.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "rtl/ref.hxx"
-#include "rtl/ustring.hxx"
-
-namespace com { namespace sun { namespace star { namespace registry {
- class XRegistryKey;
-} } } }
-
-namespace stoc { namespace simpleregistry {
-
-class Data;
-
-class TextualServices: private boost::noncopyable {
-public:
- explicit TextualServices(rtl::OUString const & uri);
- // throws com::sun::star::registry::InvalidRegistryException
-
- virtual ~TextualServices();
-
- inline rtl::OUString getUri() { return uri_; }
-
- com::sun::star::uno::Reference< com::sun::star::registry::XRegistryKey >
- getRootKey();
-
-private:
- rtl::OUString uri_;
- rtl::Reference< Data > data_;
-};
-
-} }
-
-#endif
diff --git a/stoc/source/stocservices/makefile.mk b/stoc/source/stocservices/makefile.mk
deleted file mode 100644
index 2d2444f8a..000000000
--- a/stoc/source/stocservices/makefile.mk
+++ /dev/null
@@ -1,49 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME= stoc
-TARGET = stocservices
-ENABLE_EXCEPTIONS=TRUE
-COMP1TYPELIST = stocserv
-
-# --- openoffice.org.orig/Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-
-# ------------------------------------------------------------------
-
-.INCLUDE : ..$/cppumaker.mk
-
-# --- openoffice.org.orig/Files ------------------------------------------------------
-
-SLOFILES= \
- $(SLO)$/stocservices.obj
-
-# --- openoffice.org.orig/Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
diff --git a/stoc/source/stocservices/stocserv.xml b/stoc/source/stocservices/stocserv.xml
deleted file mode 100644
index b45203f72..000000000
--- a/stoc/source/stocservices/stocserv.xml
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE module-description PUBLIC "-//StarOffice//DTD ComponentDescription 1.0//EN" "module-description.dtd">
-<module-description xmlns:xlink="http://www.w3.org/1999/xlink">
- <module-name> stocservices.uno </module-name>
- <component-description>
- <author> Daniel Boelzle </author>
- <name> com.sun.star.comp.stoc.TypeConverter </name>
- <description>
-This service provide a widening converter. This means it can convert
-from one type to another if possible.
-</description>
- <loader-name> com.sun.star.loader.SharedLibrary </loader-name>
- <language> C++ </language>
- <status value="final"/>
- <supported-service> com.sun.star.script.Converter </supported-service>
- <type> com.sun.star.reflection.FieldAccessMode </type>
- <type> com.sun.star.lang.IllegalArgumentException </type>
- <type> com.sun.star.lang.XEventListener </type>
- <type> com.sun.star.lang.XTypeProvider </type>
- <type> com.sun.star.lang.XServiceInfo </type>
- <type> com.sun.star.lang.XSingleServiceFactory </type>
- <type> com.sun.star.lang.XSingleComponentFactory </type>
- <type> com.sun.star.lang.XMultiServiceFactory </type>
- <type> com.sun.star.registry.XRegistryKey </type>
- <type> com.sun.star.script.XTypeConverter </type>
- <type> com.sun.star.script.FailReason </type>
- <type> com.sun.star.container.XSet </type>
- <type> com.sun.star.container.XNameContainer </type>
- <type> com.sun.star.container.XIndexContainer </type>
- <type> com.sun.star.uno.XAggregation </type>
- <type> com.sun.star.uno.XWeak </type>
- <type> com.sun.star.uno.TypeClass </type>
- <type> com.sun.star.uno.XComponentContext </type>
- </component-description>
- <component-description>
- <author>Stephan Bergmann</author>
- <name>com.sun.star.comp.uri.ExternalUriReferenceTranslator</name>
- <description>
- Instances of this service translate between external and internal
- URI references.
- </description>
- <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
- <language>C++</language>
- <status value="under_construction"/>
- <supported-service>
- com.sun.star.uri.ExternalUriReferenceTranslator
- </supported-service>
- </component-description>
- <component-description>
- <author>Stephan Bergmann</author>
- <name>com.sun.star.comp.uri.UriReferenceFactory</name>
- <description>
- Instances of this service create URI references.
- </description>
- <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
- <language>C++</language>
- <status value="under_construction"/>
- <supported-service>
- com.sun.star.uri.UriReferenceFactory
- </supported-service>
- </component-description>
- <component-description>
- <author>Stephan Bergmann</author>
- <name>
- com.sun.star.comp.uri.UriSchemeParser_vndDOTsunDOTstarDOTscript
- </name>
- <description>
- Instances of this service parse textual representations of absolute
- &#x201C;vnd.sun.star.script&#x201D; URLs.
- </description>
- <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
- <language>C++</language>
- <status value="under_construction"/>
- <supported-service>
- com.sun.star.uri.UriSchemeParser_vndDOTsunDOTstarDOTscript
- </supported-service>
- </component-description>
- <component-description>
- <author>Stephan Bergmann</author>
- <name>com.sun.star.comp.uri.VndSunStarPkgUrlReferenceFactory</name>
- <description>
- Instances of this service create &#x201C;vnd.sun.star.pkg&#x201D;
- URL references.
- </description>
- <loader-name>com.sun.star.loader.SharedLibrary</loader-name>
- <language>C++</language>
- <status value="under_construction"/>
- <supported-service>
- com.sun.star.uri.VndSunStarPkgUrlReferenceFactory
- </supported-service>
- </component-description>
- <project-build-dependency> cppuhelper </project-build-dependency>
- <project-build-dependency> cppu </project-build-dependency>
- <project-build-dependency> sal </project-build-dependency>
- <runtime-module-dependency> cppuhelper2(COM) </runtime-module-dependency>
- <runtime-module-dependency> cppu2 </runtime-module-dependency>
- <runtime-module-dependency> sal2 </runtime-module-dependency>
-</module-description>
diff --git a/stoc/source/stocservices/stocservices.cxx b/stoc/source/stocservices/stocservices.cxx
deleted file mode 100644
index 0a9e96c71..000000000
--- a/stoc/source/stocservices/stocservices.cxx
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "stocservices.hxx"
-
-#include "cppuhelper/factory.hxx"
-#include "cppuhelper/implementationentry.hxx"
-#include "sal/types.h"
-#include "uno/environment.h"
-#include "uno/lbnames.h"
-
-using namespace com::sun::star;
-using namespace com::sun::star::uno;
-using namespace cppu;
-using namespace osl;
-using namespace stoc_services;
-
-rtl_StandardModuleCount g_moduleCount = MODULE_COUNT_INIT;
-
-static struct ImplementationEntry g_entries[] =
-{
- // typeconv
- {
- TypeConverter_Impl_CreateInstance, tcv_getImplementationName,
- tcv_getSupportedServiceNames, createSingleComponentFactory,
- &g_moduleCount.modCnt , 0
- },
- // uriproc
- {
- ExternalUriReferenceTranslator::create,
- ExternalUriReferenceTranslator::getImplementationName,
- ExternalUriReferenceTranslator::getSupportedServiceNames,
- createSingleComponentFactory, 0, 0
- },
- {
- UriReferenceFactory::create,
- UriReferenceFactory::getImplementationName,
- UriReferenceFactory::getSupportedServiceNames,
- createSingleComponentFactory, 0, 0
- },
- {
- UriSchemeParser_vndDOTsunDOTstarDOTexpand::create,
- UriSchemeParser_vndDOTsunDOTstarDOTexpand::getImplementationName,
- UriSchemeParser_vndDOTsunDOTstarDOTexpand::getSupportedServiceNames,
- createSingleComponentFactory, 0, 0
- },
- {
- UriSchemeParser_vndDOTsunDOTstarDOTscript::create,
- UriSchemeParser_vndDOTsunDOTstarDOTscript::getImplementationName,
- UriSchemeParser_vndDOTsunDOTstarDOTscript::getSupportedServiceNames,
- createSingleComponentFactory, 0, 0
- },
- {
- VndSunStarPkgUrlReferenceFactory::create,
- VndSunStarPkgUrlReferenceFactory::getImplementationName,
- VndSunStarPkgUrlReferenceFactory::getSupportedServiceNames,
- createSingleComponentFactory, 0, 0
- },
- { 0, 0, 0, 0, 0, 0 }
-};
-
-extern "C"
-{
-
-sal_Bool SAL_CALL component_canUnload( TimeValue *pTime )
-{
- return g_moduleCount.canUnload( &g_moduleCount , pTime );
-}
-
-//==================================================================================================
-SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory(
- const sal_Char * pImplName, void * pServiceManager, void * pRegistryKey )
-{
- return component_getFactoryHelper( pImplName, pServiceManager, pRegistryKey , g_entries );
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/tdmanager/lrucache.hxx b/stoc/source/tdmanager/lrucache.hxx
deleted file mode 100644
index 33f04f410..000000000
--- a/stoc/source/tdmanager/lrucache.hxx
+++ /dev/null
@@ -1,250 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 _LRU_CACHE_HXX_
-#define _LRU_CACHE_HXX_
-
-// __CACHE_DIAGNOSE forces cache size to 4 and works only for OUString keys
-// #define __CACHE_DIAGNOSE 1
-
-#include <osl/mutex.hxx>
-#include "rtl/ustring.hxx"
-
-#include <boost/unordered_map.hpp>
-
-
-/** Implementation of a least recently used (lru) cache.
- <br>
- @author Daniel Boelzle
-*/
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-class LRU_Cache
-{
- struct CacheEntry
- {
- t_Key aKey;
- t_Val aVal;
- CacheEntry * pPred;
- CacheEntry * pSucc;
- };
- typedef ::boost::unordered_map< t_Key, CacheEntry *, t_KeyHash, t_KeyEqual > t_Key2Element;
-
- mutable ::osl::Mutex _aCacheMutex;
- sal_Int32 _nCachedElements;
- t_Key2Element _aKey2Element;
-
- CacheEntry * _pBlock;
- mutable CacheEntry * _pHead;
- mutable CacheEntry * _pTail;
- inline void toFront( CacheEntry * pEntry ) const;
-
-public:
- /** Constructor:
- <br>
- @param nCachedElements number of elements to be cached; default param set to 128
- */
- inline LRU_Cache( sal_Int32 nCachedElements = 128 );
- /** Destructor: releases all cached elements and keys.
- <br>
- */
- inline ~LRU_Cache();
-
- /** Retrieves a value from the cache. Returns default constructed value,
- if none was found.
- <br>
- @param rKey a key
- @return value
- */
- inline t_Val getValue( t_Key const & rKey ) const;
- /** Sets a value to be cached for given key.
- <br>
- @param rKey a key
- @param rValue a value
- */
- inline void setValue( t_Key const & rKey, t_Val const & rValue );
- /** Tests whether a value is cached for given key.
- <br>
- @param rKey a key
- @return true, if value is cached
- */
- inline sal_Bool hasValue( t_Key const & rKey ) const;
- /** Clears the cache, thus releasing all cached elements and keys.
- <br>
- */
- inline void clear();
-};
-//__________________________________________________________________________________________________
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-inline LRU_Cache< t_Key, t_Val, t_KeyHash, t_KeyEqual >::LRU_Cache( sal_Int32 nCachedElements )
-#ifdef __CACHE_DIAGNOSE
- : _nCachedElements( 4 )
-#else
- : _nCachedElements( nCachedElements )
-#endif
- , _pBlock( 0 )
-{
- if (_nCachedElements > 0)
- {
- _pBlock = new CacheEntry[_nCachedElements];
- _pHead = _pBlock;
- _pTail = _pBlock + _nCachedElements -1;
- for ( sal_Int32 nPos = _nCachedElements; nPos--; )
- {
- _pBlock[nPos].pPred = _pBlock + nPos -1;
- _pBlock[nPos].pSucc = _pBlock + nPos +1;
- }
- }
-}
-//__________________________________________________________________________________________________
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-inline LRU_Cache< t_Key, t_Val, t_KeyHash, t_KeyEqual >::~LRU_Cache()
-{
- delete [] _pBlock;
-}
-//__________________________________________________________________________________________________
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-inline void LRU_Cache< t_Key, t_Val, t_KeyHash, t_KeyEqual >::toFront(
- CacheEntry * pEntry ) const
-{
- if (pEntry != _pHead)
- {
- // cut out element
- if (pEntry == _pTail)
- {
- _pTail = pEntry->pPred;
- }
- else
- {
- pEntry->pSucc->pPred = pEntry->pPred;
- pEntry->pPred->pSucc = pEntry->pSucc;
- }
- // push to front
- _pHead->pPred = pEntry;
- pEntry->pSucc = _pHead;
- _pHead = pEntry;
- }
-}
-//__________________________________________________________________________________________________
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-inline sal_Bool LRU_Cache< t_Key, t_Val, t_KeyHash, t_KeyEqual >::hasValue(
- t_Key const & rKey ) const
-{
- ::osl::MutexGuard aGuard( _aCacheMutex );
- typename t_Key2Element::const_iterator const iFind( _aKey2Element.find( rKey ) );
- return (iFind != _aKey2Element.end());
-}
-//__________________________________________________________________________________________________
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-inline t_Val LRU_Cache< t_Key, t_Val, t_KeyHash, t_KeyEqual >::getValue(
- t_Key const & rKey ) const
-{
- ::osl::MutexGuard aGuard( _aCacheMutex );
- const typename t_Key2Element::const_iterator iFind( _aKey2Element.find( rKey ) );
- if (iFind != _aKey2Element.end())
- {
- CacheEntry * pEntry = (*iFind).second;
- toFront( pEntry );
-#ifdef __CACHE_DIAGNOSE
- OSL_TRACE( "> retrieved element \"" );
- OSL_TRACE( "%s", ::rtl::OUStringToOString( pEntry->aKey, RTL_TEXTENCODING_ASCII_US ).getStr() );
- OSL_TRACE( "\" from cache <\n" );
-#endif
- return pEntry->aVal;
- }
- return t_Val();
-}
-//__________________________________________________________________________________________________
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-inline void LRU_Cache< t_Key, t_Val, t_KeyHash, t_KeyEqual >::setValue(
- t_Key const & rKey, t_Val const & rValue )
-{
- if (_nCachedElements > 0)
- {
- ::osl::MutexGuard aGuard( _aCacheMutex );
- typename t_Key2Element::const_iterator const iFind( _aKey2Element.find( rKey ) );
-
- CacheEntry * pEntry;
- if (iFind == _aKey2Element.end())
- {
- pEntry = _pTail; // erase last element
-#ifdef __CACHE_DIAGNOSE
- if (pEntry->aKey.getLength())
- {
- OSL_TRACE( "> kicking element \"" );
- OSL_TRACE( "%s", ::rtl::OUStringToOString( pEntry->aKey, RTL_TEXTENCODING_ASCII_US ).getStr() );
- OSL_TRACE( "\" from cache <\n" );
- }
-#endif
- _aKey2Element.erase( pEntry->aKey );
- _aKey2Element[ pEntry->aKey = rKey ] = pEntry;
- }
- else
- {
- pEntry = (*iFind).second;
-#ifdef __CACHE_DIAGNOSE
- OSL_TRACE( "> replacing element \"" );
- OSL_TRACE( "%s", ::rtl::OUStringToOString( pEntry->aKey, RTL_TEXTENCODING_ASCII_US ).getStr() );
- OSL_TRACE( "\" in cache <\n" );
-#endif
- }
- pEntry->aVal = rValue;
- toFront( pEntry );
- }
-}
-//__________________________________________________________________________________________________
-template< class t_Key, class t_Val, class t_KeyHash, class t_KeyEqual >
-inline void LRU_Cache< t_Key, t_Val, t_KeyHash, t_KeyEqual >::clear()
-{
- ::osl::MutexGuard aGuard( _aCacheMutex );
- _aKey2Element.clear();
- for ( sal_Int32 nPos = _nCachedElements; nPos--; )
- {
- _pBlock[nPos].aKey = t_Key();
- _pBlock[nPos].aVal = t_Val();
- }
-#ifdef __CACHE_DIAGNOSE
- OSL_TRACE( "> cleared cache <\n" );
-#endif
-}
-
-//==================================================================================================
-struct FctHashOUString : public ::std::unary_function< ::rtl::OUString const &, size_t >
-{
- size_t operator()( ::rtl::OUString const & rKey ) const
- { return (size_t)rKey.hashCode(); }
-};
-
-/** Template instance for OUString keys, Any values.<br>
-*/
-typedef LRU_Cache< ::rtl::OUString, ::com::sun::star::uno::Any,
- FctHashOUString, ::std::equal_to< ::rtl::OUString > >
- LRU_CacheAnyByOUString;
-
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/tdmanager/makefile.mk b/stoc/source/tdmanager/makefile.mk
deleted file mode 100644
index dbc4e762a..000000000
--- a/stoc/source/tdmanager/makefile.mk
+++ /dev/null
@@ -1,49 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME= stoc
-TARGET = typemgr
-ENABLE_EXCEPTIONS=TRUE
-BOOTSTRAP_SERVICE=TRUE
-UNOUCROUT= $(OUT)$/inc$/bootstrap
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-
-# ------------------------------------------------------------------
-
-SLOFILES= \
- $(SLO)$/tdmgr.obj \
- $(SLO)$/tdmgr_check.obj \
- $(SLO)$/tdmgr_tdenumeration.obj
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
diff --git a/stoc/source/tdmanager/tdmgr.cxx b/stoc/source/tdmanager/tdmgr.cxx
deleted file mode 100644
index 6366818fe..000000000
--- a/stoc/source/tdmanager/tdmgr.cxx
+++ /dev/null
@@ -1,1142 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <osl/diagnose.h>
-#include <osl/mutex.hxx>
-#include "rtl/ustrbuf.hxx"
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/compbase5.hxx>
-#include <cppuhelper/implbase1.hxx>
-#include <cppuhelper/implementationentry.hxx>
-#include "tdmgr_common.hxx"
-#include "tdmgr_tdenumeration.hxx"
-#include "lrucache.hxx"
-
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#include <com/sun/star/lang/XEventListener.hpp>
-#include <com/sun/star/lang/XTypeProvider.hpp>
-#include <com/sun/star/lang/XComponent.hpp>
-#include <com/sun/star/lang/XInitialization.hpp>
-#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
-#include <com/sun/star/container/XSet.hpp>
-#include <com/sun/star/container/XContentEnumerationAccess.hpp>
-#include <com/sun/star/reflection/XTypeDescription.hpp>
-#include <com/sun/star/reflection/XArrayTypeDescription.hpp>
-#include <com/sun/star/reflection/XIndirectTypeDescription.hpp>
-#include <com/sun/star/reflection/XInterfaceTypeDescription.hpp>
-#include "com/sun/star/reflection/XStructTypeDescription.hpp"
-#include <com/sun/star/reflection/XTypeDescriptionEnumerationAccess.hpp>
-#include <com/sun/star/registry/XRegistryKey.hpp>
-#include "com/sun/star/uno/RuntimeException.hpp"
-
-#include <algorithm>
-#include <vector>
-
-using namespace std;
-using namespace cppu;
-using namespace osl;
-using namespace com::sun::star;
-using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::reflection;
-using namespace com::sun::star::container;
-using namespace com::sun::star::registry;
-
-using ::rtl::OUString;
-using ::rtl::OUStringBuffer;
-
-static const sal_Int32 CACHE_SIZE = 512;
-
-#define SERVICENAME "com.sun.star.reflection.TypeDescriptionManager"
-#define IMPLNAME "com.sun.star.comp.stoc.TypeDescriptionManager"
-
-//--------------------------------------------------------------------------------------------------
-// exported via tdmgr_common.hxx
-extern rtl_StandardModuleCount g_moduleCount;
-
-namespace stoc_bootstrap
-{
-Sequence< OUString > SAL_CALL tdmgr_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] = OUString(RTL_CONSTASCII_USTRINGPARAM(SERVICENAME));
- return seqNames;
-}
-
-OUString SAL_CALL tdmgr_getImplementationName()
-{
- return OUString(RTL_CONSTASCII_USTRINGPARAM(IMPLNAME));
-}
-}
-
-namespace stoc_tdmgr
-{
-typedef vector< Reference< XHierarchicalNameAccess > > ProviderVector;
-
-class EnumerationImpl;
-class ManagerImpl;
-
-//==================================================================================================
-class EventListenerImpl : public ImplHelper1< XEventListener >
-{
- ManagerImpl * _pMgr;
-
-public:
- EventListenerImpl( ManagerImpl * pMgr )
- : _pMgr( pMgr )
- {
- ::g_moduleCount.modCnt.acquire( &::g_moduleCount.modCnt );
- }
- virtual ~EventListenerImpl();
-
- // lifetime delegated to manager
- virtual void SAL_CALL acquire() throw();
- virtual void SAL_CALL release() throw();
-
- // XEventListener
- virtual void SAL_CALL disposing( const EventObject & rEvt ) throw(::com::sun::star::uno::RuntimeException);
-};
-
-EventListenerImpl::~EventListenerImpl()
-{
- ::g_moduleCount.modCnt.release( &::g_moduleCount.modCnt );
-}
-
-//==================================================================================================
-class ManagerImpl
- : public WeakComponentImplHelper5< XServiceInfo,
- XSet,
- XHierarchicalNameAccess,
- XTypeDescriptionEnumerationAccess,
- XInitialization >
-{
- friend class EnumerationImpl;
- friend class EventListenerImpl;
-
- Mutex _aComponentMutex;
- Reference< XComponentContext > _xContext;
- EventListenerImpl _aEventListener;
-
- // elements
- sal_Bool _bCaching;
- LRU_CacheAnyByOUString _aElements;
- // provider chain
- ProviderVector _aProviders;
-
- inline Any getSimpleType( const OUString & rName );
-
- Reference< XTypeDescription > getInstantiatedStruct(OUString const & name);
-
-protected:
- virtual void SAL_CALL disposing();
-
-public:
- ManagerImpl( Reference< XComponentContext > const & xContext, sal_Int32 nCacheSize );
- virtual ~ManagerImpl();
-
- // XInitialization
- virtual void SAL_CALL initialize( const Sequence< Any > & args ) throw (Exception, RuntimeException);
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL supportsService( const OUString & rServiceName ) throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException);
-
- // XElementAccess
- virtual Type SAL_CALL getElementType() throw(::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException);
-
- // XEnumerationAccess
- virtual Reference< XEnumeration > SAL_CALL createEnumeration() throw(::com::sun::star::uno::RuntimeException);
-
- // XSet
- virtual sal_Bool SAL_CALL has( const Any & rElement ) throw(::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL insert( const Any & rElement ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::ElementExistException, ::com::sun::star::uno::RuntimeException);
- virtual void SAL_CALL remove( const Any & rElement ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException);
-
- // XHierarchicalNameAccess
- virtual Any SAL_CALL getByHierarchicalName( const OUString & rName ) throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException);
- virtual sal_Bool SAL_CALL hasByHierarchicalName( const OUString & rName ) throw(::com::sun::star::uno::RuntimeException);
-
- // XTypeDescriptionEnumerationAccess
- virtual ::com::sun::star::uno::Reference<
- ::com::sun::star::reflection::XTypeDescriptionEnumeration > SAL_CALL
- createTypeDescriptionEnumeration(
- const ::rtl::OUString& moduleName,
- const ::com::sun::star::uno::Sequence<
- ::com::sun::star::uno::TypeClass >& types,
- ::com::sun::star::reflection::TypeDescriptionSearchDepth depth )
- throw ( ::com::sun::star::reflection::NoSuchTypeNameException,
- ::com::sun::star::reflection::InvalidTypeNameException,
- ::com::sun::star::uno::RuntimeException );
-};
-
-//==================================================================================================
-class EnumerationImpl
- : public WeakImplHelper1< XEnumeration >
-{
- ManagerImpl * _pMgr;
- size_t _nPos;
-
-public:
- EnumerationImpl( ManagerImpl * pManager );
- virtual ~EnumerationImpl();
-
- // XEnumeration
- virtual sal_Bool SAL_CALL hasMoreElements() throw(::com::sun::star::uno::RuntimeException);
- virtual Any SAL_CALL nextElement() throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
-};
-
-//##################################################################################################
-
-// lifetime delegated to manager
-//__________________________________________________________________________________________________
-void EventListenerImpl::acquire() throw()
-{
- _pMgr->acquire();
-}
-//__________________________________________________________________________________________________
-void EventListenerImpl::release() throw()
-{
- _pMgr->release();
-}
-
-// XEventListener
-//__________________________________________________________________________________________________
-void EventListenerImpl::disposing( const EventObject & rEvt )
- throw(::com::sun::star::uno::RuntimeException)
-{
- _pMgr->remove( makeAny( rEvt.Source ) );
-}
-
-//##################################################################################################
-
-//__________________________________________________________________________________________________
-EnumerationImpl::EnumerationImpl( ManagerImpl * pManager )
- : _pMgr( pManager )
- , _nPos( 0 )
-{
- _pMgr->acquire();
-}
-//__________________________________________________________________________________________________
-EnumerationImpl::~EnumerationImpl()
-{
- _pMgr->release();
-}
-
-// XEnumeration
-//__________________________________________________________________________________________________
-sal_Bool EnumerationImpl::hasMoreElements()
- throw(::com::sun::star::uno::RuntimeException)
-{
- MutexGuard aGuard( _pMgr->_aComponentMutex );
- return (_nPos < _pMgr->_aProviders.size());
-}
-//__________________________________________________________________________________________________
-Any EnumerationImpl::nextElement()
- throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
-{
- MutexGuard aGuard( _pMgr->_aComponentMutex );
- if (_nPos >= _pMgr->_aProviders.size())
- {
- throw NoSuchElementException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("there is no further element!") ),
- (XWeak *)(OWeakObject *)this );
- }
- return makeAny( _pMgr->_aProviders[_nPos++] );
-}
-
-//##################################################################################################
-
-//__________________________________________________________________________________________________
-ManagerImpl::ManagerImpl(
- Reference< XComponentContext > const & xContext, sal_Int32 nCacheSize )
- : WeakComponentImplHelper5<
- XServiceInfo, XSet, XHierarchicalNameAccess,
- XTypeDescriptionEnumerationAccess, XInitialization >( _aComponentMutex )
- , _xContext( xContext )
- , _aEventListener( this )
- , _bCaching( sal_True )
- , _aElements( nCacheSize )
-{
- ::g_moduleCount.modCnt.acquire( &::g_moduleCount.modCnt );
-}
-//__________________________________________________________________________________________________
-ManagerImpl::~ManagerImpl()
-{
- OSL_ENSURE( _aProviders.size() == 0, "### still providers left!" );
- OSL_TRACE( "> TypeDescriptionManager shut down. <\n" );
- ::g_moduleCount.modCnt.release( &::g_moduleCount.modCnt );
-}
-//__________________________________________________________________________________________________
-void ManagerImpl::disposing()
-{
- // called on disposing the tdmgr instance (supposedly from context)
- _bCaching = sal_False;
- _aElements.clear();
- _xContext.clear();
- _aProviders.clear();
-}
-
-// XInitialization
-//__________________________________________________________________________________________________
-void ManagerImpl::initialize(
- const Sequence< Any > & args )
- throw (Exception, RuntimeException)
-{
- // additional providers
- Any const * pProviders = args.getConstArray();
- for ( sal_Int32 nPos = 0; nPos < args.getLength(); ++nPos )
- {
- Reference< XHierarchicalNameAccess > xHA( pProviders[ nPos ], UNO_QUERY );
- OSL_ENSURE( xHA.is(), "### no td provider!" );
-
- if (xHA.is())
- {
- try
- {
- insert( makeAny( xHA ) );
- }
- catch (IllegalArgumentException &)
- {
- }
- catch (ElementExistException &)
- {
- }
- }
- }
-}
-
-// XServiceInfo
-//__________________________________________________________________________________________________
-OUString ManagerImpl::getImplementationName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return stoc_bootstrap::tdmgr_getImplementationName();
-}
-//__________________________________________________________________________________________________
-sal_Bool ManagerImpl::supportsService( const OUString & rServiceName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- const Sequence< OUString > & rSNL = getSupportedServiceNames();
- const OUString * pArray = rSNL.getConstArray();
- for ( sal_Int32 nPos = rSNL.getLength(); nPos--; )
- {
- if (pArray[nPos] == rServiceName)
- return sal_True;
- }
- return sal_False;
-}
-//__________________________________________________________________________________________________
-Sequence< OUString > ManagerImpl::getSupportedServiceNames()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return stoc_bootstrap::tdmgr_getSupportedServiceNames();
-}
-
-// XElementAccess
-//__________________________________________________________________________________________________
-Type ManagerImpl::getElementType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return ::getCppuType( (const Reference< XHierarchicalNameAccess > *)0 );
-}
-//__________________________________________________________________________________________________
-sal_Bool ManagerImpl::hasElements()
- throw(::com::sun::star::uno::RuntimeException)
-{
- MutexGuard aGuard( _aComponentMutex );
- return (_aProviders.size() > 0);
-}
-
-// XEnumerationAccess
-//__________________________________________________________________________________________________
-Reference< XEnumeration > ManagerImpl::createEnumeration()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return new EnumerationImpl( this );
-}
-
-// XSet
-//__________________________________________________________________________________________________
-sal_Bool SAL_CALL ManagerImpl::has( const Any & rElement )
- throw(::com::sun::star::uno::RuntimeException)
-{
- Reference< XHierarchicalNameAccess > xElem;
- if (rElement >>= xElem)
- {
- MutexGuard aGuard( _aComponentMutex );
- return (find( _aProviders.begin(), _aProviders.end(), xElem ) != _aProviders.end());
- }
- return sal_False;
-}
-
-//__________________________________________________________________________________________________
-void SAL_CALL ManagerImpl::insert( const Any & rElement )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::ElementExistException, ::com::sun::star::uno::RuntimeException)
-{
- Reference< XHierarchicalNameAccess > xElem;
- if (! (rElement >>= xElem) || !xElem.is())
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("no valid type description provider given!") ),
- (XWeak *)(OWeakObject *)this, 0 );
- }
-
- MutexGuard aGuard( _aComponentMutex );
- if (find( _aProviders.begin(), _aProviders.end(), xElem ) != _aProviders.end())
- {
- throw ElementExistException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("provider already inserted!") ),
- (XWeak *)(OWeakObject *)this );
- }
-
- if (! _aProviders.empty())
- {
- // check whether all types are compatible, if possible:
- Reference<reflection::XTypeDescriptionEnumerationAccess> xTDEnumAccess(
- xElem, UNO_QUERY );
- OSL_ENSURE( xTDEnumAccess.is(),
- "### providers ought to implement "
- "reflection::XTypeDescriptionEnumerationAccess!" );
- if (xTDEnumAccess.is())
- {
- try
- {
- TypeClass ar [] = {
- TypeClass_ENUM, TypeClass_TYPEDEF, TypeClass_SEQUENCE,
- TypeClass_STRUCT, TypeClass_EXCEPTION,
- /* TypeClass_UNION, TypeClass_ARRAY not supported */
- TypeClass_INTERFACE,
- TypeClass_SERVICE,
- TypeClass_INTERFACE_METHOD, TypeClass_INTERFACE_ATTRIBUTE,
- TypeClass_PROPERTY, TypeClass_CONSTANT, TypeClass_CONSTANTS,
- TypeClass_SINGLETON
- };
- Reference<reflection::XTypeDescriptionEnumeration> xTDEnum(
- xTDEnumAccess->createTypeDescriptionEnumeration(
- OUString() /* all modules */,
- Sequence<TypeClass>( ar, ARLEN(ar) ),
- reflection::TypeDescriptionSearchDepth_INFINITE ) );
-
- while (xTDEnum->hasMoreElements())
- {
- Reference<reflection::XTypeDescription> xNewTD;
- try
- {
- xNewTD = xTDEnum->nextTypeDescription();
- }
- catch (container::NoSuchElementException & exc)
- {
- throw lang::IllegalArgumentException(
- OUSTR("NoSuchElementException occurred: ") +
- exc.Message, static_cast<OWeakObject *>(this),
- -1 /* unknown */ );
- }
-
- try
- {
- OUString newName( xNewTD->getName() );
- Reference<reflection::XTypeDescription> xExistingTD(
- getByHierarchicalName( newName ), UNO_QUERY );
- OSL_ASSERT( xExistingTD.is() );
- // existing, check whether compatible:
- if (xExistingTD.is())
- {
- try
- {
- check( xNewTD, xExistingTD );
- }
- catch (IncompatibleTypeException & exc)
- {
- throw lang::IllegalArgumentException(
- OUSTR("Rejecting types due to "
- "incompatibility! ") + exc.m_cause,
- static_cast<OWeakObject *>(this), 0 );
- }
- }
- }
- catch (container::NoSuchElementException &)
- {
- // type not in: ok
- }
- }
- }
- catch (reflection::NoSuchTypeNameException & exc)
- {
- throw lang::IllegalArgumentException(
- OUSTR("NoSuchTypeNameException occurred: ") + exc.Message,
- static_cast<OWeakObject *>(this), -1 /* unknown */ );
- }
- catch (reflection::InvalidTypeNameException & exc)
- {
- throw lang::IllegalArgumentException(
- OUSTR("InvalidTypeNameException occurred: ") + exc.Message,
- static_cast<OWeakObject *>(this), -1 /* unknown */ );
- }
- }
- }
-
- _aProviders.push_back( xElem );
- Reference< XComponent > xComp( xElem, UNO_QUERY );
- if (xComp.is())
- xComp->addEventListener( &_aEventListener );
-}
-//__________________________________________________________________________________________________
-void SAL_CALL ManagerImpl::remove( const Any & rElement )
- throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException)
-{
- if (!rBHelper.bDisposed && !rBHelper.bInDispose)
- {
- Reference< XHierarchicalNameAccess > xElem;
- if (! (rElement >>= xElem))
- {
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("no type description provider given!") ),
- (XWeak *)(OWeakObject *)this, 0 );
- }
-
- MutexGuard aGuard( _aComponentMutex );
- ProviderVector::iterator iFind( find( _aProviders.begin(), _aProviders.end(), xElem ) );
- if (iFind == _aProviders.end())
- {
- throw NoSuchElementException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("provider not found!") ),
- (XWeak *)(OWeakObject *)this );
- }
- _aProviders.erase( iFind );
- }
-
- Reference< XComponent > xComp;
- if (rElement >>= xComp)
- xComp->removeEventListener( &_aEventListener );
-}
-
-// XTypeDescriptionEnumerationAccess
-//__________________________________________________________________________________________________
-// virtual
-Reference< XTypeDescriptionEnumeration > SAL_CALL
-ManagerImpl::createTypeDescriptionEnumeration(
- const OUString & moduleName,
- const Sequence< TypeClass > & types,
- TypeDescriptionSearchDepth depth )
- throw ( NoSuchTypeNameException,
- InvalidTypeNameException,
- RuntimeException )
-{
- MutexGuard aGuard( _aComponentMutex );
-
- TDEnumerationAccessStack aStack;
- ProviderVector::const_iterator it = _aProviders.begin();
- const ProviderVector::const_iterator end = _aProviders.end();
- while ( it != end )
- {
- Reference< XTypeDescriptionEnumerationAccess >xEnumAccess(
- (*it), UNO_QUERY );
- OSL_ENSURE( xEnumAccess.is(),
- "### no XTypeDescriptionEnumerationAccess!" );
- if ( xEnumAccess.is() )
- aStack.push( xEnumAccess );
-
- ++it;
- }
-
- return Reference< XTypeDescriptionEnumeration >(
- new TypeDescriptionEnumerationImpl( moduleName,
- types,
- depth,
- aStack ) );
-}
-
-
-//##################################################################################################
-//##################################################################################################
-//##################################################################################################
-
-
-//==================================================================================================
-class SimpleTypeDescriptionImpl
- : public WeakImplHelper1< XTypeDescription >
-{
- TypeClass _eTC;
- OUString _aName;
-
-public:
- SimpleTypeDescriptionImpl( TypeClass eTC, const OUString & rName )
- : _eTC( eTC )
- , _aName( rName )
- {}
-
- // XTypeDescription
- virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
-};
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-TypeClass SimpleTypeDescriptionImpl::getTypeClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _eTC;
-}
-//__________________________________________________________________________________________________
-OUString SimpleTypeDescriptionImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _aName;
-}
-
-//==================================================================================================
-class SequenceTypeDescriptionImpl
- : public WeakImplHelper1< XIndirectTypeDescription >
-{
- Reference< XTypeDescription > _xElementTD;
-
-public:
- SequenceTypeDescriptionImpl( const Reference< XTypeDescription > & xElementTD )
- : _xElementTD( xElementTD )
- {}
-
- // XTypeDescription
- virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
-
- // XIndirectTypeDescription
- virtual Reference< XTypeDescription > SAL_CALL getReferencedType() throw(::com::sun::star::uno::RuntimeException);
-};
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-TypeClass SequenceTypeDescriptionImpl::getTypeClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return TypeClass_SEQUENCE;
-}
-//__________________________________________________________________________________________________
-OUString SequenceTypeDescriptionImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return (OUString( RTL_CONSTASCII_USTRINGPARAM("[]") ) + _xElementTD->getName());
-}
-
-// XIndirectTypeDescription
-//__________________________________________________________________________________________________
-Reference< XTypeDescription > SequenceTypeDescriptionImpl::getReferencedType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _xElementTD;
-}
-
-//==================================================================================================
-class ArrayTypeDescriptionImpl
- : public WeakImplHelper1< XArrayTypeDescription >
-{
- Reference< XTypeDescription > _xElementTD;
- Mutex _aDimensionMutex;
- sal_Int32 _nDimensions;
- Sequence< sal_Int32 > _seqDimensions;
- OUString _sDimensions;
-
- void initDimensions(const OUString& rSDimensions);
-public:
- ArrayTypeDescriptionImpl( const Reference< XTypeDescription > & xElementTD,
- sal_Int32 nDimensions, const OUString& rSDimensions )
- : _xElementTD( xElementTD )
- , _nDimensions( nDimensions )
- , _seqDimensions( Sequence< sal_Int32 >(nDimensions) )
- , _sDimensions( rSDimensions )
- {
- initDimensions( rSDimensions );
- }
- virtual ~ArrayTypeDescriptionImpl() {}
-
- // XTypeDescription
- virtual TypeClass SAL_CALL getTypeClass() throw(::com::sun::star::uno::RuntimeException);
- virtual OUString SAL_CALL getName() throw(::com::sun::star::uno::RuntimeException);
-
- // XArrayTypeDescription
- virtual Reference< XTypeDescription > SAL_CALL getType() throw(::com::sun::star::uno::RuntimeException);
- virtual sal_Int32 SAL_CALL getNumberOfDimensions() throw(::com::sun::star::uno::RuntimeException);
- virtual Sequence< sal_Int32 > SAL_CALL getDimensions() throw(::com::sun::star::uno::RuntimeException);
-};
-//__________________________________________________________________________________________________
-static sal_Int32 unicodeToInteger( sal_Int8 base, const sal_Unicode *s )
-{
- sal_Int32 r = 0;
- sal_Int32 negative = 0;
-
- if (*s == '-')
- {
- negative = 1;
- s++;
- }
- if (base == 8 && *s == '0')
- s++;
- else if (base == 16 && *s == '0' && (*(s + 1) == 'x' || *(s + 1) == 'X'))
- s += 2;
-
- for (; *s; s++)
- {
- if (*s <= '9' && *s >= '0')
- r = (r * base) + (*s - '0');
- else if (base > 10 && *s <= 'f' && *s >= 'a')
- r = (r * base) + (*s - 'a' + 10);
- else if (base > 10 && *s <= 'F' && *s >= 'A')
- r = (r * base) + (*s - 'A' + 10);
- else
- break;
- }
- if (negative) r *= -1;
- return r;
-}
-//__________________________________________________________________________________________________
-void ArrayTypeDescriptionImpl::initDimensions(const OUString& rSDimensions)
-{
- MutexGuard aGuard( _aDimensionMutex );
-
- sal_Int32 * pDimensions = _seqDimensions.getArray();
- OUString tmp(rSDimensions);
- sal_Unicode* p = (sal_Unicode*)tmp.getStr()+1;
- sal_Unicode* pOffset = p;
- sal_Int32 len = tmp.getLength() - 1 ;
- sal_Int32 i = 0;
-
- while ( len > 0)
- {
- pOffset++;
- if (*pOffset == ']')
- {
- *pOffset = '\0';
- pOffset += 2;
- len -= 3;
- pDimensions[i++] = unicodeToInteger(10, p);
- p = pOffset;
- } else
- len--;
- }
-}
-
-// XTypeDescription
-//__________________________________________________________________________________________________
-TypeClass ArrayTypeDescriptionImpl::getTypeClass()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return TypeClass_ARRAY;
-}
-//__________________________________________________________________________________________________
-OUString ArrayTypeDescriptionImpl::getName()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return (_xElementTD->getName() + _sDimensions);
-}
-
-// XArrayTypeDescription
-//__________________________________________________________________________________________________
-Reference< XTypeDescription > ArrayTypeDescriptionImpl::getType()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _xElementTD;
-}
-
-//__________________________________________________________________________________________________
-sal_Int32 ArrayTypeDescriptionImpl::getNumberOfDimensions()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _nDimensions;
-}
-
-//__________________________________________________________________________________________________
-Sequence< sal_Int32 > ArrayTypeDescriptionImpl::getDimensions()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _seqDimensions;
-}
-
-//##################################################################################################
-//##################################################################################################
-//##################################################################################################
-
-
-//__________________________________________________________________________________________________
-inline Any ManagerImpl::getSimpleType( const OUString & rName )
-{
- Any aRet;
-
- if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("string") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_STRING, rName ) );
- else if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("long") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_LONG, rName ) );
- else if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("unsigned long") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_UNSIGNED_LONG, rName ) );
- else if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("boolean") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_BOOLEAN, rName ) );
- else if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("char") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_CHAR, rName ) );
- else if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("byte") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_BYTE, rName ) );
- else if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("short") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_SHORT, rName ) );
- else if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("unsigned short") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_UNSIGNED_SHORT, rName ) );
- else if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("hyper") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_HYPER, rName ) );
- else if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("unsigned hyper") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_UNSIGNED_HYPER, rName ) );
- else if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("float") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_FLOAT, rName ) );
- else if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("double") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_DOUBLE, rName ) );
- else if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("any") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_ANY, rName ) );
- else if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("void") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_VOID, rName ) );
- else if (rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("type") ))
- aRet <<= Reference< XTypeDescription >( new SimpleTypeDescriptionImpl( TypeClass_TYPE, rName ) );
-
- return aRet;
-}
-
-namespace {
-
-Reference< XTypeDescription > resolveTypedefs(
- Reference< XTypeDescription > const & type)
-{
- Reference< XTypeDescription > resolved(type);
- while (resolved->getTypeClass() == TypeClass_TYPEDEF) {
- resolved = Reference< XIndirectTypeDescription >(
- type, UNO_QUERY_THROW)->getReferencedType();
- }
- return resolved;
-}
-
-bool isNonVoidNonExceptionType(Reference< XTypeDescription > const & type) {
- switch (type->getTypeClass()) {
- case TypeClass_BOOLEAN:
- case TypeClass_BYTE:
- case TypeClass_SHORT:
- case TypeClass_UNSIGNED_SHORT:
- case TypeClass_LONG:
- case TypeClass_UNSIGNED_LONG:
- case TypeClass_HYPER:
- case TypeClass_UNSIGNED_HYPER:
- case TypeClass_FLOAT:
- case TypeClass_DOUBLE:
- case TypeClass_CHAR:
- case TypeClass_STRING:
- case TypeClass_TYPE:
- case TypeClass_ANY:
- case TypeClass_SEQUENCE:
- case TypeClass_ENUM:
- case TypeClass_STRUCT:
- case TypeClass_INTERFACE:
- return true;
-
- default:
- return false;
- }
-}
-
-class InstantiatedStruct: public WeakImplHelper1< XStructTypeDescription > {
-public:
- InstantiatedStruct(
- Reference< XStructTypeDescription > const & structType,
- std::vector< Reference< XTypeDescription > > const & arguments);
-
- virtual TypeClass SAL_CALL getTypeClass() throw (RuntimeException)
- { return TypeClass_STRUCT; }
-
- virtual OUString SAL_CALL getName() throw (RuntimeException);
-
- virtual Reference< XTypeDescription > SAL_CALL getBaseType()
- throw (RuntimeException)
- { return m_struct->getBaseType(); }
-
- virtual Sequence< Reference< XTypeDescription > > SAL_CALL getMemberTypes()
- throw (RuntimeException);
-
- virtual Sequence< OUString > SAL_CALL getMemberNames()
- throw (RuntimeException)
- { return m_struct->getMemberNames(); }
-
- virtual Sequence< OUString > SAL_CALL getTypeParameters()
- throw (RuntimeException)
- { return Sequence< OUString >(); }
-
- virtual Sequence< Reference< XTypeDescription > > SAL_CALL
- getTypeArguments() throw (RuntimeException)
- { return m_arguments; }
-
-private:
- Reference< XStructTypeDescription > m_struct;
- Sequence< Reference< XTypeDescription > > m_arguments;
-};
-
-InstantiatedStruct::InstantiatedStruct(
- Reference< XStructTypeDescription > const & structType,
- std::vector< Reference< XTypeDescription > > const & arguments):
- m_struct(structType),
- m_arguments(static_cast< sal_Int32 >(arguments.size()))
-{
- for (std::vector< Reference< XTypeDescription > >::size_type i = 0;
- i < arguments.size(); ++i)
- {
- m_arguments[static_cast< sal_Int32 >(i)] = arguments[i];
- }
-}
-
-OUString InstantiatedStruct::getName() throw (RuntimeException) {
- OUStringBuffer buf(m_struct->getName());
- buf.append(static_cast< sal_Unicode >('<'));
- for (sal_Int32 i = 0; i < m_arguments.getLength(); ++i) {
- if (i != 0) {
- buf.append(static_cast< sal_Unicode >(','));
- }
- buf.append(m_arguments[i]->getName());
- }
- buf.append(static_cast< sal_Unicode >('>'));
- return buf.makeStringAndClear();
-}
-
-Sequence< Reference< XTypeDescription > > InstantiatedStruct::getMemberTypes()
- throw (RuntimeException)
-{
- Sequence< Reference< XTypeDescription > > types(m_struct->getMemberTypes());
- for (sal_Int32 i = 0; i < types.getLength(); ++i) {
- if (types[i]->getTypeClass() == TypeClass_UNKNOWN) {
- Sequence< OUString > parameters(m_struct->getTypeParameters());
- OSL_ASSERT(parameters.getLength() == m_arguments.getLength());
- for (sal_Int32 j = 0; j < parameters.getLength(); ++j) {
- if (parameters[j] == types[i]->getName()) {
- types[i] = m_arguments[j];
- break;
- }
- }
- }
- }
- return types;
-}
-
-}
-
-Reference< XTypeDescription > ManagerImpl::getInstantiatedStruct(
- OUString const & name)
-{
- sal_Int32 i = name.indexOf('<');
- OSL_ASSERT(i >= 0);
- Reference< XStructTypeDescription > structType(
- getByHierarchicalName(name.copy(0, i)), UNO_QUERY);
- std::vector< Reference< XTypeDescription > > args;
- bool good = structType.is();
- if (good) {
- do {
- ++i; // skip '<' or ','
- sal_Int32 j = i;
- for (sal_Int32 level = 0; j != name.getLength(); ++j) {
- sal_Unicode c = name[j];
- if (c == ',') {
- if (level == 0) {
- break;
- }
- } else if (c == '<') {
- ++level;
- } else if (c == '>') {
- if (level == 0) {
- break;
- }
- --level;
- }
- }
- if (j != name.getLength()) {
- Reference< XTypeDescription > type(
- getByHierarchicalName(name.copy(i, j - i)), UNO_QUERY);
- if (isNonVoidNonExceptionType(resolveTypedefs(type))) {
- args.push_back(type);
- } else {
- good = false;
- break;
- }
- }
- i = j;
- } while (i != name.getLength() && name[i] != '>');
- good = good && i == name.getLength() - 1
- && name[i] == '>' && !args.empty();
- }
- // args.size() cannot exceed SAL_MAX_INT32, as each argument consumes at
- // least one position within an rtl::OUString (which is no longer than
- // SAL_MAX_INT32):
- if (!good
- || (args.size()
- != sal::static_int_cast< sal_uInt32 >(
- structType->getTypeParameters().getLength())))
- {
- throw NoSuchElementException(name, static_cast< OWeakObject * >(this));
- }
- return new InstantiatedStruct(structType, args);
-}
-
-// XHierarchicalNameAccess
-//__________________________________________________________________________________________________
-Any ManagerImpl::getByHierarchicalName( const OUString & rName )
- throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException)
-{
- Any aRet;
- if (_bCaching)
- aRet = _aElements.getValue( rName );
- if (rName.getLength() && !aRet.hasValue())
- {
- sal_Int32 nIndex;
- if (rName[0] == '[') // test for sequence
- {
- Reference< XTypeDescription > xElemType(
- getByHierarchicalName( rName.copy( 2 ) ),
- UNO_QUERY_THROW );
- aRet <<= Reference< XTypeDescription >(
- new SequenceTypeDescriptionImpl( xElemType ) );
- }
- else if (rName[rName.getLength()-1] == ']') // test for array
- {
- sal_Int32 nIndex2 = 0, nTokens = 0;
- do { rName.getToken( 0, '[', nIndex2 ); nTokens++; } while( nIndex2 != -1 );
- sal_Int32 nDims = nTokens - 1;
- sal_Int32 dimOffset = rName.indexOf('[');
- Reference< XTypeDescription > xElemType(
- getByHierarchicalName( rName.copy( 0, dimOffset ) ),
- UNO_QUERY_THROW );
- aRet <<= Reference< XTypeDescription >(
- new ArrayTypeDescriptionImpl(
- xElemType, nDims, rName.copy(dimOffset) ) );
- }
- // test for interface member names:
- else if ((nIndex = rName.indexOf( ':' )) >= 0)
- {
- Reference< XInterfaceTypeDescription > xIfaceTD(
- getByHierarchicalName( rName.copy( 0, nIndex ) ),
- UNO_QUERY_THROW );
- const Sequence< Reference< XInterfaceMemberTypeDescription > > &
- rMembers = xIfaceTD->getMembers();
- const Reference< XInterfaceMemberTypeDescription > * pMembers =
- rMembers.getConstArray();
-
- for ( sal_Int32 nPos = rMembers.getLength(); nPos--; )
- {
- if (rName == pMembers[nPos]->getName())
- {
- aRet <<= Reference< XTypeDescription >(
- pMembers[nPos], UNO_QUERY_THROW );
- break;
- }
- }
- if (! aRet.hasValue())
- {
- // member not found:
- throw NoSuchElementException(
- rName, static_cast< OWeakObject * >(this) );
- }
- }
- // test for instantiated polymorphic struct types:
- else if (rName.indexOf('<') >= 0)
- {
- aRet <<= getInstantiatedStruct(rName);
- }
- else if (rName.indexOf( '.' ) < 0) // test for simple/ build in types
- {
- aRet = getSimpleType( rName );
- }
-
- if (! aRet.hasValue())
- {
- // last, try callback chain
- for ( ProviderVector::const_iterator iPos( _aProviders.begin() );
- iPos != _aProviders.end(); ++iPos )
- {
- try
- {
- if ((aRet = (*iPos)->getByHierarchicalName(
- rName )).hasValue())
- {
- break;
- }
- }
- catch (NoSuchElementException &)
- {
- }
- }
- }
-
- // update cache
- if (_bCaching && aRet.hasValue())
- _aElements.setValue( rName, aRet );
- }
-
- if (! aRet.hasValue())
- {
- throw NoSuchElementException(
- rName, static_cast< OWeakObject * >(this) );
- }
- return aRet;
-}
-//__________________________________________________________________________________________________
-sal_Bool ManagerImpl::hasByHierarchicalName( const OUString & rName )
- throw(::com::sun::star::uno::RuntimeException)
-{
- try
- {
- return getByHierarchicalName( rName ).hasValue();
- }
- catch (NoSuchElementException &)
- {
- }
- return sal_False;
-}
-}
-
-namespace stoc_bootstrap
-{
-//==================================================================================================
-Reference< XInterface > SAL_CALL ManagerImpl_create(
- Reference< XComponentContext > const & xContext )
- SAL_THROW( (::com::sun::star::uno::Exception) )
-{
- sal_Int32 nCacheSize = CACHE_SIZE;
- if (xContext.is()) {
- xContext->getValueByName(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "/implementations/" IMPLNAME "/CacheSize"))) >>=
- nCacheSize;
- }
-
- return Reference< XInterface >( *new stoc_tdmgr::ManagerImpl( xContext, nCacheSize ) );
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/tdmanager/tdmgr_check.cxx b/stoc/source/tdmanager/tdmgr_check.cxx
deleted file mode 100644
index 0197c578c..000000000
--- a/stoc/source/tdmanager/tdmgr_check.cxx
+++ /dev/null
@@ -1,559 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "tdmgr_common.hxx"
-#include "rtl/ustrbuf.hxx"
-#include "typelib/typedescription.h"
-#include "com/sun/star/beans/PropertyAttribute.hpp"
-#include "com/sun/star/reflection/XConstantsTypeDescription.hpp"
-#include "com/sun/star/reflection/XIndirectTypeDescription.hpp"
-#include "com/sun/star/reflection/XEnumTypeDescription.hpp"
-#include "com/sun/star/reflection/XStructTypeDescription.hpp"
-#include "com/sun/star/reflection/XInterfaceTypeDescription2.hpp"
-#include "com/sun/star/reflection/XInterfaceMethodTypeDescription.hpp"
-#include "com/sun/star/reflection/XInterfaceAttributeTypeDescription2.hpp"
-#include "com/sun/star/reflection/XServiceTypeDescription2.hpp"
-#include "com/sun/star/reflection/XSingletonTypeDescription2.hpp"
-
-
-using ::rtl::OUString;
-using ::rtl::OUStringBuffer;
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::stoc_tdmgr;
-
-namespace {
-
-OUString getTypeClassName( TypeClass tc )
-{
- typelib_EnumTypeDescription * typeDescr = 0;
- OUString name = OUSTR("com.sun.star.uno.TypeClass");
- typelib_typedescription_getByName(
- reinterpret_cast<typelib_TypeDescription **>(&typeDescr), name.pData );
- OSL_ASSERT( typeDescr != 0 );
- if (typeDescr == 0)
- return OUSTR("Cannot get type description of ") + name;
- typelib_typedescription_complete(
- reinterpret_cast<typelib_TypeDescription **>(&typeDescr) );
-
- sal_Int32 const * pValues = typeDescr->pEnumValues;
- sal_Int32 nPos = typeDescr->nEnumValues;
- while (nPos--)
- {
- if (pValues[ nPos ] == (sal_Int32) tc)
- break;
- }
- if (nPos >= 0)
- name = typeDescr->ppEnumNames[ nPos ];
- else
- name = OUSTR("unknown TypeClass value: ") +
- OUString::valueOf( (sal_Int32) tc );
-
- typelib_typedescription_release(
- reinterpret_cast<typelib_TypeDescription *>(typeDescr) );
- return name;
-}
-
-OUString getPropertyFlagsAsString( sal_Int16 attributes )
-{
- OUStringBuffer buf;
- if ((attributes & beans::PropertyAttribute::MAYBEVOID) != 0)
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("MAYBEVOID, ") );
- if ((attributes & beans::PropertyAttribute::BOUND) != 0)
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("BOUND, ") );
- if ((attributes & beans::PropertyAttribute::CONSTRAINED) != 0)
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("CONSTRAINED, ") );
- if ((attributes & beans::PropertyAttribute::TRANSIENT) != 0)
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("TRANSIENT, ") );
- if ((attributes & beans::PropertyAttribute::READONLY) != 0)
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("READONLY, ") );
- if ((attributes & beans::PropertyAttribute::MAYBEAMBIGUOUS) != 0)
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("MAYBEAMBIGUOUS, ") );
- if ((attributes & beans::PropertyAttribute::MAYBEDEFAULT) != 0)
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("MAYBEDEFAULT, ") );
- if ((attributes & beans::PropertyAttribute::REMOVEABLE) != 0)
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("REMOVEABLE, ") );
- if ((attributes & beans::PropertyAttribute::OPTIONAL) != 0)
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("OPTIONAL") );
- else if (buf.getLength() > 0)
- buf.setLength( buf.getLength() - 2 ); // truncate ", "
- return buf.makeStringAndClear();
-}
-
-void typeError( OUString const & msg, OUString const & context )
-{
- OUStringBuffer buf;
- if (context.getLength() > 0) {
- buf.append( static_cast<sal_Unicode>('[') );
- buf.append( context );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("] ") );
- }
- buf.append( msg );
- throw IncompatibleTypeException( buf.makeStringAndClear() );
-}
-
-template<typename T>
-void checkSeq( Sequence< Reference<T> > const & newTypes,
- Sequence< Reference<T> > const & existingTypes,
- OUString const & context,
- bool optionalMode = false )
-{
- sal_Int32 len = newTypes.getLength();
- if (len != existingTypes.getLength())
- {
- if (!optionalMode || len < newTypes.getLength())
- typeError( OUSTR("Different number of types!"), context );
- len = existingTypes.getLength();
- }
-
- Reference<T> const * pNewTypes = newTypes.getConstArray();
- Reference<T> const * pExistingTypes = existingTypes.getConstArray();
- for ( sal_Int32 pos = 0; pos < len; ++pos )
- {
- OUStringBuffer buf;
- buf.append( context );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(", position ") );
- buf.append( pos );
- check( pNewTypes[pos].get(), pExistingTypes[pos].get(),
- buf.makeStringAndClear() );
- }
-}
-
-void checkEnum(
- Reference<reflection::XEnumTypeDescription> const & xNewTD,
- Reference<reflection::XEnumTypeDescription> const & xExistingTD )
-{
- if (xNewTD->getEnumNames() != xExistingTD->getEnumNames())
- typeError( OUSTR("ENUM names don't match!"), xNewTD->getName() );
- if (xNewTD->getEnumValues() != xExistingTD->getEnumValues())
- typeError( OUSTR("ENUM values don't match!"), xNewTD->getName() );
-}
-
-void checkStruct(
- Reference<reflection::XCompoundTypeDescription> const & xNewTD,
- Reference<reflection::XCompoundTypeDescription> const & xExistingTD )
-{
- check( xNewTD->getBaseType(), xExistingTD->getBaseType(),
- xNewTD->getName() + OUSTR(", base type") );
- checkSeq( xNewTD->getMemberTypes(), xExistingTD->getMemberTypes(),
- xNewTD->getName() + OUSTR(", member types") );
-
- if (xNewTD->getMemberNames() != xExistingTD->getMemberNames())
- typeError( OUSTR("Different member names!"), xNewTD->getName() );
-
- if (xNewTD->getTypeClass() == TypeClass_STRUCT)
- {
- Reference<reflection::XStructTypeDescription> xNewStructTD(
- xNewTD, UNO_QUERY );
- Reference<reflection::XStructTypeDescription> xExistingStructTD(
- xExistingTD, UNO_QUERY );
- if (xNewStructTD.is() && xExistingStructTD.is())
- {
- if (xNewStructTD->getTypeParameters() !=
- xExistingStructTD->getTypeParameters())
- typeError( OUSTR("Different type parameters of instantiated "
- "polymorphic STRUCT!"), xNewTD->getName() );
- checkSeq( xNewStructTD->getTypeArguments(),
- xExistingStructTD->getTypeArguments(),
- xNewTD->getName() + OUSTR(", argument types") );
- }
- else if (xNewStructTD.is() || xExistingStructTD.is())
- typeError( OUSTR("Mixing polymorphic STRUCT types "
- "with non-polymorphic!"), xNewTD->getName() );
- }
-}
-
-void checkInterface(
- Reference<reflection::XInterfaceTypeDescription2> const & xNewTD,
- Reference<reflection::XInterfaceTypeDescription2> const & xExistingTD )
-{
- checkSeq( xNewTD->getBaseTypes(), xExistingTD->getBaseTypes(),
- xNewTD->getName() + OUSTR(", base types") );
- checkSeq(xNewTD->getOptionalBaseTypes(),xExistingTD->getOptionalBaseTypes(),
- xNewTD->getName() + OUSTR(", optional base types") );
- checkSeq( xNewTD->getMembers(), xExistingTD->getMembers(),
- xNewTD->getName() + OUSTR(", members") );
-}
-
-void checkRestParam( Reference<reflection::XParameter> const & xNewParam,
- Reference<reflection::XParameter> const & xExistingParam,
- OUString const & context )
-{
- if (xNewParam->isRestParameter() != xExistingParam->isRestParameter())
- typeError( OUSTR("Different ... parameters specified!"), context );
-}
-
-void checkRestParam( Reference<reflection::XMethodParameter> const &,
- Reference<reflection::XMethodParameter> const &,
- OUString const & )
-{
-}
-
-template<typename T>
-void checkParameters( Sequence< Reference<T> > const & newParams,
- Sequence< Reference<T> > const & existingParams,
- OUString const & context_ )
-{
- sal_Int32 len = newParams.getLength();
- if (len != existingParams.getLength())
- typeError( OUSTR("Different number of parameters!"), context_ );
- Reference<T> const * pNewParams = newParams.getConstArray();
- Reference<T> const * pExistingParams = existingParams.getConstArray();
- for ( sal_Int32 pos = 0; pos < len; ++pos )
- {
- Reference<T> const & xNewParam = pNewParams[pos];
- Reference<T> const & xExistingParam = pExistingParams[pos];
-
- OUStringBuffer buf;
- buf.append( context_ );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(", parameter ") );
- buf.append( pos );
- OSL_ASSERT( pos == xNewParam->getPosition() &&
- pos == xExistingParam->getPosition() );
- OUString context( buf.makeStringAndClear() );
-
- if (xNewParam->getName() != xExistingParam->getName())
- {
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("Name differs: ") );
- buf.append( xNewParam->getName() );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(", ") );
- buf.append( xExistingParam->getName() );
- typeError( buf.makeStringAndClear(), context );
- }
- check( xNewParam->getType(), xExistingParam->getType(), context );
-
- if (xNewParam->isIn() != xExistingParam->isIn())
- typeError( OUSTR("IN attribute differs!"), context );
- if (xNewParam->isOut() != xExistingParam->isOut())
- typeError( OUSTR("OUT attribute differs!"), context );
- checkRestParam( xNewParam, xExistingParam, context );
- }
-}
-
-static void checkMethod(
- Reference<reflection::XInterfaceMethodTypeDescription> const & xNewTD,
- Reference<reflection::XInterfaceMethodTypeDescription> const & xExistingTD )
-{
- check( xNewTD->getReturnType(), xExistingTD->getReturnType(),
- xNewTD->getName() );
-
- if (xNewTD->isOneway() != xExistingTD->isOneway())
- typeError( OUSTR("Methods have differing OneWay attribute!"),
- xNewTD->getName() );
-
- checkParameters( xNewTD->getParameters(), xExistingTD->getParameters(),
- xNewTD->getName() );
-
- checkSeq( xNewTD->getExceptions(), xExistingTD->getExceptions(),
- xNewTD->getName() + OUSTR(", declared exceptions") );
-}
-
-void checkAttribute(
- Reference<reflection::XInterfaceAttributeTypeDescription2> const & xNewTD,
- Reference<reflection::XInterfaceAttributeTypeDescription2>
- const & xExistingTD )
-{
- if (xNewTD->isReadOnly() != xExistingTD->isReadOnly())
- typeError( OUSTR("ReadOnly attribute differs!"), xNewTD->getName() );
-
- check( xNewTD->getType(), xExistingTD->getType(),
- xNewTD->getName() + OUSTR(", attribute type") );
-
- if (xNewTD->isBound() != xExistingTD->isBound())
- typeError( OUSTR("Bound attribute differs!"), xNewTD->getName() );
-
- checkSeq( xNewTD->getGetExceptions(), xExistingTD->getGetExceptions(),
- xNewTD->getName() + OUSTR(", getter exceptions") );
- checkSeq( xNewTD->getSetExceptions(), xExistingTD->getSetExceptions(),
- xNewTD->getName() + OUSTR(", setter exceptions") );
-}
-
-void checkProperty(
- Reference<reflection::XPropertyTypeDescription> const & xNewTD,
- Reference<reflection::XPropertyTypeDescription> const & xExistingTD )
-{
- if (xNewTD->getPropertyFlags() != xExistingTD->getPropertyFlags())
- {
- OUStringBuffer buf;
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(
- "Different set of property flags: { ") );
- buf.append( getPropertyFlagsAsString(
- xNewTD->getPropertyFlags() ) );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(" } (new), { ") );
- buf.append( getPropertyFlagsAsString(
- xExistingTD->getPropertyFlags() ) );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(" } (existing)!") );
- typeError( buf.makeStringAndClear(), xNewTD->getName() );
- }
-
- check( xNewTD->getPropertyTypeDescription(),
- xExistingTD->getPropertyTypeDescription(),
- xNewTD->getName() );
-}
-
-void checkSingleton(
- Reference<reflection::XSingletonTypeDescription2> const & xNewTD,
- Reference<reflection::XSingletonTypeDescription2> const & xExistingTD )
-{
- sal_Bool ifaceBased = xNewTD->isInterfaceBased();
- if (ifaceBased != xExistingTD->isInterfaceBased())
- typeError(
- OUSTR("Mixing interface and NON-interface based singletons!"),
- xNewTD->getName() );
- if (ifaceBased)
- check( xNewTD->getInterface(), xExistingTD->getInterface(),
- xNewTD->getName() );
- else
- check( xNewTD->getService().get(), xExistingTD->getService().get(),
- xNewTD->getName() );
-}
-
-void checkService(
- Reference<reflection::XServiceTypeDescription2> const & xNewTD,
- Reference<reflection::XServiceTypeDescription2> const & xExistingTD )
-{
- sal_Bool singleIfaceBased = xNewTD->isSingleInterfaceBased();
- if (singleIfaceBased != xExistingTD->isSingleInterfaceBased())
- typeError( OUSTR("Mixing interface and NON-interface based services!"),
- xNewTD->getName() );
- if (singleIfaceBased)
- {
- check( xNewTD->getInterface(), xExistingTD->getInterface(),
- xNewTD->getName() );
- Sequence< Reference<reflection::XServiceConstructorDescription> >
- newCtors( xNewTD->getConstructors() );
- Sequence< Reference<reflection::XServiceConstructorDescription> >
- existingCtors( xExistingTD->getConstructors() );
- sal_Int32 len = newCtors.getLength();
- if (len != existingCtors.getLength())
- typeError( OUSTR("Different number of service constructors!"),
- xNewTD->getName() );
- Reference<reflection::XServiceConstructorDescription> const *
- pNewCtors = newCtors.getConstArray();
- Reference<reflection::XServiceConstructorDescription> const *
- pExistingCtors = existingCtors.getConstArray();
- for ( sal_Int32 pos = 0; pos < len; ++pos )
- {
- Reference<reflection::XServiceConstructorDescription> const &
- xNewCtor = pNewCtors[pos];
- Reference<reflection::XServiceConstructorDescription> const &
- xExistingCtor = pExistingCtors[pos];
-
- if (xNewCtor->getName() != xExistingCtor->getName())
- {
- OUStringBuffer buf;
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(
- "Different constructor names: ") );
- buf.append( xNewCtor->getName() );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(" (new), ") );
- buf.append( xExistingCtor->getName() );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(" (existing)!") );
- typeError( buf.makeStringAndClear(), xNewTD->getName() );
- }
-
- OUStringBuffer buf;
- buf.append( xNewTD->getName() );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(", constructor ") );
- buf.append( xNewCtor->getName() );
- OUString context( buf.makeStringAndClear() );
- checkParameters( xNewCtor->getParameters(),
- xExistingCtor->getParameters(),
- context );
- checkSeq( xNewCtor->getExceptions(), xExistingCtor->getExceptions(),
- context + OUSTR(", exceptions") );
- }
- }
- else // old-style service descriptions:
- {
- checkSeq( xNewTD->getMandatoryServices(),
- xExistingTD->getMandatoryServices(),
- xNewTD->getName() + OUSTR(", mandatory services") );
- checkSeq( xNewTD->getOptionalServices(),
- xExistingTD->getOptionalServices(),
- xNewTD->getName() + OUSTR(", optional services"),
- true /* optionalMode */ );
- checkSeq( xNewTD->getMandatoryInterfaces(),
- xExistingTD->getMandatoryInterfaces(),
- xNewTD->getName() + OUSTR(", mandatory interfaces") );
- checkSeq( xNewTD->getOptionalInterfaces(),
- xExistingTD->getOptionalInterfaces(),
- xNewTD->getName() + OUSTR(", optional interfaces"),
- true /* optionalMode */ );
-
- Sequence< Reference<reflection::XPropertyTypeDescription> >
- newProperties( xNewTD->getProperties() );
- Sequence< Reference<reflection::XPropertyTypeDescription> >
- existingProperties( xExistingTD->getProperties() );
- checkSeq( newProperties, existingProperties,
- xNewTD->getName() + OUSTR(", properties"),
- true /* optionalMode */ );
- if (newProperties.getLength() > existingProperties.getLength())
- {
- // check whether all added properties are OPTIONAL:
- Reference<reflection::XPropertyTypeDescription> const *
- pNewProperties = newProperties.getConstArray();
- for ( sal_Int32 pos = existingProperties.getLength() + 1;
- pos < newProperties.getLength(); ++pos )
- {
- if ((pNewProperties[pos]->getPropertyFlags() &
- beans::PropertyAttribute::OPTIONAL) == 0)
- typeError( OUSTR("New property is not OPTIONAL!"),
- pNewProperties[pos]->getName() );
- }
- }
- }
-}
-
-}
-
-namespace stoc_tdmgr {
-
-void check( Reference<reflection::XTypeDescription> const & xNewTD,
- Reference<reflection::XTypeDescription> const & xExistingTD,
- OUString const & context )
-{
- if (xNewTD == xExistingTD)
- return;
- if (xNewTD->getName() != xExistingTD->getName())
- {
- OUStringBuffer buf;
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("Different type names: ") );
- buf.append( xNewTD->getName() );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(" (new), ") );
- buf.append( xExistingTD->getName() );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(" (existing)!") );
- typeError( buf.makeStringAndClear(), context );
- }
-
- TypeClass tc = xNewTD->getTypeClass();
- if (tc != xExistingTD->getTypeClass())
- {
- OUStringBuffer buf;
- buf.append( xNewTD->getName() );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(
- " has different type classes: ") );
- buf.append( getTypeClassName( tc ) );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(" (new), ") );
- buf.append( getTypeClassName( xExistingTD->getTypeClass() ) );
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM(" (existing)!") );
- typeError( buf.makeStringAndClear(), context );
- }
-
- switch (tc)
- {
- case TypeClass_ENUM:
- checkEnum( Reference<reflection::XEnumTypeDescription>(
- xNewTD, UNO_QUERY_THROW ),
- Reference<reflection::XEnumTypeDescription>(
- xExistingTD, UNO_QUERY_THROW ) );
- break;
-
- case TypeClass_TYPEDEF:
- case TypeClass_SEQUENCE:
- check( Reference<reflection::XIndirectTypeDescription>(
- xNewTD, UNO_QUERY_THROW )->getReferencedType(),
- Reference<reflection::XIndirectTypeDescription>(
- xExistingTD, UNO_QUERY_THROW )->getReferencedType() );
- break;
-
- case TypeClass_STRUCT:
- case TypeClass_EXCEPTION:
- checkStruct( Reference<reflection::XCompoundTypeDescription>(
- xNewTD, UNO_QUERY_THROW ),
- Reference<reflection::XCompoundTypeDescription>(
- xExistingTD, UNO_QUERY_THROW ) );
- break;
-
- case TypeClass_INTERFACE:
- checkInterface( Reference<reflection::XInterfaceTypeDescription2>(
- xNewTD, UNO_QUERY_THROW ),
- Reference<reflection::XInterfaceTypeDescription2>(
- xExistingTD, UNO_QUERY_THROW ) );
- break;
-
- case TypeClass_SERVICE:
- checkService( Reference<reflection::XServiceTypeDescription2>(
- xNewTD, UNO_QUERY_THROW ),
- Reference<reflection::XServiceTypeDescription2>(
- xExistingTD, UNO_QUERY_THROW ) );
- break;
-
- case TypeClass_INTERFACE_METHOD:
- checkMethod( Reference<reflection::XInterfaceMethodTypeDescription>(
- xNewTD, UNO_QUERY_THROW ),
- Reference<reflection::XInterfaceMethodTypeDescription>(
- xExistingTD, UNO_QUERY_THROW ) );
- break;
- case TypeClass_INTERFACE_ATTRIBUTE:
- checkAttribute(
- Reference<reflection::XInterfaceAttributeTypeDescription2>(
- xNewTD, UNO_QUERY_THROW ),
- Reference<reflection::XInterfaceAttributeTypeDescription2>(
- xExistingTD, UNO_QUERY_THROW ) );
- break;
-
- case TypeClass_PROPERTY:
- checkProperty( Reference<reflection::XPropertyTypeDescription>(
- xNewTD, UNO_QUERY_THROW ),
- Reference<reflection::XPropertyTypeDescription>(
- xExistingTD, UNO_QUERY_THROW ) );
- break;
-
- case TypeClass_CONSTANT:
- if (Reference<reflection::XConstantTypeDescription>(
- xNewTD, UNO_QUERY_THROW )->getConstantValue() !=
- Reference<reflection::XConstantTypeDescription>(
- xExistingTD, UNO_QUERY_THROW )->getConstantValue())
- typeError( OUSTR("Different constant value!"), xNewTD->getName() );
- break;
- case TypeClass_CONSTANTS:
- checkSeq( Reference<reflection::XConstantsTypeDescription>(
- xNewTD, UNO_QUERY_THROW )->getConstants(),
- Reference<reflection::XConstantsTypeDescription>(
- xExistingTD, UNO_QUERY_THROW )->getConstants(),
- xNewTD->getName() );
- break;
-
- case TypeClass_SINGLETON:
- checkSingleton( Reference<reflection::XSingletonTypeDescription2>(
- xNewTD, UNO_QUERY_THROW ),
- Reference<reflection::XSingletonTypeDescription2>(
- xExistingTD, UNO_QUERY_THROW ) );
- break;
-
- default:
- break;
- }
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/tdmanager/tdmgr_common.hxx b/stoc/source/tdmanager/tdmgr_common.hxx
deleted file mode 100644
index cf859e4ae..000000000
--- a/stoc/source/tdmanager/tdmgr_common.hxx
+++ /dev/null
@@ -1,63 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 _STOC_TDMGR_COMMON_HXX
-#define _STOC_TDMGR_COMMON_HXX
-
-#include <rtl/unload.h>
-
-#include "com/sun/star/reflection/XTypeDescription.hpp"
-
-#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
-#define ARLEN(x) (sizeof (x) / sizeof *(x))
-
-
-namespace css = ::com::sun::star;
-
-namespace stoc_tdmgr
-{
- extern rtl_StandardModuleCount g_moduleCount;
-
-struct IncompatibleTypeException
-{
- ::rtl::OUString m_cause;
- IncompatibleTypeException( ::rtl::OUString const & cause )
- : m_cause( cause ) {}
-};
-
-void check(
- css::uno::Reference<css::reflection::XTypeDescription> const & xNewTD,
- css::uno::Reference<css::reflection::XTypeDescription> const & xExistingTD,
- ::rtl::OUString const & context = ::rtl::OUString() );
-/* throw (css::uno::RuntimeException, IncompatibleTypeException) */
-
-} // namespace stoc_tdmgr
-
-#endif /* _STOC_TDMGR_COMMON_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/tdmanager/tdmgr_tdenumeration.cxx b/stoc/source/tdmanager/tdmgr_tdenumeration.cxx
deleted file mode 100644
index e0ea146a1..000000000
--- a/stoc/source/tdmanager/tdmgr_tdenumeration.cxx
+++ /dev/null
@@ -1,187 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-#include <osl/diagnose.h>
-#include "tdmgr_common.hxx"
-#include "tdmgr_tdenumeration.hxx"
-
-using namespace com::sun::star;
-
-extern rtl_StandardModuleCount g_moduleCount;
-
-namespace stoc_tdmgr
-{
-
-//=========================================================================
-//=========================================================================
-//
-// TypeDescriptionEnumerationImpl Implementation.
-//
-//=========================================================================
-//=========================================================================
-
-TypeDescriptionEnumerationImpl::TypeDescriptionEnumerationImpl(
- const rtl::OUString & rModuleName,
- const com::sun::star::uno::Sequence<
- com::sun::star::uno::TypeClass > & rTypes,
- com::sun::star::reflection::TypeDescriptionSearchDepth eDepth,
- const TDEnumerationAccessStack & rTDEAS )
-: m_aModuleName( rModuleName ),
- m_aTypes( rTypes ),
- m_eDepth( eDepth ),
- m_aChildren( rTDEAS )
-{
- ::g_moduleCount.modCnt.acquire( &::g_moduleCount.modCnt );
-}
-
-//=========================================================================
-// virtual
-TypeDescriptionEnumerationImpl::~TypeDescriptionEnumerationImpl()
-{
- ::g_moduleCount.modCnt.release( &::g_moduleCount.modCnt );
-}
-
-//=========================================================================
-//
-// XEnumeration (base of XTypeDescriptionEnumeration) methods
-//
-//=========================================================================
-
-// virtual
-sal_Bool SAL_CALL TypeDescriptionEnumerationImpl::hasMoreElements()
- throw ( uno::RuntimeException )
-{
- uno::Reference< reflection::XTypeDescriptionEnumeration > xEnum
- = queryCurrentChildEnumeration();
- if ( xEnum.is() )
- return xEnum->hasMoreElements();
-
- return sal_False;
-}
-
-//=========================================================================
-// virtual
-uno::Any SAL_CALL TypeDescriptionEnumerationImpl::nextElement()
- throw ( container::NoSuchElementException,
- lang::WrappedTargetException,
- uno::RuntimeException )
-{
- uno::Reference< reflection::XTypeDescriptionEnumeration > xEnum
- = queryCurrentChildEnumeration();
- if ( xEnum.is() )
- return xEnum->nextElement();
-
- throw container::NoSuchElementException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("No further elements in enumeration!") ),
- static_cast< cppu::OWeakObject * >( this ) );
-}
-
-//=========================================================================
-//
-// XTypeDescriptionEnumeration methods
-//
-//=========================================================================
-
-// virtual
-uno::Reference< reflection::XTypeDescription > SAL_CALL
-TypeDescriptionEnumerationImpl::nextTypeDescription()
- throw ( container::NoSuchElementException,
- uno::RuntimeException )
-{
- uno::Reference< reflection::XTypeDescriptionEnumeration > xEnum
- = queryCurrentChildEnumeration();
- if ( xEnum.is() )
- return xEnum->nextTypeDescription();
-
- throw container::NoSuchElementException(
- rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("No further elements in enumeration!") ),
- static_cast< cppu::OWeakObject * >( this ) );
-}
-
-//=========================================================================
-uno::Reference< reflection::XTypeDescriptionEnumeration >
-TypeDescriptionEnumerationImpl::queryCurrentChildEnumeration()
-{
- osl::MutexGuard aGuard( m_aMutex );
-
- for (;;)
- {
- if ( m_xEnum.is() )
- {
- if ( m_xEnum->hasMoreElements() )
- {
- return m_xEnum;
- }
- else
- {
- // Forget about enumeration without further elements. Try next.
- m_xEnum.clear();
- }
- }
-
- // Note: m_xEnum is always null here.
-
- if ( m_aChildren.empty() )
- {
- // No child enumerations left.
- return m_xEnum;
- }
-
- try
- {
- m_xEnum =
- m_aChildren.top()->createTypeDescriptionEnumeration(
- m_aModuleName, m_aTypes, m_eDepth );
- }
- catch ( reflection::NoSuchTypeNameException const & )
- {
- OSL_FAIL( "TypeDescriptionEnumerationImpl::queryCurrentChildEnumeration "
- "- Caught NoSuchTypeNameException!" );
- }
- catch ( reflection::InvalidTypeNameException const & )
- {
- OSL_FAIL( "TypeDescriptionEnumerationImpl::queryCurrentChildEnumeration "
- "- Caught InvalidTypeNameException!" );
- }
-
- // We're done with this enumeration access in any case (Either
- // enumeration was successfully created or creation failed for some
- // reason).
- m_aChildren.pop();
- }
-
- // unreachable
-}
-
-} // namespace stoc_tdmgr
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/tdmanager/tdmgr_tdenumeration.hxx b/stoc/source/tdmanager/tdmgr_tdenumeration.hxx
deleted file mode 100644
index f890d39c5..000000000
--- a/stoc/source/tdmanager/tdmgr_tdenumeration.hxx
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 _STOC_TDMGR_TDENUMERATION_HXX
-#define _STOC_TDMGR_TDENUMERATION_HXX
-
-#include <stack>
-#include <osl/mutex.hxx>
-#include <com/sun/star/reflection/XTypeDescriptionEnumeration.hpp>
-#include <com/sun/star/reflection/XTypeDescriptionEnumerationAccess.hpp>
-#include <cppuhelper/implbase1.hxx>
-
-namespace stoc_tdmgr
-{
-
-typedef std::stack< com::sun::star::uno::Reference<
- com::sun::star::reflection::XTypeDescriptionEnumerationAccess > >
- TDEnumerationAccessStack;
-
-class TypeDescriptionEnumerationImpl
- : public cppu::WeakImplHelper1<
- com::sun::star::reflection::XTypeDescriptionEnumeration >
-{
-public:
- TypeDescriptionEnumerationImpl(
- const rtl::OUString & rModuleName,
- const com::sun::star::uno::Sequence<
- com::sun::star::uno::TypeClass > & rTypes,
- com::sun::star::reflection::TypeDescriptionSearchDepth eDepth,
- const TDEnumerationAccessStack & rTDEAS );
- virtual ~TypeDescriptionEnumerationImpl();
-
- // XEnumeration (base of XTypeDescriptionEnumeration)
- virtual sal_Bool SAL_CALL hasMoreElements()
- throw ( ::com::sun::star::uno::RuntimeException );
- virtual ::com::sun::star::uno::Any SAL_CALL nextElement()
- throw ( ::com::sun::star::container::NoSuchElementException,
- ::com::sun::star::lang::WrappedTargetException,
- ::com::sun::star::uno::RuntimeException );
-
- // XTypeDescriptionEnumeration
- virtual ::com::sun::star::uno::Reference<
- ::com::sun::star::reflection::XTypeDescription > SAL_CALL
- nextTypeDescription()
- throw ( ::com::sun::star::container::NoSuchElementException,
- ::com::sun::star::uno::RuntimeException );
-
-private:
- com::sun::star::uno::Reference<
- com::sun::star::reflection::XTypeDescriptionEnumeration >
- queryCurrentChildEnumeration();
-
- osl::Mutex m_aMutex;
- rtl::OUString m_aModuleName;
- com::sun::star::uno::Sequence< com::sun::star::uno::TypeClass > m_aTypes;
- com::sun::star::reflection::TypeDescriptionSearchDepth m_eDepth;
- TDEnumerationAccessStack m_aChildren;
- com::sun::star::uno::Reference<
- com::sun::star::reflection::XTypeDescriptionEnumeration > m_xEnum;
-};
-
-} // namespace stoc_tdmgr
-
-#endif /* _STOC_TDMGR_TDENUMERATION_HXX */
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/typeconv/convert.cxx b/stoc/source/typeconv/convert.cxx
deleted file mode 100644
index 92ef7f1e6..000000000
--- a/stoc/source/typeconv/convert.cxx
+++ /dev/null
@@ -1,947 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include <osl/diagnose.h>
-#include <cppuhelper/factory.hxx>
-#include <cppuhelper/implementationentry.hxx>
-#include <cppuhelper/implbase2.hxx>
-
-#include <typelib/typedescription.hxx>
-#include <uno/data.h>
-
-#ifdef WNT
-#include <cmath>
-#else
-#include <math.h>
-#endif
-#include <float.h>
-
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/script/XTypeConverter.hpp>
-#include <com/sun/star/script/FailReason.hpp>
-#include <com/sun/star/container/XSet.hpp>
-#include <com/sun/star/registry/XRegistryKey.hpp>
-
-using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::script;
-using namespace com::sun::star::registry;
-using namespace cppu;
-using namespace osl;
-using ::rtl::OUString;
-#define SERVICENAME "com.sun.star.script.Converter"
-#define IMPLNAME "com.sun.star.comp.stoc.TypeConverter"
-
-
-extern rtl_StandardModuleCount g_moduleCount;
-
-namespace stoc_services
-{
-Sequence< OUString > tcv_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] = OUString(RTL_CONSTASCII_USTRINGPARAM(SERVICENAME));
- return seqNames;
-}
-
-OUString tcv_getImplementationName()
-{
- return OUString(RTL_CONSTASCII_USTRINGPARAM(IMPLNAME));
-}
-}
-
-namespace stoc_tcv
-{
-
-static const sal_uInt64 SAL_UINT64_MAX =
- ((((sal_uInt64)0xffffffff) << 32) | (sal_uInt64)0xffffffff);
-static const sal_Int64 SAL_INT64_MAX =
- (sal_Int64)((((sal_uInt64)0x7fffffff) << 32) | (sal_uInt64)0xffffffff);
-static const sal_Int64 SAL_INT64_MIN =
- (sal_Int64)(((sal_uInt64)0x80000000) << 32);
-
-/* MS Visual C++ no conversion from unsigned __int64 to double */
-#ifdef _MSC_VER
-static const double DOUBLE_SAL_UINT64_MAX = ((((double)SAL_INT64_MAX) * 2) + 1);
-
-static inline double unsigned_int64_to_double( sal_uInt64 n ) SAL_THROW( () )
-{
- sal_uInt64 n2 = (n / 3);
- n -= (2 * n2);
- return (((double)(sal_Int64)n2) * 2.0) + ((double)(sal_Int64)n);
-}
-#else
-static const double DOUBLE_SAL_UINT64_MAX =
- (double)((((sal_uInt64)0xffffffff) << 32) | (sal_uInt64)0xffffffff);
-
-static inline double unsigned_int64_to_double( sal_uInt64 n ) SAL_THROW( () )
-{
- return (double)n;
-}
-#endif
-
-
-//--------------------------------------------------------------------------------------------------
-static inline double round( double aVal )
-{
- sal_Bool bPos = (aVal >= 0.0); //
- aVal = ::fabs( aVal );
- double aUpper = ::ceil( aVal );
-
- aVal = ((aUpper-aVal) <= 0.5) ? aUpper : (aUpper - 1.0);
- return (bPos ? aVal : -aVal);
-}
-
-//--------------------------------------------------------------------------------------------------
-static sal_Bool getNumericValue( double & rfVal, const OUString & rStr )
-{
- double fRet = rStr.toDouble();
- if (fRet == 0.0)
- {
- sal_Int32 nLen = rStr.getLength();
- if (!nLen || (nLen == 1 && rStr[0] == '0')) // common case
- {
- rfVal = 0.0;
- return sal_True;
- }
-
- OUString trim( rStr.trim() );
-
- // try hex
- sal_Int32 nX = trim.indexOf( 'x' );
- if (nX < 0)
- nX = trim.indexOf( 'X' );
-
- if (nX > 0 && trim[nX-1] == '0') // 0x
- {
- sal_Bool bNeg = sal_False;
- switch (nX)
- {
- case 2: // (+|-)0x...
- if (trim[0] == '-')
- bNeg = sal_True;
- else if (trim[0] != '+')
- return sal_False;
- case 1: // 0x...
- break;
- default:
- return sal_False;
- }
-
- OUString aHexRest( trim.copy( nX+1 ) );
- sal_Int64 nRet = aHexRest.toInt64( 16 );
-
- if (nRet == 0)
- {
- for ( sal_Int32 nPos = aHexRest.getLength(); nPos--; )
- {
- if (aHexRest[nPos] != '0')
- return sal_False;
- }
- }
-
- rfVal = (bNeg ? -(double)nRet : (double)nRet);
- return sal_True;
- }
-
- nLen = trim.getLength();
- sal_Int32 nPos = 0;
-
- // skip +/-
- if (nLen && (trim[0] == '-' || trim[0] == '+'))
- ++nPos;
-
- while (nPos < nLen) // skip leading zeros
- {
- if (trim[nPos] != '0')
- {
- if (trim[nPos] != '.')
- return sal_False;
- ++nPos;
- while (nPos < nLen) // skip trailing zeros
- {
- if (trim[nPos] != '0')
- return sal_False;
- ++nPos;
- }
- break;
- }
- ++nPos;
- }
- }
- rfVal = fRet;
- return sal_True;
-}
-
-//==================================================================================================
-static sal_Bool getHyperValue( sal_Int64 & rnVal, const OUString & rStr )
-{
- sal_Int32 nLen = rStr.getLength();
- if (!nLen || (nLen == 1 && rStr[0] == '0')) // common case
- {
- rnVal = 0;
- return sal_True;
- }
-
- OUString trim( rStr.trim() );
-
- // try hex
- sal_Int32 nX = trim.indexOf( 'x' );
- if (nX < 0)
- nX = trim.indexOf( 'X' );
-
- if (nX >= 0)
- {
- if (nX > 0 && trim[nX-1] == '0') // 0x
- {
- sal_Bool bNeg = sal_False;
- switch (nX)
- {
- case 2: // (+|-)0x...
- if (trim[0] == '-')
- bNeg = sal_True;
- else if (trim[0] != '+')
- return sal_False;
- case 1: // 0x...
- break;
- default:
- return sal_False;
- }
-
- OUString aHexRest( trim.copy( nX+1 ) );
- sal_Int64 nRet = aHexRest.toInt64( 16 );
-
- if (nRet == 0)
- {
- for ( sal_Int32 nPos = aHexRest.getLength(); nPos--; )
- {
- if (aHexRest[nPos] != '0')
- return sal_False;
- }
- }
-
- rnVal = (bNeg ? -nRet : nRet);
- return sal_True;
- }
- return sal_False;
- }
-
- double fVal;
- if (getNumericValue( fVal, rStr ) &&
- fVal >= (double)SAL_INT64_MIN &&
- fVal <= DOUBLE_SAL_UINT64_MAX)
- {
- rnVal = (sal_Int64)round( fVal );
- return sal_True;
- }
- return sal_False;
-}
-
-//==================================================================================================
-class TypeConverter_Impl : public WeakImplHelper2< XTypeConverter, XServiceInfo >
-{
- // ...misc helpers...
- sal_Int64 toHyper(
- const Any& rAny, sal_Int64 min = SAL_INT64_MIN, sal_uInt64 max = SAL_UINT64_MAX )
- throw( CannotConvertException );
- double toDouble( const Any& rAny, double min = -DBL_MAX, double max = DBL_MAX ) const
- throw( CannotConvertException );
-
-public:
- TypeConverter_Impl();
- virtual ~TypeConverter_Impl();
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName() throw( RuntimeException );
- virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName)
- throw( RuntimeException );
- virtual Sequence< OUString > SAL_CALL getSupportedServiceNames(void)
- throw( RuntimeException );
-
- // XTypeConverter
- virtual Any SAL_CALL convertTo( const Any& aFrom, const Type& DestinationType )
- throw( IllegalArgumentException, CannotConvertException, RuntimeException);
- virtual Any SAL_CALL convertToSimpleType( const Any& aFrom, TypeClass aDestinationType )
- throw( IllegalArgumentException, CannotConvertException, RuntimeException);
-};
-
-TypeConverter_Impl::TypeConverter_Impl()
-{
- g_moduleCount.modCnt.acquire( &g_moduleCount.modCnt );
-}
-
-TypeConverter_Impl::~TypeConverter_Impl()
-{
- g_moduleCount.modCnt.release( &g_moduleCount.modCnt );
-}
-
-// XServiceInfo
-OUString TypeConverter_Impl::getImplementationName() throw( RuntimeException )
-{
- return stoc_services::tcv_getImplementationName();
-}
-
-// XServiceInfo
-sal_Bool TypeConverter_Impl::supportsService(const OUString& ServiceName) throw( RuntimeException )
-{
- Sequence< OUString > aSNL = getSupportedServiceNames();
- const OUString * pArray = aSNL.getConstArray();
- for( sal_Int32 i = 0; i < aSNL.getLength(); i++ )
- if( pArray[i] == ServiceName )
- return sal_True;
- return sal_False;
-}
-
-// XServiceInfo
-Sequence< OUString > TypeConverter_Impl::getSupportedServiceNames(void) throw( RuntimeException )
-{
- return stoc_services::tcv_getSupportedServiceNames();
-}
-
-//--------------------------------------------------------------------------------------------------
-sal_Int64 TypeConverter_Impl::toHyper( const Any& rAny, sal_Int64 min, sal_uInt64 max )
- throw( CannotConvertException )
-{
- sal_Int64 nRet;
- TypeClass aDestinationClass = rAny.getValueTypeClass();
-
- switch (aDestinationClass)
- {
- // ENUM
- case TypeClass_ENUM:
- nRet = *(sal_Int32 *)rAny.getValue();
- break;
- // BOOL
- case TypeClass_BOOLEAN:
- nRet = (*(sal_Bool*)rAny.getValue() ? 1 : 0);
- break;
- // CHAR, BYTE
- case TypeClass_CHAR:
- nRet = *(sal_Unicode *)rAny.getValue();
- break;
- case TypeClass_BYTE:
- nRet = *(sal_Int8 *)rAny.getValue();
- break;
- // SHORT
- case TypeClass_SHORT:
- nRet = *(sal_Int16 *)rAny.getValue();
- break;
- // UNSIGNED SHORT
- case TypeClass_UNSIGNED_SHORT:
- nRet = *(sal_uInt16 *)rAny.getValue();
- break;
- // LONG
- case TypeClass_LONG:
- nRet = *(sal_Int32 *)rAny.getValue();
- break;
- // UNSIGNED LONG
- case TypeClass_UNSIGNED_LONG:
- nRet = *(sal_uInt32 *)rAny.getValue();
- break;
- // HYPER
- case TypeClass_HYPER:
- nRet = *(sal_Int64 *)rAny.getValue();
- break;
- // UNSIGNED HYPER
- case TypeClass_UNSIGNED_HYPER:
- {
- nRet = *(sal_Int64 *)rAny.getValue();
- if ((min < 0 || (sal_uInt64)nRet >= (sal_uInt64)min) && // lower bound
- (sal_uInt64)nRet <= max) // upper bound
- {
- return nRet;
- }
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("UNSIGNED HYPER out of range!") ),
- Reference<XInterface>(), aDestinationClass, FailReason::OUT_OF_RANGE, 0 );
- }
-
- // FLOAT, DOUBLE
- case TypeClass_FLOAT:
- {
- double fVal = round( *(float *)rAny.getValue() );
- nRet = (fVal > SAL_INT64_MAX ? (sal_Int64)(sal_uInt64)fVal : (sal_Int64)fVal);
- if (fVal >= min && fVal <= unsigned_int64_to_double( max ))
- {
- return nRet;
- }
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("FLOAT out of range!") ),
- Reference<XInterface>(), aDestinationClass, FailReason::OUT_OF_RANGE, 0 );
- }
- case TypeClass_DOUBLE:
- {
- double fVal = round( *(double *)rAny.getValue() );
- nRet = (fVal > SAL_INT64_MAX ? (sal_Int64)(sal_uInt64)fVal : (sal_Int64)fVal);
- if (fVal >= min && fVal <= unsigned_int64_to_double( max ))
- {
- return nRet;
- }
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("DOUBLE out of range!") ),
- Reference<XInterface>(), aDestinationClass, FailReason::OUT_OF_RANGE, 0 );
- }
-
- // STRING
- case TypeClass_STRING:
- {
- sal_Int64 fVal = SAL_CONST_INT64(0);
- if (! getHyperValue( fVal, *(OUString const *)rAny.getValue() ))
- {
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("invalid STRING value!") ),
- Reference<XInterface>(), aDestinationClass, FailReason::IS_NOT_NUMBER, 0 );
- }
- nRet = (fVal > SAL_INT64_MAX ? (sal_Int64)(sal_uInt64)fVal : (sal_Int64)fVal);
- if (fVal >= min && (fVal < 0 || ((sal_uInt64)fVal) <= max))
- return nRet;
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("STRING value out of range!") ),
- Reference<XInterface>(), aDestinationClass, FailReason::OUT_OF_RANGE, 0 );
- }
-
- default:
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("TYPE is not supported!") ),
- Reference<XInterface>(), aDestinationClass, FailReason::TYPE_NOT_SUPPORTED, 0 );
- }
-
- if (nRet >= min && (nRet < 0 || (sal_uInt64)nRet <= max))
- return nRet;
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("VALUE is out of range!") ),
- Reference<XInterface>(), aDestinationClass, FailReason::OUT_OF_RANGE, 0 );
-}
-
-//--------------------------------------------------------------------------------------------------
-double TypeConverter_Impl::toDouble( const Any& rAny, double min, double max ) const
- throw( CannotConvertException )
-{
- double fRet;
- TypeClass aDestinationClass = rAny.getValueTypeClass();
-
- switch (aDestinationClass)
- {
- // ENUM
- case TypeClass_ENUM:
- fRet = *(sal_Int32 *)rAny.getValue();
- break;
- // BOOL
- case TypeClass_BOOLEAN:
- fRet = (*(sal_Bool*)rAny.getValue() ? 1.0 : 0.0);
- break;
- // CHAR, BYTE
- case TypeClass_CHAR:
- fRet = *(sal_Unicode *)rAny.getValue();
- break;
- case TypeClass_BYTE:
- fRet = *(sal_Int8 *)rAny.getValue();
- break;
- // SHORT
- case TypeClass_SHORT:
- fRet = *(sal_Int16 *)rAny.getValue();
- break;
- // UNSIGNED SHORT
- case TypeClass_UNSIGNED_SHORT:
- fRet = *(sal_uInt16 *)rAny.getValue();
- break;
- // LONG
- case TypeClass_LONG:
- fRet = *(sal_Int32 *)rAny.getValue();
- break;
- // UNSIGNED LONG
- case TypeClass_UNSIGNED_LONG:
- fRet = *(sal_uInt32 *)rAny.getValue();
- break;
- // HYPER
- case TypeClass_HYPER:
- fRet = (double)*(sal_Int64 *)rAny.getValue();
- break;
- // UNSIGNED HYPER
- case TypeClass_UNSIGNED_HYPER:
- fRet = unsigned_int64_to_double( *(sal_uInt64 const *)rAny.getValue() );
- break;
- // FLOAT, DOUBLE
- case TypeClass_FLOAT:
- fRet = *(float *)rAny.getValue();
- break;
- case TypeClass_DOUBLE:
- fRet = *(double *)rAny.getValue();
- break;
-
- // STRING
- case TypeClass_STRING:
- {
- if (! getNumericValue( fRet, *(OUString *)rAny.getValue() ))
- {
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("invalid STRING value!") ),
- Reference<XInterface>(), aDestinationClass, FailReason::IS_NOT_NUMBER, 0 );
- }
- break;
- }
-
- default:
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("TYPE is not supported!") ),
- Reference< XInterface >(), aDestinationClass, FailReason::TYPE_NOT_SUPPORTED, 0 );
- }
-
- if (fRet >= min && fRet <= max)
- return fRet;
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("VALUE is out of range!") ),
- Reference< XInterface >(), aDestinationClass, FailReason::OUT_OF_RANGE, 0 );
-}
-
-//--------------------------------------------------------------------------------------------------
-Any SAL_CALL TypeConverter_Impl::convertTo( const Any& rVal, const Type& aDestType )
- throw( IllegalArgumentException, CannotConvertException, RuntimeException)
-{
- Type aSourceType = rVal.getValueType();
- if (aSourceType == aDestType)
- return rVal;
-
- TypeClass aSourceClass = aSourceType.getTypeClass();
- TypeClass aDestinationClass = aDestType.getTypeClass();
-
- Any aRet;
-
- // convert to...
- switch (aDestinationClass)
- {
- // --- to VOID ------------------------------------------------------------------------------
- case TypeClass_VOID:
- return Any();
- // --- to ANY -------------------------------------------------------------------------------
- case TypeClass_ANY:
- return rVal;
-
- // --- to STRUCT, UNION, EXCEPTION ----------------------------------------------------------
- case TypeClass_STRUCT:
-// case TypeClass_UNION: // xxx todo
- case TypeClass_EXCEPTION:
- {
- // same types or destination type is derived source type?
- TypeDescription aSourceTD( aSourceType );
- TypeDescription aDestTD( aDestType );
- if (typelib_typedescription_isAssignableFrom( aDestTD.get(), aSourceTD.get() ))
- {
- aRet.setValue( rVal.getValue(), aDestTD.get() ); // evtl. .uP.cAsT.
- }
- else
- {
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("value is not of same or derived type!") ),
- Reference< XInterface >(), aDestinationClass,
- FailReason::SOURCE_IS_NO_DERIVED_TYPE, 0 );
- }
- break;
- }
- // --- to INTERFACE -------------------------------------------------------------------------
- case TypeClass_INTERFACE:
- {
- if (! rVal.hasValue())
- {
- // void -> interface (null)
- void * null_ref = 0;
- aRet.setValue( &null_ref, aDestType );
- break;
- }
-
- if (rVal.getValueTypeClass() != TypeClass_INTERFACE ||
- !*(XInterface * const *)rVal.getValue())
- {
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("value is no interface!") ),
- Reference< XInterface >(), aDestinationClass, FailReason::NO_SUCH_INTERFACE, 0 );
- }
- if (! (aRet = (*(XInterface * const *)rVal.getValue())->queryInterface(
- aDestType )).hasValue())
- {
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("value has no such interface!") ),
- Reference< XInterface >(), aDestinationClass, FailReason::NO_SUCH_INTERFACE, 0 );
- }
- break;
- }
- // --- to SEQUENCE --------------------------------------------------------------------------
- case TypeClass_SEQUENCE:
- {
- if (aSourceClass==TypeClass_SEQUENCE)
- {
- if( aSourceType == aDestType )
- return rVal;
-
- TypeDescription aSourceTD( aSourceType );
- TypeDescription aDestTD( aDestType );
- typelib_TypeDescription * pSourceElementTD = 0;
- TYPELIB_DANGER_GET(
- &pSourceElementTD,
- ((typelib_IndirectTypeDescription *)aSourceTD.get())->pType );
- typelib_TypeDescription * pDestElementTD = 0;
- TYPELIB_DANGER_GET(
- &pDestElementTD,
- ((typelib_IndirectTypeDescription *)aDestTD.get())->pType );
-
- sal_uInt32 nPos = (*(const uno_Sequence * const *)rVal.getValue())->nElements;
- uno_Sequence * pRet = 0;
- uno_sequence_construct(
- &pRet, aDestTD.get(), 0, nPos,
- reinterpret_cast< uno_AcquireFunc >(cpp_acquire) );
- aRet.setValue( &pRet, aDestTD.get() );
- uno_destructData(
- &pRet, aDestTD.get(),
- reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
- // decr ref count
-
- char * pDestElements = (*(uno_Sequence * const *)aRet.getValue())->elements;
- const char * pSourceElements =
- (*(const uno_Sequence * const *)rVal.getValue())->elements;
-
- while (nPos--)
- {
- char * pDestPos = pDestElements + (nPos * pDestElementTD->nSize);
- const char * pSourcePos = pSourceElements + (nPos * pSourceElementTD->nSize);
-
- Any aElement(
- convertTo( Any( pSourcePos, pSourceElementTD ), pDestElementTD->pWeakRef ) );
-
- if (!uno_assignData(
- pDestPos, pDestElementTD,
- (pDestElementTD->eTypeClass == typelib_TypeClass_ANY
- ? &aElement
- : const_cast< void * >( aElement.getValue() )),
- pDestElementTD,
- reinterpret_cast< uno_QueryInterfaceFunc >(
- cpp_queryInterface),
- reinterpret_cast< uno_AcquireFunc >(cpp_acquire),
- reinterpret_cast< uno_ReleaseFunc >(cpp_release) ))
- {
- OSL_ASSERT( false );
- }
- }
- TYPELIB_DANGER_RELEASE( pDestElementTD );
- TYPELIB_DANGER_RELEASE( pSourceElementTD );
- }
- break;
- }
- // --- to ENUM ------------------------------------------------------------------------------
- case TypeClass_ENUM:
- {
- TypeDescription aEnumTD( aDestType );
- aEnumTD.makeComplete();
- sal_Int32 nPos = -1;
-
- if (aSourceClass==TypeClass_STRING)
- {
- for ( nPos = ((typelib_EnumTypeDescription *)aEnumTD.get())->nEnumValues; nPos--; )
- {
- if (((const OUString *)rVal.getValue())->equalsIgnoreAsciiCase(
- ((typelib_EnumTypeDescription *)aEnumTD.get())->ppEnumNames[nPos] ))
- break;
- }
- }
- else if (aSourceClass!=TypeClass_ENUM && // exclude some unwanted types for toHyper()
- aSourceClass!=TypeClass_BOOLEAN &&
- aSourceClass!=TypeClass_CHAR)
- {
- sal_Int32 nEnumValue = (sal_Int32)toHyper( rVal, -(sal_Int64)0x80000000, 0x7fffffff );
- for ( nPos = ((typelib_EnumTypeDescription *)aEnumTD.get())->nEnumValues; nPos--; )
- {
- if (nEnumValue == ((typelib_EnumTypeDescription *)aEnumTD.get())->pEnumValues[nPos])
- break;
- }
- }
-
- if (nPos >= 0)
- {
- aRet.setValue(
- &((typelib_EnumTypeDescription *)aEnumTD.get())->pEnumValues[nPos],
- aEnumTD.get() );
- }
- else
- {
- throw CannotConvertException(
- OUString(
- RTL_CONSTASCII_USTRINGPARAM("value cannot be converted to demanded ENUM!") ),
- Reference< XInterface >(), aDestinationClass, FailReason::IS_NOT_ENUM, 0 );
- }
- break;
- }
-
- default:
- // else simple type conversion possible?
- try
- {
- aRet = convertToSimpleType( rVal, aDestinationClass );
- }
- catch (IllegalArgumentException &)
- {
- // ...FailReason::INVALID is thrown
- }
- }
-
- if (aRet.hasValue())
- return aRet;
-
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("conversion not possible!") ),
- Reference< XInterface >(), aDestinationClass, FailReason::INVALID, 0 );
-}
-
-//--------------------------------------------------------------------------------------------------
-Any TypeConverter_Impl::convertToSimpleType( const Any& rVal, TypeClass aDestinationClass )
- throw( IllegalArgumentException, CannotConvertException, RuntimeException )
-{
- switch (aDestinationClass)
- {
- // only simple Conversion of _simple_ types
- case TypeClass_INTERFACE:
- case TypeClass_SERVICE:
- case TypeClass_STRUCT:
- case TypeClass_TYPEDEF:
- case TypeClass_UNION:
- case TypeClass_EXCEPTION:
- case TypeClass_ARRAY:
- case TypeClass_SEQUENCE:
- case TypeClass_ENUM:
- case TypeClass_UNKNOWN:
- case TypeClass_MODULE:
- throw IllegalArgumentException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("destination type is not simple!") ),
- Reference< XInterface >(), (sal_Int16) 1 );
- default:
- break;
- }
-
- Type aSourceType = rVal.getValueType();
- TypeClass aSourceClass = aSourceType.getTypeClass();
- if (aDestinationClass == aSourceClass)
- return rVal;
-
- Any aRet;
-
- // Convert to...
- switch (aDestinationClass)
- {
- // --- to VOID ------------------------------------------------------------------------------
- case TypeClass_VOID:
- return Any();
-
- // --- to ANY -------------------------------------------------------------------------------
- case TypeClass_ANY:
- return rVal;
-
- // --- to BOOL ------------------------------------------------------------------------------
- case TypeClass_BOOLEAN:
- switch (aSourceClass)
- {
- default:
- {
- sal_Bool bTmp = (toDouble( rVal ) != 0.0);
- aRet.setValue( &bTmp, getBooleanCppuType() );
- }
- case TypeClass_ENUM: // exclude enums
- break;
-
- case TypeClass_STRING:
- {
- const OUString & aStr = *(const OUString *)rVal.getValue();
- if (aStr.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("0") ) ||
- aStr.equalsIgnoreAsciiCase( OUString( RTL_CONSTASCII_USTRINGPARAM("false") ) ))
- {
- sal_Bool bFalse = sal_False;
- aRet.setValue( &bFalse, getCppuBooleanType() );
- }
- else if (aStr.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("1") ) ||
- aStr.equalsIgnoreAsciiCase( OUString( RTL_CONSTASCII_USTRINGPARAM("true") ) ))
- {
- sal_Bool bTrue = sal_True;
- aRet.setValue( &bTrue, getCppuBooleanType() );
- }
- else
- {
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("STRING has no boolean value!") ),
- Reference< XInterface >(), aDestinationClass, FailReason::IS_NOT_BOOL, 0 );
- }
- }
- }
- break;
-
- // --- to CHAR, BYTE ------------------------------------------------------------------------
- case TypeClass_CHAR:
- {
- if (aSourceClass==TypeClass_STRING)
- {
- if ((*(const OUString *)rVal.getValue()).getLength() == 1) // single char
- aRet.setValue( (*(const OUString *)rVal.getValue()).getStr(), ::getCharCppuType() );
- }
- else if (aSourceClass!=TypeClass_ENUM && // exclude enums, chars
- aSourceClass!=TypeClass_CHAR)
- {
- sal_Unicode cRet = (sal_Unicode)toHyper( rVal, 0, 0xffff ); // range
- aRet.setValue( &cRet, ::getCharCppuType() );
- }
- break;
- }
- case TypeClass_BYTE:
- aRet <<= (sal_Int8)( toHyper( rVal, -(sal_Int64)0x80, 0x7f ) );
- break;
-
- // --- to SHORT, UNSIGNED SHORT -------------------------------------------------------------
- case TypeClass_SHORT:
- aRet <<= (sal_Int16)( toHyper( rVal, -(sal_Int64)0x8000, 0x7fff ) );
- break;
- case TypeClass_UNSIGNED_SHORT:
- aRet <<= (sal_uInt16)( toHyper( rVal, 0, 0xffff ) );
- break;
-
- // --- to LONG, UNSIGNED LONG ---------------------------------------------------------------
- case TypeClass_LONG:
- aRet <<= (sal_Int32)( toHyper( rVal, -(sal_Int64)0x80000000, 0x7fffffff ) );
- break;
- case TypeClass_UNSIGNED_LONG:
- aRet <<= (sal_uInt32)( toHyper( rVal, 0, 0xffffffff ) );
- break;
-
- // --- to HYPER, UNSIGNED HYPER--------------------------------------------
- case TypeClass_HYPER:
- aRet <<= toHyper( rVal, SAL_INT64_MIN, SAL_INT64_MAX );
- break;
- case TypeClass_UNSIGNED_HYPER:
- aRet <<= (sal_uInt64)( toHyper( rVal, 0, SAL_UINT64_MAX ) );
- break;
-
- // --- to FLOAT, DOUBLE ---------------------------------------------------------------------
- case TypeClass_FLOAT:
- aRet <<= (float)( toDouble( rVal, -FLT_MAX, FLT_MAX ) );
- break;
- case TypeClass_DOUBLE:
- aRet <<= (double)( toDouble( rVal, -DBL_MAX, DBL_MAX ) );
- break;
-
- // --- to STRING ----------------------------------------------------------------------------
- case TypeClass_STRING:
- switch (aSourceClass)
- {
- case TypeClass_ENUM:
- {
- TypeDescription aEnumTD( aSourceType );
- aEnumTD.makeComplete();
- sal_Int32 nPos;
- sal_Int32 nEnumValue = *(sal_Int32 *)rVal.getValue();
- for ( nPos = ((typelib_EnumTypeDescription *)aEnumTD.get())->nEnumValues; nPos--; )
- {
- if (nEnumValue == ((typelib_EnumTypeDescription *)aEnumTD.get())->pEnumValues[nPos])
- break;
- }
- if (nPos >= 0)
- {
- aRet.setValue(
- &((typelib_EnumTypeDescription *)aEnumTD.get())->ppEnumNames[nPos],
- ::getCppuType( (const OUString *)0 ) );
- }
- else
- {
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("value is not ENUM!") ),
- Reference< XInterface >(), aDestinationClass, FailReason::IS_NOT_ENUM, 0 );
- }
- break;
- }
-
- case TypeClass_BOOLEAN:
- aRet <<= (*(sal_Bool *)rVal.getValue()) ?
- OUString(RTL_CONSTASCII_USTRINGPARAM("true")) :
- OUString(RTL_CONSTASCII_USTRINGPARAM("false"));
- break;
- case TypeClass_CHAR:
- aRet <<= OUString( (sal_Unicode *)rVal.getValue(), 1 );
- break;
-
- case TypeClass_BYTE:
- aRet <<= OUString::valueOf( (sal_Int32)*(sal_Int8 const *)rVal.getValue() );
- break;
- case TypeClass_SHORT:
- aRet <<= OUString::valueOf( (sal_Int32)*(sal_Int16 const *)rVal.getValue() );
- break;
- case TypeClass_UNSIGNED_SHORT:
- aRet <<= OUString::valueOf( (sal_Int32)*(sal_uInt16 const *)rVal.getValue() );
- break;
- case TypeClass_LONG:
- aRet <<= OUString::valueOf( *(sal_Int32 const *)rVal.getValue() );
- break;
- case TypeClass_UNSIGNED_LONG:
- aRet <<= OUString::valueOf( (sal_Int64)*(sal_uInt32 const *)rVal.getValue() );
- break;
- case TypeClass_HYPER:
- aRet <<= OUString::valueOf( *(sal_Int64 const *)rVal.getValue() );
- break;
-// case TypeClass_UNSIGNED_HYPER:
-// aRet <<= OUString::valueOf( (sal_Int64)*(sal_uInt64 const *)rVal.getValue() );
-// break;
- // handle unsigned hyper like double
-
- default:
- aRet <<= OUString::valueOf( toDouble( rVal ) );
- }
- break;
-
- default:
- OSL_ASSERT(false);
- break;
- }
-
- if (aRet.hasValue())
- return aRet;
-
- throw CannotConvertException(
- OUString( RTL_CONSTASCII_USTRINGPARAM("conversion not possible!") ),
- Reference< XInterface >(), aDestinationClass, FailReason::INVALID, 0 );
-}
-}
-
-namespace stoc_services
-{
-//*************************************************************************
-Reference< XInterface > SAL_CALL TypeConverter_Impl_CreateInstance(
- const Reference< XComponentContext > & )
- throw( RuntimeException )
-{
- static Reference< XInterface > s_ref( (OWeakObject *) new stoc_tcv::TypeConverter_Impl() );
- return s_ref;
-}
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/typeconv/makefile.mk b/stoc/source/typeconv/makefile.mk
deleted file mode 100644
index e84f51889..000000000
--- a/stoc/source/typeconv/makefile.mk
+++ /dev/null
@@ -1,48 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-PRJ=..$/..
-
-PRJNAME=stoc
-TARGET = typeconverter
-ENABLE_EXCEPTIONS=TRUE
-
-# --- Settings -----------------------------------------------------
-
-.INCLUDE : settings.mk
-DLLPRE =
-
-# ------------------------------------------------------------------
-
-.INCLUDE : ..$/cppumaker.mk
-
-SLOFILES= \
- $(SLO)$/convert.obj
-
-# --- Targets ------------------------------------------------------
-
-.INCLUDE : target.mk
-
diff --git a/stoc/source/uriproc/ExternalUriReferenceTranslator.cxx b/stoc/source/uriproc/ExternalUriReferenceTranslator.cxx
deleted file mode 100644
index 08722a9f5..000000000
--- a/stoc/source/uriproc/ExternalUriReferenceTranslator.cxx
+++ /dev/null
@@ -1,243 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "stocservices.hxx"
-
-#include "supportsService.hxx"
-
-#include "com/sun/star/lang/XServiceInfo.hpp"
-#include "com/sun/star/uno/Exception.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/RuntimeException.hpp"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "com/sun/star/uno/XComponentContext.hpp"
-#include "com/sun/star/uno/XInterface.hpp"
-#include "com/sun/star/uri/XExternalUriReferenceTranslator.hpp"
-#include "cppuhelper/implbase2.hxx"
-#include "cppuhelper/weak.hxx"
-#include "osl/thread.h"
-#include "rtl/string.h"
-#include "rtl/textenc.h"
-#include "rtl/uri.h"
-#include "rtl/uri.hxx"
-#include "rtl/ustrbuf.hxx"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-
-#include <new>
-
-namespace css = com::sun::star;
-
-namespace {
-
-class Translator: public cppu::WeakImplHelper2<
- css::lang::XServiceInfo, css::uri::XExternalUriReferenceTranslator >
-{
-public:
- explicit Translator(
- css::uno::Reference< css::uno::XComponentContext > const & context):
- m_context(context) {}
-
- virtual rtl::OUString SAL_CALL getImplementationName()
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & serviceName)
- throw (css::uno::RuntimeException);
-
- virtual css::uno::Sequence< rtl::OUString > SAL_CALL
- getSupportedServiceNames() throw (css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL
- translateToInternal(rtl::OUString const & externalUriReference)
- throw (css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL
- translateToExternal(rtl::OUString const & internalUriReference)
- throw (css::uno::RuntimeException);
-
-private:
- Translator(Translator &); // not implemented
- void operator =(Translator); // not implemented
-
- virtual ~Translator() {}
-
- css::uno::Reference< css::uno::XComponentContext > m_context;
-};
-
-rtl::OUString Translator::getImplementationName()
- throw (css::uno::RuntimeException)
-{
- return
- stoc_services::ExternalUriReferenceTranslator::getImplementationName();
-}
-
-sal_Bool Translator::supportsService(rtl::OUString const & serviceName)
- throw (css::uno::RuntimeException)
-{
- return stoc::uriproc::supportsService(
- getSupportedServiceNames(), serviceName);
-}
-
-css::uno::Sequence< rtl::OUString > Translator::getSupportedServiceNames()
- throw (css::uno::RuntimeException)
-{
- return stoc_services::ExternalUriReferenceTranslator::
- getSupportedServiceNames();
-}
-
-rtl::OUString Translator::translateToInternal(
- rtl::OUString const & externalUriReference)
- throw (css::uno::RuntimeException)
-{
- if (!externalUriReference.matchIgnoreAsciiCaseAsciiL(
- RTL_CONSTASCII_STRINGPARAM("file:/")))
- {
- return externalUriReference;
- }
- sal_Int32 i = RTL_CONSTASCII_LENGTH("file:");
- rtl::OUStringBuffer buf;
- buf.append(externalUriReference.getStr(), i);
- // Some environments (e.g., Java) produce illegal file URLs without an
- // authority part; treat them as having an empty authority part:
- if (!externalUriReference.matchAsciiL(RTL_CONSTASCII_STRINGPARAM("//"), i))
- {
- buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("//"));
- }
- rtl_TextEncoding encoding = osl_getThreadTextEncoding();
- for (bool path = true;;) {
- sal_Int32 j = i;
- while (j != externalUriReference.getLength()
- && externalUriReference[j] != '#'
- && (!path || externalUriReference[j] != '/'))
- {
- ++j;
- }
- if (j != i) {
- rtl::OUString seg(
- rtl::Uri::encode(
- rtl::Uri::decode(
- externalUriReference.copy(i, j - i),
- rtl_UriDecodeStrict, encoding),
- rtl_UriCharClassPchar, rtl_UriEncodeStrict,
- RTL_TEXTENCODING_UTF8));
- if (seg.getLength() == 0) {
- return rtl::OUString();
- }
- buf.append(seg);
- }
- if (j == externalUriReference.getLength()) {
- break;
- }
- buf.append(externalUriReference[j]);
- path = externalUriReference[j] == '/';
- i = j + 1;
- }
- return buf.makeStringAndClear();
-}
-
-rtl::OUString Translator::translateToExternal(
- rtl::OUString const & internalUriReference)
- throw (css::uno::RuntimeException)
-{
- if (!internalUriReference.matchIgnoreAsciiCaseAsciiL(
- RTL_CONSTASCII_STRINGPARAM("file://")))
- {
- return internalUriReference;
- }
- sal_Int32 i = RTL_CONSTASCII_LENGTH("file://");
- rtl::OUStringBuffer buf;
- buf.append(internalUriReference.getStr(), i);
- rtl_TextEncoding encoding = osl_getThreadTextEncoding();
- for (bool path = true;;) {
- sal_Int32 j = i;
- while (j != internalUriReference.getLength()
- && internalUriReference[j] != '#'
- && (!path || internalUriReference[j] != '/'))
- {
- ++j;
- }
- if (j != i) {
- // Use rtl_UriDecodeToIuri -> rtl_UriEncodeStrictKeepEscapes instead
- // of rtl_UriDecodeStrict -> rtl_UriEncodeStrict, so that spurious
- // non--UTF-8 octets like "%FE" are copied verbatim:
- rtl::OUString seg(
- rtl::Uri::encode(
- rtl::Uri::decode(
- internalUriReference.copy(i, j - i),
- rtl_UriDecodeToIuri, RTL_TEXTENCODING_UTF8),
- rtl_UriCharClassPchar, rtl_UriEncodeStrictKeepEscapes,
- encoding));
- if (seg.getLength() == 0) {
- return rtl::OUString();
- }
- buf.append(seg);
- }
- if (j == internalUriReference.getLength()) {
- break;
- }
- buf.append(internalUriReference[j]);
- path = internalUriReference[j] == '/';
- i = j + 1;
- }
- return buf.makeStringAndClear();
-}
-
-}
-
-namespace stoc_services { namespace ExternalUriReferenceTranslator {
-
-css::uno::Reference< css::uno::XInterface > create(
- css::uno::Reference< css::uno::XComponentContext > const & context)
- SAL_THROW((css::uno::Exception))
-{
- try {
- return static_cast< cppu::OWeakObject * >(new Translator(context));
- } catch (std::bad_alloc &) {
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("std::bad_alloc")), 0);
- }
-}
-
-rtl::OUString getImplementationName() {
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.uri.ExternalUriReferenceTranslator"));
-}
-
-css::uno::Sequence< rtl::OUString > getSupportedServiceNames() {
- css::uno::Sequence< rtl::OUString > s(1);
- s[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uri.ExternalUriReferenceTranslator"));
- return s;
-}
-
-} }
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/uriproc/ExternalUriReferenceTranslator.hxx b/stoc/source/uriproc/ExternalUriReferenceTranslator.hxx
deleted file mode 100644
index d4e1dd8bd..000000000
--- a/stoc/source/uriproc/ExternalUriReferenceTranslator.hxx
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 INCLUDED_stoc_source_uriproc_ExternalUriReferenceTranslator_hxx
-#define INCLUDED_stoc_source_uriproc_ExternalUriReferenceTranslator_hxx
-
-#include "com/sun/star/uno/Exception.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "sal/types.h"
-
-namespace com { namespace sun { namespace star { namespace uno {
- class XComponentContext;
- class XInterface;
-} } } }
-namespace rtl { class OUString; }
-
-namespace stoc { namespace uriproc {
-
-namespace ExternalUriReferenceTranslator {
- com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL
- create(
- com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >
- const & context)
- SAL_THROW((com::sun::star::uno::Exception));
-
- rtl::OUString SAL_CALL getImplementationName();
-
- com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL
- getSupportedServiceNames();
-}
-
-} }
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/uriproc/UriReference.cxx b/stoc/source/uriproc/UriReference.cxx
deleted file mode 100644
index 58737352d..000000000
--- a/stoc/source/uriproc/UriReference.cxx
+++ /dev/null
@@ -1,209 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "UriReference.hxx"
-
-#include "osl/diagnose.h"
-#include "osl/mutex.hxx"
-#include "rtl/string.h"
-#include "rtl/ustrbuf.hxx"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-
-namespace css = com::sun::star;
-using stoc::uriproc::UriReference;
-
-UriReference::UriReference(
- rtl::OUString const & scheme, bool bIsHierarchical, bool bHasAuthority,
- rtl::OUString const & authority, rtl::OUString const & path,
- bool bHasQuery, rtl::OUString const & query):
- m_scheme(scheme),
- m_authority(authority),
- m_path(path),
- m_query(query),
- m_isHierarchical(bIsHierarchical),
- m_hasAuthority(bHasAuthority),
- m_hasQuery(bHasQuery),
- m_hasFragment(false)
-{
- OSL_ASSERT(scheme.getLength() != 0 || bIsHierarchical);
- OSL_ASSERT(!bHasAuthority || bIsHierarchical);
- OSL_ASSERT(authority.getLength() == 0 || bHasAuthority);
- OSL_ASSERT(!bHasQuery || bIsHierarchical);
- OSL_ASSERT(query.getLength() == 0 || bHasQuery);
-}
-
-UriReference::~UriReference() {}
-
-rtl::OUString UriReference::getUriReference() throw (css::uno::RuntimeException)
-{
- osl::MutexGuard g(m_mutex);
- rtl::OUStringBuffer buf;
- if (m_scheme.getLength() != 0) {
- buf.append(m_scheme);
- buf.append(static_cast< sal_Unicode >(':'));
- }
- appendSchemeSpecificPart(buf);
- if (m_hasFragment) {
- buf.append(static_cast< sal_Unicode >('#'));
- buf.append(m_fragment);
- }
- return buf.makeStringAndClear();
-}
-
-sal_Bool UriReference::isAbsolute() throw (css::uno::RuntimeException) {
- return m_scheme.getLength() != 0;
-}
-
-rtl::OUString UriReference::getScheme() throw (css::uno::RuntimeException) {
- return m_scheme;
-}
-
-rtl::OUString UriReference::getSchemeSpecificPart()
- throw (css::uno::RuntimeException)
-{
- osl::MutexGuard g(m_mutex);
- rtl::OUStringBuffer buf;
- appendSchemeSpecificPart(buf);
- return buf.makeStringAndClear();
-}
-
-sal_Bool UriReference::isHierarchical() throw (css::uno::RuntimeException) {
- osl::MutexGuard g(m_mutex);
- return m_isHierarchical;
-}
-
-sal_Bool UriReference::hasAuthority() throw (css::uno::RuntimeException) {
- osl::MutexGuard g(m_mutex);
- return m_hasAuthority;
-}
-
-rtl::OUString UriReference::getAuthority() throw (css::uno::RuntimeException) {
- osl::MutexGuard g(m_mutex);
- return m_authority;
-}
-
-rtl::OUString UriReference::getPath() throw (css::uno::RuntimeException) {
- osl::MutexGuard g(m_mutex);
- return m_path;
-}
-
-sal_Bool UriReference::hasRelativePath() throw (css::uno::RuntimeException) {
- osl::MutexGuard g(m_mutex);
- return m_isHierarchical && !m_hasAuthority
- && (m_path.getLength() == 0 || m_path[0] != '/');
-}
-
-sal_Int32 UriReference::getPathSegmentCount() throw (css::uno::RuntimeException)
-{
- osl::MutexGuard g(m_mutex);
- if (!m_isHierarchical || m_path.getLength() == 0) {
- return 0;
- } else {
- sal_Int32 n = m_path[0] == '/' ? 0 : 1;
- for (sal_Int32 i = 0;; ++i) {
- i = m_path.indexOf('/', i);
- if (i < 0) {
- break;
- }
- ++n;
- }
- return n;
- }
-}
-
-rtl::OUString UriReference::getPathSegment(sal_Int32 index)
- throw (css::uno::RuntimeException)
-{
- osl::MutexGuard g(m_mutex);
- if (m_isHierarchical && m_path.getLength() != 0 && index >= 0) {
- for (sal_Int32 i = m_path[0] == '/' ? 1 : 0;; ++i) {
- if (index-- == 0) {
- sal_Int32 j = m_path.indexOf('/', i);
- return j < 0 ? m_path.copy(i) : m_path.copy(i, j - i);
- }
- i = m_path.indexOf('/', i);
- if (i < 0) {
- break;
- }
- }
- }
- return rtl::OUString();
-}
-
-sal_Bool UriReference::hasQuery() throw (css::uno::RuntimeException) {
- osl::MutexGuard g(m_mutex);
- return m_hasQuery;
-}
-
-rtl::OUString UriReference::getQuery() throw (css::uno::RuntimeException) {
- osl::MutexGuard g(m_mutex);
- return m_query;
-}
-
-sal_Bool UriReference::hasFragment() throw (css::uno::RuntimeException) {
- osl::MutexGuard g(m_mutex);
- return m_hasFragment;
-}
-
-rtl::OUString UriReference::getFragment() throw (css::uno::RuntimeException) {
- osl::MutexGuard g(m_mutex);
- return m_fragment;
-}
-
-void UriReference::setFragment(rtl::OUString const & fragment)
- throw (css::uno::RuntimeException)
-{
- osl::MutexGuard g(m_mutex);
- m_hasFragment = true;
- m_fragment = fragment;
-}
-
-void UriReference::clearFragment() throw (css::uno::RuntimeException) {
- osl::MutexGuard g(m_mutex);
- m_hasFragment = false;
- m_fragment = rtl::OUString();
-}
-
-void UriReference::appendSchemeSpecificPart(rtl::OUStringBuffer & buffer) const
-{
- if (m_hasAuthority) {
- buffer.appendAscii(RTL_CONSTASCII_STRINGPARAM("//"));
- buffer.append(m_authority);
- }
- buffer.append(m_path);
- if (m_hasQuery) {
- buffer.append(static_cast< sal_Unicode >('?'));
- buffer.append(m_query);
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/uriproc/UriReference.hxx b/stoc/source/uriproc/UriReference.hxx
deleted file mode 100644
index 520c1763a..000000000
--- a/stoc/source/uriproc/UriReference.hxx
+++ /dev/null
@@ -1,111 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 INCLUDED_stoc_source_uriproc_UriReference_hxx
-#define INCLUDED_stoc_source_uriproc_UriReference_hxx
-
-#include "com/sun/star/uno/RuntimeException.hpp"
-#include "osl/mutex.hxx"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-
-namespace rtl { class OUStringBuffer; }
-
-namespace stoc { namespace uriproc {
-
-class UriReference {
-public:
- UriReference(
- rtl::OUString const & scheme, bool isHierarchical, bool hasAuthority,
- rtl::OUString const & authority, rtl::OUString const & path,
- bool hasQuery, rtl::OUString const & query);
-
- ~UriReference();
-
- rtl::OUString getUriReference()
- throw (com::sun::star::uno::RuntimeException);
-
- sal_Bool isAbsolute() throw (com::sun::star::uno::RuntimeException);
-
- rtl::OUString getScheme() throw (com::sun::star::uno::RuntimeException);
-
- rtl::OUString getSchemeSpecificPart()
- throw (com::sun::star::uno::RuntimeException);
-
- sal_Bool isHierarchical() throw (com::sun::star::uno::RuntimeException);
-
- sal_Bool hasAuthority() throw (com::sun::star::uno::RuntimeException);
-
- rtl::OUString getAuthority() throw (com::sun::star::uno::RuntimeException);
-
- rtl::OUString getPath() throw (com::sun::star::uno::RuntimeException);
-
- sal_Bool hasRelativePath() throw (com::sun::star::uno::RuntimeException);
-
- sal_Int32 getPathSegmentCount()
- throw (com::sun::star::uno::RuntimeException);
-
- rtl::OUString getPathSegment(sal_Int32 index)
- throw (com::sun::star::uno::RuntimeException);
-
- sal_Bool hasQuery() throw (com::sun::star::uno::RuntimeException);
-
- rtl::OUString getQuery() throw (com::sun::star::uno::RuntimeException);
-
- sal_Bool hasFragment() throw (com::sun::star::uno::RuntimeException);
-
- rtl::OUString getFragment() throw (com::sun::star::uno::RuntimeException);
-
- void setFragment(rtl::OUString const & fragment)
- throw (com::sun::star::uno::RuntimeException);
-
- void clearFragment() throw (com::sun::star::uno::RuntimeException);
-
- osl::Mutex m_mutex;
- rtl::OUString m_scheme;
- rtl::OUString m_authority;
- rtl::OUString m_path;
- rtl::OUString m_query;
- rtl::OUString m_fragment;
- bool m_isHierarchical;
- bool m_hasAuthority;
- bool m_hasQuery;
- bool m_hasFragment;
-
-private:
- UriReference(UriReference &); // not implemented
- void operator =(UriReference); // not implemented
-
- void appendSchemeSpecificPart(rtl::OUStringBuffer & buffer) const;
-};
-
-} }
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/uriproc/UriReferenceFactory.cxx b/stoc/source/uriproc/UriReferenceFactory.cxx
deleted file mode 100644
index bbcfa1757..000000000
--- a/stoc/source/uriproc/UriReferenceFactory.cxx
+++ /dev/null
@@ -1,727 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "stocservices.hxx"
-
-#include "UriReference.hxx"
-#include "supportsService.hxx"
-
-#include "com/sun/star/lang/WrappedTargetRuntimeException.hpp"
-#include "com/sun/star/lang/XMultiComponentFactory.hpp"
-#include "com/sun/star/lang/XServiceInfo.hpp"
-#include "com/sun/star/uno/Any.hxx"
-#include "com/sun/star/uno/Exception.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/RuntimeException.hpp"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "com/sun/star/uno/XComponentContext.hpp"
-#include "com/sun/star/uno/XInterface.hpp"
-#include "com/sun/star/uri/RelativeUriExcessParentSegments.hpp"
-#include "com/sun/star/uri/XUriReference.hpp"
-#include "com/sun/star/uri/XUriReferenceFactory.hpp"
-#include "com/sun/star/uri/XUriSchemeParser.hpp"
-#include "cppuhelper/implbase1.hxx"
-#include "cppuhelper/implbase2.hxx"
-#include "cppuhelper/weak.hxx"
-#include "osl/diagnose.h"
-#include "rtl/string.h"
-#include "rtl/ustrbuf.hxx"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-
-#include <algorithm>
-#include /*MSVC trouble: <cstdlib>*/ <stdlib.h>
-#include <new>
-#include <vector>
-
-namespace css = com::sun::star;
-
-namespace {
-
-bool isDigit(sal_Unicode c) { //TODO: generally available?
- return c >= '0' && c <= '9';
-}
-
-bool isUpperCase(sal_Unicode c) { //TODO: generally available?
- return c >= 'A' && c <= 'Z';
-}
-
-bool isLowerCase(sal_Unicode c) { //TODO: generally available?
- return c >= 'a' && c <= 'z';
-}
-
-bool isAlpha(sal_Unicode c) { //TODO: generally available?
- return isUpperCase(c) || isLowerCase(c);
-}
-
-bool isHexDigit(sal_Unicode c) { //TODO: generally available?
- return isDigit(c) || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f');
-}
-
-sal_Unicode toLowerCase(sal_Unicode c) { //TODO: generally available?
- return isUpperCase(c) ? c + ('a' - 'A') : c;
-}
-
-bool equalIgnoreCase(sal_Unicode c1, sal_Unicode c2) {
- //TODO: generally available?
- return toLowerCase(c1) == toLowerCase(c2);
-}
-
-bool equalIgnoreEscapeCase(rtl::OUString const & s1, rtl::OUString const & s2) {
- if (s1.getLength() == s2.getLength()) {
- for (sal_Int32 i = 0; i < s1.getLength();) {
- if (s1[i] == '%' && s2[i] == '%' && s1.getLength() - i > 2
- && isHexDigit(s1[i + 1]) && isHexDigit(s1[i + 2])
- && isHexDigit(s2[i + 1]) && isHexDigit(s2[i + 2])
- && equalIgnoreCase(s1[i + 1], s2[i + 1])
- && equalIgnoreCase(s1[i + 2], s2[i + 2]))
- {
- i += 3;
- } else if (s1[i] != s2[i]) {
- return false;
- } else {
- ++i;
- }
- }
- return true;
- } else {
- return false;
- }
-}
-
-sal_Int32 parseScheme(rtl::OUString const & uriReference) {
- if (uriReference.getLength() >= 2 && isAlpha(uriReference[0])) {
- for (sal_Int32 i = 0; i < uriReference.getLength(); ++i) {
- sal_Unicode c = uriReference[i];
- if (c == ':') {
- return i;
- } else if (!isAlpha(c) && !isDigit(c) && c != '+' && c != '-'
- && c != '.')
- {
- break;
- }
- }
- }
- return -1;
-}
-
-class UriReference: public cppu::WeakImplHelper1< css::uri::XUriReference > {
-public:
- UriReference(
- rtl::OUString const & scheme, bool bIsHierarchical, bool bHasAuthority,
- rtl::OUString const & authority, rtl::OUString const & path,
- bool bHasQuery, rtl::OUString const & query):
- m_base(
- scheme, bIsHierarchical, bHasAuthority, authority, path, bHasQuery,
- query)
- {}
-
- virtual rtl::OUString SAL_CALL getUriReference()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getUriReference(); }
-
- virtual sal_Bool SAL_CALL isAbsolute()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.isAbsolute(); }
-
- virtual rtl::OUString SAL_CALL getScheme()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getScheme(); }
-
- virtual rtl::OUString SAL_CALL getSchemeSpecificPart()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getSchemeSpecificPart(); }
-
- virtual sal_Bool SAL_CALL isHierarchical()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.isHierarchical(); }
-
- virtual sal_Bool SAL_CALL hasAuthority()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.hasAuthority(); }
-
- virtual rtl::OUString SAL_CALL getAuthority()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getAuthority(); }
-
- virtual rtl::OUString SAL_CALL getPath()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getPath(); }
-
- virtual sal_Bool SAL_CALL hasRelativePath()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.hasRelativePath(); }
-
- virtual sal_Int32 SAL_CALL getPathSegmentCount()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getPathSegmentCount(); }
-
- virtual rtl::OUString SAL_CALL getPathSegment(sal_Int32 index)
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getPathSegment(index); }
-
- virtual sal_Bool SAL_CALL hasQuery()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.hasQuery(); }
-
- virtual rtl::OUString SAL_CALL getQuery()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getQuery(); }
-
- virtual sal_Bool SAL_CALL hasFragment()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.hasFragment(); }
-
- virtual rtl::OUString SAL_CALL getFragment()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getFragment(); }
-
- virtual void SAL_CALL setFragment(rtl::OUString const & fragment)
- throw (com::sun::star::uno::RuntimeException)
- { m_base.setFragment(fragment); }
-
- virtual void SAL_CALL clearFragment()
- throw (com::sun::star::uno::RuntimeException)
- { m_base.clearFragment(); }
-
-private:
- UriReference(UriReference &); // not implemented
- void operator =(UriReference); // not implemented
-
- virtual ~UriReference() {}
-
- stoc::uriproc::UriReference m_base;
-};
-
-// throws std::bad_alloc
-css::uno::Reference< css::uri::XUriReference > parseGeneric(
- rtl::OUString const & scheme, rtl::OUString const & schemeSpecificPart)
-{
- bool isAbsolute = scheme.getLength() != 0;
- bool isHierarchical
- = !isAbsolute
- || (schemeSpecificPart.getLength() > 0 && schemeSpecificPart[0] == '/');
- bool hasAuthority = false;
- rtl::OUString authority;
- rtl::OUString path;
- bool hasQuery = false;
- rtl::OUString query;
- if (isHierarchical) {
- sal_Int32 len = schemeSpecificPart.getLength();
- sal_Int32 i = 0;
- if (len - i >= 2 && schemeSpecificPart[i] == '/'
- && schemeSpecificPart[i + 1] == '/')
- {
- i += 2;
- sal_Int32 n = i;
- while (i < len && schemeSpecificPart[i] != '/'
- && schemeSpecificPart[i] != '?') {
- ++i;
- }
- hasAuthority = true;
- authority = schemeSpecificPart.copy(n, i - n);
- }
- sal_Int32 n = i;
- i = schemeSpecificPart.indexOf('?', i);
- if (i == -1) {
- i = len;
- }
- path = schemeSpecificPart.copy(n, i - n);
- if (i != len) {
- hasQuery = true;
- query = schemeSpecificPart.copy(i + 1);
- }
- } else {
- if (schemeSpecificPart.getLength() == 0) {
- // The scheme-specific part of an opaque URI must not be empty:
- return 0;
- }
- path = schemeSpecificPart;
- }
- return new UriReference(
- scheme, isHierarchical, hasAuthority, authority, path, hasQuery, query);
-}
-
-typedef std::vector< sal_Int32 > Segments;
-
-void processSegments(
- Segments & segments,
- css::uno::Reference< css::uri::XUriReference > const & uriReference,
- bool base, bool processSpecialSegments)
-{
- sal_Int32 count = uriReference->getPathSegmentCount() - (base ? 1 : 0);
- OSL_ASSERT(count <= SAL_MAX_INT32 - 1 && -count >= SAL_MIN_INT32 + 1);
- for (sal_Int32 i = 0; i < count; ++i) {
- if (processSpecialSegments) {
- rtl::OUString segment(uriReference->getPathSegment(i));
- if (segment.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("."))) {
- if (!base && i == count - 1) {
- segments.push_back(0);
- }
- continue;
- } else if (segment.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(".."))) {
- if (segments.empty()
- || /*MSVC trouble: std::*/abs(segments.back()) == 1)
- {
- segments.push_back(base ? -1 : 1);
- } else {
- segments.pop_back();
- }
- continue;
- }
- }
- segments.push_back(base ? -(i + 2) : i + 2);
- }
-}
-
-class Factory: public cppu::WeakImplHelper2<
- css::lang::XServiceInfo, css::uri::XUriReferenceFactory >
-{
-public:
- explicit Factory(
- css::uno::Reference< css::uno::XComponentContext > const & context):
- m_context(context) {}
-
- virtual rtl::OUString SAL_CALL getImplementationName()
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & serviceName)
- throw (css::uno::RuntimeException);
-
- virtual css::uno::Sequence< rtl::OUString > SAL_CALL
- getSupportedServiceNames() throw (css::uno::RuntimeException);
-
- virtual css::uno::Reference< css::uri::XUriReference > SAL_CALL
- parse(rtl::OUString const & uriReference)
- throw (css::uno::RuntimeException);
-
- virtual css::uno::Reference< css::uri::XUriReference > SAL_CALL
- makeAbsolute(
- css::uno::Reference< css::uri::XUriReference > const & baseUriReference,
- css::uno::Reference< css::uri::XUriReference > const & uriReference,
- sal_Bool processSpecialBaseSegments,
- css::uri::RelativeUriExcessParentSegments excessParentSegments)
- throw (css::uno::RuntimeException);
-
- virtual css::uno::Reference< css::uri::XUriReference > SAL_CALL
- makeRelative(
- css::uno::Reference< css::uri::XUriReference > const & baseUriReference,
- css::uno::Reference< css::uri::XUriReference > const & uriReference,
- sal_Bool preferAuthorityOverRelativePath,
- sal_Bool preferAbsoluteOverRelativePath,
- sal_Bool encodeRetainedSpecialSegments)
- throw (css::uno::RuntimeException);
-
-private:
- Factory(Factory &); // not implemented
- void operator =(Factory); // not implemented
-
- virtual ~Factory() {}
-
- css::uno::Reference< css::uri::XUriReference > clone(
- css::uno::Reference< css::uri::XUriReference > const & uriReference)
- { return parse(uriReference->getUriReference()); }
-
- css::uno::Reference< css::uno::XComponentContext > m_context;
-};
-
-rtl::OUString Factory::getImplementationName()
- throw (css::uno::RuntimeException)
-{
- return stoc_services::UriReferenceFactory::getImplementationName();
-}
-
-sal_Bool Factory::supportsService(rtl::OUString const & serviceName)
- throw (css::uno::RuntimeException)
-{
- return stoc::uriproc::supportsService(
- getSupportedServiceNames(), serviceName);
-}
-
-css::uno::Sequence< rtl::OUString > Factory::getSupportedServiceNames()
- throw (css::uno::RuntimeException)
-{
- return stoc_services::UriReferenceFactory::getSupportedServiceNames();
-}
-
-css::uno::Reference< css::uri::XUriReference > Factory::parse(
- rtl::OUString const & uriReference) throw (css::uno::RuntimeException)
-{
- sal_Int32 fragment = uriReference.indexOf('#');
- if (fragment == -1) {
- fragment = uriReference.getLength();
- }
- rtl::OUString scheme;
- rtl::OUString schemeSpecificPart;
- rtl::OUString serviceName;
- sal_Int32 n = parseScheme(uriReference);
- OSL_ASSERT(n < fragment);
- if (n >= 0) {
- scheme = uriReference.copy(0, n);
- schemeSpecificPart = uriReference.copy(n + 1, fragment - (n + 1));
- rtl::OUStringBuffer buf;
- buf.appendAscii(
- RTL_CONSTASCII_STRINGPARAM("com.sun.star.uri.UriSchemeParser_"));
- for (sal_Int32 i = 0; i < scheme.getLength(); ++i) {
- sal_Unicode c = scheme[i];
- if (isUpperCase(c)) {
- buf.append(toLowerCase(c));
- } else if (c == '+') {
- buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("PLUS"));
- } else if (c == '-') {
- buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("HYPHEN"));
- } else if (c == '.') {
- buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("DOT"));
- } else {
- OSL_ASSERT(isLowerCase(c) || isDigit(c));
- buf.append(c);
- }
- }
- serviceName = buf.makeStringAndClear();
- } else {
- schemeSpecificPart = uriReference.copy(0, fragment);
- }
- css::uno::Reference< css::uri::XUriSchemeParser > parser;
- if (serviceName.getLength() != 0) {
- css::uno::Reference< css::lang::XMultiComponentFactory > factory(
- m_context->getServiceManager());
- if (factory.is()) {
- css::uno::Reference< css::uno::XInterface > service;
- try {
- service = factory->createInstanceWithContext(
- serviceName, m_context);
- } catch (css::uno::RuntimeException &) {
- throw;
- } catch (css::uno::Exception & e) {
- throw css::lang::WrappedTargetRuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("creating service "))
- + serviceName,
- static_cast< cppu::OWeakObject * >(this),
- css::uno::makeAny(e)); //TODO: preserve type of e
- }
- if (service.is()) {
- parser = css::uno::Reference< css::uri::XUriSchemeParser >(
- service, css::uno::UNO_QUERY_THROW);
- }
- }
- }
- css::uno::Reference< css::uri::XUriReference > uriRef;
- if (parser.is()) {
- uriRef = parser->parse(scheme, schemeSpecificPart);
- } else {
- try {
- uriRef = parseGeneric(scheme, schemeSpecificPart);
- } catch (std::bad_alloc &) {
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("std::bad_alloc")),
- static_cast< cppu::OWeakObject * >(this));
- }
- }
- if (uriRef.is() && fragment != uriReference.getLength()) {
- uriRef->setFragment(uriReference.copy(fragment + 1));
- }
- return uriRef;
-}
-
-css::uno::Reference< css::uri::XUriReference > Factory::makeAbsolute(
- css::uno::Reference< css::uri::XUriReference > const & baseUriReference,
- css::uno::Reference< css::uri::XUriReference > const & uriReference,
- sal_Bool processSpecialBaseSegments,
- css::uri::RelativeUriExcessParentSegments excessParentSegments)
- throw (css::uno::RuntimeException)
-{
- if (!baseUriReference.is() || !baseUriReference->isAbsolute()
- || !baseUriReference->isHierarchical() || !uriReference.is()) {
- return 0;
- } else if (uriReference->isAbsolute()) {
- return clone(uriReference);
- } else if (!uriReference->hasAuthority()
- && uriReference->getPath().getLength() == 0
- && !uriReference->hasQuery()) {
- css::uno::Reference< css::uri::XUriReference > abs(
- clone(baseUriReference));
- if (uriReference->hasFragment()) {
- abs->setFragment(uriReference->getFragment());
- } else {
- abs->clearFragment();
- }
- return abs;
- } else {
- rtl::OUStringBuffer abs(baseUriReference->getScheme());
- abs.append(static_cast< sal_Unicode >(':'));
- if (uriReference->hasAuthority()) {
- abs.appendAscii(RTL_CONSTASCII_STRINGPARAM("//"));
- abs.append(uriReference->getAuthority());
- } else if (baseUriReference->hasAuthority()) {
- abs.appendAscii(RTL_CONSTASCII_STRINGPARAM("//"));
- abs.append(baseUriReference->getAuthority());
- }
- if (uriReference->hasRelativePath()) {
- Segments segments;
- processSegments(
- segments, baseUriReference, true, processSpecialBaseSegments);
- processSegments(segments, uriReference, false, true);
- // If the path component of the base URI reference is empty (which
- // implies that the base URI reference denotes a "root entity"), and
- // the resulting URI reference denotes the same root entity, make
- // sure the path component of the resulting URI reference is also
- // empty (and not "/"). RFC 2396 is unclear about this, and I chose
- // these rules for consistent results.
- bool slash = baseUriReference->getPath().getLength() != 0;
- if (slash) {
- abs.append(static_cast< sal_Unicode >('/'));
- }
- for (Segments::iterator i(segments.begin()); i != segments.end();
- ++i)
- {
- if (*i < -1) {
- rtl::OUString segment(
- baseUriReference->getPathSegment(-(*i + 2)));
- if (segment.getLength() != 0 || segments.size() > 1) {
- if (!slash) {
- abs.append(static_cast< sal_Unicode >('/'));
- }
- abs.append(segment);
- slash = true;
- abs.append(static_cast< sal_Unicode >('/'));
- }
- } else if (*i > 1) {
- rtl::OUString segment(uriReference->getPathSegment(*i - 2));
- if (segment.getLength() != 0 || segments.size() > 1) {
- if (!slash) {
- abs.append(static_cast< sal_Unicode >('/'));
- }
- abs.append(segment);
- slash = false;
- }
- } else if (*i == 0) {
- if (segments.size() > 1 && !slash) {
- abs.append(static_cast< sal_Unicode >('/'));
- }
- } else {
- switch (excessParentSegments) {
- case css::uri::RelativeUriExcessParentSegments_ERROR:
- return 0;
-
- case css::uri::RelativeUriExcessParentSegments_RETAIN:
- if (!slash) {
- abs.append(static_cast< sal_Unicode >('/'));
- }
- abs.appendAscii(RTL_CONSTASCII_STRINGPARAM(".."));
- slash = *i < 0;
- if (slash) {
- abs.append(static_cast< sal_Unicode >('/'));
- }
- break;
-
- case css::uri::RelativeUriExcessParentSegments_REMOVE:
- break;
-
- default:
- OSL_ASSERT(false);
- break;
- }
- }
- }
- } else {
- abs.append(uriReference->getPath());
- }
- if (uriReference->hasQuery()) {
- abs.append(static_cast< sal_Unicode >('?'));
- abs.append(uriReference->getQuery());
- }
- if (uriReference->hasFragment()) {
- abs.append(static_cast< sal_Unicode >('#'));
- abs.append(uriReference->getFragment());
- }
- return parse(abs.makeStringAndClear());
- }
-}
-
-css::uno::Reference< css::uri::XUriReference > Factory::makeRelative(
- css::uno::Reference< css::uri::XUriReference > const & baseUriReference,
- css::uno::Reference< css::uri::XUriReference > const & uriReference,
- sal_Bool preferAuthorityOverRelativePath,
- sal_Bool preferAbsoluteOverRelativePath,
- sal_Bool encodeRetainedSpecialSegments)
- throw (css::uno::RuntimeException)
-{
- if (!baseUriReference.is() || !baseUriReference->isAbsolute()
- || !baseUriReference->isHierarchical() || !uriReference.is()) {
- return 0;
- } else if (!uriReference->isAbsolute() || !uriReference->isHierarchical()
- || !baseUriReference->getScheme().equalsIgnoreAsciiCase(
- uriReference->getScheme())) {
- return clone(uriReference);
- } else {
- rtl::OUStringBuffer rel;
- bool omitQuery = false;
- if ((baseUriReference->hasAuthority() != uriReference->hasAuthority())
- || !equalIgnoreEscapeCase(
- baseUriReference->getAuthority(),
- uriReference->getAuthority()))
- {
- if (uriReference->hasAuthority()) {
- rel.appendAscii(RTL_CONSTASCII_STRINGPARAM("//"));
- rel.append(uriReference->getAuthority());
- }
- rel.append(uriReference->getPath());
- } else if ((equalIgnoreEscapeCase(
- baseUriReference->getPath(), uriReference->getPath())
- || (baseUriReference->getPath().getLength() <= 1
- && uriReference->getPath().getLength() <= 1))
- && baseUriReference->hasQuery() == uriReference->hasQuery()
- && equalIgnoreEscapeCase(
- baseUriReference->getQuery(), uriReference->getQuery()))
- {
- omitQuery = true;
- } else {
- sal_Int32 count1 = std::max< sal_Int32 >(
- baseUriReference->getPathSegmentCount(), 1);
- sal_Int32 count2 = std::max< sal_Int32 >(
- uriReference->getPathSegmentCount(), 1);
- sal_Int32 i = 0;
- for (; i < std::min(count1, count2) - 1; ++i) {
- if (!equalIgnoreEscapeCase(
- baseUriReference->getPathSegment(i),
- uriReference->getPathSegment(i)))
- {
- break;
- }
- }
- if (i == 0 && preferAbsoluteOverRelativePath
- && (preferAuthorityOverRelativePath
- || !uriReference->getPath().matchAsciiL(
- RTL_CONSTASCII_STRINGPARAM("//"))))
- {
- if (baseUriReference->getPath().getLength() > 1
- || uriReference->getPath().getLength() > 1)
- {
- if (uriReference->getPath().getLength() == 0) {
- rel.append(static_cast< sal_Unicode >('/'));
- } else {
- OSL_ASSERT(uriReference->getPath()[0] == '/');
- if (uriReference->getPath().matchAsciiL(
- RTL_CONSTASCII_STRINGPARAM("//"))) {
- OSL_ASSERT(uriReference->hasAuthority());
- rel.appendAscii(RTL_CONSTASCII_STRINGPARAM("//"));
- rel.append(uriReference->getAuthority());
- }
- rel.append(uriReference->getPath());
- }
- }
- } else {
- bool segments = false;
- for (sal_Int32 j = i; j < count1 - 1; ++j) {
- if (segments) {
- rel.append(static_cast< sal_Unicode >('/'));
- }
- rel.appendAscii(RTL_CONSTASCII_STRINGPARAM(".."));
- segments = true;
- }
- if (i < count2 - 1
- || (uriReference->getPathSegment(count2 - 1).getLength()
- != 0))
- {
- if (!segments
- && (uriReference->getPathSegment(i).getLength() == 0
- || (parseScheme(uriReference->getPathSegment(i))
- >= 0)))
- {
- rel.append(static_cast< sal_Unicode >('.'));
- segments = true;
- }
- for (; i < count2; ++i) {
- if (segments) {
- rel.append(static_cast< sal_Unicode >('/'));
- }
- rtl::OUString s(uriReference->getPathSegment(i));
- if (encodeRetainedSpecialSegments
- && s.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM(".")))
- {
- rel.appendAscii(RTL_CONSTASCII_STRINGPARAM("%2E"));
- } else if (encodeRetainedSpecialSegments
- && s.equalsAsciiL(
- RTL_CONSTASCII_STRINGPARAM("..")))
- {
- rel.appendAscii(
- RTL_CONSTASCII_STRINGPARAM("%2E%2E"));
- } else {
- rel.append(s);
- }
- segments = true;
- }
- }
- }
- }
- if (!omitQuery && uriReference->hasQuery()) {
- rel.append(static_cast< sal_Unicode >('?'));
- rel.append(uriReference->getQuery());
- }
- if (uriReference->hasFragment()) {
- rel.append(static_cast< sal_Unicode >('#'));
- rel.append(uriReference->getFragment());
- }
- return parse(rel.makeStringAndClear());
- }
-}
-
-}
-
-namespace stoc_services { namespace UriReferenceFactory {
-
-css::uno::Reference< css::uno::XInterface > create(
- css::uno::Reference< css::uno::XComponentContext > const & context)
- SAL_THROW((css::uno::Exception))
-{
- try {
- return static_cast< cppu::OWeakObject * >(new Factory(context));
- } catch (std::bad_alloc &) {
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("std::bad_alloc")), 0);
- }
-}
-
-rtl::OUString getImplementationName() {
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.uri.UriReferenceFactory"));
-}
-
-css::uno::Sequence< rtl::OUString > getSupportedServiceNames() {
- css::uno::Sequence< rtl::OUString > s(1);
- s[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uri.UriReferenceFactory"));
- return s;
-}
-
-} }
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/uriproc/UriReferenceFactory.hxx b/stoc/source/uriproc/UriReferenceFactory.hxx
deleted file mode 100644
index 38278b6bf..000000000
--- a/stoc/source/uriproc/UriReferenceFactory.hxx
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 INCLUDED_stoc_source_uriproc_UriReferenceFactory_hxx
-#define INCLUDED_stoc_source_uriproc_UriReferenceFactory_hxx
-
-#include "com/sun/star/uno/Exception.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "sal/types.h"
-
-namespace com { namespace sun { namespace star { namespace uno {
- class XComponentContext;
- class XInterface;
-} } } }
-namespace rtl { class OUString; }
-
-namespace stoc { namespace uriproc {
-
-namespace UriReferenceFactory {
- com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL
- create(
- com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >
- const & context)
- SAL_THROW((com::sun::star::uno::Exception));
-
- rtl::OUString SAL_CALL getImplementationName();
-
- com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL
- getSupportedServiceNames();
-}
-
-} }
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTexpand.cxx b/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTexpand.cxx
deleted file mode 100644
index 18a576012..000000000
--- a/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTexpand.cxx
+++ /dev/null
@@ -1,271 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "sal/config.h"
-
-#include "stocservices.hxx"
-
-#include <new>
-
-#include "com/sun/star/lang/IllegalArgumentException.hpp"
-#include "com/sun/star/lang/XServiceInfo.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/RuntimeException.hpp"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "com/sun/star/uno/XInterface.hpp"
-#include "com/sun/star/uri/XUriReference.hpp"
-#include "com/sun/star/uri/XUriSchemeParser.hpp"
-#include "com/sun/star/uri/XVndSunStarExpandUrlReference.hpp"
-#include "com/sun/star/util/XMacroExpander.hpp"
-#include "cppuhelper/implbase1.hxx"
-#include "cppuhelper/implbase2.hxx"
-#include "cppuhelper/weak.hxx"
-#include "rtl/textenc.h"
-#include "rtl/uri.h"
-#include "rtl/uri.hxx"
-#include "rtl/ustring.h"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-
-#include "UriReference.hxx"
-#include "supportsService.hxx"
-
-namespace {
-
-namespace css = ::com::sun::star;
-
-bool parseSchemeSpecificPart(::rtl::OUString const & part) {
- // Liberally accepts both an empty opaque_part and an opaque_part that
- // starts with a non-escaped "/":
- return part.getLength() == 0
- || ((::rtl::Uri::decode(
- part, ::rtl_UriDecodeStrict, RTL_TEXTENCODING_UTF8).
- getLength())
- != 0);
-}
-
-class UrlReference:
- public ::cppu::WeakImplHelper1< css::uri::XVndSunStarExpandUrlReference >
-{
-public:
- UrlReference(::rtl::OUString const & scheme, ::rtl::OUString const & path):
- base_(
- scheme, false, false, ::rtl::OUString(), path, false,
- ::rtl::OUString())
- {}
-
- virtual ::rtl::OUString SAL_CALL getUriReference()
- throw (css::uno::RuntimeException)
- { return base_.getUriReference(); }
-
- virtual ::sal_Bool SAL_CALL isAbsolute() throw (css::uno::RuntimeException)
- { return base_.isAbsolute(); }
-
- virtual ::rtl::OUString SAL_CALL getScheme()
- throw (css::uno::RuntimeException)
- { return base_.getScheme(); }
-
- virtual ::rtl::OUString SAL_CALL getSchemeSpecificPart()
- throw (css::uno::RuntimeException)
- { return base_.getSchemeSpecificPart(); }
-
- virtual ::sal_Bool SAL_CALL isHierarchical()
- throw (css::uno::RuntimeException)
- { return base_.isHierarchical(); }
-
- virtual ::sal_Bool SAL_CALL hasAuthority()
- throw (css::uno::RuntimeException)
- { return base_.hasAuthority(); }
-
- virtual ::rtl::OUString SAL_CALL getAuthority()
- throw (css::uno::RuntimeException)
- { return base_.getAuthority(); }
-
- virtual ::rtl::OUString SAL_CALL getPath()
- throw (css::uno::RuntimeException)
- { return base_.getPath(); }
-
- virtual ::sal_Bool SAL_CALL hasRelativePath()
- throw (css::uno::RuntimeException)
- { return base_.hasRelativePath(); }
-
- virtual ::sal_Int32 SAL_CALL getPathSegmentCount()
- throw (css::uno::RuntimeException)
- { return base_.getPathSegmentCount(); }
-
- virtual ::rtl::OUString SAL_CALL getPathSegment(sal_Int32 index)
- throw (css::uno::RuntimeException)
- { return base_.getPathSegment(index); }
-
- virtual ::sal_Bool SAL_CALL hasQuery() throw (css::uno::RuntimeException)
- { return base_.hasQuery(); }
-
- virtual ::rtl::OUString SAL_CALL getQuery()
- throw (css::uno::RuntimeException)
- { return base_.getQuery(); }
-
- virtual ::sal_Bool SAL_CALL hasFragment() throw (css::uno::RuntimeException)
- { return base_.hasFragment(); }
-
- virtual ::rtl::OUString SAL_CALL getFragment()
- throw (css::uno::RuntimeException)
- { return base_.getFragment(); }
-
- virtual void SAL_CALL setFragment(::rtl::OUString const & fragment)
- throw (css::uno::RuntimeException)
- { base_.setFragment(fragment); }
-
- virtual void SAL_CALL clearFragment() throw (css::uno::RuntimeException)
- { base_.clearFragment(); }
-
- virtual ::rtl::OUString SAL_CALL expand(
- css::uno::Reference< css::util::XMacroExpander > const & expander)
- throw (css::lang::IllegalArgumentException, css::uno::RuntimeException);
-
-private:
- UrlReference(UrlReference &); // not defined
- void operator =(UrlReference); // not defined
-
- virtual ~UrlReference() {}
-
- stoc::uriproc::UriReference base_;
-};
-
-::rtl::OUString UrlReference::expand(
- css::uno::Reference< css::util::XMacroExpander > const & expander)
- throw (css::lang::IllegalArgumentException, css::uno::RuntimeException)
-{
- OSL_ASSERT(expander.is());
- return expander->expandMacros(
- ::rtl::Uri::decode(
- getPath(), ::rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8));
-}
-
-class Parser: public ::cppu::WeakImplHelper2<
- css::lang::XServiceInfo, css::uri::XUriSchemeParser >
-{
-public:
- Parser() {}
-
- virtual ::rtl::OUString SAL_CALL getImplementationName()
- throw (css::uno::RuntimeException);
-
- virtual ::sal_Bool SAL_CALL supportsService(
- ::rtl::OUString const & serviceName)
- throw (css::uno::RuntimeException);
-
- virtual css::uno::Sequence< ::rtl::OUString > SAL_CALL
- getSupportedServiceNames() throw (css::uno::RuntimeException);
-
- virtual css::uno::Reference< css::uri::XUriReference > SAL_CALL
- parse(
- ::rtl::OUString const & scheme,
- ::rtl::OUString const & schemeSpecificPart)
- throw (css::uno::RuntimeException);
-
-private:
- Parser(Parser &); // not defined
- void operator =(Parser); // not defined
-
- virtual ~Parser() {}
-};
-
-::rtl::OUString Parser::getImplementationName()
- throw (css::uno::RuntimeException)
-{
- return ::stoc_services::UriSchemeParser_vndDOTsunDOTstarDOTexpand::
- getImplementationName();
-}
-
-::sal_Bool Parser::supportsService(::rtl::OUString const & serviceName)
- throw (css::uno::RuntimeException)
-{
- return ::stoc::uriproc::supportsService(
- getSupportedServiceNames(), serviceName);
-}
-
-css::uno::Sequence< ::rtl::OUString > Parser::getSupportedServiceNames()
- throw (css::uno::RuntimeException)
-{
- return ::stoc_services::UriSchemeParser_vndDOTsunDOTstarDOTexpand::
- getSupportedServiceNames();
-}
-
-css::uno::Reference< css::uri::XUriReference > Parser::parse(
- ::rtl::OUString const & scheme, ::rtl::OUString const & schemeSpecificPart)
- throw (css::uno::RuntimeException)
-{
- if (!parseSchemeSpecificPart(schemeSpecificPart)) {
- return css::uno::Reference< css::uri::XUriReference >();
- }
- try {
- return new UrlReference(scheme, schemeSpecificPart);
- } catch (::std::bad_alloc &) {
- throw css::uno::RuntimeException(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("std::bad_alloc")),
- css::uno::Reference< css::uno::XInterface >());
- }
-}
-
-}
-
-namespace stoc_services { namespace UriSchemeParser_vndDOTsunDOTstarDOTexpand {
-
-css::uno::Reference< css::uno::XInterface > create(
- css::uno::Reference< css::uno::XComponentContext > const &)
- SAL_THROW((css::uno::Exception))
-{
- //TODO: single instance
- try {
- return static_cast< ::cppu::OWeakObject * >(new Parser);
- } catch (::std::bad_alloc &) {
- throw css::uno::RuntimeException(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("std::bad_alloc")),
- css::uno::Reference< css::uno::XInterface >());
- }
-}
-
-::rtl::OUString getImplementationName() {
- return ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.uri.UriSchemeParser_vndDOTsunDOTstarDOTexpand"));
-}
-
-css::uno::Sequence< ::rtl::OUString > getSupportedServiceNames() {
- css::uno::Sequence< ::rtl::OUString > s(1);
- s[0] = ::rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.uri.UriSchemeParser_vndDOTsunDOTstarDOTexpand"));
- return s;
-}
-
-} }
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTexpand.hxx b/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTexpand.hxx
deleted file mode 100644
index b531c81a3..000000000
--- a/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTexpand.hxx
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 \
- INCLUDED_STOC_SOURCE_URIPROC_URISCHEMEPARSER_VNDDOTSUNDOTSTARDOTEXPAND_HXX
-#define \
- INCLUDED_STOC_SOURCE_URIPROC_URISCHEMEPARSER_VNDDOTSUNDOTSTARDOTEXPAND_HXX
-
-#include "sal/config.h"
-#include "com/sun/star/uno/Exception.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "sal/types.h"
-
-namespace com { namespace sun { namespace star { namespace uno {
- class XComponentContext;
- class XInterface;
-} } } }
-namespace rtl { class OUString; }
-
-namespace stoc { namespace uriproc {
-
-namespace UriSchemeParser_vndDOTsunDOTstarDOTexpand {
- ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >
- SAL_CALL create(
- ::com::sun::star::uno::Reference<
- ::com::sun::star::uno::XComponentContext > const &)
- SAL_THROW((::com::sun::star::uno::Exception));
-
- ::rtl::OUString SAL_CALL getImplementationName();
-
- ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
- getSupportedServiceNames();
-}
-
-} }
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.cxx b/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.cxx
deleted file mode 100644
index 581358b5b..000000000
--- a/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.cxx
+++ /dev/null
@@ -1,488 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "stocservices.hxx"
-
-#include "UriReference.hxx"
-#include "supportsService.hxx"
-
-#include "com/sun/star/lang/IllegalArgumentException.hpp"
-#include "com/sun/star/lang/XServiceInfo.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/RuntimeException.hpp"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "com/sun/star/uno/XInterface.hpp"
-#include "com/sun/star/uri/XUriReference.hpp"
-#include "com/sun/star/uri/XUriSchemeParser.hpp"
-#include "com/sun/star/uri/XVndSunStarScriptUrlReference.hpp"
-#include "cppuhelper/implbase1.hxx"
-#include "cppuhelper/implbase2.hxx"
-#include "cppuhelper/weak.hxx"
-#include "osl/mutex.hxx"
-#include "rtl/uri.hxx"
-#include "rtl/ustrbuf.hxx"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-
-#include <new>
-
-namespace css = com::sun::star;
-
-namespace {
-
-int getHexWeight(sal_Unicode c) {
- return c >= '0' && c <= '9' ? static_cast< int >(c - '0')
- : c >= 'A' && c <= 'F' ? static_cast< int >(c - 'A' + 10)
- : c >= 'a' && c <= 'f' ? static_cast< int >(c - 'a' + 10)
- : -1;
-}
-
-int parseEscaped(rtl::OUString const & part, sal_Int32 * index) {
- if (part.getLength() - *index < 3 || part[*index] != '%') {
- return -1;
- }
- int n1 = getHexWeight(part[*index + 1]);
- int n2 = getHexWeight(part[*index + 2]);
- if (n1 < 0 || n2 < 0) {
- return -1;
- }
- *index += 3;
- return (n1 << 4) | n2;
-}
-
-rtl::OUString parsePart(
- rtl::OUString const & part, bool namePart, sal_Int32 * index)
-{
- rtl::OUStringBuffer buf;
- while (*index < part.getLength()) {
- sal_Unicode c = part[*index];
- if (namePart ? c == '?' : c == '&' || c == '=') {
- break;
- } else if (c == '%') {
- sal_Int32 i = *index;
- int n = parseEscaped(part, &i);
- if (n >= 0 && n <= 0x7F) {
- buf.append(static_cast< sal_Unicode >(n));
- } else if (n >= 0xC0 && n <= 0xFC) {
- sal_Int32 encoded;
- int shift;
- sal_Int32 min;
- if (n <= 0xDF) {
- encoded = (n & 0x1F) << 6;
- shift = 0;
- min = 0x80;
- } else if (n <= 0xEF) {
- encoded = (n & 0x0F) << 12;
- shift = 6;
- min = 0x800;
- } else if (n <= 0xF7) {
- encoded = (n & 0x07) << 18;
- shift = 12;
- min = 0x10000;
- } else if (n <= 0xFB) {
- encoded = (n & 0x03) << 24;
- shift = 18;
- min = 0x200000;
- } else {
- encoded = 0;
- shift = 24;
- min = 0x4000000;
- }
- bool utf8 = true;
- for (; shift >= 0; shift -= 6) {
- n = parseEscaped(part, &i);
- if (n < 0x80 || n > 0xBF) {
- utf8 = false;
- break;
- }
- encoded |= (n & 0x3F) << shift;
- }
- if (!utf8 || encoded < min
- || (encoded >= 0xD800 && encoded <= 0xDFFF)
- || encoded > 0x10FFFF)
- {
- break;
- }
- if (encoded <= 0xFFFF) {
- buf.append(static_cast< sal_Unicode >(encoded));
- } else {
- buf.append(static_cast< sal_Unicode >(
- (encoded >> 10) | 0xD800));
- buf.append(static_cast< sal_Unicode >(
- (encoded & 0x3FF) | 0xDC00));
- }
- } else {
- break;
- }
- *index = i;
- } else {
- buf.append(c);
- ++*index;
- }
- }
- return buf.makeStringAndClear();
-}
-
-namespace
-{
- static rtl::OUString encodeNameOrParamFragment( rtl::OUString const & fragment )
- {
- static sal_Bool const aCharClass[] =
- { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* NameOrParamFragment */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, /* !"#$%&'()*+,-./*/
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, /*0123456789:;<=>?*/
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*@ABCDEFGHIJKLMNO*/
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, /*PQRSTUVWXYZ[\]^_*/
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*`abcdefghijklmno*/
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0 /*pqrstuvwxyz{|}~ */
- };
-
- return rtl::Uri::encode(
- fragment,
- aCharClass,
- rtl_UriEncodeIgnoreEscapes,
- RTL_TEXTENCODING_UTF8
- );
- }
-}
-
-bool parseSchemeSpecificPart(rtl::OUString const & part) {
- sal_Int32 len = part.getLength();
- sal_Int32 i = 0;
- if (parsePart(part, true, &i).getLength() == 0 || part[0] == '/') {
- return false;
- }
- if (i == len) {
- return true;
- }
- for (;;) {
- ++i; // skip '?' or '&'
- if (parsePart(part, false, &i).getLength() == 0 || i == len
- || part[i] != '=')
- {
- return false;
- }
- ++i;
- parsePart(part, false, &i);
- if (i == len) {
- return true;
- }
- if (part[i] != '&') {
- return false;
- }
- }
-}
-
-class UrlReference:
- public cppu::WeakImplHelper1< css::uri::XVndSunStarScriptUrlReference >
-{
-public:
- UrlReference(rtl::OUString const & scheme, rtl::OUString const & path):
- m_base(
- scheme, false, false, rtl::OUString(), path, false, rtl::OUString())
- {}
-
- virtual rtl::OUString SAL_CALL getUriReference()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getUriReference(); }
-
- virtual sal_Bool SAL_CALL isAbsolute()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.isAbsolute(); }
-
- virtual rtl::OUString SAL_CALL getScheme()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getScheme(); }
-
- virtual rtl::OUString SAL_CALL getSchemeSpecificPart()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getSchemeSpecificPart(); }
-
- virtual sal_Bool SAL_CALL isHierarchical()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.isHierarchical(); }
-
- virtual sal_Bool SAL_CALL hasAuthority()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.hasAuthority(); }
-
- virtual rtl::OUString SAL_CALL getAuthority()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getAuthority(); }
-
- virtual rtl::OUString SAL_CALL getPath()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getPath(); }
-
- virtual sal_Bool SAL_CALL hasRelativePath()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.hasRelativePath(); }
-
- virtual sal_Int32 SAL_CALL getPathSegmentCount()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getPathSegmentCount(); }
-
- virtual rtl::OUString SAL_CALL getPathSegment(sal_Int32 index)
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getPathSegment(index); }
-
- virtual sal_Bool SAL_CALL hasQuery()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.hasQuery(); }
-
- virtual rtl::OUString SAL_CALL getQuery()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getQuery(); }
-
- virtual sal_Bool SAL_CALL hasFragment()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.hasFragment(); }
-
- virtual rtl::OUString SAL_CALL getFragment()
- throw (com::sun::star::uno::RuntimeException)
- { return m_base.getFragment(); }
-
- virtual void SAL_CALL setFragment(rtl::OUString const & fragment)
- throw (com::sun::star::uno::RuntimeException)
- { m_base.setFragment(fragment); }
-
- virtual void SAL_CALL clearFragment()
- throw (com::sun::star::uno::RuntimeException)
- { m_base.clearFragment(); }
-
- virtual rtl::OUString SAL_CALL getName() throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setName(rtl::OUString const & name)
- throw (css::uno::RuntimeException, css::lang::IllegalArgumentException);
-
- virtual sal_Bool SAL_CALL hasParameter(rtl::OUString const & key)
- throw (css::uno::RuntimeException);
-
- virtual rtl::OUString SAL_CALL getParameter(rtl::OUString const & key)
- throw (css::uno::RuntimeException);
-
- virtual void SAL_CALL setParameter(rtl::OUString const & key, rtl::OUString const & value)
- throw (css::uno::RuntimeException, css::lang::IllegalArgumentException);
-
-private:
- UrlReference(UrlReference &); // not implemented
- void operator =(UrlReference); // not implemented
-
- virtual ~UrlReference() {}
-
- sal_Int32 findParameter(rtl::OUString const & key);
-
- stoc::uriproc::UriReference m_base;
-};
-
-rtl::OUString UrlReference::getName() throw (css::uno::RuntimeException) {
- osl::MutexGuard g(m_base.m_mutex);
- sal_Int32 i = 0;
- return parsePart(m_base.m_path, true, &i);
-}
-
-void SAL_CALL UrlReference::setName(rtl::OUString const & name) throw (css::uno::RuntimeException, css::lang::IllegalArgumentException)
-{
- if (name.getLength() == 0)
- throw css::lang::IllegalArgumentException(
- ::rtl::OUString(), *this, 1);
-
- osl::MutexGuard g(m_base.m_mutex);
- sal_Int32 i = 0;
- parsePart(m_base.m_path, true, &i);
-
- rtl::OUStringBuffer newPath;
- newPath.append(encodeNameOrParamFragment(name));
- newPath.append(m_base.m_path.copy(i));
- m_base.m_path = newPath.makeStringAndClear();
-}
-
-sal_Bool UrlReference::hasParameter(rtl::OUString const & key)
- throw (css::uno::RuntimeException)
-{
- osl::MutexGuard g(m_base.m_mutex);
- return findParameter(key) >= 0;
-}
-
-rtl::OUString UrlReference::getParameter(rtl::OUString const & key)
- throw (css::uno::RuntimeException)
-{
- osl::MutexGuard g(m_base.m_mutex);
- sal_Int32 i = findParameter(key);
- return i >= 0 ? parsePart(m_base.m_path, false, &i) : rtl::OUString();
-}
-
-void UrlReference::setParameter(rtl::OUString const & key, rtl::OUString const & value)
- throw (css::uno::RuntimeException, css::lang::IllegalArgumentException)
-{
- if (key.getLength() == 0)
- throw css::lang::IllegalArgumentException(
- ::rtl::OUString(), *this, 1);
-
- osl::MutexGuard g(m_base.m_mutex);
- sal_Int32 i = findParameter(key);
- bool bExistent = ( i>=0 );
- if (!bExistent) {
- i = m_base.m_path.getLength();
- }
-
- rtl::OUStringBuffer newPath;
- newPath.append(m_base.m_path.copy(0, i));
- if (!bExistent) {
- newPath.append(sal_Unicode(m_base.m_path.indexOf('?') < 0 ? '?' : '&'));
- newPath.append(encodeNameOrParamFragment(key));
- newPath.append(sal_Unicode('='));
- }
- newPath.append(encodeNameOrParamFragment(value));
- if (bExistent) {
- /*oldValue = */
- parsePart(m_base.m_path, false, &i); // skip key
- newPath.append(m_base.m_path.copy(i));
- }
-
- m_base.m_path = newPath.makeStringAndClear();
-}
-
-sal_Int32 UrlReference::findParameter(rtl::OUString const & key) {
- sal_Int32 i = 0;
- parsePart(m_base.m_path, true, &i); // skip name
- for (;;) {
- if (i == m_base.m_path.getLength()) {
- return -1;
- }
- ++i; // skip '?' or '&'
- rtl::OUString k = parsePart(m_base.m_path, false, &i);
- ++i; // skip '='
- if (k == key) {
- return i;
- }
- parsePart(m_base.m_path, false, &i); // skip value
- }
-}
-
-class Parser: public cppu::WeakImplHelper2<
- css::lang::XServiceInfo, css::uri::XUriSchemeParser >
-{
-public:
- Parser() {}
-
- virtual rtl::OUString SAL_CALL getImplementationName()
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & serviceName)
- throw (css::uno::RuntimeException);
-
- virtual css::uno::Sequence< rtl::OUString > SAL_CALL
- getSupportedServiceNames() throw (css::uno::RuntimeException);
-
- virtual css::uno::Reference< css::uri::XUriReference > SAL_CALL
- parse(
- rtl::OUString const & scheme, rtl::OUString const & schemeSpecificPart)
- throw (css::uno::RuntimeException);
-
-private:
- Parser(Parser &); // not implemented
- void operator =(Parser); // not implemented
-
- virtual ~Parser() {}
-};
-
-rtl::OUString Parser::getImplementationName()
- throw (css::uno::RuntimeException)
-{
- return stoc_services::UriSchemeParser_vndDOTsunDOTstarDOTscript::
- getImplementationName();
-}
-
-sal_Bool Parser::supportsService(rtl::OUString const & serviceName)
- throw (css::uno::RuntimeException)
-{
- return stoc::uriproc::supportsService(
- getSupportedServiceNames(), serviceName);
-}
-
-css::uno::Sequence< rtl::OUString > Parser::getSupportedServiceNames()
- throw (css::uno::RuntimeException)
-{
- return stoc_services::UriSchemeParser_vndDOTsunDOTstarDOTscript::
- getSupportedServiceNames();
-}
-
-css::uno::Reference< css::uri::XUriReference >
-Parser::parse(
- rtl::OUString const & scheme, rtl::OUString const & schemeSpecificPart)
- throw (css::uno::RuntimeException)
-{
- if (!parseSchemeSpecificPart(schemeSpecificPart)) {
- return 0;
- }
- try {
- return new UrlReference(scheme, schemeSpecificPart);
- } catch (std::bad_alloc &) {
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("std::bad_alloc")), 0);
- }
-}
-
-}
-
-namespace stoc_services {
-namespace UriSchemeParser_vndDOTsunDOTstarDOTscript {
-
-css::uno::Reference< css::uno::XInterface > create(
- css::uno::Reference< css::uno::XComponentContext > const &)
- SAL_THROW((css::uno::Exception))
-{
- //TODO: single instance
- try {
- return static_cast< cppu::OWeakObject * >(new Parser);
- } catch (std::bad_alloc &) {
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("std::bad_alloc")), 0);
- }
-}
-
-rtl::OUString getImplementationName() {
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.uri.UriSchemeParser_vndDOTsunDOTstarDOTscript"));
-}
-
-css::uno::Sequence< rtl::OUString > getSupportedServiceNames() {
- css::uno::Sequence< rtl::OUString > s(1);
- s[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uri.UriSchemeParser_vndDOTsunDOTstarDOTscript"));
- return s;
-}
-
-} }
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.hxx b/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.hxx
deleted file mode 100644
index f2abe47a7..000000000
--- a/stoc/source/uriproc/UriSchemeParser_vndDOTsunDOTstarDOTscript.hxx
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 \
- INCLUDED_stoc_source_uriproc_UriSchemeParser_vndDOTsunDOTstarDOTscript_hxx
-#define \
- INCLUDED_stoc_source_uriproc_UriSchemeParser_vndDOTsunDOTstarDOTscript_hxx
-
-#include "com/sun/star/uno/Exception.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "sal/types.h"
-
-namespace com { namespace sun { namespace star { namespace uno {
- class XComponentContext;
- class XInterface;
-} } } }
-namespace rtl { class OUString; }
-
-namespace stoc { namespace uriproc {
-
-namespace UriSchemeParser_vndDOTsunDOTstarDOTscript {
- com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL
- create(
- com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >
- const &)
- SAL_THROW((com::sun::star::uno::Exception));
-
- rtl::OUString SAL_CALL getImplementationName();
-
- com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL
- getSupportedServiceNames();
-}
-
-} }
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/uriproc/VndSunStarPkgUrlReferenceFactory.cxx b/stoc/source/uriproc/VndSunStarPkgUrlReferenceFactory.cxx
deleted file mode 100644
index f117b5b00..000000000
--- a/stoc/source/uriproc/VndSunStarPkgUrlReferenceFactory.cxx
+++ /dev/null
@@ -1,170 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "stocservices.hxx"
-
-#include "supportsService.hxx"
-
-#include "com/sun/star/lang/XServiceInfo.hpp"
-#include "com/sun/star/uno/Exception.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/RuntimeException.hpp"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "com/sun/star/uno/XComponentContext.hpp"
-#include "com/sun/star/uno/XInterface.hpp"
-#include "com/sun/star/uri/UriReferenceFactory.hpp"
-#include "com/sun/star/uri/XUriReference.hpp"
-#include "com/sun/star/uri/XUriReferenceFactory.hpp"
-#include "com/sun/star/uri/XVndSunStarPkgUrlReferenceFactory.hpp"
-#include "cppuhelper/implbase2.hxx"
-#include "cppuhelper/weak.hxx"
-#include "rtl/string.h"
-#include "rtl/textenc.h"
-#include "rtl/uri.h"
-#include "rtl/uri.hxx"
-#include "rtl/ustrbuf.hxx"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-
-#include <new>
-
-namespace css = com::sun::star;
-
-namespace {
-
-class Factory: public cppu::WeakImplHelper2<
- css::lang::XServiceInfo, css::uri::XVndSunStarPkgUrlReferenceFactory >
-{
-public:
- explicit Factory(
- css::uno::Reference< css::uno::XComponentContext > const & context):
- m_context(context) {}
-
- virtual rtl::OUString SAL_CALL getImplementationName()
- throw (css::uno::RuntimeException);
-
- virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & serviceName)
- throw (css::uno::RuntimeException);
-
- virtual css::uno::Sequence< rtl::OUString > SAL_CALL
- getSupportedServiceNames() throw (css::uno::RuntimeException);
-
- virtual css::uno::Reference< css::uri::XUriReference > SAL_CALL
- createVndSunStarPkgUrlReference(
- css::uno::Reference< css::uri::XUriReference > const & authority)
- throw (css::uno::RuntimeException);
-
-private:
- Factory(Factory &); // not implemented
- void operator =(Factory); // not implemented
-
- virtual ~Factory() {}
-
- css::uno::Reference< css::uno::XComponentContext > m_context;
-};
-
-rtl::OUString Factory::getImplementationName()
- throw (css::uno::RuntimeException)
-{
- return
- stoc_services::VndSunStarPkgUrlReferenceFactory::
- getImplementationName();
-}
-
-sal_Bool Factory::supportsService(rtl::OUString const & serviceName)
- throw (css::uno::RuntimeException)
-{
- return stoc::uriproc::supportsService(
- getSupportedServiceNames(), serviceName);
-}
-
-css::uno::Sequence< rtl::OUString > Factory::getSupportedServiceNames()
- throw (css::uno::RuntimeException)
-{
- return stoc_services::VndSunStarPkgUrlReferenceFactory::
- getSupportedServiceNames();
-}
-
-css::uno::Reference< css::uri::XUriReference >
-Factory::createVndSunStarPkgUrlReference(
- css::uno::Reference< css::uri::XUriReference > const & authority)
- throw (css::uno::RuntimeException)
-{
- OSL_ASSERT(authority.is());
- if (authority->isAbsolute() && !authority->hasFragment()) {
- rtl::OUStringBuffer buf;
- buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("vnd.sun.star.pkg://"));
- buf.append(
- rtl::Uri::encode(
- authority->getUriReference(), rtl_UriCharClassRegName,
- rtl_UriEncodeIgnoreEscapes, RTL_TEXTENCODING_UTF8));
- css::uno::Reference< css::uri::XUriReference > uriRef(
- css::uri::UriReferenceFactory::create(m_context)->parse(
- buf.makeStringAndClear()));
- OSL_ASSERT(uriRef.is());
- return uriRef;
- } else {
- return css::uno::Reference< css::uri::XUriReference >();
- }
-}
-
-}
-
-namespace stoc_services { namespace VndSunStarPkgUrlReferenceFactory
-{
-
-css::uno::Reference< css::uno::XInterface > create(
- css::uno::Reference< css::uno::XComponentContext > const & context)
- SAL_THROW((css::uno::Exception))
-{
- try {
- return static_cast< cppu::OWeakObject * >(new Factory(context));
- } catch (std::bad_alloc &) {
- throw css::uno::RuntimeException(
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("std::bad_alloc")), 0);
- }
-}
-
-rtl::OUString getImplementationName() {
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.uri.VndSunStarPkgUrlReferenceFactory"));
-}
-
-css::uno::Sequence< rtl::OUString > getSupportedServiceNames() {
- css::uno::Sequence< rtl::OUString > s(1);
- s[0] = rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uri.VndSunStarPkgUrlReferenceFactory"));
- return s;
-}
-
-} }
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/uriproc/VndSunStarPkgUrlReferenceFactory.hxx b/stoc/source/uriproc/VndSunStarPkgUrlReferenceFactory.hxx
deleted file mode 100644
index 48f2c63d5..000000000
--- a/stoc/source/uriproc/VndSunStarPkgUrlReferenceFactory.hxx
+++ /dev/null
@@ -1,62 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 INCLUDED_stoc_source_uriproc_VndSunStarPkgUrlReferenceFactory_hxx
-#define INCLUDED_stoc_source_uriproc_VndSunStarPkgUrlReferenceFactory_hxx
-
-#include "com/sun/star/uno/Exception.hpp"
-#include "com/sun/star/uno/Reference.hxx"
-#include "com/sun/star/uno/Sequence.hxx"
-#include "sal/types.h"
-
-namespace com { namespace sun { namespace star { namespace uno {
- class XComponentContext;
- class XInterface;
-} } } }
-namespace rtl { class OUString; }
-
-namespace stoc { namespace uriproc {
-
-namespace VndSunStarPkgUrlReferenceFactory {
- com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL
- create(
- com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >
- const & context)
- SAL_THROW((com::sun::star::uno::Exception));
-
- rtl::OUString SAL_CALL getImplementationName();
-
- com::sun::star::uno::Sequence< rtl::OUString > SAL_CALL
- getSupportedServiceNames();
-}
-
-} }
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/uriproc/makefile.mk b/stoc/source/uriproc/makefile.mk
deleted file mode 100644
index 194da2219..000000000
--- a/stoc/source/uriproc/makefile.mk
+++ /dev/null
@@ -1,53 +0,0 @@
-#*************************************************************************
-#
-# 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.
-#
-#*************************************************************************
-
-PRJ=..$/..
-PRJNAME=stoc
-TARGET=uriproc
-ENABLE_EXCEPTIONS := TRUE
-
-# --- openoffice.org.orig/Settings -----------------------------------------------------
-
-.INCLUDE: settings.mk
-DLLPRE =
-
-# ------------------------------------------------------------------
-
-.INCLUDE : ..$/cppumaker.mk
-
-SLOFILES = \
- $(SLO)$/ExternalUriReferenceTranslator.obj \
- $(SLO)$/UriReference.obj \
- $(SLO)$/UriReferenceFactory.obj \
- $(SLO)$/UriSchemeParser_vndDOTsunDOTstarDOTexpand.obj \
- $(SLO)$/UriSchemeParser_vndDOTsunDOTstarDOTscript.obj \
- $(SLO)$/VndSunStarPkgUrlReferenceFactory.obj \
- $(SLO)$/supportsService.obj
-
-# ------------------------------------------------------------------
-
-.INCLUDE: target.mk
diff --git a/stoc/source/uriproc/supportsService.cxx b/stoc/source/uriproc/supportsService.cxx
deleted file mode 100644
index 1bf136ac8..000000000
--- a/stoc/source/uriproc/supportsService.cxx
+++ /dev/null
@@ -1,54 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_stoc.hxx"
-
-#include "supportsService.hxx"
-
-#include "com/sun/star/uno/Sequence.hxx"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-
-namespace stoc { namespace uriproc {
-
-bool supportsService(
- com::sun::star::uno::Sequence< rtl::OUString > const & serviceNames,
- rtl::OUString const & serviceName)
-{
- for (sal_Int32 i = 0; i < serviceNames.getLength(); ++i) {
- if (serviceNames[i] == serviceName) {
- return true;
- }
- }
- return false;
-}
-
-} }
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/uriproc/supportsService.hxx b/stoc/source/uriproc/supportsService.hxx
deleted file mode 100644
index 5103bec31..000000000
--- a/stoc/source/uriproc/supportsService.hxx
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * 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 INCLUDED_stoc_source_uriproc_supportsService_hxx
-#define INCLUDED_stoc_source_uriproc_supportsService_hxx
-
-#include "com/sun/star/uno/Sequence.hxx"
-
-namespace rtl { class OUString; }
-
-namespace stoc { namespace uriproc {
-
-bool supportsService(
- com::sun::star::uno::Sequence< rtl::OUString > const & serviceNames,
- rtl::OUString const & serviceName);
-
-} }
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */