1 package com
.intellij
.util
.xml
.tree
;
3 import jetbrains
.fabrique
.ui
.treeStructure
.SimpleNode
;
4 import com
.intellij
.openapi
.diagnostic
.Logger
;
5 import com
.intellij
.ui
.SimpleTextAttributes
;
6 import com
.intellij
.util
.xml
.DomElement
;
7 import com
.intellij
.util
.xml
.GenericValue
;
10 import java
.lang
.reflect
.Method
;
13 public class BaseDomElementNode
extends AbstractDomElementNode
{
14 static final private Logger LOG
= Logger
.getInstance(DomModelTreeStructure
.class.getName());
16 protected DomElement myDomElement
;
17 protected String myTagName
;
19 public BaseDomElementNode(final DomElement modelElement
) {
20 this(modelElement
, modelElement
.getTagName(), null);
23 public BaseDomElementNode(final DomElement modelElement
, final String tagName
, SimpleNode parent
) {
26 myDomElement
= modelElement
;
27 myTagName
= tagName
== null ?
"unknown" : tagName
;
30 public SimpleNode
[] getChildren() {
31 return doGetChildren(myDomElement
);
34 protected SimpleNode
[] doGetChildren(final DomElement domlElement
) {
35 if (!domlElement
.isValid()) return NO_CHILDREN
;
36 List
<SimpleNode
> children
= new ArrayList
<SimpleNode
>();
38 final Collection
<Method
> methods
= domlElement
.getMethodsInfo().getFixedChildrenGetterMethods();
40 for (Method method
: methods
) {
42 final Object result
= method
.invoke(domlElement
, new Object
[0]);
44 if (result
instanceof DomElement
) {
45 final String tagName
= domlElement
.getMethodsInfo().getTagName(method
);
47 if (showGenericValues() && result
instanceof GenericValue
) {
48 children
.add(new GenericValueNode((GenericValue
)result
, tagName
, this));
51 children
.add(getDomElementNode((DomElement
)result
, tagName
, this));
60 final Collection
<Method
> collectionMethods
= domlElement
.getMethodsInfo().getCollectionChildrenGetterMethods();
62 for (Method method
: collectionMethods
) {
63 children
.add(getDomElementsGroupNode(domlElement
, method
));
66 AbstractDomElementNode
[] childrenNodes
= children
.toArray(new AbstractDomElementNode
[children
.size()]);
68 Arrays
.sort(childrenNodes
, getComparator());
74 protected DomElementsGroupNode
getDomElementsGroupNode(final DomElement domElement
, final Method method
) {
75 return new DomElementsGroupNode(domElement
, method
);
78 protected boolean showOrdered() {
82 protected boolean showGenericValues() {
86 public Object
[] getEqualityObjects() {
90 protected boolean doUpdate() {
91 setUniformIcon(getNodeIcon());
93 addColoredFragment(getNodeName(), SimpleTextAttributes
.REGULAR_ATTRIBUTES
);
95 return super.doUpdate();
98 public String
getNodeName() {
99 return getPropertyName(myTagName
);
102 public String
getTagName() {
106 public DomElement
getDomElement() {
110 protected Comparator
<AbstractDomElementNode
> getComparator() {
111 return new Comparator
<AbstractDomElementNode
>() {
112 public int compare(final AbstractDomElementNode node1
, final AbstractDomElementNode node2
) {
113 return node1
.getNodeName().toLowerCase().compareTo(node2
.getNodeName().toLowerCase());
118 public boolean isAutoExpandNode() {
119 return getParent() == null;