1 package com
.intellij
.util
.xml
.tree
;
3 import com
.intellij
.ui
.SimpleTextAttributes
;
4 import com
.intellij
.ui
.treeStructure
.SimpleNode
;
5 import com
.intellij
.util
.xml
.DomElement
;
6 import com
.intellij
.util
.xml
.ElementPresentationManager
;
7 import com
.intellij
.util
.xml
.DomReflectionUtil
;
8 import com
.intellij
.util
.xml
.highlighting
.DomElementAnnotationsManager
;
9 import com
.intellij
.util
.xml
.highlighting
.DomElementsProblemsHolder
;
10 import com
.intellij
.util
.xml
.highlighting
.DomElementProblemDescriptor
;
11 import com
.intellij
.util
.xml
.reflect
.DomCollectionChildDescription
;
12 import com
.intellij
.ide
.IdeBundle
;
13 import com
.intellij
.lang
.annotation
.HighlightSeverity
;
16 import java
.util
.ArrayList
;
17 import java
.util
.List
;
20 public class DomElementsGroupNode
extends AbstractDomElementNode
{
21 private DomElement myParentElement
;
22 private String myChildrenTagName
;
23 private DomCollectionChildDescription myChildDescription
;
25 public DomElementsGroupNode(final DomElement modelElement
, DomCollectionChildDescription description
, SimpleNode parent
) {
26 super(modelElement
, parent
);
27 myParentElement
= modelElement
;
28 myChildDescription
= description
;
29 myChildrenTagName
= description
.getXmlElementName();
32 public SimpleNode
[] getChildren() {
33 if (!myParentElement
.isValid()) return NO_CHILDREN
;
35 final List
<SimpleNode
> simpleNodes
= new ArrayList
<SimpleNode
>();
36 for (DomElement domChild
: myChildDescription
.getStableValues(myParentElement
)) {
37 if (shouldBeShown(domChild
.getDomElementType())) {
38 simpleNodes
.add(new BaseDomElementNode(domChild
, this));
41 return simpleNodes
.toArray(new SimpleNode
[simpleNodes
.size()]);
44 public Object
[] getEqualityObjects() {
45 return new Object
[]{myParentElement
, myChildrenTagName
};
48 protected void doUpdate() {
49 setUniformIcon(getNodeIcon());
53 final boolean showErrors
= hasErrors();
54 final int childrenCount
= getChildren().length
;
56 if (childrenCount
> 0) {
57 final SimpleTextAttributes textAttributes
=
58 showErrors ?
getWavedAttributes(SimpleTextAttributes
.STYLE_BOLD
) : new SimpleTextAttributes(SimpleTextAttributes
.STYLE_BOLD
, SimpleTextAttributes
.REGULAR_ATTRIBUTES
.getFgColor());
60 addColoredFragment(getNodeName(), textAttributes
);
61 addColoredFragment(" (" + childrenCount
+ ')', showErrors ? IdeBundle
.message("dom.elements.tree.childs.contain.errors") : null,
62 SimpleTextAttributes
.GRAY_ITALIC_ATTRIBUTES
);
65 addColoredFragment(getNodeName(), SimpleTextAttributes
.GRAYED_BOLD_ATTRIBUTES
);
69 private boolean hasErrors() {
70 for (DomElement domElement
: myChildDescription
.getStableValues(myParentElement
)) {
71 final DomElementAnnotationsManager annotationsManager
= DomElementAnnotationsManager
.getInstance(getProject());
72 final DomElementsProblemsHolder holder
= annotationsManager
.getCachedProblemHolder(domElement
);
73 final List
<DomElementProblemDescriptor
> problems
= holder
.getProblems(domElement
, true, HighlightSeverity
.ERROR
);
74 if (problems
.size() > 0) return true;
80 public String
getNodeName() {
81 return myChildDescription
.getCommonPresentableName(myParentElement
);
84 public String
getTagName() {
85 return myChildrenTagName
;
88 public DomElement
getDomElement() {
89 return myParentElement
;
93 public DomCollectionChildDescription
getChildDescription() {
94 return myChildDescription
;
98 public Icon
getNodeIcon() {
99 Class clazz
= DomReflectionUtil
.getRawType(myChildDescription
.getType());
100 // Class arrayClass = Array.newInstance(clazz, 0).getClass();
101 return ElementPresentationManager
.getIconForClass(clazz
);