1 /*************************************************************************
3 * The Contents of this file are made available subject to the terms of
6 * Copyright 2000, 2010 Oracle and/or its affiliates.
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of Sun Microsystems, Inc. nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
28 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
29 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
30 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
31 * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 *************************************************************************/
36 import org
.openoffice
.XInstanceInspector
;
38 import com
.sun
.star
.beans
.Property
;
39 import com
.sun
.star
.beans
.PropertyValue
;
40 import com
.sun
.star
.beans
.XIntrospectionAccess
;
41 import com
.sun
.star
.beans
.XPropertySet
;
42 import com
.sun
.star
.lang
.XServiceInfo
;
43 import com
.sun
.star
.lib
.uno
.helper
.WeakBase
;
44 import com
.sun
.star
.reflection
.XIdlMethod
;
45 import com
.sun
.star
.uno
.Any
;
46 import com
.sun
.star
.uno
.AnyConverter
;
47 import com
.sun
.star
.uno
.Type
;
48 import com
.sun
.star
.uno
.TypeClass
;
49 import com
.sun
.star
.uno
.UnoRuntime
;
50 import com
.sun
.star
.uno
.XComponentContext
;
52 public class InspectorPane
extends WeakBase
implements XInstanceInspector
{ //, XServiceInfo
53 private XIdlMethod
[] xIdlMethods
;
54 private Property
[] aProperties
;
55 private boolean bIncludeContent
= false;
56 private XComponentContext m_xComponentContext
;
57 private XDialogProvider m_xDialogProvider
;
58 private Introspector m_oIntrospector
= null;
59 private SourceCodeGenerator m_oSourceCodeGenerator
;
60 private XTreeControlProvider m_xTreeControlProvider
;
61 private String sTitle
= "";
64 /** The constructor of the inner class has a XMultiServiceFactory parameter.
65 * @param xMultiServiceFactory XMultiServiceFactory
67 public InspectorPane(XComponentContext _xComponentContext
, XDialogProvider _xDialogProvider
, XTreeControlProvider _xTreeControlProvider
, int _nLanguage
) {
68 m_xComponentContext
= _xComponentContext
;
69 m_xTreeControlProvider
= _xTreeControlProvider
;
70 m_xDialogProvider
= _xDialogProvider
;
71 m_oIntrospector
= Introspector
.getIntrospector(m_xComponentContext
);
72 m_oSourceCodeGenerator
= new SourceCodeGenerator(_nLanguage
);
73 _xTreeControlProvider
.addInspectorPane(this);
77 private void setMaximumOfProgressBar(Object _oUnoObject
){
79 xIdlMethods
= m_oIntrospector
.getMethods(_oUnoObject
);
80 aProperties
= m_oIntrospector
.getProperties(_oUnoObject
);
84 /** Inspect the given object for methods, properties, interfaces, and
86 * @param a The object to inspect
87 * @throws RuntimeException If
89 public void inspect(java
.lang
.Object _oUserDefinedObject
, String _sTitle
) throws com
.sun
.star
.uno
.RuntimeException
{
91 Object oContainer
= m_xTreeControlProvider
.inspect(_oUserDefinedObject
, _sTitle
);
92 m_xDialogProvider
.addInspectorPage(getTitle(), oContainer
);
94 catch( Exception exception
) {
95 exception
.printStackTrace(System
.err
);
99 public void setTitle(String _sTitle
){
100 if (_sTitle
!= null){
101 if (_sTitle
.length() > 0){
108 public String
getTitle(){
114 private Type
[] getTypes(Object _oUnoObject
){
115 Type
[] aTypes
= null;
116 if (AnyConverter
.isArray(_oUnoObject
)){
117 aTypes
= (Type
[])_oUnoObject
;
120 aTypes
= m_oIntrospector
.getInterfaces(_oUnoObject
);
126 private Object
invoke(XUnoMethodNode _oUnoMethodNode
){
128 String sParamValueDescription
= "";
129 Object oUnoReturnObject
= _oUnoMethodNode
.invoke();
130 boolean bHasParameters
= _oUnoMethodNode
.hasParameters();
131 boolean bIsPrimitive
= _oUnoMethodNode
.isPrimitive();
133 sParamValueDescription
= " (" + m_oSourceCodeGenerator
.getMethodParameterValueDescription(_oUnoMethodNode
, _oUnoMethodNode
.getLastParameterObjects(), true) + ")";
135 if (oUnoReturnObject
!= null ){
136 String sNodeDescription
= "";
137 XUnoNode oUnoNode
= null;
138 if (_oUnoMethodNode
.getXIdlMethod().getReturnType().getTypeClass().getValue() == TypeClass
.VOID_value
){
139 sNodeDescription
+= _oUnoMethodNode
.getXIdlMethod().getReturnType().getName() + " " + _oUnoMethodNode
.getXIdlMethod().getName() + sParamValueDescription
;
140 _oUnoMethodNode
.setLabel(sNodeDescription
);
141 m_xTreeControlProvider
.nodeChanged(_oUnoMethodNode
);
143 else if (bHasParameters
|| !bIsPrimitive
){
145 sNodeDescription
+= m_oSourceCodeGenerator
.getStringValueOfObject(oUnoReturnObject
, _oUnoMethodNode
.getTypeClass());
148 Any aReturnObject
= Any
.complete(oUnoReturnObject
);
149 String sShortClassName
= Introspector
.getShortClassName(aReturnObject
.getType().getTypeName());
150 sNodeDescription
+= m_oSourceCodeGenerator
.getVariableNameforUnoObject(sShortClassName
);
152 if (Introspector
.isArray(oUnoReturnObject
)){
153 if (Introspector
.isUnoTypeObject(oUnoReturnObject
)){
154 oUnoNode
= addUnoFacetteNode(_oUnoMethodNode
, XUnoFacetteNode
.SINTERFACEDESCRIPTION
, _oUnoMethodNode
.getUnoObject());
156 else if(Introspector
.isUnoPropertyTypeObject(oUnoReturnObject
)){
157 oUnoNode
= addUnoFacetteNode(_oUnoMethodNode
, XUnoFacetteNode
.SPROPERTYINFODESCRIPTION
, oUnoReturnObject
);
159 else if(Introspector
.isUnoPropertyValueTypeObject(oUnoReturnObject
)){
160 oUnoNode
= addUnoFacetteNode(_oUnoMethodNode
, XUnoFacetteNode
.SPROPERTYVALUEDESCRIPTION
, oUnoReturnObject
);
163 if (oUnoNode
== null){
165 sNodeDescription
+= sParamValueDescription
;
167 oUnoNode
= addUnoNode(null, oUnoReturnObject
, sNodeDescription
);
169 oUnoNode
.setParameterObjects(_oUnoMethodNode
.getLastParameterObjects());
172 if (oUnoNode
!= null){
173 oUnoNode
.setFoldable(!bIsPrimitive
);
174 _oUnoMethodNode
.setFoldable(false);
175 _oUnoMethodNode
.addChildNode(oUnoNode
);
176 m_xTreeControlProvider
.nodeInserted(_oUnoMethodNode
, oUnoNode
, _oUnoMethodNode
.getChildCount()-1);
181 sNodeDescription
= _oUnoMethodNode
.getStandardMethodDescription() + "=" + UnoMethodNode
.getDisplayValueOfPrimitiveType(oUnoReturnObject
);
182 _oUnoMethodNode
.setLabel(sNodeDescription
);
183 m_xTreeControlProvider
.nodeChanged(_oUnoMethodNode
);
187 // ReturnObject of method node == null..
189 if (!bHasParameters
){
190 _oUnoMethodNode
.setLabel(_oUnoMethodNode
.getLabel() + " = null");
193 _oUnoMethodNode
.setLabel(_oUnoMethodNode
.getXIdlMethod().getName() + sParamValueDescription
+ " = null");
195 m_xTreeControlProvider
.nodeChanged(_oUnoMethodNode
);
197 return oUnoReturnObject
;
198 }catch(Exception exception
) {
203 public void invokeSelectedMethodNode(){
204 XTreePathProvider xTreePathProvider
= m_xTreeControlProvider
.getSelectedPath();
205 XUnoNode oUnoNode
= xTreePathProvider
.getLastPathComponent();
206 if (oUnoNode
instanceof XUnoMethodNode
){
207 invoke((XUnoMethodNode
) oUnoNode
);
208 m_xTreeControlProvider
.expandPath(xTreePathProvider
);
213 public void addSourceCodeOfSelectedNode(){
214 XTreePathProvider oTreePathProvider
= m_xTreeControlProvider
.getSelectedPath();
215 XUnoNode oUnoNode
= oTreePathProvider
.getLastPathComponent();
216 if (oUnoNode
instanceof XUnoMethodNode
){
217 XUnoMethodNode oUnoMethodNode
= (XUnoMethodNode
) oUnoNode
;
218 if (!oUnoMethodNode
.isInvoked() && oUnoMethodNode
.isInvokable()){
219 invoke(oUnoMethodNode
);
222 String sSourceCode
= m_oSourceCodeGenerator
.addSourceCodeOfUnoObject(oTreePathProvider
, true, true, true);
223 m_xTreeControlProvider
.setSourceCode(sSourceCode
);
227 public void convertCompleteSourceCode(int _nLanguage
){
228 String sSourceCode
= m_oSourceCodeGenerator
.convertAllUnoObjects(_nLanguage
);
229 m_xTreeControlProvider
.setSourceCode(sSourceCode
);
232 protected XUnoNode
getSelectedNode(){
233 return m_xTreeControlProvider
.getSelectedNode();
237 // add the object to the hashtable for a possible access in the tree
238 private XUnoFacetteNode
addUnoFacetteNode(XUnoNode _oParentNode
, String _sNodeDescription
, Object _oUnoObject
){
239 return m_xTreeControlProvider
.addUnoFacetteNode( _oParentNode
, _sNodeDescription
, _oUnoObject
);
243 private XUnoMethodNode
addMethodNode(Object _objectElement
, XIdlMethod _xIdlMethod
){
244 return m_xTreeControlProvider
.addMethodNode(_objectElement
, _xIdlMethod
);
249 public void addMethodsToTreeNode(XUnoNode _oGrandParentNode
, Object _oUnoParentObject
, XIdlMethod
[] _xIdlMethods
){
250 if (Introspector
.isValid(_xIdlMethods
)){
251 for ( int n
= 0; n
< _xIdlMethods
.length
; n
++ ) {
252 XIdlMethod xIdlMethod
= _xIdlMethods
[n
];
253 if (!xIdlMethod
.getDeclaringClass().getName().equals("com.sun.star.uno.XInterface")){
254 XUnoMethodNode oChildNode
= addMethodNode(_oUnoParentObject
, xIdlMethod
);
255 if (oChildNode
!= null){
256 _oGrandParentNode
.addChildNode(oChildNode
);
264 private void addFacetteNodesToTreeNode(XUnoNode _oParentNode
, Object _oUnoObject
){
265 if (m_oIntrospector
.hasMethods(_oUnoObject
)){
266 XUnoFacetteNode oUnoFacetteNode
= addUnoFacetteNode(_oParentNode
, XUnoFacetteNode
.SMETHODDESCRIPTION
, _oUnoObject
);
268 if (m_oIntrospector
.hasProperties(_oUnoObject
)){
269 XUnoFacetteNode oUnoFacetteNode
= addUnoFacetteNode(_oParentNode
, XUnoFacetteNode
.SPROPERTYDESCRIPTION
, _oUnoObject
);
271 if (m_oIntrospector
.hasInterfaces(_oUnoObject
)){
272 XUnoFacetteNode oUnoFacetteNode
= addUnoFacetteNode(_oParentNode
, XUnoFacetteNode
.SINTERFACEDESCRIPTION
, _oUnoObject
);
274 if (m_oIntrospector
.isContainer(_oUnoObject
)){
275 XUnoFacetteNode oUnoFacetteNode
= addUnoFacetteNode(_oParentNode
, XUnoFacetteNode
.SCONTAINERDESCRIPTION
, _oUnoObject
);
277 if (m_oIntrospector
.hasSupportedServices(_oUnoObject
)){
278 XUnoFacetteNode oUnoFacetteNode
= addUnoFacetteNode(_oParentNode
, XUnoFacetteNode
.SSERVICEDESCRIPTION
, _oUnoObject
);
283 private void addInterfacesToTreeNode(XUnoNode _oGrandParentNode
, Object _oUnoParentObject
, Type
[] _aTypes
) {
285 if (_oUnoParentObject
!= null){
286 for ( int m
= 0; m
< _aTypes
.length
; m
++ ) {
287 addUnoNode(_oGrandParentNode
, _oUnoParentObject
, _aTypes
[m
]);
291 catch( Exception exception
) {
292 exception
.printStackTrace(System
.err
);
296 // add all services for the given object to the tree under the node parent
297 private void addServicesToTreeNode(XUnoNode _oGrandParentNode
, Object _oUnoObject
) {
299 XServiceInfo xServiceInfo
= UnoRuntime
.queryInterface( XServiceInfo
.class, _oUnoObject
);
300 if ( xServiceInfo
!= null ){
301 String
[] sSupportedServiceNames
= xServiceInfo
.getSupportedServiceNames();
302 for ( int m
= 0; m
< sSupportedServiceNames
.length
; m
++ ) {
303 String sServiceName
= sSupportedServiceNames
[m
];
304 if (sServiceName
.length() > 0){
305 XUnoNode oUnoNode
= addUnoNode(_oGrandParentNode
, _oUnoObject
, sSupportedServiceNames
[m
]);
306 oUnoNode
.setNodeType(XUnoNode
.nSERVICE
);
311 catch(Exception exception
) {
312 exception
.printStackTrace(System
.err
);
316 private void addPropertiesAndInterfacesOfService(XUnoNode _oUnoServiceNode
){
317 String sServiceName
= _oUnoServiceNode
.getClassName();
318 Object oUnoObject
= _oUnoServiceNode
.getUnoObject();
319 addInterfacesToTreeNode(_oUnoServiceNode
, oUnoObject
, m_oIntrospector
.getInterfaces(oUnoObject
, sServiceName
));
320 addPropertiesToTreeNode(_oUnoServiceNode
, oUnoObject
, m_oIntrospector
.getProperties(oUnoObject
, sServiceName
));
324 private void addPropertiesToTreeNode(XUnoNode _oParentNode
, Object _oUnoParentObject
, Property
[] _aProperties
) {
326 if (_aProperties
.length
> 0){
327 for ( int n
= 0; n
< _aProperties
.length
; n
++ ){
328 Property aProperty
= _aProperties
[n
];
329 XIntrospectionAccess xIntrospectionAccess
= m_oIntrospector
.getXIntrospectionAccess(_oUnoParentObject
);
330 XPropertySet xPropertySet
= UnoRuntime
.queryInterface( XPropertySet
.class, xIntrospectionAccess
.queryAdapter(new Type( XPropertySet
.class)));
331 if (xPropertySet
!= null) {
332 if (xPropertySet
.getPropertySetInfo().hasPropertyByName(aProperty
.Name
)){
333 Object objectElement
= xPropertySet
.getPropertyValue(aProperty
.Name
);
334 if (objectElement
!= null) {
335 XUnoNode oChildNode
= m_xTreeControlProvider
.addUnoPropertyNode(_oUnoParentObject
, aProperty
, objectElement
);
336 if (oChildNode
!= null){
337 _oParentNode
.addChildNode(oChildNode
);
345 catch(Exception exception
) {
346 exception
.printStackTrace(System
.err
);
350 public void addContainerElementsToTreeNode(XUnoNode _oParentNode
, Object _oUnoParentObject
){
351 Object
[] oUnoContainerElements
= m_oIntrospector
.getUnoObjectsOfContainer(_oUnoParentObject
);
352 if (Introspector
.isValid(oUnoContainerElements
)){
353 if (oUnoContainerElements
.length
> 0){
354 for (int i
=0; i
< oUnoContainerElements
.length
; i
++){
355 XUnoNode oChildNode
= addUnoNode(_oParentNode
, oUnoContainerElements
[i
], UnoNode
.getNodeDescription(oUnoContainerElements
[i
]));
356 m_xTreeControlProvider
.nodeInserted(_oParentNode
, oChildNode
, _oParentNode
.getChildCount()-1);
363 private XUnoNode
addUnoNode(XUnoNode _oParentNode
, Object _oUnoObject
, String _sLabel
){
364 XUnoNode oUnoNode
= this.m_xTreeControlProvider
.addUnoNode(_oUnoObject
);
365 oUnoNode
.setLabel(_sLabel
);
366 if (_oParentNode
!= null){
367 _oParentNode
.addChildNode(oUnoNode
);
369 setNodeFoldable(oUnoNode
, _oUnoObject
);
374 private void setNodeFoldable(XUnoNode _oUnoNode
, Object _oUnoObject
){
375 if (_oUnoObject
!= null){
376 if (!Introspector
.isObjectPrimitive(_oUnoObject
)){
377 _oUnoNode
.setFoldable(true);
383 private XUnoNode
addUnoNode(XUnoNode _oParentNode
, Object _oUnoObject
, Type _aType
){
384 XUnoNode oUnoNode
= this.m_xTreeControlProvider
.addUnoNode(_oUnoObject
, _aType
);
385 if (_oParentNode
!= null){
386 _oParentNode
.addChildNode(oUnoNode
);
388 setNodeFoldable(oUnoNode
, _oUnoObject
);
393 private void addPropertySetInfoNodesToTreeNode(XUnoFacetteNode _oUnoFacetteNode
, Object _oUnoObject
){
394 if (_oUnoObject
.getClass().isArray()){
395 Object
[] object
= ( Object
[] ) _oUnoObject
;
396 for ( int i
= 0; i
< object
.length
; i
++ ) {
397 Property aProperty
= (Property
) object
[i
];
398 XUnoPropertyNode oUnoPropertyNode
= m_xTreeControlProvider
.addUnoPropertyNode(_oUnoObject
, aProperty
);
399 oUnoPropertyNode
.setLabel(XUnoFacetteNode
.SPROPERTYINFODESCRIPTION
+ " (" + aProperty
.Name
+ ")");
400 oUnoPropertyNode
.setFoldable(true);
401 _oUnoFacetteNode
.addChildNode(oUnoPropertyNode
);
406 private void addPrimitiveValuesToTreeNode(XUnoNode _oUnoNode
, Object _oUnoObject
){
407 if (_oUnoObject
.getClass().isArray()){
408 if (!_oUnoObject
.getClass().getComponentType().isPrimitive()){
409 Object
[] object
= ( Object
[] ) _oUnoObject
;
410 for ( int i
= 0; i
< object
.length
; i
++ ) {
411 if (Introspector
.isObjectPrimitive(object
[i
])){
412 XUnoNode oChildNode
= addUnoNode(_oUnoNode
, null, UnoNode
.getNodeDescription(object
[i
]));
417 String
[] sDisplayValues
= UnoNode
.getDisplayValuesofPrimitiveArray(_oUnoObject
);
418 for ( int i
= 0; i
< sDisplayValues
.length
; i
++ ) {
419 XUnoNode oUnoNode
= addUnoNode(_oUnoNode
, null, sDisplayValues
[i
]);
426 private void addPropertySetInfoSubNodes(XUnoPropertyNode _oUnoPropertyNode
){
427 Property aProperty
= _oUnoPropertyNode
.getProperty();
428 _oUnoPropertyNode
.addChildNode(m_xTreeControlProvider
.addUnoPropertyNodeWithName(aProperty
));
429 _oUnoPropertyNode
.addChildNode(m_xTreeControlProvider
.addUnoPropertyNodeWithType(aProperty
));
430 _oUnoPropertyNode
.addChildNode(m_xTreeControlProvider
.addUnoPropertyNodeWithHandle(aProperty
));
431 _oUnoPropertyNode
.addChildNode(m_xTreeControlProvider
.addUnoPropertyNodeWithAttributesDescription(aProperty
));
435 private void addPropertyValueSubNodes(XUnoFacetteNode _oUnoFacetteNode
, Object _oUnoObject
){
436 if (Introspector
.isUnoPropertyValueTypeObject(_oUnoObject
)){
437 Object
[] object
= ( Object
[] ) _oUnoObject
;
438 for ( int i
= 0; i
< object
.length
; i
++ ) {
439 String sObjectClassName
= object
[i
].getClass().getName();
440 if (sObjectClassName
.equals("com.sun.star.beans.PropertyValue")){
441 XUnoNode oChildNode
= null;
442 PropertyValue aPropertyValue
= (PropertyValue
) object
[i
];
443 if (! Introspector
.isObjectPrimitive(aPropertyValue
.Value
)){
444 oChildNode
= m_xTreeControlProvider
.addUnoPropertyNode(_oUnoObject
, aPropertyValue
, _oUnoObject
);
447 oChildNode
= addUnoNode(null, aPropertyValue
.Value
, UnoPropertyNode
.getStandardPropertyValueDescription(aPropertyValue
));
449 if (oChildNode
!= null){
450 _oUnoFacetteNode
.addChildNode(oChildNode
);
458 public boolean expandNode(XUnoNode _oUnoNode
, XTreePathProvider _xTreePathProvider
){
459 if ( _oUnoNode
!= null ) {
460 _oUnoNode
.setFoldable(false);
461 if (m_xTreeControlProvider
.isMethodNode(_oUnoNode
)){
462 XUnoMethodNode oUnoMethodNode
= (XUnoMethodNode
) _oUnoNode
;
463 if (!oUnoMethodNode
.isInvoked()){
464 Object oUnoReturnObject
= invoke((XUnoMethodNode
) _oUnoNode
);
465 if (oUnoReturnObject
== null){
466 _oUnoNode
.setFoldable(true);
471 else if (m_xTreeControlProvider
.isPropertyNode(_oUnoNode
)){
472 XUnoPropertyNode oUnoPropertyNode
= (XUnoPropertyNode
) _oUnoNode
;
473 Object oUnoObject
= oUnoPropertyNode
.getUnoReturnObject();
474 if (oUnoPropertyNode
.getPropertyNodeType() == XUnoPropertyNode
.nPROPERTYSETINFOTYPE
){
475 addPropertySetInfoSubNodes(oUnoPropertyNode
);
478 //TOOD this code is redundant!!!
479 if ( oUnoObject
.getClass().isArray()){
480 // TOODO probably we should provid a possibility to insert also non-primitive nodes
481 addPrimitiveValuesToTreeNode(oUnoPropertyNode
, oUnoObject
);
484 addFacetteNodesToTreeNode(oUnoPropertyNode
, oUnoObject
);
488 else if (m_xTreeControlProvider
.isFacetteNode(_oUnoNode
)){
489 XUnoFacetteNode oUnoFacetteNode
= (XUnoFacetteNode
) _oUnoNode
;
490 Object oUnoObject
= _oUnoNode
.getUnoObject();
491 if (oUnoFacetteNode
.isMethodNode()){
492 addMethodsToTreeNode(oUnoFacetteNode
, oUnoObject
, m_oIntrospector
.getMethods(oUnoObject
));
494 if (oUnoFacetteNode
.isPropertyNode()){
495 String sNodeDescription
= oUnoFacetteNode
.getLabel();
496 // TODO: it's very dangerous to distinguish the different UnoFacetteNodes only by the node description
497 if (sNodeDescription
.startsWith(XUnoFacetteNode
.SPROPERTYINFODESCRIPTION
)){
498 addPropertySetInfoNodesToTreeNode(oUnoFacetteNode
, oUnoObject
);
500 else if (sNodeDescription
.startsWith(XUnoFacetteNode
.SPROPERTYVALUEDESCRIPTION
)){
501 addPropertyValueSubNodes(oUnoFacetteNode
, oUnoObject
);
504 addPropertiesToTreeNode(oUnoFacetteNode
, oUnoObject
, m_oIntrospector
.getProperties(oUnoObject
));
507 if (oUnoFacetteNode
.isServiceNode()){
508 addServicesToTreeNode(oUnoFacetteNode
, oUnoObject
);
510 if (oUnoFacetteNode
.isInterfaceNode()){
511 addInterfacesToTreeNode(oUnoFacetteNode
, oUnoObject
, getTypes(oUnoObject
));
513 if (oUnoFacetteNode
.isContainerNode()){
514 addContainerElementsToTreeNode(oUnoFacetteNode
, oUnoObject
);
517 else if (_oUnoNode
.getNodeType() == XUnoNode
.nSERVICE
){
518 addPropertiesAndInterfacesOfService(_oUnoNode
);
520 else if (_oUnoNode
.getNodeType() == XUnoNode
.nINTERFACE
){
521 Type aType
= _oUnoNode
.getUnoType();
523 addMethodsToTreeNode(_oUnoNode
, _oUnoNode
.getUnoObject(), m_oIntrospector
.getMethodsOfInterface(aType
));
526 else if (_oUnoNode
.getNodeType() == XUnoNode
.nOTHERS
){
527 Object oUnoObject
= _oUnoNode
.getUnoObject();
528 if ( oUnoObject
.getClass().isArray()){
529 // TOODO probably we should provid a possibility to insert also non-primitive nodes
530 addPrimitiveValuesToTreeNode(_oUnoNode
, oUnoObject
);
533 addFacetteNodesToTreeNode(_oUnoNode
, oUnoObject
);
542 public void applyFilter(XUnoFacetteNode _oUnoFacetteNode
, String _sFilter
){
543 for (int i
= 0; i
< _oUnoFacetteNode
.getChildCount(); i
++){
544 XUnoNode oUnoNode
= _oUnoFacetteNode
.getChild(i
);
545 boolean bIsVisible
= oUnoNode
.isFilterApplicable(_sFilter
);
546 m_xTreeControlProvider
.setNodeVisible(oUnoNode
, bIsVisible
);
548 _oUnoFacetteNode
.setFilter(_sFilter
);
552 /** In opposition to 'getUnoObjectOfTreeNode' this method inspects the passed node if it represents a Uno object
553 * If not it returns null
556 private Object
getUnoObjectOfExplicitTreeNode(XTreePathProvider _xTreePathProvider
){
557 XUnoNode oUnoNode
= _xTreePathProvider
.getLastPathComponent();
558 if (oUnoNode
!= null){
559 return oUnoNode
.getUnoObject();
565 public String
getFilter(XUnoNode _oUnoNode
){
567 if (_oUnoNode
!= null){
568 XUnoNode oUnoNode
= _oUnoNode
;
569 boolean bleaveLoop
= false;
571 if (m_xTreeControlProvider
.isFacetteNode(oUnoNode
)){
572 sFilter
= ((XUnoFacetteNode
) oUnoNode
).getFilter();
576 if (oUnoNode
.getParentNode() != null){
577 oUnoNode
= oUnoNode
.getParentNode();
583 } while(!bleaveLoop
);
589 /** In opposition to 'getUnoObjectOfexplictTreeNode' this method inspects the passed node if it represents a Uno object
590 * if not it keeps checking all ancestors until it finds a Uno representation
592 private Object
getUnoObjectOfTreeNode(XTreePathProvider _xTreePathProvider
){
593 XTreePathProvider xTreePathProvider
= _xTreePathProvider
;
594 HideableMutableTreeNode oNode
= null;
595 Object oUnoObject
= null;
596 while (xTreePathProvider
!= null){
597 oUnoObject
= getUnoObjectOfExplicitTreeNode(xTreePathProvider
);
598 if (oUnoObject
!= null){
599 if (oUnoObject
instanceof String
){
602 if (!Introspector
.isUnoTypeObject(oUnoObject
)){
607 xTreePathProvider
= xTreePathProvider
.getParentPath();
613 public void showPopUpMenu(Object _invoker
, int x
, int y
) throws ClassCastException
{
614 XUnoNode oUnoNode
= getSelectedNode();
615 boolean bdoEnableInvoke
= oUnoNode
instanceof XUnoMethodNode
;
616 // boolean bdoEnableSourceCodeGeneration = true;
617 if (bdoEnableInvoke
){
618 XUnoMethodNode oUnoMethodNode
= (XUnoMethodNode
) oUnoNode
;
619 bdoEnableInvoke
= oUnoMethodNode
.isInvokable();
620 // bdoEnableSourceCodeGeneration = bdoEnableInvoke;
622 m_xDialogProvider
.enablePopupMenuItem(XDialogProvider
.SINVOKE
, bdoEnableInvoke
);
623 // m_xDialogProvider.enablePopupMenuItem(XDialogProvider.SADDTOSOURCECODE, bdoEnableSourceCodeGeneration);
624 m_xDialogProvider
.showPopUpMenu(_invoker
, x
, y
);