1 17 18 package com.finalist.jag.skelet; 19 20 21 import com.finalist.jag.util.Log; 22 import org.w3c.dom.Document ; 23 import org.w3c.dom.Element ; 24 import org.w3c.dom.Node ; 25 import org.w3c.dom.NodeList ; 26 import org.xml.sax.InputSource ; 27 28 import javax.xml.parsers.DocumentBuilderFactory ; 29 import javax.xml.parsers.DocumentBuilder ; 30 import java.io.File ; 31 import java.io.FileInputStream ; 32 import java.io.InputStreamReader ; 33 import java.util.ArrayList ; 34 import java.util.Collection ; 35 36 43 public class XMLSkeletLoader implements SkeletLoader { 44 45 46 private Document doc = null; 47 48 49 private Exception exception = null; 50 51 52 private SkeletDataObj skeletObj = null; 53 54 55 60 public XMLSkeletLoader(File config) throws Exception { 61 62 Log.log("loading: " + config.getPath()); 63 64 InputSource inputSource = new InputSource ( 65 new InputStreamReader (new FileInputStream (config))); 66 67 68 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 69 DocumentBuilder builder = null; 70 try { 71 builder = dbf.newDocumentBuilder(); 72 doc = builder.parse(config); 73 } catch (Exception e) { 74 e.printStackTrace(); 75 } 76 } 77 78 79 80 89 public SkeletDataObj getSkeletData() throws JagSkeletException { 90 if ((skeletObj == null) && (doc != null)) { 91 Element root = doc.getDocumentElement(); 92 skeletObj = parseSkelet(root); 93 skeletObj.processReferences(); 94 } 95 96 return skeletObj; 97 } 98 99 100 109 private SkeletDataObj parseSkelet(org.w3c.dom.Element root) { 110 SkeletDataObj obj = new SkeletDataObj(root.getNodeName()); 111 Collection rootObj = (Collection ) obj.getValue(); 112 Node node = root.getFirstChild(); 113 JagSkeletConfig config = getConfig(root); 114 115 while (node != null) { 116 if ((node.getNodeType() == node.ELEMENT_NODE) 117 && node.getNodeName().equals("module")) { 118 String name = getAttribute((Element ) node, "name"); 119 SkeletModule module = new SkeletModule(name); 120 121 module.setRefname(getAttribute((Element ) node, "ref-name")); 122 module.setRefs(getAttributes((Element ) node, "ref")); 123 module.setValue(getModuleData((Element ) node)); 124 rootObj.add(module); 125 } 126 node = node.getNextSibling(); 127 } 128 obj.setConfig(config); 129 return obj; 130 } 131 132 133 142 private Collection getModuleData(org.w3c.dom.Element parent) { 143 Node node = parent.getFirstChild(); 144 ArrayList dataModules = new ArrayList (); 145 146 while (node != null) { 147 if ((node.getNodeType() == node.ELEMENT_NODE) 148 && node.getNodeName().equals("module-data")) { 149 String name = getAttribute((Element ) node, "name"); 150 if (((Element ) node).getElementsByTagName("module-data").getLength() > 0) { 151 Collection value = getModuleData((Element ) node); 152 dataModules.add(new ModuleData(name, value)); 153 } 154 else if (node.hasChildNodes()) { 155 String value = node.getFirstChild().getNodeValue(); 156 dataModules.add(new ModuleData(name, value)); 157 } 158 else { 159 dataModules.add(new ModuleData(name, "")); 160 } 161 } 162 node = node.getNextSibling(); 163 } 164 return dataModules; 165 } 166 167 168 private JagSkeletConfig getConfig(org.w3c.dom.Element root) { 169 JagSkeletConfig config = new JagSkeletConfig(); 170 NodeList list = root.getElementsByTagName("config"); 171 172 for (int i = 0; i < list.getLength(); i++) { 173 org.w3c.dom.Element tagnode = (org.w3c.dom.Element ) list.item(i); 174 config.setAuthor(getAttribute(tagnode, "author")); 175 config.setVersion(getAttribute(tagnode, "version")); 176 config.setCompany(getAttribute(tagnode, "company")); 177 } 178 179 list = root.getElementsByTagName("templates"); 180 for (int i = 0; i < list.getLength(); i++) { 181 org.w3c.dom.Element node = (org.w3c.dom.Element ) list.item(i); 182 Node childNode = node.getFirstChild(); 183 while (childNode != null) { 184 if (childNode.getNodeName().equals("template-root") && 185 childNode.hasChildNodes()) { 186 config.addTemplateUrl(childNode.getFirstChild().getNodeValue()); 187 } 188 childNode = childNode.getNextSibling(); 189 } 190 } 191 return config; 192 } 193 194 195 205 private String getAttribute(org.w3c.dom.Element root, String label) { 206 207 String sAttribute = root.getAttribute(label); 208 209 if ((sAttribute == null) || (sAttribute.length() < 1)) { 210 NodeList list = root.getElementsByTagName(label); 211 212 if (list.getLength() > 0) { 213 org.w3c.dom.Element node = (org.w3c.dom.Element ) list.item(0); 214 215 if (node.getFirstChild() != null) { 216 sAttribute = node.getFirstChild().getNodeValue(); 217 } 218 } 219 } 220 221 return sAttribute; 222 } 223 224 225 235 private Collection getAttributes(org.w3c.dom.Element root, String label) { 236 237 ArrayList attrList = new ArrayList (); 238 NodeList l2 = root.getElementsByTagName(label); 239 240 for (int i = 0; i < l2.getLength(); i++) { 241 org.w3c.dom.Element element = (org.w3c.dom.Element ) l2.item(i); 242 243 if (element.getFirstChild() != null) { 244 attrList.add(element.getFirstChild().getNodeValue()); 245 } 246 } 247 248 return attrList; 249 } 250 251 252 259 public Exception getException() { 260 return exception; 261 } 262 } | Popular Tags |