1 18 package org.apache.activemq.openwire.tool; 19 20 import java.io.File ; 21 import java.io.PrintWriter ; 22 import java.util.ArrayList ; 23 import java.util.Iterator ; 24 import java.util.List ; 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 35 public class CSourcesGenerator extends CHeadersGenerator { 36 37 public Object run() { 38 filePostFix = ".c"; 39 if (destFile == null) { 40 destFile = new File (targetDir + "/ow_commands_v" + getOpenwireVersion() + ".c"); 41 } 42 return super.run(); 43 } 44 45 protected List sort(List source) { 46 return source; 47 } 48 49 protected void generateSetup(PrintWriter 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 out) throws Exception { 69 70 ArrayList properties = new ArrayList (); 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 name = jclass.getSimpleName(); 80 String type = ("ow_"+name).toUpperCase()+"_TYPE"; 81 String 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 iterator = sortedClasses.iterator(); iterator.hasNext();) { 99 JClass sub = (JClass) iterator.next(); 100 String 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 iter = properties.iterator(); iter.hasNext();) { 132 JProperty property = (JProperty) iter.next(); 133 String 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 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 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 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 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 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 iterator = sortedClasses.iterator(); iterator.hasNext();) { 313 JClass jclass = (JClass) iterator.next(); 314 String name = jclass.getSimpleName(); 315 String 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 iterator = sortedClasses.iterator(); iterator.hasNext();) { 331 JClass jclass = (JClass) iterator.next(); 332 String name = jclass.getSimpleName(); 333 String 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 iterator = sortedClasses.iterator(); iterator.hasNext();) { 349 JClass jclass = (JClass) iterator.next(); 350 String name = jclass.getSimpleName(); 351 String 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 iterator = sortedClasses.iterator(); iterator.hasNext();) { 367 JClass jclass = (JClass) iterator.next(); 368 String name = jclass.getSimpleName(); 369 String 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 |