Top > OOoBasic > Generic > TypeDescription

TypeDescription Edit

UNO オブジェクトの型に関する情報を提供するサービス。どういったときに利用するかはリフレクションを参照。

Reflection ではオブジェクトが必要ですが、TypeDescription では名前で指定します。Reflection でも forName メソッドで名前指定で情報が取得出来ますが、あちらはオブジェクトを作成したりといった場合に利用されます。また、TypeDescription では constants group も情報が取得できます。

TypeDescriptionサービス Edit

TypeDescription サービスは singleton 存在します。

  0
  1
  2
  3
ctx = XSCRIPTCONTEXT.getComponentContext()
 
tdm = ctx.getByName(
    u'/singletons/com.sun.star.reflection.theTypeDescriptionManager')

各種型情報 Edit

基本的に、上記で取得したサービスから getByHierachicalName メソッドで XTypeDescription インターフェースを取得してそこから各型情報を取得します。

  0
  1
  2
  3
  4
if tdm.hasByHierarchicalName(u'com.sun.star.awt.Key'):
    td = tdm.getByHierarchicalName(u'com.sun.star.awt.Key')
    
    typeClass = td.getTypeClass() # TypeClass value of the type
    typeName = td.getName() # name of the type

XTypeDescription インターフェースのメソッドでは型および型名が取得できます。 TypeClass は com.sun.star.uno.TypeClass enum に定義されています。 取得されるインターフェースは一様ですが、TypeClass により大方 (.uno.TypeClass に定義された) 以下の型に分かれます。

Module Edit

モジュールに含まれるその他のコンポーネントのモジュール名および型情報が得られます。XModuleTypeDescription

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
from com.sun.star.uno.TypeClass import MODULE as TC_MODULE
 
def tdm_module_test(ctx):
    tdm = ctx.getByName(
        u'/singletons/com.sun.star.reflection.theTypeDescriptionManager')
    
    if tdm.hasByHierarchicalName(u'com.sun.star.awt'):
        td = tdm.getByHierarchicalName(u'com.sun.star.awt')
 
        if td.getTypeClass() == TC_MODULE:
            members = td.getMembers()
            for member in members:
                print member.getName(),":", member.getTypeClass().value

Service Edit

必要なサービス、インターフェースやオプションで利用できるサービス、インターフェースの情報が得られます。また、そのサービスのプロパティに関する型情報も得られます。XServiceTypeDescription

サービスの型情報は XServiceTypeDescription、インターフェースの型情報は XInterfaceTypeDescription、プロパティは XPropertyTypeDescription です。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
from com.sun.star.uno.TypeClass import SERVICE as TC_SERVICE
 
def tdm_service_test(ctx):
    tdm = ctx.getByName(
        u'/singletons/com.sun.star.reflection.theTypeDescriptionManager')
    
    if tdm.hasByHierarchicalName(u'com.sun.star.frame.PopupMenuController'):
        td = tdm.getByHierarchicalName(u'com.sun.star.frame.PopupMenuController')
        
        if td.getTypeClass() == TC_SERVICE:
            print "Mandatory services: "
            MandatoryServices = td.getMandatoryServices()
            for service in MandatoryServices:
                print service.getName()
            
            print "Optional services:"
            OptionalServices = td.getOptionalServices()
            for service in OptionalServices:
                print service.getName()
            
            print "Mandatory interfaces:"
            MandatoryInterfaces = td.getMandatoryInterfaces()
            for interface in MandatoryInterfaces:
                print interface.getName()
            
            print "Optional interfaces: "
            OptionalInterfaces = td.getOptionalInterfaces()
            for interface in OptionalInterfaces:
                print interface.getName()
            
            print "Properties: "
            Properties = td.getProperties()
            for prop in Properties:
                prop.getName()

Singleton Edit

Exception Edit

例外のベースの型やメンバーの型の情報が得られます。XCompoundTypeDescription

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
from com.sun.star.uno.TypeClass import EXCEPTION as TC_EXCEPTION
 
def tdm_exception_test(ctx):
    tdm = ctx.getByName(
        u'/singletons/com.sun.star.reflection.theTypeDescriptionManager')
    
    if tdm.hasByHierarchicalName(u'com.sun.star.beans.UnknownPropertyException'):
        td = tdm.getByHierarchicalName(u'com.sun.star.beans.UnknownPropertyException')
        
        if td.getTypeClass() == TC_EXCEPTION:
            print td.getName()
            print "Base: %s" % td.getBaseType().getName()
            print "Members: "
            print td.getMemberNames()
            members = td.getMemberTypes()

Struct Edit

Enum Edit

Enum のデフォルト値や名前と値の情報が得られます。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
from com.sun.star.uno.TypeClass import ENUM as TC_ENUM
 
def tdm_enum_test(ctx):
    tdm = ctx.getByName(
        u'/singletons/com.sun.star.reflection.theTypeDescriptionManager')
    
    if tdm.hasByHierarchicalName(u'com.sun.star.awt.FontSlant'):
        td = tdm.getByHierarchicalName(u'com.sun.star.awt.FontSlant')
        
        if td.getTypeClass() == TC_ENUM:
            print "Enum: %s" % td.getName()
            print "Default Value: %s" % td.getDefaultEnumValue()
            print "Members:"
            names = td.getEnumNames()
            values = td.getEnumValues()
            for name, value in zip(names, values):
                print "%s: %s" % (name, value)

Interface Edit

インターフェースの型情報。直接継承しているインターフェース名や Attribute、メソッド名などが得られます。XInterfaceTypeDescription、XInterfaceTypeDescription2、XInterfaceMemberTypeDescription

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
from com.sun.star.uno.TypeClass import INTERFACE as TC_INTERFACE
 
def tdm_test(ctx):
    tdm = ctx.getByName(
        u'/singletons/com.sun.star.reflection.theTypeDescriptionManager')
    
    name = u'com.sun.star.io.XTempFile'
    if tdm.hasByHierarchicalName(name):
        td = tdm.getByHierarchicalName(name)
        
        if td.getTypeClass() == TC_INTERFACE:
            print "Interface Name: %s" % td.getName()
            print "Base Types: "
            BaseTypes = td.getBaseTypes()
            for BaseType in BaseTypes:
                print BaseType.getName()
                
            print "Optional Base Type:"
            OptionalBaseTypes = td.getOptionalBaseTypes()
            for OptionalBaseTypes in OptionalBaseTypes:
                print OptionalBaseType.getName()
            
            print "Attributes and Methods:"
            members = td.getMembers()
            for member in members:
                print member.getMemberName()

XTempFile インターフェースではメソッドがありませんが Attribute があります。

Method Edit

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
from com.sun.star.uno.TypeClass import INTERFACE as TC_INTERFACE
from com.sun.star.uno.TypeClass import INTERFACE_METHOD as TC_INTERFACE_METHOD, \
    INTERFACE_ATTRIBUTE as TC_INTERFACE_ATTRIBUTE
 
def tdm_test(ctx):
    tdm = ctx.getByName(
        u'/singletons/com.sun.star.reflection.theTypeDescriptionManager')
    
    name = u'com.sun.star.awt.XActionListener'
    if tdm.hasByHierarchicalName(name):
        td = tdm.getByHierarchicalName(name)
        
        if td.getTypeClass() == TC_INTERFACE:
            members = td.getMembers()
            for member in members:
                typeClass = member.getTypeClass()
                
                if typeClass == TC_INTERFACE_ATTRIBUTE:
                    print "Attribute: %s %s" % (member.getType().getName(), member.getMemberName())
                    
                elif typeClass == TC_INTERFACE_METHOD:
                    print "Method: %s" % member.getMemberName()
                    #parameters = member.getParameters()
                    #for parameter in parameters:
                    #    print parameter.getType().getName()

Property Edit

Type Def Edit

Constants Group Edit

定数の定数名および定数の値が取得できます。XConstantsTypeDescription および XConstantTypeDescription インターフェース。

  0
  1
  2
  3
  4
  5
  6
    from com.sun.star.uno.TypeClass import CONSTANTS as TC_CONSTANTS
    
    td = tdm.getByHierachcalName(u'com.sun.star.awt.Key')
    if td.getTypeClass() == TC_CONSTANTS:
        constants = td.getConstants()
        for const in constants:
            print "Name: %s, Value: %s" (const.getName(), const.getConstantValue() )

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes