1 19 20 package ca.mcgill.sable.soot.attributes; 21 22 import java.util.*; 23 25 import org.w3c.dom.*; 26 27 28 public class AttributeDomProcessor { 29 30 Document domDoc; 31 ArrayList attributes; 32 private ArrayList keys; 33 private SootAttribute current; 34 35 36 40 public AttributeDomProcessor(Document domDoc) { 41 setDomDoc(domDoc); 42 } 43 44 47 public void processAttributesDom() { 48 processNode(getDomDoc()); 49 50 } 51 52 53 private void processNode(Node node) { 54 55 if (node.getNodeType() == Node.DOCUMENT_NODE) { 56 NodeList children = node.getChildNodes(); 57 if (children != null) { 58 setAttributes(new ArrayList()); 59 for (int i = 0; i < children.getLength(); i++) { 60 processNode(children.item(i)); 61 } 62 } 63 64 } 65 else if (node.getNodeType() == Node.ELEMENT_NODE) { 66 if ( node.getNodeName().equals("attribute")) { 67 68 current = new SootAttribute(); 69 NodeList children = node.getChildNodes(); 70 for (int i = 0; i < children.getLength(); i++) { 71 processAttributeNode(current, children.item(i)); 72 } 73 getAttributes().add(current); 74 } 75 else if (node.getNodeName().equals("key")){ 76 if (keys == null){ 77 keys = new ArrayList(); 78 } 79 NamedNodeMap map = node.getAttributes(); 80 AnalysisKey key = new AnalysisKey(); 81 key.setRed((new Integer (map.getNamedItem("red").getNodeValue())).intValue()); 82 key.setGreen((new Integer (map.getNamedItem("green").getNodeValue())).intValue()); 83 key.setBlue((new Integer (map.getNamedItem("blue").getNodeValue())).intValue()); 84 key.setKey(map.getNamedItem("key").getNodeValue()); 85 key.setType(map.getNamedItem("aType").getNodeValue()); 86 keys.add(key); 87 } 88 else { 89 NodeList children = node.getChildNodes(); 90 for (int i = 0; i < children.getLength(); i++) { 91 processNode(children.item(i)); 92 } 93 } 94 95 } 96 97 } 98 99 private void processAttributeNode(SootAttribute current, Node node) { 100 101 if (node.getNodeType() == Node.ELEMENT_NODE) { 102 if (node.getNodeName().equals("link")){ 103 NamedNodeMap map = node.getAttributes(); 104 LinkAttribute la = new LinkAttribute(); 105 106 la.setLabel(map.getNamedItem("label").getNodeValue()); 107 la.setJavaLink((new Integer (map.getNamedItem("srcLink").getNodeValue()).intValue())); 108 la.setJimpleLink((new Integer (map.getNamedItem("jmpLink").getNodeValue()).intValue())); 109 la.setClassName(map.getNamedItem("clssNm").getNodeValue()); 110 la.setType(map.getNamedItem("aType").getNodeValue()); 111 current.addLinkAttr(la); 112 } 113 else if (node.getNodeName().equals("color")){ 114 NamedNodeMap map = node.getAttributes(); 115 int r = (new Integer (map.getNamedItem("r").getNodeValue())).intValue(); 116 int g = (new Integer (map.getNamedItem("g").getNodeValue())).intValue(); 117 int b = (new Integer (map.getNamedItem("b").getNodeValue())).intValue(); 118 int fgInt = (new Integer (map.getNamedItem("fg").getNodeValue())).intValue(); 119 boolean fg = false; 120 if (fgInt == 1){ 121 fg = true; 122 } 123 ColorAttribute ca = new ColorAttribute(r, g, b, fg); 124 ca.type(map.getNamedItem("aType").getNodeValue()); 125 current.addColorAttr(ca); } 127 else if (node.getNodeName().equals("srcPos")){ 128 NamedNodeMap map = node.getAttributes(); 129 int sline = (new Integer (map.getNamedItem("sline").getNodeValue())).intValue(); 130 int eline = (new Integer (map.getNamedItem("eline").getNodeValue())).intValue(); 131 int spos = (new Integer (map.getNamedItem("spos").getNodeValue())).intValue(); 132 int epos = (new Integer (map.getNamedItem("epos").getNodeValue())).intValue(); 133 134 current.setJavaStartLn(sline); 135 current.setJavaEndLn(eline); 136 current.setJavaStartPos(spos); 137 current.setJavaEndPos(epos); 138 } 139 else if (node.getNodeName().equals("jmpPos")){ 140 NamedNodeMap map = node.getAttributes(); 141 int sline = (new Integer (map.getNamedItem("sline").getNodeValue())).intValue(); 142 int eline = (new Integer (map.getNamedItem("eline").getNodeValue())).intValue(); 143 int spos = (new Integer (map.getNamedItem("spos").getNodeValue())).intValue(); 144 int epos = (new Integer (map.getNamedItem("epos").getNodeValue())).intValue(); 145 146 current.setJimpleStartLn(sline); 147 current.setJimpleEndLn(eline); 148 current.setJimpleStartPos(spos); 149 current.setJimpleEndPos(epos); 150 } 151 else if (node.getNodeName().equals("text")){ 152 NamedNodeMap map = node.getAttributes(); 153 TextAttribute ta = new TextAttribute(); 154 ta.setInfo(map.getNamedItem("info").getNodeValue()); 155 ta.setType(map.getNamedItem("aType").getNodeValue()); 156 current.addTextAttr(ta); 157 } 158 else { 159 NodeList children = node.getChildNodes(); 160 for (int i = 0; i < children.getLength(); i++) { 161 processAttributeNode(current, children.item(i)); 162 } 163 } 164 } 165 else if (node.getNodeType() == Node.TEXT_NODE){ 166 String type = node.getParentNode().getNodeName(); 167 } 168 } 169 170 171 175 public Document getDomDoc() { 176 return domDoc; 177 } 178 179 183 public void setDomDoc(Document domDoc) { 184 this.domDoc = domDoc; 185 } 186 187 191 public ArrayList getAttributes() { 192 return attributes; 193 } 194 195 199 public SootAttribute getCurrent() { 200 return current; 201 } 202 203 207 public void setAttributes(ArrayList attributes) { 208 this.attributes = attributes; 209 } 210 211 215 public void setCurrent(SootAttribute current) { 216 this.current = current; 217 } 218 219 222 public ArrayList getKeys() { 223 return keys; 224 } 225 226 229 public void setKeys(ArrayList list) { 230 keys = list; 231 } 232 233 } 234 | Popular Tags |