1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski package util; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import com.sun.star.uno.XInterface; 27*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 28*b1cdbd2cSJim Jagielski import com.sun.star.uno.Type; 29*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 30*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySetInfo; 31*b1cdbd2cSJim Jagielski import com.sun.star.beans.Property; 32*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyAttribute; 33*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue; 34*b1cdbd2cSJim Jagielski import com.sun.star.lang.XTypeProvider; 35*b1cdbd2cSJim Jagielski import com.sun.star.lang.XServiceInfo; 36*b1cdbd2cSJim Jagielski import java.io.PrintWriter; 37*b1cdbd2cSJim Jagielski import java.lang.reflect.Method; 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski /** 40*b1cdbd2cSJim Jagielski * This class accumulates all kinds of methods for accessing debug information 41*b1cdbd2cSJim Jagielski * from UNO implementations. 42*b1cdbd2cSJim Jagielski */ 43*b1cdbd2cSJim Jagielski public class dbg { 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski /** 46*b1cdbd2cSJim Jagielski * Prints information about the supported interfaces of an implementation 47*b1cdbd2cSJim Jagielski * to standard out. 48*b1cdbd2cSJim Jagielski * @param xTarget The implementation which should be analysed. 49*b1cdbd2cSJim Jagielski * @see com.sun.star.uno.XInterface 50*b1cdbd2cSJim Jagielski */ printInterfaces(XInterface xTarget)51*b1cdbd2cSJim Jagielski public static void printInterfaces(XInterface xTarget) { 52*b1cdbd2cSJim Jagielski printInterfaces(xTarget, false); 53*b1cdbd2cSJim Jagielski } 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski /** 56*b1cdbd2cSJim Jagielski * Prints information about the supported interfaces of an implementation 57*b1cdbd2cSJim Jagielski * to standard out. Extended information can be printed. 58*b1cdbd2cSJim Jagielski * @param xTarget The implementation which should be analysed. 59*b1cdbd2cSJim Jagielski * @param extendedInfo Should extended information be printed? 60*b1cdbd2cSJim Jagielski * @see com.sun.star.uno.XInterface 61*b1cdbd2cSJim Jagielski */ printInterfaces(XInterface xTarget, boolean extendedInfo)62*b1cdbd2cSJim Jagielski public static void printInterfaces(XInterface xTarget, 63*b1cdbd2cSJim Jagielski boolean extendedInfo){ 64*b1cdbd2cSJim Jagielski Type[] types = getInterfaceTypes(xTarget); 65*b1cdbd2cSJim Jagielski if( null != types ) { 66*b1cdbd2cSJim Jagielski int nLen = types.length; 67*b1cdbd2cSJim Jagielski for( int i = 0; i < nLen ; i++ ) { 68*b1cdbd2cSJim Jagielski System.out.println(types[i].getTypeName()); 69*b1cdbd2cSJim Jagielski if (extendedInfo) { 70*b1cdbd2cSJim Jagielski printInterfaceInfo(types[i]); 71*b1cdbd2cSJim Jagielski System.out.println(); 72*b1cdbd2cSJim Jagielski } 73*b1cdbd2cSJim Jagielski } 74*b1cdbd2cSJim Jagielski } 75*b1cdbd2cSJim Jagielski } 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski /** 78*b1cdbd2cSJim Jagielski * Returns all interface types of an implementation as a type array. 79*b1cdbd2cSJim Jagielski * @param xTarget The implementation which should be analyzed. 80*b1cdbd2cSJim Jagielski * @return An array with all interface types; null if there are none. 81*b1cdbd2cSJim Jagielski * @see com.sun.star.uno.XInterface 82*b1cdbd2cSJim Jagielski */ getInterfaceTypes(XInterface xTarget)83*b1cdbd2cSJim Jagielski public static Type[] getInterfaceTypes(XInterface xTarget) { 84*b1cdbd2cSJim Jagielski Type[] types = null; 85*b1cdbd2cSJim Jagielski XTypeProvider xTypeProvider = (XTypeProvider) 86*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( XTypeProvider.class, xTarget); 87*b1cdbd2cSJim Jagielski if( xTypeProvider != null ) 88*b1cdbd2cSJim Jagielski types = xTypeProvider.getTypes(); 89*b1cdbd2cSJim Jagielski return types; 90*b1cdbd2cSJim Jagielski } 91*b1cdbd2cSJim Jagielski 92*b1cdbd2cSJim Jagielski /** 93*b1cdbd2cSJim Jagielski * Returns true if a specified target implements the interface with the 94*b1cdbd2cSJim Jagielski * given name. Note that the comparison is not case sensitive. 95*b1cdbd2cSJim Jagielski * @param xTarget The implementation which should be analysed. 96*b1cdbd2cSJim Jagielski * @param ifcName The name of the interface that is tested. The name can 97*b1cdbd2cSJim Jagielski * be full qualified, such as 'com.sun.star.io.XInputStream', or only 98*b1cdbd2cSJim Jagielski * consist of the interface name, such as 'XText'. 99*b1cdbd2cSJim Jagielski * @return True, if xTarget implements the interface named ifcType 100*b1cdbd2cSJim Jagielski * @see com.sun.star.uno.XInterface 101*b1cdbd2cSJim Jagielski */ implementsInterface( XInterface xTarget, String ifcName)102*b1cdbd2cSJim Jagielski public static boolean implementsInterface( 103*b1cdbd2cSJim Jagielski XInterface xTarget, String ifcName) { 104*b1cdbd2cSJim Jagielski Type[] types = getInterfaceTypes(xTarget); 105*b1cdbd2cSJim Jagielski if( null != types ) { 106*b1cdbd2cSJim Jagielski int nLen = types.length; 107*b1cdbd2cSJim Jagielski for( int i = 0; i < nLen ; i++ ) { 108*b1cdbd2cSJim Jagielski if(types[i].getTypeName().toLowerCase().endsWith( 109*b1cdbd2cSJim Jagielski ifcName.toLowerCase())) 110*b1cdbd2cSJim Jagielski return true; 111*b1cdbd2cSJim Jagielski } 112*b1cdbd2cSJim Jagielski } 113*b1cdbd2cSJim Jagielski return false; 114*b1cdbd2cSJim Jagielski } 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski /** 117*b1cdbd2cSJim Jagielski * Prints information about an interface type. 118*b1cdbd2cSJim Jagielski * 119*b1cdbd2cSJim Jagielski * @param aType The type of the given interface. 120*b1cdbd2cSJim Jagielski * @see com.sun.star.uno.Type 121*b1cdbd2cSJim Jagielski */ printInterfaceInfo(Type aType)122*b1cdbd2cSJim Jagielski public static void printInterfaceInfo(Type aType) { 123*b1cdbd2cSJim Jagielski try { 124*b1cdbd2cSJim Jagielski Class zClass = aType.getZClass(); 125*b1cdbd2cSJim Jagielski Method[] methods = zClass.getDeclaredMethods(); 126*b1cdbd2cSJim Jagielski for (int i=0; i<methods.length; i++) { 127*b1cdbd2cSJim Jagielski System.out.println("\t" + methods[i].getReturnType().getName() 128*b1cdbd2cSJim Jagielski + " " + methods[i].getName() + "()"); 129*b1cdbd2cSJim Jagielski } 130*b1cdbd2cSJim Jagielski } 131*b1cdbd2cSJim Jagielski catch (Exception ex) { 132*b1cdbd2cSJim Jagielski System.out.println("Exception occured while printing InterfaceInfo"); 133*b1cdbd2cSJim Jagielski ex.printStackTrace(); 134*b1cdbd2cSJim Jagielski } 135*b1cdbd2cSJim Jagielski } 136*b1cdbd2cSJim Jagielski 137*b1cdbd2cSJim Jagielski /** 138*b1cdbd2cSJim Jagielski * Prints a string array to standard out. 139*b1cdbd2cSJim Jagielski * 140*b1cdbd2cSJim Jagielski * @param entries : The array to be printed. 141*b1cdbd2cSJim Jagielski */ printArray( String [] entries )142*b1cdbd2cSJim Jagielski public static void printArray( String [] entries ) { 143*b1cdbd2cSJim Jagielski for ( int i=0; i< entries.length;i++ ) { 144*b1cdbd2cSJim Jagielski System.out.println(entries[i]); 145*b1cdbd2cSJim Jagielski } 146*b1cdbd2cSJim Jagielski } 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski /** 149*b1cdbd2cSJim Jagielski * Print all information about the property <code>name</code> from 150*b1cdbd2cSJim Jagielski * the property set <code>PS</code> to standard out. 151*b1cdbd2cSJim Jagielski * @param PS The property set which should contain a property called 152*b1cdbd2cSJim Jagielski * <code>name</code>. 153*b1cdbd2cSJim Jagielski * @param name The name of the property. 154*b1cdbd2cSJim Jagielski * @see com.sun.star.beans.XPropertySet 155*b1cdbd2cSJim Jagielski */ printPropertyInfo(XPropertySet PS, String name)156*b1cdbd2cSJim Jagielski public static void printPropertyInfo(XPropertySet PS, String name) { 157*b1cdbd2cSJim Jagielski printPropertyInfo(PS, name, new PrintWriter(System.out)) ; 158*b1cdbd2cSJim Jagielski } 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim Jagielski /** 161*b1cdbd2cSJim Jagielski * Print all information about the property <code>name</code> from 162*b1cdbd2cSJim Jagielski * the property set <code>PS</code> to a print writer. 163*b1cdbd2cSJim Jagielski * @param PS The property set which should contain a property called 164*b1cdbd2cSJim Jagielski * <code>name</code>. 165*b1cdbd2cSJim Jagielski * @param name The name of the property. 166*b1cdbd2cSJim Jagielski * @param out The print writer which is used as output. 167*b1cdbd2cSJim Jagielski * @see com.sun.star.beans.XPropertySet 168*b1cdbd2cSJim Jagielski */ printPropertyInfo(XPropertySet PS, String name, PrintWriter out)169*b1cdbd2cSJim Jagielski public static void printPropertyInfo(XPropertySet PS, String name, 170*b1cdbd2cSJim Jagielski PrintWriter out) { 171*b1cdbd2cSJim Jagielski try { 172*b1cdbd2cSJim Jagielski XPropertySetInfo PSI = PS.getPropertySetInfo(); 173*b1cdbd2cSJim Jagielski Property[] props = PSI.getProperties(); 174*b1cdbd2cSJim Jagielski Property prop = PSI.getPropertyByName(name); 175*b1cdbd2cSJim Jagielski out.println("Property name is " + prop.Name); 176*b1cdbd2cSJim Jagielski out.println("Property handle is " + prop.Handle); 177*b1cdbd2cSJim Jagielski out.println("Property type is " + prop.Type.getTypeName()); 178*b1cdbd2cSJim Jagielski out.println("Property current value is " + 179*b1cdbd2cSJim Jagielski PS.getPropertyValue(name)); 180*b1cdbd2cSJim Jagielski out.println("Attributes :"); 181*b1cdbd2cSJim Jagielski short attr = prop.Attributes; 182*b1cdbd2cSJim Jagielski 183*b1cdbd2cSJim Jagielski if ((attr & PropertyAttribute.BOUND) != 0) 184*b1cdbd2cSJim Jagielski out.println("\t-BOUND"); 185*b1cdbd2cSJim Jagielski 186*b1cdbd2cSJim Jagielski if ((attr & PropertyAttribute.CONSTRAINED) != 0) 187*b1cdbd2cSJim Jagielski out.println("\t-CONSTRAINED"); 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski if ((attr & PropertyAttribute.MAYBEAMBIGUOUS) != 0) 190*b1cdbd2cSJim Jagielski out.println("\t-MAYBEAMBIGUOUS"); 191*b1cdbd2cSJim Jagielski 192*b1cdbd2cSJim Jagielski if ((attr & PropertyAttribute.MAYBEDEFAULT) != 0) 193*b1cdbd2cSJim Jagielski out.println("\t-MAYBEDEFAULT"); 194*b1cdbd2cSJim Jagielski 195*b1cdbd2cSJim Jagielski if ((attr & PropertyAttribute.MAYBEVOID) != 0) 196*b1cdbd2cSJim Jagielski out.println("\t-MAYBEVOID"); 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski if ((attr & PropertyAttribute.READONLY) != 0) 199*b1cdbd2cSJim Jagielski out.println("\t-READONLY"); 200*b1cdbd2cSJim Jagielski 201*b1cdbd2cSJim Jagielski if ((attr & PropertyAttribute.REMOVEABLE) != 0) 202*b1cdbd2cSJim Jagielski out.println("\t-REMOVEABLE"); 203*b1cdbd2cSJim Jagielski 204*b1cdbd2cSJim Jagielski if ((attr & PropertyAttribute.TRANSIENT) != 0) 205*b1cdbd2cSJim Jagielski out.println("\t-TRANSIENT"); 206*b1cdbd2cSJim Jagielski } catch(com.sun.star.uno.Exception e) { 207*b1cdbd2cSJim Jagielski out.println("Exception!!!!"); 208*b1cdbd2cSJim Jagielski e.printStackTrace(out); 209*b1cdbd2cSJim Jagielski } 210*b1cdbd2cSJim Jagielski } 211*b1cdbd2cSJim Jagielski 212*b1cdbd2cSJim Jagielski /** 213*b1cdbd2cSJim Jagielski * Print the names and the values of a sequnze of <code>PropertyValue</code> 214*b1cdbd2cSJim Jagielski * to to standard out. 215*b1cdbd2cSJim Jagielski * @param ps The property which should displayed 216*b1cdbd2cSJim Jagielski * @see com.sun.star.beans.PropertyValue 217*b1cdbd2cSJim Jagielski */ 218*b1cdbd2cSJim Jagielski printProperyValueSequenzePairs(PropertyValue[] ps)219*b1cdbd2cSJim Jagielski public static void printProperyValueSequenzePairs(PropertyValue[] ps){ 220*b1cdbd2cSJim Jagielski for( int i = 0; i < ps.length; i++){ 221*b1cdbd2cSJim Jagielski printProperyValuePairs(ps[i], new PrintWriter(System.out)); 222*b1cdbd2cSJim Jagielski } 223*b1cdbd2cSJim Jagielski } 224*b1cdbd2cSJim Jagielski 225*b1cdbd2cSJim Jagielski /** 226*b1cdbd2cSJim Jagielski * Print the names and the values of a sequenze of <code>PropertyValue</code> 227*b1cdbd2cSJim Jagielski * to a print writer. 228*b1cdbd2cSJim Jagielski * @param ps The property which should displayed 229*b1cdbd2cSJim Jagielski * @param out The print writer which is used as output. 230*b1cdbd2cSJim Jagielski * @see com.sun.star.beans.PropertyValue 231*b1cdbd2cSJim Jagielski */ printProperyValueSequenzePairs(PropertyValue[] ps, PrintWriter out)232*b1cdbd2cSJim Jagielski public static void printProperyValueSequenzePairs(PropertyValue[] ps, PrintWriter out){ 233*b1cdbd2cSJim Jagielski for( int i = 0; i < ps.length; i++){ 234*b1cdbd2cSJim Jagielski printProperyValuePairs(ps[i], out); 235*b1cdbd2cSJim Jagielski } 236*b1cdbd2cSJim Jagielski } 237*b1cdbd2cSJim Jagielski 238*b1cdbd2cSJim Jagielski /** 239*b1cdbd2cSJim Jagielski * Print the name and the value of a <code>PropertyValue</code> to to standard out. 240*b1cdbd2cSJim Jagielski * @param ps The property which should displayed 241*b1cdbd2cSJim Jagielski * @see com.sun.star.beans.PropertyValue 242*b1cdbd2cSJim Jagielski */ printProperyValuePairs(PropertyValue ps)243*b1cdbd2cSJim Jagielski public static void printProperyValuePairs(PropertyValue ps){ 244*b1cdbd2cSJim Jagielski printProperyValuePairs(ps, new PrintWriter(System.out)); 245*b1cdbd2cSJim Jagielski } 246*b1cdbd2cSJim Jagielski 247*b1cdbd2cSJim Jagielski /** 248*b1cdbd2cSJim Jagielski * Print the name and the value of a <code>PropertyValue</code> to a print writer. 249*b1cdbd2cSJim Jagielski * @param ps The property which should displayed 250*b1cdbd2cSJim Jagielski * @param out The print writer which is used as output. 251*b1cdbd2cSJim Jagielski * @see com.sun.star.beans.PropertyValue 252*b1cdbd2cSJim Jagielski */ printProperyValuePairs(PropertyValue ps, PrintWriter out)253*b1cdbd2cSJim Jagielski public static void printProperyValuePairs(PropertyValue ps, PrintWriter out){ 254*b1cdbd2cSJim Jagielski 255*b1cdbd2cSJim Jagielski if (ps.Value instanceof String[] ){ 256*b1cdbd2cSJim Jagielski String[] values = (String[]) ps.Value; 257*b1cdbd2cSJim Jagielski String oneValue = "value is an empty String[]"; 258*b1cdbd2cSJim Jagielski if (values.length > 0){ 259*b1cdbd2cSJim Jagielski oneValue = "['"; 260*b1cdbd2cSJim Jagielski for( int i=0; i < values.length; i++){ 261*b1cdbd2cSJim Jagielski oneValue += values[i]; 262*b1cdbd2cSJim Jagielski if (i+1 < values.length) oneValue += "';'"; 263*b1cdbd2cSJim Jagielski } 264*b1cdbd2cSJim Jagielski oneValue += "']"; 265*b1cdbd2cSJim Jagielski } 266*b1cdbd2cSJim Jagielski out.println("--------"); 267*b1cdbd2cSJim Jagielski out.println(" Name: '" + ps.Name + "' contains String[]:"); 268*b1cdbd2cSJim Jagielski out.println(oneValue); 269*b1cdbd2cSJim Jagielski out.println("--------"); 270*b1cdbd2cSJim Jagielski 271*b1cdbd2cSJim Jagielski } else if (ps.Value instanceof PropertyValue){ 272*b1cdbd2cSJim Jagielski out.println("--------"); 273*b1cdbd2cSJim Jagielski out.println(" Name: '" + ps.Name + "' contains PropertyValue:"); 274*b1cdbd2cSJim Jagielski printProperyValuePairs((PropertyValue)ps.Value, out); 275*b1cdbd2cSJim Jagielski out.println("--------"); 276*b1cdbd2cSJim Jagielski 277*b1cdbd2cSJim Jagielski } else if (ps.Value instanceof PropertyValue[]){ 278*b1cdbd2cSJim Jagielski out.println("--------"); 279*b1cdbd2cSJim Jagielski out.println(" Name: '" + ps.Name + "' contains PropertyValue[]:"); 280*b1cdbd2cSJim Jagielski printProperyValueSequenzePairs((PropertyValue[])ps.Value, out); 281*b1cdbd2cSJim Jagielski out.println("--------"); 282*b1cdbd2cSJim Jagielski 283*b1cdbd2cSJim Jagielski } else { 284*b1cdbd2cSJim Jagielski out.println("Name: '" + ps.Name + "' Value: '" + ps.Value.toString() + "'"); 285*b1cdbd2cSJim Jagielski } 286*b1cdbd2cSJim Jagielski } 287*b1cdbd2cSJim Jagielski 288*b1cdbd2cSJim Jagielski /** 289*b1cdbd2cSJim Jagielski * Print the names of all properties inside this property set 290*b1cdbd2cSJim Jagielski * @param ps The property set which is printed. 291*b1cdbd2cSJim Jagielski * @see com.sun.star.beans.XPropertySet 292*b1cdbd2cSJim Jagielski */ printPropertiesNames(XPropertySet ps)293*b1cdbd2cSJim Jagielski public static void printPropertiesNames(XPropertySet ps) { 294*b1cdbd2cSJim Jagielski XPropertySetInfo psi = ps.getPropertySetInfo(); 295*b1cdbd2cSJim Jagielski Property[] props = psi.getProperties(); 296*b1cdbd2cSJim Jagielski for (int i = 0; i < props.length; i++) 297*b1cdbd2cSJim Jagielski System.out.println(i + ". " + props[i].Name); 298*b1cdbd2cSJim Jagielski } 299*b1cdbd2cSJim Jagielski 300*b1cdbd2cSJim Jagielski /** 301*b1cdbd2cSJim Jagielski * Print the supported services of a UNO object. 302*b1cdbd2cSJim Jagielski * @param aObject A UNO object. 303*b1cdbd2cSJim Jagielski */ getSuppServices(Object aObject)304*b1cdbd2cSJim Jagielski public static void getSuppServices (Object aObject) { 305*b1cdbd2cSJim Jagielski XServiceInfo xSI = (XServiceInfo) 306*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XServiceInfo.class,aObject); 307*b1cdbd2cSJim Jagielski printArray(xSI.getSupportedServiceNames()); 308*b1cdbd2cSJim Jagielski String str="Therein not Supported Service"; 309*b1cdbd2cSJim Jagielski boolean notSupportedServices = false; 310*b1cdbd2cSJim Jagielski for (int i=0;i<xSI.getSupportedServiceNames().length;i++) { 311*b1cdbd2cSJim Jagielski if (! xSI.supportsService(xSI.getSupportedServiceNames()[i])) { 312*b1cdbd2cSJim Jagielski notSupportedServices = true; 313*b1cdbd2cSJim Jagielski str+="\n" + xSI.getSupportedServiceNames()[i]; 314*b1cdbd2cSJim Jagielski } 315*b1cdbd2cSJim Jagielski } 316*b1cdbd2cSJim Jagielski if (notSupportedServices) 317*b1cdbd2cSJim Jagielski System.out.println(str); 318*b1cdbd2cSJim Jagielski } 319*b1cdbd2cSJim Jagielski 320*b1cdbd2cSJim Jagielski /** 321*b1cdbd2cSJim Jagielski * Get the unique implementation id of a UNO object. 322*b1cdbd2cSJim Jagielski * @param xTarget An implementation of a UNO object. 323*b1cdbd2cSJim Jagielski * @return The implementation id. 324*b1cdbd2cSJim Jagielski */ getImplID( XInterface xTarget )325*b1cdbd2cSJim Jagielski public static String getImplID( XInterface xTarget ) { 326*b1cdbd2cSJim Jagielski String str = ""; 327*b1cdbd2cSJim Jagielski XTypeProvider xTypeProvider = (XTypeProvider) 328*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface( XTypeProvider.class, xTarget); 329*b1cdbd2cSJim Jagielski if( xTypeProvider != null ) { 330*b1cdbd2cSJim Jagielski byte[] id = xTypeProvider.getImplementationId(); 331*b1cdbd2cSJim Jagielski str = "ImplementationID: "; 332*b1cdbd2cSJim Jagielski for (int i=0; i<id.length;i++) { 333*b1cdbd2cSJim Jagielski Byte b = new Byte(id[i]); 334*b1cdbd2cSJim Jagielski str += b.intValue(); 335*b1cdbd2cSJim Jagielski } 336*b1cdbd2cSJim Jagielski } else { 337*b1cdbd2cSJim Jagielski str = "No Implementation ID available"; 338*b1cdbd2cSJim Jagielski } 339*b1cdbd2cSJim Jagielski return str; 340*b1cdbd2cSJim Jagielski } 341*b1cdbd2cSJim Jagielski 342*b1cdbd2cSJim Jagielski 343*b1cdbd2cSJim Jagielski } 344