KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > bridge > remote > generator > XMLClass


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9  */

10
11 package org.mmbase.bridge.remote.generator;
12 import org.w3c.dom.*;
13
14 import java.util.*;
15
16 /**
17  * @javadoc
18  * @author Kees Jongenburger <keesj@dds.nl>
19  **/

20 public class XMLClass {
21     Element xml;
22     Map methods;
23     List methodsList;
24     List realInput;
25     Object JavaDoc 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 JavaDoc 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 JavaDoc(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 JavaDoc(data);
56     }
57     public void setData(int data){
58         this.data = new Integer JavaDoc(data);
59     }
60     public void setData(Object JavaDoc data){
61         this.data = data;
62     }
63
64     public Class JavaDoc getJavaClass() throws ClassNotFoundException JavaDoc{
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 JavaDoc 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 JavaDoc name = element.getTagName();
113                 if (name.equals("data")){
114                     if (element.getAttribute("type").equals("input")){
115                         String JavaDoc 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 JavaDoc 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 JavaDoc clone(boolean deep){
146         //return new XMLClass().fromXML(xml.clone(true));
147
return XMLClass.fromXML(xml);
148     }
149
150     public List getInput(){
151         return realInput;
152     }
153     public String JavaDoc getImplements(){
154         return xml.getAttribute("implements");
155     }
156     public String JavaDoc getName(){
157         return xml.getAttribute("name");
158     }
159     public String JavaDoc getShortName(){
160         String JavaDoc res=xml.getAttribute("shortname");
161         if (res.equals("")){
162             res = getName();
163         }
164         return res;
165     }
166
167     public String JavaDoc getClassName(){
168         String JavaDoc 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 JavaDoc getOriginalName(){
177         String JavaDoc 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     /**
199      *@return an XMLMethod
200      **/

201     public XMLMethod getMethod(String JavaDoc 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 JavaDoc toString() {
235         return getName();
236     }
237
238     public boolean equals(Object JavaDoc 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