diff options
author | Michael Stahl <mstahl@redhat.com> | 2012-01-28 20:57:40 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2012-01-28 20:57:40 +0100 |
commit | 2716f7dce26f16a2b677c178aa7d01cea096ae47 (patch) | |
tree | 9e9f67205cd5b72f1031721273e1534a3a1e5b0f /pyuno/source/module/unohelper.py | |
parent | 10ac9e750447fd57e3cef7993b0ad6c6538d6269 (diff) |
replace obsolete "master" branch with README that points at new repoHEADmaster-deletedmaster
Diffstat (limited to 'pyuno/source/module/unohelper.py')
-rw-r--r-- | pyuno/source/module/unohelper.py | 306 |
1 files changed, 0 insertions, 306 deletions
diff --git a/pyuno/source/module/unohelper.py b/pyuno/source/module/unohelper.py deleted file mode 100644 index ee5f3712d..000000000 --- a/pyuno/source/module/unohelper.py +++ /dev/null @@ -1,306 +0,0 @@ -# -*- 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. -# -#************************************************************************* -import uno -import pyuno -import os -import sys - -from com.sun.star.lang import XTypeProvider, XSingleComponentFactory, XServiceInfo -from com.sun.star.uno import RuntimeException, XCurrentContext -from com.sun.star.beans.MethodConcept import ALL as METHOD_CONCEPT_ALL -from com.sun.star.beans.PropertyConcept import ALL as PROPERTY_CONCEPT_ALL - -from com.sun.star.reflection.ParamMode import \ - IN as PARAM_MODE_IN, \ - OUT as PARAM_MODE_OUT, \ - INOUT as PARAM_MODE_INOUT - -from com.sun.star.beans.PropertyAttribute import \ - MAYBEVOID as PROP_ATTR_MAYBEVOID, \ - BOUND as PROP_ATTR_BOUND, \ - CONSTRAINED as PROP_ATTR_CONSTRAINED, \ - TRANSIENT as PROP_ATTR_TRANSIENT, \ - READONLY as PROP_ATTR_READONLY, \ - MAYBEAMBIGUOUS as PROP_ATTR_MAYBEAMBIGUOUS, \ - MAYBEDEFAULT as PROP_ATTR_MAYBEDEFAULT, \ - REMOVEABLE as PROP_ATTR_REMOVEABLE - -def _mode_to_str( mode ): - ret = "[]" - if mode == PARAM_MODE_INOUT: - ret = "[inout]" - elif mode == PARAM_MODE_OUT: - ret = "[out]" - elif mode == PARAM_MODE_IN: - ret = "[in]" - return ret - -def _propertymode_to_str( mode ): - ret = "" - if PROP_ATTR_REMOVEABLE & mode: - ret = ret + "removeable " - if PROP_ATTR_MAYBEDEFAULT & mode: - ret = ret + "maybedefault " - if PROP_ATTR_MAYBEAMBIGUOUS & mode: - ret = ret + "maybeambigous " - if PROP_ATTR_READONLY & mode: - ret = ret + "readonly " - if PROP_ATTR_TRANSIENT & mode: - ret = ret + "tranient " - if PROP_ATTR_CONSTRAINED & mode: - ret = ret + "constrained " - if PROP_ATTR_BOUND & mode: - ret = ret + "bound " - if PROP_ATTR_MAYBEVOID & mode: - ret = ret + "maybevoid " - return ret.rstrip() - -def inspect( obj , out ): - if isinstance( obj, uno.Type ) or \ - isinstance( obj, uno.Char ) or \ - isinstance( obj, uno.Bool ) or \ - isinstance( obj, uno.ByteSequence ) or \ - isinstance( obj, uno.Enum ) or \ - isinstance( obj, uno.Any ): - out.write( str(obj) + "\n") - return - - ctx = uno.getComponentContext() - introspection = \ - ctx.ServiceManager.createInstanceWithContext( "com.sun.star.beans.Introspection", ctx ) - - out.write( "Supported services:\n" ) - if hasattr( obj, "getSupportedServiceNames" ): - names = obj.getSupportedServiceNames() - for ii in names: - out.write( " " + ii + "\n" ) - else: - out.write( " unknown\n" ) - - out.write( "Interfaces:\n" ) - if hasattr( obj, "getTypes" ): - interfaces = obj.getTypes() - for ii in interfaces: - out.write( " " + ii.typeName + "\n" ) - else: - out.write( " unknown\n" ) - - access = introspection.inspect( obj ) - methods = access.getMethods( METHOD_CONCEPT_ALL ) - out.write( "Methods:\n" ) - for ii in methods: - out.write( " " + ii.ReturnType.Name + " " + ii.Name ) - args = ii.ParameterTypes - infos = ii.ParameterInfos - out.write( "( " ) - for i in range( 0, len( args ) ): - if i > 0: - out.write( ", " ) - out.write( _mode_to_str( infos[i].aMode ) + " " + args[i].Name + " " + infos[i].aName ) - out.write( " )\n" ) - - props = access.getProperties( PROPERTY_CONCEPT_ALL ) - out.write ("Properties:\n" ) - for ii in props: - out.write( " ("+_propertymode_to_str( ii.Attributes ) + ") "+ii.Type.typeName+" "+ii.Name+ "\n" ) - -def createSingleServiceFactory( clazz, implementationName, serviceNames ): - return _FactoryHelper_( clazz, implementationName, serviceNames ) - -class _ImplementationHelperEntry: - def __init__(self, ctor,serviceNames): - self.ctor = ctor - self.serviceNames = serviceNames - -class ImplementationHelper: - def __init__(self): - self.impls = {} - - def addImplementation( self, ctor, implementationName, serviceNames ): - self.impls[implementationName] = _ImplementationHelperEntry(ctor,serviceNames) - - def writeRegistryInfo( self, regKey, smgr ): - for i in list(self.impls.items()): - keyName = "/"+ i[0] + "/UNO/SERVICES" - key = regKey.createKey( keyName ) - for serviceName in i[1].serviceNames: - key.createKey( serviceName ) - return 1 - - def getComponentFactory( self, implementationName , regKey, smgr ): - entry = self.impls.get( implementationName, None ) - if entry == None: - raise RuntimeException( implementationName + " is unknown" , None ) - return createSingleServiceFactory( entry.ctor, implementationName, entry.serviceNames ) - - def getSupportedServiceNames( self, implementationName ): - entry = self.impls.get( implementationName, None ) - if entry == None: - raise RuntimeException( implementationName + " is unknown" , None ) - return entry.serviceNames - - def supportsService( self, implementationName, serviceName ): - entry = self.impls.get( implementationName,None ) - if entry == None: - raise RuntimeException( implementationName + " is unknown", None ) - return serviceName in entry.serviceNames - - -class ImplementationEntry: - def __init__(self, implName, supportedServices, clazz ): - self.implName = implName - self.supportedServices = supportedServices - self.clazz = clazz - -def writeRegistryInfoHelper( smgr, regKey, seqEntries ): - for entry in seqEntries: - keyName = "/"+ entry.implName + "/UNO/SERVICES" - key = regKey.createKey( keyName ) - for serviceName in entry.supportedServices: - key.createKey( serviceName ) - -def systemPathToFileUrl( systemPath ): - "returns a file-url for the given system path" - return pyuno.systemPathToFileUrl( systemPath ) - -def fileUrlToSystemPath( url ): - "returns a system path (determined by the system, the python interpreter is running on)" - return pyuno.fileUrlToSystemPath( url ) - -def absolutize( path, relativeUrl ): - "returns an absolute file url from the given urls" - return pyuno.absolutize( path, relativeUrl ) - -def getComponentFactoryHelper( implementationName, smgr, regKey, seqEntries ): - for x in seqEntries: - if x.implName == implementationName: - return createSingleServiceFactory( x.clazz, implementationName, x.supportedServices ) - -def addComponentsToContext( toBeExtendedContext, contextRuntime, componentUrls, loaderName ): - smgr = contextRuntime.ServiceManager - loader = smgr.createInstanceWithContext( loaderName, contextRuntime ) - implReg = smgr.createInstanceWithContext( "com.sun.star.registry.ImplementationRegistration",contextRuntime) - - isWin = os.name == 'nt' or os.name == 'dos' - isMac = sys.platform == 'darwin' - # create a temporary registry - for componentUrl in componentUrls: - reg = smgr.createInstanceWithContext( "com.sun.star.registry.SimpleRegistry", contextRuntime ) - reg.open( "", 0, 1 ) - if not isWin and componentUrl.endswith( ".uno" ): # still allow platform independent naming - if isMac: - componentUrl = componentUrl + ".dylib" - else: - componentUrl = componentUrl + ".so" - - implReg.registerImplementation( loaderName,componentUrl, reg ) - rootKey = reg.getRootKey() - implementationKey = rootKey.openKey( "IMPLEMENTATIONS" ) - implNames = implementationKey.getKeyNames() - extSMGR = toBeExtendedContext.ServiceManager - for x in implNames: - fac = loader.activate( max(x.split("/")),"",componentUrl,rootKey) - extSMGR.insert( fac ) - reg.close() - -# never shrinks ! -_g_typeTable = {} -def _unohelper_getHandle( self): - ret = None - if self.__class__ in _g_typeTable: - ret = _g_typeTable[self.__class__] - else: - names = {} - traverse = list(self.__class__.__bases__) - while len( traverse ) > 0: - item = traverse.pop() - bases = item.__bases__ - if uno.isInterface( item ): - names[item.__pyunointerface__] = None - elif len(bases) > 0: - # the "else if", because we only need the most derived interface - traverse = traverse + list(bases)# - - lst = list(names.keys()) - types = [] - for x in lst: - t = uno.getTypeByName( x ) - types.append( t ) - - ret = tuple(types) , uno.generateUuid() - _g_typeTable[self.__class__] = ret - return ret - -class Base(XTypeProvider): - def getTypes( self ): - return _unohelper_getHandle( self )[0] - def getImplementationId(self): - return _unohelper_getHandle( self )[1] - -class CurrentContext(XCurrentContext, Base ): - """a current context implementation, which first does a lookup in the given - hashmap and if the key cannot be found, it delegates to the predecessor - if available - """ - def __init__( self, oldContext, hashMap ): - self.hashMap = hashMap - self.oldContext = oldContext - - def getValueByName( self, name ): - if name in self.hashMap: - return self.hashMap[name] - elif self.oldContext != None: - return self.oldContext.getValueByName( name ) - else: - return None - -# ------------------------------------------------- -# implementation details -# ------------------------------------------------- -class _FactoryHelper_( XSingleComponentFactory, XServiceInfo, Base ): - def __init__( self, clazz, implementationName, serviceNames ): - self.clazz = clazz - self.implementationName = implementationName - self.serviceNames = serviceNames - - def getImplementationName( self ): - return self.implementationName - - def supportsService( self, ServiceName ): - return ServiceName in self.serviceNames - - def getSupportedServiceNames( self ): - return self.serviceNames - - def createInstanceWithContext( self, context ): - return self.clazz( context ) - - def createInstanceWithArgumentsAndContext( self, args, context ): - return self.clazz( context, *args ) - -# vim:set shiftwidth=4 softtabstop=4 expandtab: |