1 10 11 package org.mmbase.bridge.remote.generator; 12 import org.w3c.dom.*; 13 14 import java.util.*; 15 16 20 public class XMLClass { 21 Element xml; 22 Map methods; 23 List methodsList; 24 List realInput; 25 Object data; 26 Document document=null; 27 boolean dataIsXMLClass = false; 28 public boolean isArray = false; 29 public boolean isPrimitive = false; 30 public boolean isInterface = true; 31 public boolean isSerializable = false; 32 33 XMLClass(Document document) { 34 this.document= document; 35 methods = new HashMap(); 36 methodsList = new ArrayList(); 37 realInput = new ArrayList(); 38 } 39 40 public Object getData(){ 41 return data; 42 43 } 44 public void setData(XMLClass data){ 45 dataIsXMLClass = true; 46 this.data = data; 47 } 48 public void setData(double data){ 49 this.data = new Double (data); 50 } 51 public void setData(boolean data){ 52 this.data = Boolean.valueOf(data); 53 } 54 public void setData(float data){ 55 this.data = new Float (data); 56 } 57 public void setData(int data){ 58 this.data = new Integer (data); 59 } 60 public void setData(Object data){ 61 this.data = data; 62 } 63 64 public Class getJavaClass() throws ClassNotFoundException { 65 return Class.forName(getName()); 66 } 67 68 public void setXML(Element xml){ 69 this.xml = xml; 70 } 71 72 public void addInput(XMLClass xmlClass){ 73 realInput.add(xmlClass); 74 } 75 76 77 public static XMLClass fromXML(Element xml){ 78 Document doc = xml.getOwnerDocument(); 79 String elementName = xml.getTagName(); 80 81 if (elementName.equals("primitiveclass")){ 82 XMLClass xmlClass = new XMLClass(doc); 83 xmlClass.isPrimitive = true; 84 xmlClass.setXML(xml); 85 xmlClass.isSerializable = xml.getAttribute("serializable").equals("true"); 86 return xmlClass; 87 } else if (elementName.equals("sunclass")){ 88 XMLClass xmlClass = new XMLClass(doc); 89 xmlClass.setXML(xml); 90 xmlClass.isSerializable = xml.getAttribute("serializable").equals("true"); 91 return xmlClass; 92 } else if (elementName.equals("class")) { 93 XMLClass xmlClass = new XMLClass(doc); 94 xmlClass.isInterface = false; 95 xmlClass.setXML(xml); 96 xmlClass.isSerializable = xml.getAttribute("serializable").equals("true"); 97 return xmlClass; 98 } else if (elementName.equals("array") || elementName.equals("interface")){ 99 100 XMLClass xmlClass = new XMLClass(doc); 101 if (elementName.equals("array")) { 102 xmlClass.isArray = true; 103 xmlClass.isInterface = false; 104 } else { 105 xmlClass.isInterface = true; 106 } 107 xmlClass.setXML(xml); 108 xmlClass.isSerializable = xml.getAttribute("serializable").equals("true"); 109 NodeList nl= xml.getElementsByTagName("*"); 110 for(int i=0; i<nl.getLength(); i++) { 111 Element element = (Element)nl.item(i); 112 String name = element.getTagName(); 113 if (name.equals("data")){ 114 if (element.getAttribute("type").equals("input")){ 115 String content=""; 116 NodeList nl2 = element.getChildNodes(); 117 for (int j=0;i<nl2.getLength();j++) { 118 Node n = nl2.item(j); 119 if (n.getNodeType() == Node.TEXT_NODE) { 120 content+=n.getNodeValue(); 121 } 122 } 123 xmlClass.setData(content); 124 } 125 } else if (name.equals("method")){ 126 XMLMethod xmlMethod= (XMLMethod)XMLMethod.fromXML(element); 127 xmlClass.methods.put(xmlMethod.getName(), xmlMethod); 128 xmlClass.methodsList.add(xmlMethod); 129 } 130 } 131 return xmlClass; 132 } else if (elementName.equals("classReference")){ 133 try { 134 MMCI mmci = MMCI.getDefaultMMCI(); 135 return mmci.getClass(xml.getAttribute("name")); 136 } catch (Exception e){ 137 System.err.println("FROMXML ERROR " + e.getMessage()); 138 } 139 } else { 140 System.err.println("CANNOT make class from " + elementName); 141 } 142 return null; 143 } 144 145 public Object clone(boolean deep){ 146 return XMLClass.fromXML(xml); 148 } 149 150 public List getInput(){ 151 return realInput; 152 } 153 public String getImplements(){ 154 return xml.getAttribute("implements"); 155 } 156 public String getName(){ 157 return xml.getAttribute("name"); 158 } 159 public String getShortName(){ 160 String res=xml.getAttribute("shortname"); 161 if (res.equals("")){ 162 res = getName(); 163 } 164 return res; 165 } 166 167 public String getClassName(){ 168 String res = getShortName(); 169 int periodIndex = res.lastIndexOf("."); 170 if (periodIndex > -1) { 171 res = res.substring(0,periodIndex) + "_" + res.substring(periodIndex + 1); 172 } 173 return res; 174 } 175 176 public String getOriginalName(){ 177 String result=xml.getAttribute("originalname"); 178 if (result.equals("")){ 179 result = getName(); 180 } 181 return result; 182 } 183 184 public Element toXMLInput(){ 185 Element xmle = document.createElement("class"); 186 xmle.setAttribute("name",getName()); 187 Element xmlData = document.createElement("data"); 188 xmlData.setAttribute("type","input"); 189 Text text=document.createTextNode(""+data); 190 xmlData.appendChild(text); 191 xmle.appendChild(xmlData); 192 return xmle; 193 } 194 195 public List getMethods(){ 196 return methodsList; 197 } 198 201 public XMLMethod getMethod(String name){ 202 return (XMLMethod)methods.get(name); 203 } 204 205 public XMLClass getReturnType(){ 206 NodeList nl= xml.getElementsByTagName("output"); 207 for(int i=0; i<nl.getLength(); i++) { 208 Element element = (Element)nl.item(i); 209 NodeList nl2= element.getElementsByTagName("*"); 210 for(int j=0; j<nl2.getLength(); j++) { 211 Element returnvalue = (Element)nl2.item(j); 212 return XMLClass.fromXML(returnvalue); 213 } 214 } 215 System.out.println("No return type found on " + this); 216 return null; 217 } 218 219 public List getParameterList(){ 220 List results= new ArrayList(); 221 NodeList nl= xml.getElementsByTagName("input"); 222 for(int i=0; i<nl.getLength(); i++) { 223 Element element = (Element)nl.item(i); 224 NodeList nl2= element.getElementsByTagName("*"); 225 for(int j=0; j<nl2.getLength(); j++) { 226 Element par = (Element)nl2.item(j); 227 results.add(XMLClass.fromXML(par)); 228 } 229 } 230 return results; 231 } 232 233 234 public String toString() { 235 return getName(); 236 } 237 238 public boolean equals(Object o) { 239 if (o instanceof XMLClass) { 240 XMLClass other = (XMLClass) o; 241 return getName().equals(other.getName()); 242 } else { 243 return false; 244 } 245 } 246 247 public int hashCode() { 248 return 13 * getName().hashCode(); 249 } 250 } 251 | Popular Tags |