IDEADEV-10461
[fedora-idea.git] / dom / openapi / src / com / intellij / util / xml / tree / DomElementsGroupNode.java
blobc7d362eecdb2bc3e0b79396ff9a57cd94550ed27
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;
15 import javax.swing.*;
16 import java.util.ArrayList;
17 import java.util.List;
18 import java.awt.*;
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());
51 clearColoredText();
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);
64 else {
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;
77 return false;
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);