KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > examples > binding > BeanGen


1 package examples.binding;
2
3 import java.io.IOException JavaDoc;
4 import java.io.PrintWriter JavaDoc;
5 import java.io.FileWriter JavaDoc;
6 import java.io.StringWriter JavaDoc;
7 import java.util.Iterator JavaDoc;
8
9 public class BeanGen {
10
11   private String JavaDoc destdir;
12   public BeanGen() {}
13
14   public void setDestDir(String JavaDoc dir) {
15     destdir = dir;
16   }
17
18   public String JavaDoc getDestDir() {
19     return destdir;
20   }
21
22   private static String JavaDoc capital(String JavaDoc oldString) {
23    return (oldString.substring(0,1)).toUpperCase()+
24       oldString.substring(1,oldString.length());
25   }
26
27   public void generatePropertyDecl(Property p,
28                                    PrintWriter JavaDoc writer) {
29     writer.print(" private ");
30     if (p.getType() == Property.STRING)
31       writer.println("String _"+p.getName()+";");
32     if (p.getType() == Property.INTEGER)
33       writer.println("int _"+p.getName()+";");
34     if (p.getType() == Property.BEAN)
35       writer.println(p.getRefType()+" _"+p.getName()+";");
36   }
37   public void generateSetters(Property p,
38                               PrintWriter JavaDoc writer) {
39     String JavaDoc name = capital(p.getName());
40     if (p.getType() == Property.STRING) {
41       writer.print(" public void set"+name+"(String val)");
42       writer.println("{ _"+p.getName()+"=val;}");
43       writer.print(" public String get"+name+"()");
44       writer.println("{ return _"+p.getName()+";}");
45     }
46     if (p.getType() == Property.INTEGER) {
47       writer.print(" public void set"+name+"(int val)");
48       writer.println("{ _"+p.getName()+"=val;}");
49       writer.print(" public int get"+name+"()");
50       writer.println("{ return _"+p.getName()+";}");
51     }
52     if (p.getType() == Property.BEAN) {
53       writer.print(" public void set"+name+"("+p.getRefType()+" val)");
54       writer.println("{ _"+p.getName()+"=val;}");
55       writer.print(" public "+p.getRefType()+" get"+name+"()");
56       writer.println("{ return _"+p.getName()+";}");
57     }
58   }
59
60   public void generateBean(String JavaDoc packageName,
61                            BeanInfo info)
62     throws IOException JavaDoc
63   {
64
65     String JavaDoc className = capital(info.getName());
66     PrintWriter JavaDoc writer = new PrintWriter JavaDoc(new FileWriter JavaDoc(getDestDir()+"/"+className+".java"));
67     writer.println("//**-- "+className+".java--**");
68     writer.println("package "+packageName+";");
69     writer.println("public class "+className+" {");
70     writer.println(" public "+className+"(){}");
71     Property[] properties = info.getProperties();
72     for(int i=0; i < properties.length; i++) {
73       generatePropertyDecl(properties[i], writer);
74     }
75     properties = info.getProperties();
76     for(int i=0; i < properties.length; i++) {
77       generateSetters(properties[i], writer);
78     }
79     writer.println("}");
80     writer.close();
81   }
82
83   public void generate(BeanDescription desc)
84     throws IOException JavaDoc
85   {
86     
87     Iterator JavaDoc i = desc.getBeans();
88     while(i.hasNext()) {
89       BeanInfo info = (BeanInfo) i.next();
90       generateBean(desc.getPackageName(),
91                    info);
92       generateCodec(desc.getNamespaceName(),
93                     desc.getPackageName(),
94                    info);
95     }
96   }
97
98  
99   public void generatePropertySerializer(String JavaDoc namespace,
100                                          String JavaDoc packageName,
101                                          Property p,
102                                          PrintWriter JavaDoc writer) {
103     String JavaDoc name = capital(p.getName());
104     if (p.getType() == Property.STRING) {
105       writer.println(" writer.writeStartElement(_namespace,"+
106                      quote(name)+");");
107  
108       writer.println(" writer.writeCharacters(obj.get"+name+"());");
109       writer.println(" writer.writeEndElement();");
110     }
111     if (p.getType() == Property.INTEGER) {
112       writer.println(" writer.writeStartElement(_namespace,"+
113                      quote(name)+");");
114
115       writer.println(" writer.writeCharacters(Integer.toString(obj.get"+name+"()));");
116       writer.println(" writer.writeEndElement();");
117     }
118     if (p.getType() == Property.BEAN) {
119       writer.println(" "+packageName+"."+p.getRefType()+"Codec.serialize(obj.get"+name+"()"+
120                    ",writer);");
121     }
122  
123   }
124
125   public String JavaDoc quote(String JavaDoc val) {
126     return "\""+val+"\"";
127   }
128
129   public void generateSerializer(String JavaDoc namespace,
130                                  String JavaDoc packageName,
131                                  BeanInfo info,
132                                  PrintWriter JavaDoc writer)
133   {
134     String JavaDoc className = capital(info.getName());
135     writer.println(" public static void serialize("+className+
136                    " obj, XMLStreamWriter writer)");
137     writer.println(" throws XMLStreamException");
138     writer.println(" {");
139     writer.println(" writer.setPrefix(\"a\",_namespace);");
140     writer.println(" writer.writeStartElement(_namespace,"+
141                    quote(className)+");");
142     writer.println(" writer.writeNamespace(\"a\",_namespace);");
143     Property[] properties = info.getProperties();
144     for(int i=0; i < properties.length; i++) {
145       generatePropertySerializer(namespace,packageName,properties[i], writer);
146     }
147     writer.println(" writer.writeEndElement();");
148     writer.println(" }");
149   }
150
151   public void skipSpace(PrintWriter JavaDoc writer) {
152     writer.println(" while(reader.isWhiteSpace() || !(reader.isStartElement() || reader.isEndElement() || reader.isCharacters())) reader.next();");
153   }
154
155   public void next(PrintWriter JavaDoc writer) {
156     writer.println(" reader.next();");
157   }
158
159   public void generatePropertyDeserializer(String JavaDoc namespace,
160                                          String JavaDoc packageName,
161                                          Property p,
162                                          PrintWriter JavaDoc writer) {
163     String JavaDoc name = capital(p.getName());
164     if (p.getType() == Property.STRING) {
165       writer.println(" reader.require(XMLStreamReader.START_ELEMENT,"+
166                      "_namespace,"+
167                      quote(name)+");");
168       next(writer);
169
170       writer.println(" obj.set"+name+"("+
171                      "reader.getText());");
172       next(writer);
173       writer.println(" reader.require(XMLStreamReader.END_ELEMENT,"+
174                      "_namespace,"+
175                      quote(name)+");");
176       next(writer);
177
178     }
179     if (p.getType() == Property.INTEGER) {
180       writer.println(" reader.require(XMLStreamReader.START_ELEMENT,"+
181                      "_namespace,"+
182                      quote(name)+");");
183       next(writer);
184
185       writer.println(" obj.set"+name+"("+
186                      "(new Integer(reader.getText()).intValue()));");
187       next(writer);
188       writer.println(" reader.require(XMLStreamReader.END_ELEMENT,"+
189                      "_namespace,"+
190                      quote(name)+");");
191       next(writer);
192
193     }
194     if (p.getType() == Property.BEAN) {
195       writer.println(" obj.set"+name+"("+packageName+"."+p.getRefType()+"Codec.deserialize("
196                      +"reader));");
197     }
198
199   }
200
201   public void generateDeserializer(String JavaDoc namespace,
202                                    String JavaDoc packageName,
203                                    BeanInfo info,
204                                    PrintWriter JavaDoc writer)
205   {
206     String JavaDoc className = capital(info.getName());
207     writer.println(" public static "+className+" deserialize("+
208                    " XMLStreamReader reader)");
209     writer.println(" throws XMLStreamException");
210     writer.println(" {");
211     skipSpace(writer);
212     writer.println(" "+className+" obj = new "+packageName+
213                    "."+className+"();");
214     writer.println(" reader.require(XMLStreamReader.START_ELEMENT,"+
215                    "_namespace,"+
216                    quote(className)+");");
217     next(writer);
218     Property[] properties = info.getProperties();
219     for(int i=0; i < properties.length; i++) {
220       generatePropertyDeserializer(namespace,packageName,properties[i], writer);
221     }
222     writer.println(" reader.require(XMLStreamReader.END_ELEMENT,"+
223                    "_namespace,"+
224                    quote(className)+");");
225     next(writer);
226     writer.println(" return obj;");
227     writer.println(" }");
228   }
229
230   public void generateCodec(String JavaDoc namespace,
231                             String JavaDoc packageName,
232                             BeanInfo info)
233     throws IOException JavaDoc
234   {
235
236     String JavaDoc className = capital(info.getName()+"Codec");
237     PrintWriter JavaDoc writer = new PrintWriter JavaDoc(new FileWriter JavaDoc(getDestDir()+"/"+className+".java"));
238     writer.println("//**-- "+className+".java--**");
239     writer.println("package "+packageName+";");
240     writer.println("import javax.xml.stream.XMLStreamWriter;");
241     writer.println("import javax.xml.stream.XMLStreamReader;");
242     writer.println("import javax.xml.stream.XMLStreamException;");
243     writer.println("public class "+className+" {");
244     writer.println(" private static final String _namespace=\""+namespace+"\";");
245     writer.println(" public "+className+"(){}");
246     generateSerializer(namespace,packageName,info,writer);
247     generateDeserializer(namespace,packageName,info,writer);
248     writer.println("}");
249     writer.close();
250   }
251
252   public static void main(String JavaDoc args[])
253     throws Exception JavaDoc
254   {
255     Parser parser = new Parser(new java.io.FileReader JavaDoc(args[0]));
256     BeanDescription description = parser.parse();
257     
258     StringWriter JavaDoc w = new StringWriter JavaDoc();
259     BeanGen generator = new BeanGen();
260     generator.setDestDir(args[1]);
261     generator.generate(description);
262   }
263 }
264
265
266
267
Popular Tags