KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > activemq > openwire > tool > CSourcesGenerator


1 /**
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one or more
4  * contributor license agreements. See the NOTICE file distributed with
5  * this work for additional information regarding copyright ownership.
6  * The ASF licenses this file to You under the Apache License, Version 2.0
7  * (the "License"); you may not use this file except in compliance with
8  * the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */

18 package org.apache.activemq.openwire.tool;
19
20 import java.io.File JavaDoc;
21 import java.io.PrintWriter JavaDoc;
22 import java.util.ArrayList JavaDoc;
23 import java.util.Iterator JavaDoc;
24 import java.util.List JavaDoc;
25
26 import org.codehaus.jam.JAnnotation;
27 import org.codehaus.jam.JAnnotationValue;
28 import org.codehaus.jam.JClass;
29 import org.codehaus.jam.JProperty;
30
31 /**
32  *
33  * @version $Revision: 383749 $
34  */

35 public class CSourcesGenerator extends CHeadersGenerator {
36
37     public Object JavaDoc run() {
38         filePostFix = ".c";
39         if (destFile == null) {
40             destFile = new File JavaDoc(targetDir + "/ow_commands_v" + getOpenwireVersion() + ".c");
41         }
42         return super.run();
43     }
44
45     protected List JavaDoc sort(List JavaDoc source) {
46         return source;
47     }
48
49     protected void generateSetup(PrintWriter JavaDoc out) {
50         generateLicence(out);
51         out.println("");
52         out.println("/*****************************************************************************************");
53         out.println(" * ");
54         out.println(" * NOTE!: This file is auto generated - do not modify!");
55         out.println(" * if you need to make a change, please see the modify the groovy scripts in the");
56         out.println(" * under src/gram/script and then use maven openwire:generate to regenerate ");
57         out.println(" * this file.");
58         out.println(" * ");
59         out.println(" *****************************************************************************************/");
60         out.println("");
61         out.println("");
62         out.println("#include \"ow_commands_v"+openwireVersion+".h\"");
63         out.println("");
64         out.println("#define SUCCESS_CHECK( f ) { apr_status_t rc=f; if(rc!=APR_SUCCESS) return rc; }");
65         out.println("");
66     }
67
68     protected void generateFile(PrintWriter JavaDoc out) throws Exception JavaDoc {
69     
70         ArrayList JavaDoc properties = new ArrayList JavaDoc();
71         jclass.getDeclaredProperties();
72         for (int i = 0; i < jclass.getDeclaredProperties().length; i++) {
73             JProperty p = jclass.getDeclaredProperties()[i];
74             if (isValidProperty(p)) {
75                 properties.add(p);
76             }
77         }
78         
79         String JavaDoc name = jclass.getSimpleName();
80         String JavaDoc type = ("ow_"+name).toUpperCase()+"_TYPE";
81         String JavaDoc baseName = "DataStructure";
82         JClass superclass = jclass.getSuperclass();
83         while( superclass.getSuperclass() != null ) {
84            if( sortedClasses.contains(superclass) ) {
85               baseName = superclass.getSimpleName();
86               break;
87            } else {
88               superclass = superclass.getSuperclass();
89            }
90         }
91                
92 out.println("ow_boolean ow_is_a_"+name+"(ow_DataStructure *object) {");
93 out.println(" if( object == 0 )");
94 out.println(" return 0;");
95 out.println(" ");
96 out.println(" switch(object->structType) {");
97
98         for (Iterator JavaDoc iterator = sortedClasses.iterator(); iterator.hasNext();) {
99             JClass sub = (JClass) iterator.next();
100             String JavaDoc subtype = "OW_"+sub.getSimpleName().toUpperCase()+"_TYPE";
101             if( jclass.isAssignableFrom(sub) && !isAbstract(sub) ) {
102 out.println("");
103 out.println(" case "+subtype+":");
104             }
105         }
106 out.println("");
107 out.println(" return 1;");
108 out.println(" }");
109 out.println(" return 0;");
110 out.println("}");
111                
112         if( !isAbstract(jclass) ) {
113 out.println("");
114 out.println("");
115 out.println("ow_"+name+" *ow_"+name+"_create(apr_pool_t *pool) ");
116 out.println("{");
117 out.println(" ow_"+name+" *value = apr_pcalloc(pool,sizeof(ow_"+name+"));");
118 out.println(" if( value!=0 ) {");
119 out.println(" ((ow_DataStructure*)value)->structType = "+type+";");
120 out.println(" }");
121 out.println(" return value;");
122 out.println("}");
123         }
124                
125 out.println("");
126 out.println("");
127 out.println("apr_status_t ow_marshal1_"+name+"(ow_bit_buffer *buffer, ow_"+name+" *object)");
128 out.println("{");
129 out.println(" ow_marshal1_"+baseName+"(buffer, (ow_"+baseName+"*)object);");
130
131         for (Iterator JavaDoc iter = properties.iterator(); iter.hasNext();) {
132             JProperty property = (JProperty) iter.next();
133             String JavaDoc propname = toPropertyCase(property.getSimpleName());
134             boolean cached = isCachedProperty(property);
135             JAnnotation annotation = property.getGetter().getAnnotation("openwire:property");
136             JAnnotationValue size = annotation.getValue("size");
137
138            type = property.getType().getQualifiedName();
139            if( type.equals("boolean")) {
140 out.println(" ow_bit_buffer_append(buffer, object->"+propname+");");
141                    } else if( type.equals("byte")) {
142                    } else if( type.equals("char")) {
143                    } else if( type.equals("short")) {
144                    } else if( type.equals("int")) {
145                    } else if( type.equals("long")) {
146 out.println(" ow_marshal1_long(buffer, object->"+propname+");");
147                    } else if( type.equals("byte[]")) {
148                      if( size ==null ) {
149 out.println(" ow_bit_buffer_append(buffer, object->"+propname+"!=0 );");
150                      }
151                    } else if( type.equals("org.apache.activeio.packet.ByteSequence")) {
152                      if( size ==null ) {
153 out.println(" ow_bit_buffer_append(buffer, object->"+propname+"!=0 );");
154                      }
155                    } else if( type.equals("java.lang.String")) {
156 out.println(" ow_marshal1_string(buffer, object->"+propname+");");
157                    } else {
158                          if( property.getType().isArrayType() ) {
159                            if( size!=null ) {
160 out.println(" SUCCESS_CHECK(ow_marshal1_DataStructure_array_const_size(buffer, object->"+propname+", "+size.asInt()+"));");
161                            } else {
162 out.println(" SUCCESS_CHECK(ow_marshal1_DataStructure_array(buffer, object->"+propname+"));");
163                            }
164                          } else if( isThrowable(property.getType()) ) {
165 out.println(" SUCCESS_CHECK(ow_marshal1_throwable(buffer, object->"+propname+"));");
166                          } else {
167                            if( cached ) {
168 out.println(" SUCCESS_CHECK(ow_marshal1_cached_object(buffer, (ow_DataStructure*)object->"+propname+"));");
169                            } else {
170 out.println(" SUCCESS_CHECK(ow_marshal1_nested_object(buffer, (ow_DataStructure*)object->"+propname+"));");
171                            }
172                        }
173                    }
174 out.println("");
175                }
176
177
178 out.println(" ");
179 out.println(" return APR_SUCCESS;");
180 out.println("}");
181 out.println("apr_status_t ow_marshal2_"+name+"(ow_byte_buffer *buffer, ow_bit_buffer *bitbuffer, ow_"+name+" *object)");
182 out.println("{");
183 out.println(" ow_marshal2_"+baseName+"(buffer, bitbuffer, (ow_"+baseName+"*)object); ");
184
185             for (Iterator JavaDoc iter = properties.iterator(); iter.hasNext();) {
186                 JProperty property = (JProperty) iter.next();
187                    JAnnotation annotation = property.getGetter().getAnnotation("openwire:property");
188                    JAnnotationValue size = annotation.getValue("size");
189                    Object JavaDoc propname = toPropertyCase(property.getSimpleName());
190                    boolean cached = isCachedProperty(property);
191                    
192                    type = property.getType().getQualifiedName();
193                    if( type.equals("boolean") ) {
194 out.println(" ow_bit_buffer_read(bitbuffer);");
195                    } else if( type.equals("byte") ) {
196 out.println(" SUCCESS_CHECK(ow_byte_buffer_append_"+type+"(buffer, object->"+propname+"));");
197                    } else if( type.equals("char") ) {
198 out.println(" SUCCESS_CHECK(ow_byte_buffer_append_"+type+"(buffer, object->"+propname+"));");
199                    } else if( type.equals("short") ) {
200 out.println(" SUCCESS_CHECK(ow_byte_buffer_append_"+type+"(buffer, object->"+propname+"));");
201                    } else if( type.equals("int") ) {
202 out.println(" SUCCESS_CHECK(ow_byte_buffer_append_"+type+"(buffer, object->"+propname+"));");
203                    } else if( type.equals("long") ) {
204 out.println(" SUCCESS_CHECK(ow_marshal2_long(buffer, bitbuffer, object->"+propname+"));");
205                    } else if( type.equals("byte[]") ) {
206                        if( size!=null ) {
207 out.println(" SUCCESS_CHECK(ow_marshal2_byte_array_const_size(buffer, object->"+propname+", "+size.asInt()+"));");
208                        } else {
209 out.println(" SUCCESS_CHECK(ow_marshal2_byte_array(buffer, bitbuffer, object->"+propname+"));");
210                        }
211                    } else if( type.equals("org.apache.activeio.packet.ByteSequence") ) {
212                        if( size!=null ) {
213 out.println(" SUCCESS_CHECK(ow_marshal2_byte_array_const_size(buffer, object->"+propname+", "+size.asInt()+"));");
214                        } else {
215 out.println(" SUCCESS_CHECK(ow_marshal2_byte_array(buffer, bitbuffer, object->"+propname+"));");
216                        }
217                    } else if( type.equals("java.lang.String") ) {
218 out.println(" SUCCESS_CHECK(ow_marshal2_string(buffer, bitbuffer, object->"+propname+"));");
219                    } else {
220                       if( property.getType().isArrayType() ) {
221                          if( size!=null ) {
222 out.println(" SUCCESS_CHECK(ow_marshal2_DataStructure_array_const_size(buffer, bitbuffer, object->"+propname+", "+size.asInt()+"));");
223                          } else {
224 out.println(" SUCCESS_CHECK(ow_marshal2_DataStructure_array(buffer, bitbuffer, object->"+propname+"));");
225                          }
226                       } else if( isThrowable(property.getType()) ) {
227 out.println(" SUCCESS_CHECK(ow_marshal2_throwable(buffer, bitbuffer, object->"+propname+"));");
228                       } else {
229                            if( cached ) {
230 out.println(" SUCCESS_CHECK(ow_marshal2_cached_object(buffer, bitbuffer, (ow_DataStructure*)object->"+propname+"));");
231                            } else {
232 out.println(" SUCCESS_CHECK(ow_marshal2_nested_object(buffer, bitbuffer, (ow_DataStructure*)object->"+propname+"));");
233                            }
234                       }
235                    }
236 out.println("");
237                }
238
239 out.println(" ");
240 out.println(" return APR_SUCCESS;");
241 out.println("}");
242 out.println("");
243 out.println("apr_status_t ow_unmarshal_"+name+"(ow_byte_array *buffer, ow_bit_buffer *bitbuffer, ow_"+name+" *object, apr_pool_t *pool)");
244 out.println("{");
245 out.println(" ow_unmarshal_"+baseName+"(buffer, bitbuffer, (ow_"+baseName+"*)object, pool); ");
246
247     for (Iterator JavaDoc iter = properties.iterator(); iter.hasNext();) {
248         JProperty property = (JProperty) iter.next();
249                    JAnnotation annotation = property.getGetter().getAnnotation("openwire:property");
250                    JAnnotationValue size = annotation.getValue("size");
251                    String JavaDoc propname = toPropertyCase(property.getSimpleName());
252                    boolean cached = isCachedProperty(property);
253                    
254                    type = property.getType().getQualifiedName();
255
256                    if( type.equals("boolean") ) {
257 out.println(" object->"+propname+" = ow_bit_buffer_read(bitbuffer);");
258                    } else if( type.equals("byte") ) {
259 out.println(" SUCCESS_CHECK(ow_byte_array_read_"+type+"(buffer, &object->"+propname+"));");
260                    } else if( type.equals("char") ) {
261 out.println(" SUCCESS_CHECK(ow_byte_array_read_"+type+"(buffer, &object->"+propname+"));");
262                    } else if( type.equals("short") ) {
263 out.println(" SUCCESS_CHECK(ow_byte_array_read_"+type+"(buffer, &object->"+propname+"));");
264                    } else if( type.equals("int") ) {
265 out.println(" SUCCESS_CHECK(ow_byte_array_read_"+type+"(buffer, &object->"+propname+"));");
266                    } else if( type.equals("long") ) {
267 out.println(" SUCCESS_CHECK(ow_unmarshal_long(buffer, bitbuffer, &object->"+propname+", pool));");
268                    } else if( type.equals("byte[]") ) {
269                        if( size!=null ) {
270 out.println(" SUCCESS_CHECK(ow_unmarshal_byte_array_const_size(buffer, &object->"+propname+", "+size.asInt()+", pool));");
271                        } else {
272 out.println(" SUCCESS_CHECK(ow_unmarshal_byte_array(buffer, bitbuffer, &object->"+propname+", pool));");
273                        }
274                    } else if( type.equals("org.apache.activeio.packet.ByteSequence") ) {
275                        if( size!=null ) {
276 out.println(" SUCCESS_CHECK(ow_unmarshal_byte_array_const_size(buffer, &object->"+propname+", "+size.asInt()+", pool));");
277                        } else {
278 out.println(" SUCCESS_CHECK(ow_unmarshal_byte_array(buffer, bitbuffer, &object->"+propname+", pool));");
279                        }
280                    } else if( type.equals("java.lang.String") ) {
281 out.println(" SUCCESS_CHECK(ow_unmarshal_string(buffer, bitbuffer, &object->"+propname+", pool));");
282                    } else {
283                       if( property.getType().isArrayType() ) {
284                         if( size!=null ) {
285 out.println(" SUCCESS_CHECK(ow_unmarshal_DataStructure_array_const_size(buffer, bitbuffer, &object->"+propname+", "+size.asInt()+", pool));");
286                         } else {
287 out.println(" SUCCESS_CHECK(ow_unmarshal_DataStructure_array(buffer, bitbuffer, &object->"+propname+", pool));");
288                         }
289                       } else if( isThrowable(property.getType()) ) {
290 out.println(" SUCCESS_CHECK(ow_unmarshal_throwable(buffer, bitbuffer, &object->"+propname+", pool));");
291                       } else {
292                            if( cached ) {
293 out.println(" SUCCESS_CHECK(ow_unmarshal_cached_object(buffer, bitbuffer, (ow_DataStructure**)&object->"+propname+", pool));");
294                            } else {
295 out.println(" SUCCESS_CHECK(ow_unmarshal_nested_object(buffer, bitbuffer, (ow_DataStructure**)&object->"+propname+", pool));");
296                            }
297                       }
298                    }
299 out.println("");
300                }
301
302 out.println(" ");
303 out.println(" return APR_SUCCESS;");
304 out.println("}");
305          }
306          
307     protected void generateTearDown(PrintWriter JavaDoc out) {
308 out.println("");
309 out.println("ow_DataStructure *ow_create_object(ow_byte type, apr_pool_t *pool)");
310 out.println("{");
311 out.println(" switch( type ) {");
312         for (Iterator JavaDoc iterator = sortedClasses.iterator(); iterator.hasNext();) {
313             JClass jclass = (JClass) iterator.next();
314             String JavaDoc name = jclass.getSimpleName();
315             String JavaDoc type = ("ow_"+name).toUpperCase()+"_TYPE";
316             if( !isAbstract(jclass) ) {
317 out.println(" case "+type+": return (ow_DataStructure *)ow_"+name+"_create(pool);");
318             }
319          }
320          
321 out.println("");
322 out.println(" }");
323 out.println(" return 0;");
324 out.println("}");
325 out.println("");
326 out.println("apr_status_t ow_marshal1_object(ow_bit_buffer *buffer, ow_DataStructure *object)");
327 out.println("{");
328 out.println(" switch( object->structType ) {");
329
330         for (Iterator JavaDoc iterator = sortedClasses.iterator(); iterator.hasNext();) {
331             JClass jclass = (JClass) iterator.next();
332             String JavaDoc name = jclass.getSimpleName();
333             String JavaDoc type = ("ow_"+name).toUpperCase()+"_TYPE";
334             if( !isAbstract(jclass) ) {
335 out.println(" case "+type+": return ow_marshal1_"+name+"(buffer, (ow_"+name+"*)object);");
336             }
337          }
338          
339 out.println("");
340 out.println(" }");
341 out.println(" return APR_EGENERAL;");
342 out.println("}");
343 out.println("");
344 out.println("apr_status_t ow_marshal2_object(ow_byte_buffer *buffer, ow_bit_buffer *bitbuffer, ow_DataStructure *object)");
345 out.println("{");
346 out.println(" switch( object->structType ) {");
347
348         for (Iterator JavaDoc iterator = sortedClasses.iterator(); iterator.hasNext();) {
349             JClass jclass = (JClass) iterator.next();
350             String JavaDoc name = jclass.getSimpleName();
351             String JavaDoc type = ("ow_"+name).toUpperCase()+"_TYPE";
352             if( !isAbstract(jclass) ) {
353 out.println(" case "+type+": return ow_marshal2_"+name+"(buffer, bitbuffer, (ow_"+name+"*)object);");
354             }
355          }
356
357 out.println("");
358 out.println(" }");
359 out.println(" return APR_EGENERAL;");
360 out.println("}");
361 out.println("");
362 out.println("apr_status_t ow_unmarshal_object(ow_byte_array *buffer, ow_bit_buffer *bitbuffer, ow_DataStructure *object, apr_pool_t *pool)");
363 out.println("{");
364 out.println(" switch( object->structType ) {");
365
366         for (Iterator JavaDoc iterator = sortedClasses.iterator(); iterator.hasNext();) {
367             JClass jclass = (JClass) iterator.next();
368             String JavaDoc name = jclass.getSimpleName();
369             String JavaDoc type = ("ow_"+name).toUpperCase()+"_TYPE";
370             if( !isAbstract(jclass) ) {
371 out.println(" case "+type+": return ow_unmarshal_"+name+"(buffer, bitbuffer, (ow_"+name+"*)object, pool);");
372             }
373          }
374
375 out.println("");
376 out.println(" }");
377 out.println(" return APR_EGENERAL;");
378 out.println("}");
379  
380     }
381 }
382
Popular Tags