xref: /aoo4110/main/qadevOOo/runner/util/dbg.java (revision b1cdbd2c)
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