fixed for tree updates for invalid model elements
[fedora-idea.git] / source / com / intellij / util / xml / tree / DomElementsGroupNode.java
blobc6a4e26be3be4a256f9488c548284ff1be65bf99
1 package com.intellij.util.xml.tree;
3 import jetbrains.fabrique.ui.treeStructure.SimpleNode;
4 import com.intellij.openapi.util.text.StringUtil;
5 import com.intellij.openapi.diagnostic.Logger;
6 import com.intellij.ui.SimpleTextAttributes;
7 import com.intellij.util.xml.DomElement;
9 import java.lang.reflect.Method;
10 import java.util.List;
11 import java.util.ArrayList;
12 import java.awt.*;
14 public class DomElementsGroupNode extends AbstractDomElementNode {
15 Logger LOG = Logger.getInstance(DomModelTreeStructure.class.getName());
17 private DomElement myModelElement;
18 private Method myMethod;
19 private String myChildrenTagName;
21 public DomElementsGroupNode(final DomElement modelElement, Method method) {
22 myModelElement = modelElement;
23 myMethod = method;
25 myChildrenTagName = modelElement.getMethodsInfo().getTagName(method);
28 public SimpleNode[] getChildren() {
29 if (!myModelElement.isValid()) return NO_CHILDREN;
30 List<SimpleNode> children = new ArrayList();
31 try {
32 final List<? extends DomElement> objects = (List<? extends DomElement>)myMethod.invoke(myModelElement, new Object[0]);
33 for (DomElement domElement : objects) {
34 children.add(getDomElementNode(domElement, myChildrenTagName, this));
37 catch (Exception e) {
38 LOG.error(e);
40 return children.toArray(new SimpleNode[children.size()]);
43 public Object[] getEqualityObjects() {
44 return new Object[0];
47 protected boolean doUpdate() {
48 setUniformIcon(getNodeIcon());
50 clearColoredText();
51 addColoredFragment(getNodeName(), new SimpleTextAttributes(Font.BOLD, Color.black));
52 final int childrenCount = getChildren().length;
53 addColoredFragment(" (" + childrenCount + ')', new SimpleTextAttributes(Font.ITALIC, Color.gray));
55 return super.doUpdate();
58 public String getNodeName() {
59 return getPropertyName(StringUtil.pluralize(myChildrenTagName));
62 public String getTagName() {
63 return myChildrenTagName;