1 19 20 package org.netbeans.modules.xml.xam.dom; 21 22 import java.util.ArrayList ; 23 import java.util.Collections ; 24 import java.util.List ; 25 import org.w3c.dom.Attr ; 26 import org.w3c.dom.Element ; 27 import org.w3c.dom.Node ; 28 29 33 public class ChangeInfo { 34 35 private Node changed; 36 private Element parent; 37 private DocumentComponent parentComponent; 38 private boolean domainElement; 39 private boolean added; 40 private List <Element > rootToParent; 41 45 private List <Node > otherNonDomainElementNodes; 46 47 56 public ChangeInfo(Element parent, Node changed, boolean isDomainElement, List <Element > rootToParent, List <Node > otherNodes) { 57 this.parent = parent; 58 this.changed = changed; 59 domainElement = isDomainElement; 60 if (! domainElement) { 61 otherNonDomainElementNodes = otherNodes; 62 } 63 this.rootToParent = rootToParent; 64 } 65 public Element getParent() { return parent; } 66 public Node getChangedNode() { return changed; } 67 public Element getChangedElement() { 68 if (changed instanceof Element ) { 69 return (Element ) changed; 70 } 71 return null; 72 } 73 public boolean isDomainElement() { return domainElement; } 74 public void setDomainElement(boolean v) { domainElement = v; } 75 public void setRootToParentPath(List <Element > path) { 76 rootToParent = path; 77 } 78 public List <Element > getRootToParentPath() { 79 return rootToParent; 80 } 81 public List <Element > getParentToRootPath() { 82 ArrayList <Element > ret = new ArrayList (rootToParent); 83 Collections.reverse(ret); 84 return ret; 85 } 86 public boolean isDomainElementAdded() { 87 return domainElement && added; 88 } 89 public void setAdded(boolean v) { 90 added = v; 91 } 92 public boolean isAdded() { 93 return added; 94 } 95 public void markParentAsChanged() { 96 assert parent != null; 97 changed = parent; 98 99 assert rootToParent.size() > 1; 100 assert parent == rootToParent.get(rootToParent.size()-1); 101 rootToParent.remove(rootToParent.size()-1); 102 parent = rootToParent.get(rootToParent.size()-1); 103 } 104 public void setParentComponent(DocumentComponent component) { 105 parentComponent = component; 106 } 107 public DocumentComponent getParentComponent() { 108 return parentComponent; 109 } 110 public List <Node > getOtherNonDomainElementNodes() { 111 return otherNonDomainElementNodes; 112 } 113 public Node getActualChangedNode() { 114 if (isDomainElement()) { 115 return changed; 116 } else { 117 if (otherNonDomainElementNodes == null || otherNonDomainElementNodes.isEmpty()) { 118 return changed; 119 } else { 120 return otherNonDomainElementNodes.get(otherNonDomainElementNodes.size()-1); 121 } 122 } 123 } 124 public void markNonDomainChildAsChanged() { 125 assert otherNonDomainElementNodes != null && otherNonDomainElementNodes.size() > 0; 126 assert(changed instanceof Element ); 127 rootToParent.add((Element ) changed); 128 parent = (Element ) changed; 129 changed = otherNonDomainElementNodes.remove(0); 130 parentComponent = null; 131 } 132 133 public String toString() { 134 String op = added ? "ADD: " : "REMOVE: "; 135 if (changed instanceof Element ) { 136 return op + ((Element )changed).getTagName(); 137 } else if (changed instanceof Attr ) { 138 return op + ((Attr )changed).getNodeName()+"="+((Attr )changed).getNodeValue(); 139 } else { 140 return op + changed.getNodeValue(); 141 } 142 } 143 } | Popular Tags |