You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2006/07/05 23:59:39 UTC
svn commit: r419354 [2/2] - in
/incubator/activemq/trunk/activemq-openwire-generator: ./ src/ src/main/
src/main/java/ src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/activemq/
src/main/java/org/apache/activemq/openwire/ src/main/...
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/TestDataGenerator.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/TestDataGenerator.java?rev=419354&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/TestDataGenerator.java (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/TestDataGenerator.java Wed Jul 5 14:59:37 2006
@@ -0,0 +1,67 @@
+/**
+ *
+ * Copyright 2005 LogicBlaze, Inc. http://www.logicblaze.com
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ **/
+package org.apache.activemq.openwire.tool;
+
+/**
+ * A simple helper class to help auto-generate test data when code generating test cases
+ *
+ * @version $Revision: 1.1 $
+ */
+public class TestDataGenerator {
+ private int stringCounter;
+
+ private boolean boolCounter;
+ private byte byteCounter;
+ private char charCounter = 'a';
+ private short shortCounter;
+ private int intCounter;
+ private long longCounter;
+
+ public String createByte() {
+ return "(byte) " + (++byteCounter);
+ }
+
+ public String createChar() {
+ return "'" + (charCounter++) + "'";
+ }
+
+ public String createShort() {
+ return "(short) " + (++shortCounter);
+ }
+
+ public int createInt() {
+ return ++intCounter;
+ }
+
+ public long createLong() {
+ return ++longCounter;
+ }
+
+ public String createString(String property) {
+ return property + ":" + (++stringCounter);
+ }
+
+ public boolean createBool() {
+ boolCounter = !boolCounter;
+ return boolCounter;
+ }
+
+ public String createByteArray(String property) {
+ return "\"" + createString(property) + "\".getBytes()";
+ }
+}
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCMarshalling.groovy
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCMarshalling.groovy?rev=419354&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCMarshalling.groovy (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCMarshalling.groovy Wed Jul 5 14:59:37 2006
@@ -0,0 +1,633 @@
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import org.apache.activemq.openwire.tool.OpenWireScript
+
+/**
+ * Generates the Java marshalling code for the Open Wire Format
+ *
+ * @version $Revision$
+ */
+class GenerateCMarshalling extends OpenWireScript {
+
+ String changeCase(String value) {
+ StringBuffer b = new StringBuffer();
+ value.each { c |
+ if( Character.isUpperCase((char)c) ) {
+ b.append('_');
+ b.append(Character.toLowerCase((char)c));
+ } else {
+ b.append(c);
+ }
+ }
+ return b.toString();
+ }
+
+ String toPropertyCase(String value) {
+ return value.substring(0,1).toLowerCase()+value.substring(1);
+ }
+
+ /**
+ * Sort the class list so that base classes come up first.
+ */
+ def sort(classes) {
+
+ classes = (java.util.List)classes;
+ def rc = [];
+ def objectClass;
+
+ // lets make a map of all the class names
+ def classNames = [:]
+ for (c in classes) {
+ def name = c.simpleName
+ classNames[name] = name
+ }
+
+ // Add all classes that have no parent first
+ for (c in classes) {
+ if( !classNames.containsKey(c.superclass))
+ rc.add(c)
+ }
+
+ // now lets add the rest
+ for (c in classes) {
+ if (!rc.contains(c))
+ rc.add(c)
+ }
+
+ return rc;
+ }
+
+
+ def generateFields(out, jclass) {
+
+// println("getting fields for: ${jclass.simpleName}");
+ if( jclass.superclass == null || jclass.superclass.simpleName.equals("Object") ) {
+out << """
+ ow_byte structType;
+""";
+ } else {
+ generateFields(out, jclass.superclass);
+ }
+
+ def properties = jclass.declaredProperties.findAll { isValidProperty(it) }
+ for (property in properties) {
+ def annotation = property.getter.getAnnotation("openwire:property");
+ def size = annotation.getValue("size");
+ def name = toPropertyCase(property.simpleName);
+ def cached = isCachedProperty(property);
+
+ out << " "
+ def type = property.type.qualifiedName
+ switch (type) {
+ case "boolean":
+ out << "ow_$type $name;"; break;
+ break;
+ case "byte":
+ out << "ow_$type $name;"; break;
+ break;
+ case "char":
+ out << "ow_$type $name;"; break;
+ break;
+ case "short":
+ out << "ow_$type $name;"; break;
+ break;
+ case "int":
+ out << "ow_$type $name;"; break;
+ break;
+ case "long":
+ out << "ow_$type $name;"; break;
+ break;
+ case "byte[]":
+ out << "ow_byte_array *$name;"; break;
+ break;
+ case "org.apache.activeio.packet.ByteSequence":
+ out << "ow_byte_array *$name;"; break;
+ break;
+ case "org.apache.activeio.packet.ByteSequence":
+ out << "ow_byte_array *$name;"; break;
+ break;
+ case "java.lang.String":
+ out << "ow_string *$name;"; break;
+ break;
+ default:
+ if( property.type.arrayType ) {
+ out << "ow_DataStructure_array *$name;"; break;
+ } else if( isThrowable(property.type) ) {
+ out << "ow_throwable *$name;"; break;
+ } else {
+ out << "struct ow_"+property.type.simpleName+" *$name;"; break;
+ }
+ }
+out << """
+"""
+ }
+
+ }
+
+ Object run() {
+
+ def openwireVersion = getProperty("version");
+
+ def destDir = new File("../openwire-c/src/libopenwire")
+ println "Generating C marshalling code to directory ${destDir}"
+
+ def openwireClasses = classes.findAll {
+ it.getAnnotation("openwire:marshaller")!=null
+ }
+
+ println "Sorting classes..."
+ openwireClasses = sort(openwireClasses);
+
+ def concreteClasses = new ArrayList()
+ int counter = 0
+ Map map = [:]
+
+ destDir.mkdirs()
+
+ //////////////////////////////////////////////////////////////////////
+ //
+ // Start generateing the ow_commands_v1.h File
+ //
+ //////////////////////////////////////////////////////////////////////
+ def file = new File(destDir, "ow_commands_v${openwireVersion}.h")
+ file.withWriter { out |
+
+out << """/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ * if you need to make a change, please see the modify the groovy scripts in the
+ * under src/gram/script and then use maven openwire:generate to regenerate
+ * this file.
+ *
+ *****************************************************************************************/
+
+#ifndef OW_COMMANDS_V${openwireVersion}_H
+#define OW_COMMANDS_V${openwireVersion}_H
+
+#include "ow.h"
+#include "ow_command_types_v${openwireVersion}.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define OW_WIREFORMAT_VERSION ${openwireVersion}
+
+apr_status_t ow_bitmarshall(ow_bit_buffer *buffer, ow_DataStructure *object);
+apr_status_t ow_marshall(ow_byte_buffer *buffer, ow_DataStructure *object);
+"""
+
+ for (jclass in openwireClasses) {
+
+ println "Processing ${jclass.simpleName}"
+
+ def structName = jclass.simpleName;
+ def type = "OW_"+structName.toUpperCase()+"_TYPE"
+
+ counter++;
+out << """
+typedef struct ow_${structName} {
+"""
+ // This recusivly generates the field definitions of the class and it's supper classes.
+ generateFields(out, jclass);
+
+out << """
+} ow_${structName};
+ow_${structName} *ow_${structName}_create(apr_pool_t *pool);
+ow_boolean ow_is_a_${structName}(ow_DataStructure *object);
+"""
+ }
+
+out << """
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ! OW_COMMANDS_V${openwireVersion}_H */
+"""
+
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ //
+ // Start generateing the ow_commands_v1.c File
+ //
+ //////////////////////////////////////////////////////////////////////
+
+ file = new File(destDir, "ow_commands_v${openwireVersion}.c")
+ file.withWriter { out |
+
+out << """/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*****************************************************************************************
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ * if you need to make a change, please see the modify the groovy scripts in the
+ * under src/gram/script and then use maven openwire:generate to regenerate
+ * this file.
+ *
+ *****************************************************************************************/
+
+
+#include "ow_commands_v${openwireVersion}.h"
+
+#define SUCCESS_CHECK( f ) { apr_status_t rc=f; if(rc!=APR_SUCCESS) return rc; }
+
+"""
+ for (jclass in openwireClasses) {
+
+ properties = jclass.declaredProperties.findAll { isValidProperty(it) }
+ def name = jclass.simpleName;
+ def type = ("ow_"+name).toUpperCase()+"_TYPE"
+
+ def baseName="DataStructure";
+
+ def superclass = jclass.superclass;
+ while( superclass.superclass != null ) {
+ if( openwireClasses.contains(superclass) ) {
+ baseName = superclass.simpleName;
+ break;
+ } else {
+ superclass = superclass.superclass;
+ }
+ }
+
+out << """
+ow_boolean ow_is_a_${name}(ow_DataStructure *object) {
+ if( object == 0 )
+ return 0;
+
+ switch(object->structType) {"""
+ for (sub in openwireClasses) {
+ def subtype = "OW_"+sub.simpleName.toUpperCase()+"_TYPE"
+ if( jclass.isAssignableFrom(sub) && !isAbstract(sub) ) {
+out << """
+ case $subtype:"""
+
+ }
+ }
+out << """
+ return 1;
+ }
+ return 0;
+}
+"""
+
+
+ if( !isAbstract(jclass) ) {
+out << """
+
+ow_${name} *ow_${name}_create(apr_pool_t *pool)
+{
+ ow_${name} *value = apr_pcalloc(pool,sizeof(ow_${name}));
+ if( value!=0 ) {
+ ((ow_DataStructure*)value)->structType = ${type};
+ }
+ return value;
+}
+"""
+ }
+
+out << """
+
+apr_status_t ow_marshal1_${name}(ow_bit_buffer *buffer, ow_${name} *object)
+{
+ ow_marshal1_${baseName}(buffer, (ow_${baseName}*)object);
+"""
+
+ properties = jclass.declaredProperties.findAll { isValidProperty(it) }
+ for (property in properties) {
+ def propname = toPropertyCase(property.simpleName);
+ def cached = isCachedProperty(property);
+ def annotation = property.getter.getAnnotation("openwire:property");
+ def size = annotation.getValue("size");
+
+ out << " ";
+ type = property.type.qualifiedName
+ switch (type) {
+
+ case "boolean":
+ out << "ow_bit_buffer_append(buffer, object->$propname);"; break;
+ break;
+ case "byte":break;
+ case "char":break;
+ case "short":break;
+ case "int":break;
+ case "long":
+ out << "ow_marshal1_long(buffer, object->$propname);"; break;
+ break;
+ case "byte[]":
+ if( size ==null ) {
+ out << """
+ ow_bit_buffer_append(buffer, object->$propname!=0 );
+ """;
+ }
+ break;
+ case "org.apache.activeio.packet.ByteSequence":
+ if( size ==null ) {
+ out << """
+ ow_bit_buffer_append(buffer, object->$propname!=0 );
+ """;
+ }
+ break;
+ case "java.lang.String":
+ out << "ow_marshal1_string(buffer, object->$propname);"; break;
+ default:
+ if( property.type.arrayType ) {
+ if( size!=null ) {
+ out << "SUCCESS_CHECK(ow_marshal1_DataStructure_array_const_size(buffer, object->$propname, ${size.asInt()}));"; break;
+ } else {
+ out << "SUCCESS_CHECK(ow_marshal1_DataStructure_array(buffer, object->$propname));"; break;
+ }
+ } else if( isThrowable(property.type) ) {
+ out << "SUCCESS_CHECK(ow_marshal1_throwable(buffer, object->$propname));"; break;
+ } else {
+ if( cached ) {
+ out << "SUCCESS_CHECK(ow_marshal1_cached_object(buffer, (ow_DataStructure*)object->$propname));"; break;
+ } else {
+ out << "SUCCESS_CHECK(ow_marshal1_nested_object(buffer, (ow_DataStructure*)object->$propname));"; break;
+ }
+ }
+ }
+out << """
+"""
+ }
+
+
+out << """
+ return APR_SUCCESS;
+}
+apr_status_t ow_marshal2_${name}(ow_byte_buffer *buffer, ow_bit_buffer *bitbuffer, ow_${name} *object)
+{
+ ow_marshal2_${baseName}(buffer, bitbuffer, (ow_${baseName}*)object);
+"""
+
+ properties = jclass.declaredProperties.findAll { isValidProperty(it) }
+ for (property in properties) {
+ def annotation = property.getter.getAnnotation("openwire:property");
+ def size = annotation.getValue("size");
+ def propname = toPropertyCase(property.simpleName);
+ def cached = isCachedProperty(property);
+
+ out << " "
+ type = property.type.qualifiedName
+ switch (type) {
+ case "boolean":
+ out << "ow_bit_buffer_read(bitbuffer);"; break;
+ case "byte":
+ out << "SUCCESS_CHECK(ow_byte_buffer_append_${type}(buffer, object->$propname));"; break;
+ break;
+ case "char":
+ out << "SUCCESS_CHECK(ow_byte_buffer_append_${type}(buffer, object->$propname));"; break;
+ break;
+ case "short":
+ out << "SUCCESS_CHECK(ow_byte_buffer_append_${type}(buffer, object->$propname));"; break;
+ break;
+ case "int":
+ out << "SUCCESS_CHECK(ow_byte_buffer_append_${type}(buffer, object->$propname));"; break;
+ break;
+ case "long":
+ out << "SUCCESS_CHECK(ow_marshal2_long(buffer, bitbuffer, object->$propname));"; break;
+ break;
+ case "byte[]":
+ if( size!=null ) {
+ out << "SUCCESS_CHECK(ow_marshal2_byte_array_const_size(buffer, object->$propname, ${size.asInt()}));"; break;
+ } else {
+ out << "SUCCESS_CHECK(ow_marshal2_byte_array(buffer, bitbuffer, object->$propname));"; break;
+ }
+ break;
+ case "org.apache.activeio.packet.ByteSequence":
+ if( size!=null ) {
+ out << "SUCCESS_CHECK(ow_marshal2_byte_array_const_size(buffer, object->$propname, ${size.asInt()}));"; break;
+ } else {
+ out << "SUCCESS_CHECK(ow_marshal2_byte_array(buffer, bitbuffer, object->$propname));"; break;
+ }
+ break;
+ case "java.lang.String":
+ out << "SUCCESS_CHECK(ow_marshal2_string(buffer, bitbuffer, object->$propname));"; break;
+ break;
+ default:
+ if( property.type.arrayType ) {
+ if( size!=null ) {
+ out << "SUCCESS_CHECK(ow_marshal2_DataStructure_array_const_size(buffer, bitbuffer, object->$propname, ${size.asInt()}));"; break;
+ } else {
+ out << "SUCCESS_CHECK(ow_marshal2_DataStructure_array(buffer, bitbuffer, object->$propname));"; break;
+ }
+ } else if( isThrowable(property.type) ) {
+ out << "SUCCESS_CHECK(ow_marshal2_throwable(buffer, bitbuffer, object->$propname));"; break;
+ } else {
+ if( cached ) {
+ out << "SUCCESS_CHECK(ow_marshal2_cached_object(buffer, bitbuffer, (ow_DataStructure*)object->$propname));"; break;
+ } else {
+ out << "SUCCESS_CHECK(ow_marshal2_nested_object(buffer, bitbuffer, (ow_DataStructure*)object->$propname));"; break;
+ }
+ }
+ }
+out << """
+"""
+ }
+
+out << """
+ return APR_SUCCESS;
+}
+
+apr_status_t ow_unmarshal_${name}(ow_byte_array *buffer, ow_bit_buffer *bitbuffer, ow_${name} *object, apr_pool_t *pool)
+{
+ ow_unmarshal_${baseName}(buffer, bitbuffer, (ow_${baseName}*)object, pool);
+"""
+
+ properties = jclass.declaredProperties.findAll { isValidProperty(it) }
+ for (property in properties) {
+ def annotation = property.getter.getAnnotation("openwire:property");
+ def size = annotation.getValue("size");
+ def propname = toPropertyCase(property.simpleName);
+ def cached = isCachedProperty(property);
+
+ out << " "
+ type = property.type.qualifiedName
+ switch (type) {
+ case "boolean":
+ out << "object->$propname = ow_bit_buffer_read(bitbuffer);"; break;
+ break;
+ case "byte":
+ out << "SUCCESS_CHECK(ow_byte_array_read_${type}(buffer, &object->$propname));"; break;
+ break;
+ case "char":
+ out << "SUCCESS_CHECK(ow_byte_array_read_${type}(buffer, &object->$propname));"; break;
+ break;
+ case "short":
+ out << "SUCCESS_CHECK(ow_byte_array_read_${type}(buffer, &object->$propname));"; break;
+ break;
+ case "int":
+ out << "SUCCESS_CHECK(ow_byte_array_read_${type}(buffer, &object->$propname));"; break;
+ break;
+ case "long":
+ out << "SUCCESS_CHECK(ow_unmarshal_long(buffer, bitbuffer, &object->$propname, pool));"; break;
+ break;
+ case "byte[]":
+ if( size!=null ) {
+ out << "SUCCESS_CHECK(ow_unmarshal_byte_array_const_size(buffer, &object->$propname, ${size.asInt()}, pool));"; break;
+ } else {
+ out << "SUCCESS_CHECK(ow_unmarshal_byte_array(buffer, bitbuffer, &object->$propname, pool));"; break;
+ }
+ break;
+ case "org.apache.activeio.packet.ByteSequence":
+ if( size!=null ) {
+ out << "SUCCESS_CHECK(ow_unmarshal_byte_array_const_size(buffer, &object->$propname, ${size.asInt()}, pool));"; break;
+ } else {
+ out << "SUCCESS_CHECK(ow_unmarshal_byte_array(buffer, bitbuffer, &object->$propname, pool));"; break;
+ }
+ break;
+ case "java.lang.String":
+ out << "SUCCESS_CHECK(ow_unmarshal_string(buffer, bitbuffer, &object->$propname, pool));"; break;
+ break;
+ default:
+ if( property.type.arrayType ) {
+ if( size!=null ) {
+ out << "SUCCESS_CHECK(ow_unmarshal_DataStructure_array_const_size(buffer, bitbuffer, &object->$propname, ${size.asInt()}, pool));"; break;
+ } else {
+ out << "SUCCESS_CHECK(ow_unmarshal_DataStructure_array(buffer, bitbuffer, &object->$propname, pool));"; break;
+ }
+ } else if( isThrowable(property.type) ) {
+ out << "SUCCESS_CHECK(ow_unmarshal_throwable(buffer, bitbuffer, &object->$propname, pool));"; break;
+ } else {
+ if( cached ) {
+ out << "SUCCESS_CHECK(ow_unmarshal_cached_object(buffer, bitbuffer, (ow_DataStructure**)&object->$propname, pool));"; break;
+ } else {
+ out << "SUCCESS_CHECK(ow_unmarshal_nested_object(buffer, bitbuffer, (ow_DataStructure**)&object->$propname, pool));"; break;
+ }
+ }
+ }
+out << """
+"""
+ }
+
+out << """
+ return APR_SUCCESS;
+}
+"""
+ }
+
+
+out << """
+ow_DataStructure *ow_create_object(ow_byte type, apr_pool_t *pool)
+{
+ switch( type ) {
+"""
+ for (jclass in openwireClasses) {
+ def name = jclass.simpleName;
+ def type = ("ow_"+name).toUpperCase()+"_TYPE";
+ if( !isAbstract(jclass) ) {
+out << """
+ case ${type}: return (ow_DataStructure *)ow_${name}_create(pool);"""
+ }
+ }
+
+out << """
+ }
+ return 0;
+}
+
+apr_status_t ow_marshal1_object(ow_bit_buffer *buffer, ow_DataStructure *object)
+{
+ switch( object->structType ) {
+"""
+ for (jclass in openwireClasses) {
+ def name = jclass.simpleName;
+ def type = ("ow_"+name).toUpperCase()+"_TYPE";
+ if( !isAbstract(jclass) ) {
+out << """
+ case ${type}: return ow_marshal1_${name}(buffer, (ow_${name}*)object);"""
+ }
+ }
+
+out << """
+ }
+ return APR_EGENERAL;
+}
+
+apr_status_t ow_marshal2_object(ow_byte_buffer *buffer, ow_bit_buffer *bitbuffer, ow_DataStructure *object)
+{
+ switch( object->structType ) {
+"""
+ for (jclass in openwireClasses) {
+ def name = jclass.simpleName;
+ def type = ("ow_"+name).toUpperCase()+"_TYPE";
+ if( !isAbstract(jclass) ) {
+out << """
+ case ${type}: return ow_marshal2_${name}(buffer, bitbuffer, (ow_${name}*)object);"""
+ }
+ }
+
+out << """
+ }
+ return APR_EGENERAL;
+}
+
+apr_status_t ow_unmarshal_object(ow_byte_array *buffer, ow_bit_buffer *bitbuffer, ow_DataStructure *object, apr_pool_t *pool)
+{
+ switch( object->structType ) {
+"""
+ for (jclass in openwireClasses) {
+ def name = jclass.simpleName;
+ def type = ("ow_"+name).toUpperCase()+"_TYPE";
+ if( !isAbstract(jclass) ) {
+out << """
+ case ${type}: return ow_unmarshal_${name}(buffer, bitbuffer, (ow_${name}*)object, pool);"""
+ }
+ }
+
+out << """
+ }
+ return APR_EGENERAL;
+}
+"""
+ }
+ }
+}
Propchange: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCMarshalling.groovy
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCSharpClasses.groovy
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCSharpClasses.groovy?rev=419354&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCSharpClasses.groovy (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCSharpClasses.groovy Wed Jul 5 14:59:37 2006
@@ -0,0 +1,143 @@
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import org.apache.activemq.openwire.tool.OpenWireCSharpClassesScript
+
+/**
+ * Generates the C# commands for the Open Wire Format
+ *
+ * @version $Revision$
+ */
+class GenerateCSharpClasses extends OpenWireCSharpClassesScript {
+
+ void generateFile(PrintWriter out) {
+ out << """/*
+* Copyright 2006 The Apache Software Foundation or its licensors, as
+* applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+//
+// NOTE!: This file is autogenerated - do not modify!
+// if you need to make a change, please see the Groovy scripts in the
+// activemq-core module
+//
+
+using System;
+using System.Collections;
+
+using ActiveMQ.OpenWire;
+using ActiveMQ.Commands;
+
+namespace ActiveMQ.Commands
+{
+ /// <summary>
+ /// The ActiveMQ ${jclass.simpleName} Command
+ /// </summary>
+ public class ${jclass.simpleName} : $baseClass"""
+
+ for( i in jclass.interfaces ) {
+ out << ", ${i.simpleName}";
+ }
+
+out << """
+ {
+ public const byte ID_${jclass.simpleName} = ${getOpenWireOpCode(jclass)};
+
+"""
+ for (property in properties) {
+ def type = toCSharpType(property.type)
+ def name = decapitalize(property.simpleName)
+ out << """ $type $name;
+"""
+ }
+
+ def text = makeHashCodeBody()
+ if (text != null) out <<
+"""
+ public override int GetHashCode() {
+$text
+ }
+
+"""
+
+ text = makeEqualsBody()
+ if (text != null) out <<
+"""
+ public override bool Equals(object that) {
+ if (that is ${className}) {
+ return Equals((${className}) that);
+ }
+ return false;
+ }
+
+ public virtual bool Equals(${className} that) {
+$text
+ }
+
+"""
+
+ text = makeToStringBody()
+ if (text != null) out << """
+ public override string ToString() {
+$text
+ }
+
+"""
+
+ out << """
+
+ public override byte GetDataStructureType() {
+ return ID_${jclass.simpleName};
+ }
+
+
+ // Properties
+"""
+ for (property in properties) {
+ def type = toCSharpType(property.type)
+ def name = decapitalize(property.simpleName)
+ def propertyName = property.simpleName
+ def getter = capitalize(property.getter.simpleName)
+ def setter = capitalize(property.setter.simpleName)
+
+
+ out << """
+ public $type $propertyName
+ {
+ get { return $name; }
+ set { this.$name = value; }
+ }
+"""
+ }
+
+ out << """
+ }
+}
+"""
+ }
+}
\ No newline at end of file
Propchange: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCSharpClasses.groovy
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCSharpMarshalling.groovy
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCSharpMarshalling.groovy?rev=419354&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCSharpMarshalling.groovy (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCSharpMarshalling.groovy Wed Jul 5 14:59:37 2006
@@ -0,0 +1,276 @@
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import org.apache.activemq.openwire.tool.OpenWireCSharpMarshallingScript
+
+/**
+ * Generates the C# marshalling code for the Open Wire Format
+ *
+ * @version $Revision$
+ */
+class GenerateCSharpMarshalling extends OpenWireCSharpMarshallingScript {
+
+ void generateFile(PrintWriter out) {
+ out << """/*
+* Copyright 2006 The Apache Software Foundation or its licensors, as
+* applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+//
+// NOTE!: This file is autogenerated - do not modify!
+// if you need to make a change, please see the Groovy scripts in the
+// activemq-core module
+//
+
+using System;
+using System.Collections;
+using System.IO;
+
+using ActiveMQ.Commands;
+using ActiveMQ.OpenWire;
+using ActiveMQ.OpenWire.V${openwireVersion};
+
+namespace ActiveMQ.OpenWire.V${openwireVersion}
+{
+ /// <summary>
+ /// Marshalling code for Open Wire Format for ${jclass.simpleName}
+ /// </summary>
+ ${abstractClassText}class $className : $baseClass
+ {
+"""
+
+if( !abstractClass ) out << """
+
+ public override DataStructure CreateObject()
+ {
+ return new ${jclass.simpleName}();
+ }
+
+ public override byte GetDataStructureType()
+ {
+ return ${jclass.simpleName}.ID_${jclass.simpleName};
+ }
+"""
+
+/*
+ * Generate the tight encoding marshallers
+ */
+out << """
+ //
+ // Un-marshal an object instance from the data input stream
+ //
+ public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs)
+ {
+ base.TightUnmarshal(wireFormat, o, dataIn, bs);
+"""
+
+if( !properties.isEmpty() || marshallerAware ) out << """
+ ${jclass.simpleName} info = (${jclass.simpleName})o;
+"""
+
+if( marshallerAware ) out << """
+ info.BeforeUnmarshall(wireFormat);
+
+"""
+
+generateTightUnmarshalBody(out)
+
+if( marshallerAware ) out << """
+ info.AfterUnmarshall(wireFormat);
+"""
+
+out << """
+ }
+"""
+
+out << """
+ //
+ // Write the booleans that this object uses to a BooleanStream
+ //
+ public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) {
+ ${jclass.simpleName} info = (${jclass.simpleName})o;
+"""
+
+if( marshallerAware ) out << """
+ info.BeforeMarshall(wireFormat);
+"""
+
+out << """
+ int rc = base.TightMarshal1(wireFormat, info, bs);
+"""
+
+def baseSize = generateTightMarshal1Body(out)
+
+out << """
+ return rc + ${baseSize};
+ }
+
+ //
+ // Write a object instance to data output stream
+ //
+ public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs) {
+ base.TightMarshal2(wireFormat, o, dataOut, bs);
+"""
+
+if( !properties.isEmpty() || marshallerAware ) out << """
+ ${jclass.simpleName} info = (${jclass.simpleName})o;
+"""
+
+generateTightMarshal2Body(out)
+
+if( marshallerAware ) out << """
+ info.AfterMarshall(wireFormat);
+"""
+
+out << """
+ }
+"""
+
+/*
+ * Generate the loose encoding marshallers
+ */
+out << """
+ //
+ // Un-marshal an object instance from the data input stream
+ //
+ public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn)
+ {
+ base.LooseUnmarshal(wireFormat, o, dataIn);
+"""
+
+if( !properties.isEmpty() || marshallerAware ) out << """
+ ${jclass.simpleName} info = (${jclass.simpleName})o;
+"""
+
+if( marshallerAware ) out << """
+ info.BeforeUnmarshall(wireFormat);
+
+"""
+
+generateLooseUnmarshalBody(out)
+
+if( marshallerAware ) out << """
+ info.AfterUnmarshall(wireFormat);
+"""
+
+out << """
+ }
+"""
+
+out << """
+ //
+ // Write a object instance to data output stream
+ //
+ public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut) {
+"""
+
+if( !properties.isEmpty() || marshallerAware ) out << """
+ ${jclass.simpleName} info = (${jclass.simpleName})o;
+"""
+
+if( marshallerAware ) out << """
+ info.BeforeMarshall(wireFormat);
+"""
+
+out << """
+ base.LooseMarshal(wireFormat, o, dataOut);
+"""
+
+generateLooseMarshalBody(out)
+
+if( marshallerAware ) out << """
+ info.AfterMarshall(wireFormat);
+"""
+out << """
+ }
+"""
+
+
+out << """
+ }
+}
+"""
+ }
+
+
+ void generateFactory(PrintWriter out) {
+ out << """/*
+* Copyright 2006 The Apache Software Foundation or its licensors, as
+* applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+//
+// NOTE!: This file is autogenerated - do not modify!
+// if you need to make a change, please see the Groovy scripts in the
+// activemq-core module
+//
+
+using System;
+using System.Collections;
+using System.IO;
+
+using ActiveMQ.Commands;
+using ActiveMQ.OpenWire;
+using ActiveMQ.OpenWire.V${openwireVersion};
+
+namespace ActiveMQ.OpenWire.V${openwireVersion}
+{
+ /// <summary>
+ /// Used to create marshallers for a specific version of the wire protocol
+ /// </summary>
+ public class MarshallerFactory
+ {
+ public void configure(OpenWireFormat format)
+ {
+"""
+
+ for (jclass in concreteClasses) {
+ out << """
+ format.addMarshaller(new ${jclass.simpleName}Marshaller());"""
+ }
+
+ out << """
+ }
+ }
+}
+"""
+ }
+}
+
\ No newline at end of file
Propchange: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCSharpMarshalling.groovy
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppClasses.groovy
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppClasses.groovy?rev=419354&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppClasses.groovy (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppClasses.groovy Wed Jul 5 14:59:37 2006
@@ -0,0 +1,125 @@
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import org.apache.activemq.openwire.tool.OpenWireCppClassesScript
+
+/**
+ * Generates the C++ commands for the Open Wire Format
+ *
+ * @version $Revision$
+ */
+class GenerateCppClasses extends OpenWireCppClassesScript {
+
+ void generateFile(PrintWriter out) {
+ out << """/*
+* Copyright 2006 The Apache Software Foundation or its licensors, as
+* applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+#include "activemq/command/${className}.hpp"
+
+using namespace apache::activemq::command;
+
+/*
+ *
+ * Command and marshalling code for OpenWire format for ${className}
+ *
+ *
+ * NOTE!: This file is autogenerated - do not modify!
+ * if you need to make a change, please see the Groovy scripts in the
+ * activemq-core module
+ *
+ */
+${className}::${className}()
+{"""
+ for (property in properties) {
+ def value = toCppDefaultValue(property.type)
+ def propertyName = property.simpleName
+ def parameterName = decapitalize(propertyName)
+ out << """
+ this->${parameterName} = ${value} ;"""
+ }
+ out << """
+}
+
+${className}::~${className}()
+{
+}
+
+unsigned char ${className}::getDataStructureType()
+{
+ return ${className}::TYPE ;
+}
+"""
+ for (property in properties) {
+ def type = toCppType(property.type)
+ def propertyName = property.simpleName
+ def parameterName = decapitalize(propertyName)
+ out << """
+
+${type} ${className}::get${propertyName}()
+{
+ return ${parameterName} ;
+}
+
+void ${className}::set${propertyName}(${type} ${parameterName})
+{
+ this->${parameterName} = ${parameterName} ;
+}
+"""
+ }
+out << """
+int ${className}::marshal(p<IMarshaller> marshaller, int mode, p<IOutputStream> ostream) throw (IOException)
+{
+ int size = 0 ;
+
+ size += ${baseClass}::marshal(marshaller, mode, ostream) ; """
+ for (property in properties) {
+ def marshalMethod = toMarshalMethodName(property.type)
+ def propertyName = decapitalize(property.simpleName)
+ out << """
+ size += marshaller->${marshalMethod}(${propertyName}, mode, ostream) ; """
+ }
+out << """
+ return size ;
+}
+
+void ${className}::unmarshal(p<IMarshaller> marshaller, int mode, p<IInputStream> istream) throw (IOException)
+{
+ ${baseClass}::unmarshal(marshaller, mode, istream) ; """
+ for (property in properties) {
+ def cast = toUnmarshalCast(property.type)
+ def unmarshalMethod = toUnmarshalMethodName(property.type)
+ def propertyName = decapitalize(property.simpleName)
+ out << """
+ ${propertyName} = ${cast}(marshaller->${unmarshalMethod}(mode, istream)) ; """
+ }
+out << """
+}
+"""
+ }
+}
Propchange: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppClasses.groovy
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppHeaders.groovy
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppHeaders.groovy?rev=419354&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppHeaders.groovy (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppHeaders.groovy Wed Jul 5 14:59:37 2006
@@ -0,0 +1,153 @@
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import org.apache.activemq.openwire.tool.OpenWireCppHeadersScript
+
+/**
+ * Generates the C++ commands for the Open Wire Format
+ *
+ * @version $Revision$
+ */
+class GenerateCppHeaders extends OpenWireCppHeadersScript {
+
+ void generateFile(PrintWriter out) {
+ out << """/*
+* Copyright 2006 The Apache Software Foundation or its licensors, as
+* applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+#ifndef ActiveMQ_${className}_hpp_
+#define ActiveMQ_${className}_hpp_
+
+// Turn off warning message for ignored exception specification
+#ifdef _MSC_VER
+#pragma warning( disable : 4290 )
+#endif
+
+#include <string>
+"""
+ out << """#include "activemq/command/${baseClass}.hpp"
+"""
+for (property in properties)
+{
+ if( !property.type.isPrimitiveType() &&
+ property.type.simpleName != "String" &&
+ property.type.simpleName != "ByteSequence" )
+ {
+ def includeName = toCppType(property.type)
+ if( property.type.isArrayType() )
+ {
+ def arrayType = property.type.arrayComponentType ;
+ if( arrayType.isPrimitiveType() )
+ continue ;
+ }
+ if( includeName.startsWith("array<") )
+ includeName = includeName.substring(6, includeName.length()-1) ;
+ else if( includeName.startsWith("p<") )
+ includeName = includeName.substring(2, includeName.length()-1)
+
+ if( includeName.equals("IDataStructure") )
+ out << """#include "activemq/${includeName}.hpp"
+"""
+ else
+ out << """#include "activemq/command/${includeName}.hpp"
+"""
+ }
+}
+out << """
+#include "activemq/protocol/IMarshaller.hpp"
+#include "ppr/io/IOutputStream.hpp"
+#include "ppr/io/IInputStream.hpp"
+#include "ppr/io/IOException.hpp"
+#include "ppr/util/ifr/array"
+#include "ppr/util/ifr/p"
+
+namespace apache
+{
+ namespace activemq
+ {
+ namespace command
+ {
+ using namespace ifr;
+ using namespace std;
+ using namespace apache::activemq;
+ using namespace apache::activemq::protocol;
+ using namespace apache::ppr::io;
+
+/*
+ *
+ * Command and marshalling code for OpenWire format for ${className}
+ *
+ *
+ * NOTE!: This file is autogenerated - do not modify!
+ * if you need to make a change, please see the Groovy scripts in the
+ * activemq-core module
+ *
+ */
+class ${className} : public ${baseClass}
+{
+protected:
+"""
+ for (property in properties) {
+ def type = toCppType(property.type)
+ def name = decapitalize(property.simpleName)
+ out << """ $type $name ;
+"""
+ }
+ out << """
+public:
+ const static unsigned char TYPE = ${getOpenWireOpCode(jclass)};
+
+public:
+ ${className}() ;
+ virtual ~${className}() ;
+
+ virtual unsigned char getDataStructureType() ;
+"""
+ for (property in properties) {
+ def type = toCppType(property.type)
+ def propertyName = property.simpleName
+ def parameterName = decapitalize(propertyName)
+ out << """
+ virtual ${type} get${propertyName}() ;
+ virtual void set${propertyName}(${type} ${parameterName}) ;
+"""
+ }
+ out << """
+ virtual int marshal(p<IMarshaller> marshaller, int mode, p<IOutputStream> ostream) throw (IOException) ;
+ virtual void unmarshal(p<IMarshaller> marshaller, int mode, p<IInputStream> istream) throw (IOException) ;
+} ;
+
+/* namespace */
+ }
+ }
+}
+
+#endif /*ActiveMQ_${className}_hpp_*/
+"""
+ }
+}
Propchange: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppHeaders.groovy
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppMarshallingClasses.groovy
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppMarshallingClasses.groovy?rev=419354&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppMarshallingClasses.groovy (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppMarshallingClasses.groovy Wed Jul 5 14:59:37 2006
@@ -0,0 +1,207 @@
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import org.apache.activemq.openwire.tool.OpenWireCppMarshallingClassesScript
+
+/**
+ * Generates the C++ marshalling classes for the Open Wire Format
+ *
+ * @version $Revision$
+ */
+class GenerateCppMarshallingClasses extends OpenWireCppMarshallingClassesScript {
+
+ void generateFile(PrintWriter out) {
+ out << """/*
+ * Copyright 2006 The Apache Software Foundation or its licensors, as
+ * applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "marshal/${className}.hpp"
+
+using namespace apache::activemq::client::marshal;
+
+/*
+ * Marshalling code for Open Wire Format for ${jclass.simpleName}
+ *
+ * NOTE!: This file is autogenerated - do not modify!
+ * if you need to make a change, please see the Groovy scripts in the
+ * activemq-core module
+ */
+
+${className}::${className}()
+{
+ // no-op
+}
+
+${className}::~${className}()
+{
+ // no-op
+}
+
+"""
+
+if( !abstractClass ) out << """
+
+IDataStructure* ${className}::createObject()
+{
+ return new ${jclass.simpleName}();
+}
+
+char ${className}::getDataStructureType()
+{
+ return ${jclass.simpleName}.ID_${jclass.simpleName};
+}
+"""
+
+out << """
+ /*
+ * Un-marshal an object instance from the data input stream
+ */
+void ${className}::unmarshal(ProtocolFormat& wireFormat, Object o, BinaryReader& dataIn, BooleanStream& bs)
+{
+ base.unmarshal(wireFormat, o, dataIn, bs);
+"""
+
+if( !properties.isEmpty() || marshallerAware ) out << """
+ ${jclass.simpleName}& info = (${jclass.simpleName}&) o;
+"""
+
+if( marshallerAware ) out << """
+ info.beforeUnmarshall(wireFormat);
+
+"""
+
+generateTightUnmarshalBody(out)
+
+if( marshallerAware ) out << """
+ info.afterUnmarshall(wireFormat);
+"""
+
+out << """
+}
+
+
+/*
+ * Write the booleans that this object uses to a BooleanStream
+ */
+int ${className}::marshal1(ProtocolFormat& wireFormat, Object& o, BooleanStream& bs) {
+ ${jclass.simpleName}& info = (${jclass.simpleName}&) o;
+"""
+
+
+if( marshallerAware ) out << """
+ info.beforeMarshall(wireFormat);
+"""
+
+out << """
+ int rc = base.marshal1(wireFormat, info, bs);
+"""
+
+def baseSize = generateMarshal1Body(out)
+
+out << """
+ return rc + ${baseSize};
+}
+
+/*
+ * Write a object instance to data output stream
+ */
+void ${className}::marshal2(ProtocolFormat& wireFormat, Object& o, BinaryWriter& dataOut, BooleanStream& bs) {
+ base.marshal2(wireFormat, o, dataOut, bs);
+"""
+
+if( !properties.isEmpty() || marshallerAware ) out << """
+ ${jclass.simpleName}& info = (${jclass.simpleName}&) o;
+"""
+
+generateMarshal2Body(out)
+
+if( marshallerAware ) out << """
+ info.afterMarshall(wireFormat);
+"""
+
+out << """
+}
+"""
+ }
+
+
+ void generateFactory(PrintWriter out) {
+ out << """/*
+* Copyright 2006 The Apache Software Foundation or its licensors, as
+* applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+// Marshalling code for Open Wire Format
+//
+//
+// NOTE!: This file is autogenerated - do not modify!
+// if you need to make a change, please see the Groovy scripts in the
+// activemq-openwire module
+//
+
+#include "marshal/${className}.hpp"
+
+"""
+
+ for (jclass in concreteClasses) {
+ out << """#include "marshal/${jclass.simpleName}Marshaller.hpp"
+"""
+ }
+
+ out << """
+
+using namespace apache::activemq::client::marshal;
+
+
+void MarshallerFactory::configure(ProtocolFormat& format)
+{
+"""
+
+ for (jclass in concreteClasses) {
+ out << """
+ format.addMarshaller(new ${jclass.simpleName}Marshaller());"""
+ }
+
+ out << """
+}
+"""
+ }
+}
+
\ No newline at end of file
Propchange: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppMarshallingClasses.groovy
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppMarshallingHeaders.groovy
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppMarshallingHeaders.groovy?rev=419354&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppMarshallingHeaders.groovy (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppMarshallingHeaders.groovy Wed Jul 5 14:59:37 2006
@@ -0,0 +1,171 @@
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import org.apache.activemq.openwire.tool.OpenWireCppMarshallingHeadersScript
+
+/**
+ * Generates the C++ marshalling headers for the Open Wire Format
+ *
+ * @version $Revision$
+ */
+class GenerateCppMarshallingHeaders extends OpenWireCppMarshallingHeadersScript {
+
+ void generateFile(PrintWriter out) {
+ out << """/*
+* Copyright 2006 The Apache Software Foundation or its licensors, as
+* applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+#ifndef ${className}_hpp_
+#define ${className}_hpp_
+
+#include <string>
+
+#include "command/IDataStructure.hpp"
+
+/* we could cut this down - for now include all possible headers */
+#include "command/BrokerId.hpp"
+#include "command/ConnectionId.hpp"
+#include "command/ConsumerId.hpp"
+#include "command/ProducerId.hpp"
+#include "command/SessionId.hpp"
+
+#include "io/BinaryReader.hpp"
+#include "io/BinaryWriter.hpp"
+
+#include "command/${baseClass}.hpp"
+#include "util/ifr/p.hpp"
+
+#include "protocol/ProtocolFormat.hpp"
+
+namespace apache
+{
+ namespace activemq
+ {
+ namespace client
+ {
+ namespace marshal
+ {
+ using namespace ifr ;
+ using namespace apache::activemq::client::command;
+ using namespace apache::activemq::client::io;
+ using namespace apache::activemq::client::protocol;
+
+/*
+ *
+ */
+class ${className} : public ${baseClass}
+{
+public:
+ ${className}() ;
+ virtual ~${className}() ;
+
+ virtual IDataStructure* createCommand() ;
+ virtual char getDataStructureType() ;
+
+ virtual void unmarshal(ProtocolFormat& wireFormat, Object o, BinaryReader& dataIn, BooleanStream& bs) ;
+ virtual int marshal1(ProtocolFormat& wireFormat, Object& o, BooleanStream& bs) ;
+ virtual void marshal2(ProtocolFormat& wireFormat, Object& o, BinaryWriter& dataOut, BooleanStream& bs) ;
+} ;
+
+/* namespace */
+ }
+ }
+ }
+}
+#endif /*${className}_hpp_*/
+"""
+ }
+
+
+ void generateFactory(PrintWriter out) {
+ out << """//*
+* Copyright 2006 The Apache Software Foundation or its licensors, as
+* applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+// Marshalling code for Open Wire Format
+//
+//
+// NOTE!: This file is autogenerated - do not modify!
+// if you need to make a change, please see the Groovy scripts in the
+// activemq-openwire module
+//
+
+#ifndef MarshallerFactory_hpp_
+#define MarshallerFactory_hpp_
+
+
+namespace apache
+{
+ namespace activemq
+ {
+ namespace client
+ {
+ namespace marshal
+ {
+ using namespace ifr ;
+ using namespace std ;
+ using namespace apache::activemq::client;
+ using namespace apache::activemq::client::command;
+ using namespace apache::activemq::client::io;
+
+/*
+ *
+ */
+class MarshallerFactory
+{
+public:
+ MarshallerFactory() ;
+ virtual ~MarshallerFactory() ;
+
+ virtual void configure(ProtocolFormat& format) ;
+} ;
+
+/* namespace */
+ }
+ }
+ }
+}
+
+#endif /*MarshallerFactory_hpp_*/
+"""
+ }
+}
+
\ No newline at end of file
Propchange: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateCppMarshallingHeaders.groovy
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateJavaMarshalling.groovy
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateJavaMarshalling.groovy?rev=419354&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateJavaMarshalling.groovy (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateJavaMarshalling.groovy Wed Jul 5 14:59:37 2006
@@ -0,0 +1,295 @@
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import org.apache.activemq.openwire.tool.OpenWireJavaMarshallingScript
+
+/**
+ * Generates the Java marshalling code for the Open Wire Format
+ *
+ * @version $Revision$
+ */
+class GenerateJavaMarshalling extends OpenWireJavaMarshallingScript {
+
+ void generateFile(PrintWriter out) {
+ out << """/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.openwire.v${openwireVersion};
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import org.apache.activemq.openwire.*;
+import org.apache.activemq.command.*;
+
+"""
+for (pkg in jclass.importedPackages) {
+ for (clazz in pkg.classes) {
+ out << "import "+clazz.qualifiedName+";"
+ }
+}
+out << """
+
+/**
+ * Marshalling code for Open Wire Format for ${className}
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ * if you need to make a change, please see the modify the groovy scripts in the
+ * under src/gram/script and then use maven openwire:generate to regenerate
+ * this file.
+ *
+ * @version \$Revision\$
+ */
+public ${abstractClassText}class ${className} extends ${baseClass} {
+"""
+
+if( !abstractClass ) out << """
+ /**
+ * Return the type of Data Structure we marshal
+ * @return short representation of the type data structure
+ */
+ public byte getDataStructureType() {
+ return ${jclass.simpleName}.DATA_STRUCTURE_TYPE;
+ }
+
+ /**
+ * @return a new object instance
+ */
+ public DataStructure createObject() {
+ return new ${jclass.simpleName}();
+ }
+"""
+
+out << """
+ /**
+ * Un-marshal an object instance from the data input stream
+ *
+ * @param o the object to un-marshal
+ * @param dataIn the data input stream to build the object from
+ * @throws IOException
+ */
+ public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInputStream dataIn, BooleanStream bs) throws IOException {
+ super.tightUnmarshal(wireFormat, o, dataIn, bs);
+"""
+
+if( !properties.isEmpty() ) out << """
+ ${jclass.simpleName} info = (${jclass.simpleName})o;
+"""
+
+if( marshallerAware ) out << """
+ info.beforeUnmarshall(wireFormat);
+
+"""
+
+generateTightUnmarshalBody(out)
+
+if( marshallerAware ) out << """
+ info.afterUnmarshall(wireFormat);
+"""
+
+out << """
+ }
+
+
+ /**
+ * Write the booleans that this object uses to a BooleanStream
+ */
+ public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {
+"""
+
+
+if( !properties.isEmpty() ) out << """
+ ${jclass.simpleName} info = (${jclass.simpleName})o;
+"""
+
+
+if( marshallerAware ) out << """
+ info.beforeMarshall(wireFormat);
+"""
+
+out << """
+ int rc = super.tightMarshal1(wireFormat, o, bs);
+"""
+
+def baseSize = generateTightMarshal1Body(out)
+
+out << """
+ return rc + ${baseSize};
+ }
+
+ /**
+ * Write a object instance to data output stream
+ *
+ * @param o the instance to be marshaled
+ * @param dataOut the output stream
+ * @throws IOException thrown if an error occurs
+ */
+ public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutputStream dataOut, BooleanStream bs) throws IOException {
+ super.tightMarshal2(wireFormat, o, dataOut, bs);
+"""
+
+if( !properties.isEmpty() ) out << """
+ ${jclass.simpleName} info = (${jclass.simpleName})o;
+"""
+
+generateTightMarshal2Body(out)
+
+if( marshallerAware ) out << """
+ info.afterMarshall(wireFormat);
+"""
+
+out << """
+ }
+"""
+
+out << """
+ /**
+ * Un-marshal an object instance from the data input stream
+ *
+ * @param o the object to un-marshal
+ * @param dataIn the data input stream to build the object from
+ * @throws IOException
+ */
+ public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInputStream dataIn) throws IOException {
+ super.looseUnmarshal(wireFormat, o, dataIn);
+"""
+
+if( !properties.isEmpty() ) out << """
+ ${jclass.simpleName} info = (${jclass.simpleName})o;
+"""
+
+if( marshallerAware ) out << """
+ info.beforeUnmarshall(wireFormat);
+
+"""
+
+generateLooseUnmarshalBody(out)
+
+if( marshallerAware ) out << """
+ info.afterUnmarshall(wireFormat);
+"""
+
+out << """
+ }
+
+
+ /**
+ * Write the booleans that this object uses to a BooleanStream
+ */
+ public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutputStream dataOut) throws IOException {
+"""
+
+if( !properties.isEmpty() ) out << """
+ ${jclass.simpleName} info = (${jclass.simpleName})o;
+"""
+
+
+if( marshallerAware ) out << """
+ info.beforeMarshall(wireFormat);
+"""
+
+out << """
+ super.looseMarshal(wireFormat, o, dataOut);
+"""
+
+generateLooseMarshalBody(out)
+
+out << """
+ }
+}
+"""
+ }
+
+
+ void generateFactory(PrintWriter out) {
+ out << """/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.openwire.v${openwireVersion};
+
+import org.apache.activemq.openwire.DataStreamMarshaller;
+import org.apache.activemq.openwire.OpenWireFormat;
+
+/**
+ * MarshallerFactory for Open Wire Format.
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ * if you need to make a change, please see the modify the groovy scripts in the
+ * under src/gram/script and then use maven openwire:generate to regenerate
+ * this file.
+ *
+ * @version \$Revision\$
+ */
+public class MarshallerFactory {
+
+ /**
+ * Creates a Map of command type -> Marshallers
+ */
+ static final private DataStreamMarshaller marshaller[] = new DataStreamMarshaller[256];
+ static {
+"""
+
+for (jclass in concreteClasses) {
+out << """
+ add(new ${jclass.simpleName}Marshaller());"""
+}
+
+out << """
+
+ }
+
+ static private void add(DataStreamMarshaller dsm) {
+ marshaller[dsm.getDataStructureType()] = dsm;
+ }
+
+ static public DataStreamMarshaller[] createMarshallerMap(OpenWireFormat wireFormat) {
+ return marshaller;
+ }
+}
+"""
+ }
+}
\ No newline at end of file
Propchange: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateJavaMarshalling.groovy
------------------------------------------------------------------------------
svn:executable = *
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateJavaTests.groovy
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateJavaTests.groovy?rev=419354&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateJavaTests.groovy (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateJavaTests.groovy Wed Jul 5 14:59:37 2006
@@ -0,0 +1,222 @@
+/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import org.apache.activemq.openwire.tool.OpenWireScript
+import org.apache.activemq.openwire.tool.TestDataGenerator
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.taskdefs.FixCRLF;
+
+/**
+ * Generates the Java test code for the Open Wire Format
+ *
+ * @version $Revision: $
+ */
+class GenerateJavaTests extends OpenWireScript {
+
+ Object run() {
+
+ def openwireVersion = getProperty("version");
+
+ def destDir = new File("src/test/java/org/apache/activemq/openwire/v${openwireVersion}")
+ println "Generating Java test code to directory ${destDir}"
+
+ def openwireClasses = classes.findAll {
+ it.getAnnotation("openwire:marshaller")!=null
+ }
+
+ def concreteClasses = new ArrayList()
+ def buffer = new StringBuffer()
+ int counter = 0
+ Map map = [:]
+
+ destDir.mkdirs()
+ for (jclass in openwireClasses) {
+
+ println "Processing ${jclass.simpleName}"
+ def abstractText = "abstract "
+ def classIsAbstract = isAbstract(jclass);
+ def isBaseAbstract = isAbstract(jclass.superclass);
+ if( !classIsAbstract ) {
+ concreteClasses.add(jclass)
+ abstractText = ""
+ }
+
+ def properties = jclass.declaredProperties.findAll { isValidProperty(it) }
+
+ def testClassName = jclass.simpleName + "Test"
+ if (classIsAbstract)
+ testClassName += "Support"
+
+ def file = new File(destDir, testClassName + ".java")
+
+ buffer << """
+${jclass.simpleName}Test.class
+"""
+
+ file.withWriter { out |
+out << """/**
+ *
+ * Copyright 2005-2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.openwire.v${openwireVersion};
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import org.apache.activemq.openwire.*;
+import org.apache.activemq.command.*;
+"""
+for (pkg in jclass.importedPackages) {
+ for (clazz in pkg.classes) {
+ out << "import "+clazz.qualifiedName+";"
+ }
+}
+
+def baseClass = "DataFileGeneratorTestSupport"
+if (!jclass.superclass.simpleName.equals("JNDIBaseStorable") && !jclass.superclass.simpleName.equals("DataStructureSupport") && !jclass.superclass.simpleName.equals("Object") ) {
+ baseClass = jclass.superclass.simpleName + "Test";
+ if (isBaseAbstract)
+ baseClass += "Support"
+}
+
+def marshallerAware = isMarshallAware(jclass);
+
+out << """
+
+/**
+ * Test case for the OpenWire marshalling for ${jclass.simpleName}
+ *
+ *
+ * NOTE!: This file is auto generated - do not modify!
+ * if you need to make a change, please see the modify the groovy scripts in the
+ * under src/gram/script and then use maven openwire:generate to regenerate
+ * this file.
+ *
+ * @version \$Revision: \$
+ */
+public ${abstractText}class $testClassName extends $baseClass {
+"""
+ if (!classIsAbstract)
+ out << """
+
+ public static ${jclass.simpleName}Test SINGLETON = new ${jclass.simpleName}Test();
+
+ public Object createObject() throws Exception {
+ ${jclass.simpleName} info = new ${jclass.simpleName}();
+ populateObject(info);
+ return info;
+ }
+"""
+ out << """
+
+ protected void populateObject(Object object) throws Exception {
+ super.populateObject(object);
+ ${jclass.simpleName} info = (${jclass.simpleName}) object;
+"""
+
+def generator = new TestDataGenerator();
+
+for (property in properties) {
+ def annotation = property.getter.getAnnotation("openwire:property");
+ def size = annotation.getValue("size");
+ def testSize = stringValue(annotation, "testSize");
+ def type = property.type.simpleName
+ def cached = isCachedProperty(property);
+ def propertyName = property.simpleName;
+ if (testSize == "-1") continue
+
+ out << " "
+ switch (type) {
+ case "boolean":
+ out << "info.${property.setter.simpleName}(${generator.createBool()});"; break;
+ case "byte":
+ out << "info.${property.setter.simpleName}(${generator.createByte()});"; break;
+ case "char":
+ out << "info.${property.setter.simpleName}(${generator.createChar()});"; break;
+ case "short":
+ out << "info.${property.setter.simpleName}(${generator.createShort()});"; break;
+ case "int":
+ out << "info.${property.setter.simpleName}(${generator.createInt()});"; break;
+ case "long":
+ out << "info.${property.setter.simpleName}(${generator.createLong()});"; break;
+ case "byte[]":
+ out << """info.${property.setter.simpleName}(${generator.createByteArray(propertyName)});"""; break;
+ case "String":
+ out << """info.${property.setter.simpleName}("${generator.createString(propertyName)}");"""; break;
+ case "ByteSequence":
+ out << """
+ {
+ byte data[] = ${generator.createByteArray(propertyName)};
+ info.${property.setter.simpleName}(new org.apache.activeio.packet.ByteSequence(data,0,data.length));
+ }
+ """;
+ break;
+ case "Throwable":
+ out << """info.${property.setter.simpleName}(createThrowable("${generator.createString(propertyName)}"));"""; break;
+ default:
+ if( property.type.arrayType ) {
+ def arrayType = property.type.arrayComponentType.simpleName;
+ if (size == null)
+ size = 2
+ if (arrayType == jclass.simpleName)
+ size = 0
+
+ out << """
+ {
+ ${arrayType} value[] = new ${arrayType}[${size}];
+ for( int i=0; i < ${size}; i++ ) {
+ value[i] = create${arrayType}("${generator.createString(propertyName)}");
+ }
+ info.${property.setter.simpleName}(value);
+ }"""
+ }
+ else {
+ out << """info.${property.setter.simpleName}(create${type}("${generator.createString(propertyName)}"));"""
+ }
+ }
+ out.newLine()
+ }
+ out << """
+ }
+ }
+"""
+}
+ // Use the FixCRLF Ant Task to make sure the file has consistent newlines
+ // so that SVN does not complain on checkin.
+ Project project = new Project();
+ project.init();
+ FixCRLF fixCRLF = new FixCRLF();
+ fixCRLF.setProject(project);
+ fixCRLF.setSrcdir(file.getParentFile());
+ fixCRLF.setIncludes(file.getName());
+ fixCRLF.execute();
+
+ }
+ }
+}
\ No newline at end of file
Propchange: incubator/activemq/trunk/activemq-openwire-generator/src/main/resources/GenerateJavaTests.groovy
------------------------------------------------------------------------------
svn:executable = *