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/09/27 04:42:51 UTC
svn commit: r450289 [2/3] - in /incubator/activemq/trunk: activemq-core/
activemq-core/src/main/java/org/apache/activemq/openwire/v2/
activemq-core/src/test/java/org/apache/activemq/openwire/v2/
activemq-openwire-generator/src/main/java/org/apache/acti...
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CGeneratorTask.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CGeneratorTask.java?view=auto&rev=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CGeneratorTask.java (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CGeneratorTask.java Tue Sep 26 19:42:47 2006
@@ -0,0 +1,120 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.codehaus.jam.JamService;
+import org.codehaus.jam.JamServiceFactory;
+import org.codehaus.jam.JamServiceParams;
+
+/**
+ *
+ * @version $Revision: 384826 $
+ */
+public class CGeneratorTask extends Task {
+
+ int version = 2;
+ File source = new File(".");
+ File target = new File(".");
+
+ public static void main(String[] args) {
+
+ Project project = new Project();
+ project.init();
+ CGeneratorTask generator = new CGeneratorTask();
+ generator.setProject(project);
+
+ if( args.length > 0 ) {
+ generator.version = Integer.parseInt(args[0]);
+ }
+
+ if( args.length > 1 ) {
+ generator.source = new File(args[1]);
+ }
+
+ if( args.length > 2 ) {
+ generator.target = new File(args[2]);
+ }
+
+ generator.execute();
+ }
+
+ public void execute() throws BuildException {
+ try {
+
+ String sourceDir = source+"/src/main/java";
+
+ System.out.println("Parsing source files in: " + sourceDir);
+
+ JamServiceFactory jamServiceFactory = JamServiceFactory.getInstance();
+ JamServiceParams params = jamServiceFactory.createServiceParams();
+ File[] dirs = new File[]{new File(sourceDir)};
+ params.includeSourcePattern(dirs, "**/*.java");
+ JamService jam = jamServiceFactory.createService(params);
+
+ {
+ CHeadersGenerator script = new CHeadersGenerator();
+ script.setJam(jam);
+ script.setTargetDir(target+"/src/libopenwire");
+ script.setOpenwireVersion(version);
+ script.run();
+ }
+ {
+ CSourcesGenerator script = new CSourcesGenerator();
+ script.setJam(jam);
+ script.setTargetDir(target+"/src/libopenwire");
+ script.setOpenwireVersion(version);
+ script.run();
+ }
+
+
+
+ } catch (Exception e) {
+ throw new BuildException(e);
+ }
+ }
+
+ public int getVersion() {
+ return version;
+ }
+
+ public void setVersion(int version) {
+ this.version = version;
+ }
+
+ public File getSource() {
+ return source;
+ }
+
+ public void setSource(File basedir) {
+ this.source = basedir;
+ }
+
+ public File getTarget() {
+ return target;
+ }
+
+ public void setTarget(File target) {
+ this.target = target;
+ }
+
+}
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CHeadersGenerator.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CHeadersGenerator.java?view=auto&rev=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CHeadersGenerator.java (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CHeadersGenerator.java Tue Sep 26 19:42:47 2006
@@ -0,0 +1,261 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import org.codehaus.jam.JAnnotation;
+import org.codehaus.jam.JAnnotationValue;
+import org.codehaus.jam.JClass;
+import org.codehaus.jam.JProperty;
+
+/**
+ *
+ * @version $Revision: 383749 $
+ */
+public class CHeadersGenerator extends SingleSourceGenerator {
+
+ protected String targetDir = "./src/lib/openwire";
+
+ public Object run() {
+ filePostFix = ".h";
+ if (destFile == null) {
+ destFile = new File(targetDir + "/ow_commands_v" + getOpenwireVersion() + ".h");
+ }
+ return super.run();
+ }
+
+ public String getTargetDir() {
+ return targetDir;
+ }
+
+ public void setTargetDir(String targetDir) {
+ this.targetDir = targetDir;
+ }
+
+ protected void generateLicence(PrintWriter out) {
+out.println("/**");
+out.println(" *");
+out.println(" * Licensed to the Apache Software Foundation (ASF) under one or more");
+out.println(" * contributor license agreements. See the NOTICE file distributed with");
+out.println(" * this work for additional information regarding copyright ownership.");
+out.println(" * The ASF licenses this file to You under the Apache License, Version 2.0");
+out.println(" * (the \"License\"); you may not use this file except in compliance with");
+out.println(" * the License. You may obtain a copy of the License at");
+out.println(" *");
+out.println(" * http://www.apache.org/licenses/LICENSE-2.0");
+out.println(" *");
+out.println(" * Unless required by applicable law or agreed to in writing, software");
+out.println(" * distributed under the License is distributed on an \"AS IS\" BASIS,");
+out.println(" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.");
+out.println(" * See the License for the specific language governing permissions and");
+out.println(" * limitations under the License.");
+out.println(" */");
+ }
+
+ String changeCase(String value) {
+ StringBuffer b = new StringBuffer();
+ char[] cs = value.toCharArray();
+ for (int i = 0; i < cs.length; i++) {
+ char c = cs[i];
+ 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.
+ */
+ protected List sort(List source) {
+ LinkedHashMap rc = new LinkedHashMap();
+ ArrayList classes = new ArrayList(source);
+ Collections.sort(classes, new Comparator(){
+ public int compare(Object o1, Object o2) {
+ JClass c1 = (JClass) o1;
+ JClass c2 = (JClass) o2;
+ return c1.getSimpleName().compareTo(c2.getSimpleName());
+ }});
+
+ // lets make a map of all the class names
+ HashMap classNames = new HashMap();
+ for (Iterator iter = classes.iterator(); iter.hasNext();) {
+ JClass c = (JClass) iter.next();
+ classNames.put(c, c);
+ }
+
+ // Add all classes that have no parent first
+ for (Iterator iter = classes.iterator(); iter.hasNext();) {
+ JClass c = (JClass) iter.next();
+ if (!classNames.containsKey(c.getSuperclass()))
+ rc.put(c, c);
+ }
+
+ // now lets add the rest
+ for (Iterator iter = classes.iterator(); iter.hasNext();) {
+ JClass c = (JClass) iter.next();
+ if (!rc.containsKey(c))
+ rc.put(c,c);
+ }
+
+ return new ArrayList(rc.keySet());
+ }
+
+ void generateFields(PrintWriter out, JClass jclass) {
+
+ if (jclass.getSuperclass() == null || jclass.getSuperclass().getSimpleName().equals("Object")) {
+ out.println("");
+ out.println(" ow_byte structType;");
+ } else {
+ generateFields(out, jclass.getSuperclass());
+ }
+
+ ArrayList properties = new ArrayList();
+ jclass.getDeclaredProperties();
+ for (int i = 0; i < jclass.getDeclaredProperties().length; i++) {
+ JProperty p = jclass.getDeclaredProperties()[i];
+ if (isValidProperty(p)) {
+ properties.add(p);
+ }
+ }
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ JAnnotation annotation = property.getGetter().getAnnotation("openwire:property");
+ JAnnotationValue size = annotation.getValue("size");
+ String name = toPropertyCase(property.getSimpleName());
+ boolean cached = isCachedProperty(property);
+
+ String type = property.getType().getQualifiedName();
+ if (type.equals("boolean")) {
+ out.println(" ow_"+type+" "+name+";");
+ } else if (type.equals("byte")) {
+ out.println(" ow_"+type+" "+name+";");
+ } else if (type.equals("char")) {
+ out.println(" ow_"+type+" "+name+";");
+ } else if (type.equals("short")) {
+ out.println(" ow_"+type+" "+name+";");
+ } else if (type.equals("int")) {
+ out.println(" ow_"+type+" "+name+";");
+ } else if (type.equals("long")) {
+ out.println(" ow_"+type+" "+name+";");
+ } else if (type.equals("byte[]")) {
+ out.println(" ow_byte_array *"+name+";");
+ } else if (type.equals("org.apache.activeio.packet.ByteSequence")) {
+ out.println(" ow_byte_array *"+name+";");
+ } else if (type.equals("org.apache.activeio.packet.ByteSequence")) {
+ out.println(" ow_byte_array *"+name+";");
+ } else if (type.equals("java.lang.String")) {
+ out.println(" ow_string *"+name+";");
+ } else {
+ if (property.getType().isArrayType()) {
+ out.println(" ow_DataStructure_array *"+name+";");
+ } else if (isThrowable(property.getType())) {
+ out.println(" ow_throwable *"+name+";");
+ } else {
+ out.println(" struct ow_" + property.getType().getSimpleName() + " *"+name+";");
+ }
+ }
+ }
+ }
+
+
+ protected void generateSetup(PrintWriter out) {
+ generateLicence(out);
+out.println("");
+out.println("/*****************************************************************************************");
+out.println(" * ");
+out.println(" * NOTE!: This file is auto generated - do not modify!");
+out.println(" * if you need to make a change, please see the modify the groovy scripts in the");
+out.println(" * under src/gram/script and then use maven openwire:generate to regenerate ");
+out.println(" * this file.");
+out.println(" * ");
+out.println(" *****************************************************************************************/");
+out.println(" ");
+out.println("#ifndef OW_COMMANDS_V"+openwireVersion+"_H");
+out.println("#define OW_COMMANDS_V"+openwireVersion+"_H");
+out.println("");
+out.println("#include \"ow.h\"");
+out.println("");
+out.println("#ifdef __cplusplus");
+out.println("extern \"C\" {");
+out.println("#endif /* __cplusplus */");
+out.println(" ");
+out.println("#define OW_WIREFORMAT_VERSION "+openwireVersion+"");
+
+out.println("#define OW_WIREFORMAT_STACK_TRACE_MASK 0x00000001;");
+out.println("#define OW_WIREFORMAT_TCP_NO_DELAY_MASK 0x00000002;");
+out.println("#define OW_WIREFORMAT_CACHE_MASK 0x00000004;");
+out.println("#define OW_WIREFORMAT_COMPRESSION_MASK 0x00000008;");
+
+ for (Iterator iterator = sortedClasses.iterator(); iterator.hasNext();) {
+ JClass jclass = (JClass) iterator.next();
+ String name = jclass.getSimpleName();
+ String type = ("ow_"+name).toUpperCase()+"_TYPE";
+ if( !isAbstract(jclass) ) {
+ out.println("#define "+type+" "+getOpenWireOpCode(jclass));
+ }
+ }
+
+out.println(" ");
+out.println("apr_status_t ow_bitmarshall(ow_bit_buffer *buffer, ow_DataStructure *object);");
+out.println("apr_status_t ow_marshall(ow_byte_buffer *buffer, ow_DataStructure *object);");
+ }
+
+ protected void generateFile(PrintWriter out) throws Exception {
+
+ String structName = jclass.getSimpleName();
+ String type = "OW_" + structName.toUpperCase() + "_TYPE";
+
+out.println("");
+out.println("typedef struct ow_"+structName+" {");
+
+ // This recusivly generates the field definitions of the class and it's supper classes.
+ generateFields(out, jclass);
+
+out.println("");
+out.println("} ow_"+structName+";");
+out.println("ow_"+structName+" *ow_"+structName+"_create(apr_pool_t *pool);");
+out.println("ow_boolean ow_is_a_"+structName+"(ow_DataStructure *object);");
+
+ }
+
+ protected void generateTearDown(PrintWriter out) {
+out.println("");
+out.println("#ifdef __cplusplus");
+out.println("}");
+out.println("#endif");
+out.println("");
+out.println("#endif /* ! OW_COMMANDS_V"+openwireVersion+"_H */");
+ }
+}
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSharpClassesGenerator.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSharpClassesGenerator.java?view=auto&rev=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSharpClassesGenerator.java (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSharpClassesGenerator.java Tue Sep 26 19:42:47 2006
@@ -0,0 +1,222 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Iterator;
+import java.util.List;
+
+import org.codehaus.jam.JClass;
+import org.codehaus.jam.JProperty;
+
+/**
+ *
+ * @version $Revision: 383749 $
+ */
+public class CSharpClassesGenerator extends MultiSourceGenerator {
+
+ protected String targetDir="./src/main/csharp";
+
+ public Object run() {
+ filePostFix = ".cs";
+ if (destDir == null) {
+ destDir = new File(targetDir+"/ActiveMQ/Commands");
+ }
+ return super.run();
+ }
+
+ public String makeHashCodeBody() throws Exception {
+ if (simpleName.endsWith("Id")) {
+ StringWriter buffer = new StringWriter();
+ PrintWriter out = new PrintWriter(buffer);
+ out.println(" int answer = 0;");
+ Iterator iter = getProperties().iterator();
+ while (iter.hasNext()) {
+ JProperty property = (JProperty) iter.next();
+ out.println(" answer = (answer * 37) + HashCode(" + property.getSimpleName() + ");");
+ }
+ out.println(" return answer;");
+ return buffer.toString();
+ }
+ return null;
+ }
+
+ public String makeEqualsBody() throws Exception {
+ if (simpleName.endsWith("Id")) {
+ StringWriter buffer = new StringWriter();
+ PrintWriter out = new PrintWriter(buffer);
+
+ Iterator iter = getProperties().iterator();
+ while (iter.hasNext()) {
+ JProperty property = (JProperty) iter.next();
+ String name = property.getSimpleName();
+ out.println(" if (! Equals(this." + name + ", that." + name + ")) return false;");
+ }
+ out.println(" return true;");
+ return buffer.toString();
+ }
+ return null;
+ }
+
+ public String makeToStringBody() throws Exception {
+ StringWriter buffer = new StringWriter();
+ PrintWriter out = new PrintWriter(buffer);
+ out.println(" return GetType().Name + \"[\"");
+ Iterator iter = getProperties().iterator();
+ while (iter.hasNext()) {
+ JProperty property = (JProperty) iter.next();
+ String name = property.getSimpleName();
+ out.println(" + \" " + name + "=\" + " + name);
+ }
+ out.println(" + \" ]\";");
+ return buffer.toString();
+ }
+
+ private void generateLicence(PrintWriter out) {
+out.println("/*");
+out.println(" * Licensed to the Apache Software Foundation (ASF) under one or more");
+out.println(" * contributor license agreements. See the NOTICE file distributed with");
+out.println(" * this work for additional information regarding copyright ownership.");
+out.println(" * The ASF licenses this file to You under the Apache License, Version 2.0");
+out.println(" * (the \"License\"); you may not use this file except in compliance with");
+out.println(" * the License. You may obtain a copy of the License at");
+out.println(" *");
+out.println(" * http://www.apache.org/licenses/LICENSE-2.0");
+out.println(" *");
+out.println(" * Unless required by applicable law or agreed to in writing, software");
+out.println(" * distributed under the License is distributed on an \"AS IS\" BASIS,");
+out.println(" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.");
+out.println(" * See the License for the specific language governing permissions and");
+out.println(" * limitations under the License.");
+out.println(" */");
+ }
+
+
+ protected void generateFile(PrintWriter out) throws Exception {
+ generateLicence(out);
+
+out.println("//");
+out.println("// NOTE!: This file is autogenerated - do not modify!");
+out.println("// if you need to make a change, please see the Groovy scripts in the");
+out.println("// activemq-core module");
+out.println("//");
+out.println("");
+out.println("using System;");
+out.println("using System.Collections;");
+out.println("");
+out.println("using ActiveMQ.OpenWire;");
+out.println("using ActiveMQ.Commands;");
+out.println("");
+out.println("namespace ActiveMQ.Commands");
+out.println("{");
+out.println(" /// <summary>");
+out.println(" /// The ActiveMQ "+jclass.getSimpleName()+" Command");
+out.println(" /// </summary>");
+ out.print(" public class "+jclass.getSimpleName()+" : "+baseClass);
+
+
+ for (int i = 0; i < jclass.getInterfaces().length; i++) {
+ JClass intf = jclass.getInterfaces()[i];
+ out.print(", "+intf.getSimpleName());
+ }
+
+out.println("");
+out.println(" {");
+out.println(" public const byte ID_"+jclass.getSimpleName()+" = "+getOpenWireOpCode(jclass)+";");
+out.println(" ");
+
+ List properties = getProperties();
+ String type;
+ Object name;
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ type = toCSharpType(property.getType());
+ name = decapitalize(property.getSimpleName());
+out.println(" "+type+" "+name+";");
+ }
+
+ String text = makeHashCodeBody();
+ if (text != null) {
+out.println("");
+out.println(" public override int GetHashCode() {");
+out.println(""+text+"");
+out.println(" }");
+ }
+
+ text = makeEqualsBody();
+ if (text != null) {
+out.println("");
+out.println(" public override bool Equals(object that) {");
+out.println(" if (that is "+className+") {");
+out.println(" return Equals(("+className+") that);");
+out.println(" }");
+out.println(" return false;");
+out.println(" }");
+out.println("");
+out.println(" public virtual bool Equals("+className+" that) {");
+out.println(""+text+"");
+out.println(" }");
+ }
+
+ text = makeToStringBody();
+ if (text != null) {
+out.println("");
+out.println(" public override string ToString() {");
+out.println(""+text+"");
+out.println(" }");
+ }
+
+out.println("");
+out.println(" public override byte GetDataStructureType() {");
+out.println(" return ID_"+jclass.getSimpleName()+";");
+out.println(" }");
+out.println("");
+out.println("");
+out.println(" // Properties");
+
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ type = toCSharpType(property.getType());
+ name = decapitalize(property.getSimpleName());
+ String propertyName = property.getSimpleName();
+ String getter = capitalize(property.getGetter().getSimpleName());
+ String setter = capitalize(property.getSetter().getSimpleName());
+
+out.println("");
+out.println(" public "+type+" "+propertyName+"");
+out.println(" {");
+out.println(" get { return "+name+"; }");
+out.println(" set { this."+name+" = value; } ");
+out.println(" }");
+ }
+
+out.println("");
+out.println(" }");
+out.println("}");
+ }
+
+ public String getTargetDir() {
+ return targetDir;
+ }
+
+ public void setTargetDir(String targetDir) {
+ this.targetDir = targetDir;
+ }
+}
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSharpGeneratorTask.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSharpGeneratorTask.java?view=auto&rev=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSharpGeneratorTask.java (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSharpGeneratorTask.java Tue Sep 26 19:42:47 2006
@@ -0,0 +1,118 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.codehaus.jam.JamService;
+import org.codehaus.jam.JamServiceFactory;
+import org.codehaus.jam.JamServiceParams;
+
+/**
+ *
+ * @version $Revision: 384826 $
+ */
+public class CSharpGeneratorTask extends Task {
+
+ int version = 2;
+ File source = new File(".");
+ File target = new File(".");
+
+ public static void main(String[] args) {
+
+ Project project = new Project();
+ project.init();
+ CSharpGeneratorTask generator = new CSharpGeneratorTask();
+ generator.setProject(project);
+
+ if( args.length > 0 ) {
+ generator.version = Integer.parseInt(args[0]);
+ }
+
+ if( args.length > 1 ) {
+ generator.source = new File(args[1]);
+ }
+
+ if( args.length > 2 ) {
+ generator.target = new File(args[2]);
+ }
+
+ generator.execute();
+ }
+
+ public void execute() throws BuildException {
+ try {
+
+ String sourceDir = source+"/src/main/java";
+
+ System.out.println("Parsing source files in: " + sourceDir);
+
+ JamServiceFactory jamServiceFactory = JamServiceFactory.getInstance();
+ JamServiceParams params = jamServiceFactory.createServiceParams();
+ File[] dirs = new File[]{new File(sourceDir)};
+ params.includeSourcePattern(dirs, "**/*.java");
+ JamService jam = jamServiceFactory.createService(params);
+
+ {
+ CSharpClassesGenerator script = new CSharpClassesGenerator();
+ script.setJam(jam);
+ script.setTargetDir(target+"/src/main/csharp");
+ script.setOpenwireVersion(version);
+ script.run();
+ }
+ {
+ CSharpMarshallingGenerator script = new CSharpMarshallingGenerator();
+ script.setJam(jam);
+ script.setTargetDir(target+"/src/main/csharp");
+ script.setOpenwireVersion(version);
+ script.run();
+ }
+
+ } catch (Exception e) {
+ throw new BuildException(e);
+ }
+ }
+
+ public int getVersion() {
+ return version;
+ }
+
+ public void setVersion(int version) {
+ this.version = version;
+ }
+
+ public File getSource() {
+ return source;
+ }
+
+ public void setSource(File basedir) {
+ this.source = basedir;
+ }
+
+ public File getTarget() {
+ return target;
+ }
+
+ public void setTarget(File target) {
+ this.target = target;
+ }
+
+}
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSharpMarshallingGenerator.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSharpMarshallingGenerator.java?view=auto&rev=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSharpMarshallingGenerator.java (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSharpMarshallingGenerator.java Tue Sep 26 19:42:47 2006
@@ -0,0 +1,641 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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;
+
+import org.codehaus.jam.JAnnotation;
+import org.codehaus.jam.JAnnotationValue;
+import org.codehaus.jam.JClass;
+import org.codehaus.jam.JProperty;
+
+import java.io.*;
+import java.util.*;
+
+/**
+ *
+ * @version $Revision: 384390 $
+ */
+public class CSharpMarshallingGenerator extends JavaMarshallingGenerator {
+
+ protected String targetDir="./src/main/csharp";
+
+ public Object run() {
+ filePostFix = ".cs";
+ if (destDir == null) {
+ destDir = new File(targetDir+"/ActiveMQ/OpenWire/V"+getOpenwireVersion());
+ }
+ return super.run();
+ }
+
+ //////////////////////////////////////////////////////////////////////////////////////
+ // This section is for the tight wire format encoding generator
+ //////////////////////////////////////////////////////////////////////////////////////
+
+ protected void generateTightUnmarshalBodyForProperty(PrintWriter out, JProperty property, JAnnotationValue size) {
+
+ String propertyName = property.getSimpleName();
+ String type = property.getType().getSimpleName();
+
+ if (type.equals("boolean")) {
+ out.println(" info." + propertyName + " = bs.ReadBoolean();");
+ }
+ else if (type.equals("byte")) {
+ out.println(" info." + propertyName + " = dataIn.ReadByte();");
+ }
+ else if (type.equals("char")) {
+ out.println(" info." + propertyName + " = dataIn.ReadChar();");
+ }
+ else if (type.equals("short")) {
+ out.println(" info." + propertyName + " = dataIn.ReadInt16();");
+ }
+ else if (type.equals("int")) {
+ out.println(" info." + propertyName + " = dataIn.ReadInt32();");
+ }
+ else if (type.equals("long")) {
+ out.println(" info." + propertyName + " = TightUnmarshalLong(wireFormat, dataIn, bs);");
+ }
+ else if (type.equals("String")) {
+ out.println(" info." + propertyName + " = TightUnmarshalString(dataIn, bs);");
+ }
+ else if (type.equals("byte[]") || type.equals("ByteSequence")) {
+ if (size != null) {
+ out.println(" info." + propertyName + " = ReadBytes(dataIn, " + size.asInt() + ");");
+ }
+ else {
+ out.println(" info." + propertyName + " = ReadBytes(dataIn, bs.ReadBoolean());");
+ }
+ }
+ else if (isThrowable(property.getType())) {
+ out.println(" info." + propertyName + " = TightUnmarshalBrokerError(wireFormat, dataIn, bs);");
+ }
+ else if (isCachedProperty(property)) {
+ out.println(" info." + propertyName + " = (" + type + ") TightUnmarshalCachedObject(wireFormat, dataIn, bs);");
+ }
+ else {
+ out.println(" info." + propertyName + " = (" + type + ") TightUnmarshalNestedObject(wireFormat, dataIn, bs);");
+ }
+ }
+
+ protected void generateTightUnmarshalBodyForArrayProperty(PrintWriter out, JProperty property, JAnnotationValue size) {
+ JClass propertyType = property.getType();
+ String arrayType = propertyType.getArrayComponentType().getSimpleName();
+ String propertyName = property.getSimpleName();
+ out.println();
+ if (size != null) {
+ out.println(" {");
+ out.println(" " + arrayType + "[] value = new " + arrayType + "[" + size.asInt() + "];");
+ out.println(" " + "for( int i=0; i < " + size.asInt() + "; i++ ) {");
+ out.println(" value[i] = (" + arrayType + ") TightUnmarshalNestedObject(wireFormat,dataIn, bs);");
+ out.println(" }");
+ out.println(" info." + propertyName + " = value;");
+ out.println(" }");
+ }
+ else {
+ out.println(" if (bs.ReadBoolean()) {");
+ out.println(" short size = dataIn.ReadInt16();");
+ out.println(" " + arrayType + "[] value = new " + arrayType + "[size];");
+ out.println(" for( int i=0; i < size; i++ ) {");
+ out.println(" value[i] = (" + arrayType + ") TightUnmarshalNestedObject(wireFormat,dataIn, bs);");
+ out.println(" }");
+ out.println(" info." + propertyName + " = value;");
+ out.println(" }");
+ out.println(" else {");
+ out.println(" info." + propertyName + " = null;");
+ out.println(" }");
+ }
+ }
+
+ protected int generateTightMarshal1Body(PrintWriter out) {
+ List properties = getProperties();
+ int baseSize = 0;
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ JAnnotation annotation = property.getAnnotation("openwire:property");
+ JAnnotationValue size = annotation.getValue("size");
+ JClass propertyType = property.getType();
+ String type = propertyType.getSimpleName();
+ String getter = "info." + property.getSimpleName();
+
+ if (type.equals("boolean")) {
+ out.println(" bs.WriteBoolean(" + getter + ");");
+ }
+ else if (type.equals("byte")) {
+ baseSize += 1;
+ }
+ else if (type.equals("char")) {
+ baseSize += 2;
+ }
+ else if (type.equals("short")) {
+ baseSize += 2;
+ }
+ else if (type.equals("int")) {
+ baseSize += 4;
+ }
+ else if (type.equals("long")) {
+ out.println(" rc += TightMarshalLong1(wireFormat, " + getter + ", bs);");
+ }
+ else if (type.equals("String")) {
+ out.print("");
+ out.println(" rc += TightMarshalString1(" + getter + ", bs);");
+ }
+ else if (type.equals("byte[]") || type.equals("ByteSequence")) {
+ if (size == null) {
+ out.println(" bs.WriteBoolean(" + getter + "!=null);");
+ out.println(" rc += " + getter + "==null ? 0 : " + getter + ".Length+4;");
+ }
+ else {
+ baseSize += size.asInt();
+ }
+ }
+ else if (propertyType.isArrayType()) {
+ if (size != null) {
+ out.println(" rc += TightMarshalObjectArrayConstSize1(wireFormat, " + getter + ", bs, " + size.asInt() + ");");
+ }
+ else {
+ out.println(" rc += TightMarshalObjectArray1(wireFormat, " + getter + ", bs);");
+ }
+ }
+ else if (isThrowable(propertyType)) {
+ out.println(" rc += TightMarshalBrokerError1(wireFormat, " + getter + ", bs);");
+ }
+ else {
+ if (isCachedProperty(property)) {
+ out.println(" rc += TightMarshalCachedObject1(wireFormat, (DataStructure)" + getter + ", bs);");
+ }
+ else {
+ out.println(" rc += TightMarshalNestedObject1(wireFormat, (DataStructure)" + getter + ", bs);");
+ }
+ }
+ }
+ return baseSize;
+ }
+
+ protected void generateTightMarshal2Body(PrintWriter out) {
+ List properties = getProperties();
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ JAnnotation annotation = property.getAnnotation("openwire:property");
+ JAnnotationValue size = annotation.getValue("size");
+ JClass propertyType = property.getType();
+ String type = propertyType.getSimpleName();
+ String getter = "info." + property.getSimpleName();
+
+ if (type.equals("boolean")) {
+ out.println(" bs.ReadBoolean();");
+ }
+ else if (type.equals("byte")) {
+ out.println(" dataOut.Write(" + getter + ");");
+ }
+ else if (type.equals("char")) {
+ out.println(" dataOut.Write(" + getter + ");");
+ }
+ else if (type.equals("short")) {
+ out.println(" dataOut.Write(" + getter + ");");
+ }
+ else if (type.equals("int")) {
+ out.println(" dataOut.Write(" + getter + ");");
+ }
+ else if (type.equals("long")) {
+ out.println(" TightMarshalLong2(wireFormat, " + getter + ", dataOut, bs);");
+ }
+ else if (type.equals("String")) {
+ out.println(" TightMarshalString2(" + getter + ", dataOut, bs);");
+ }
+ else if (type.equals("byte[]") || type.equals("ByteSequence")) {
+ if (size != null) {
+ out.println(" dataOut.Write(" + getter + ", 0, " + size.asInt() + ");");
+ }
+ else {
+ out.println(" if(bs.ReadBoolean()) {");
+ out.println(" dataOut.Write(" + getter + ".Length);");
+ out.println(" dataOut.Write(" + getter + ");");
+ out.println(" }");
+ }
+ }
+ else if (propertyType.isArrayType()) {
+ if (size != null) {
+ out.println(" TightMarshalObjectArrayConstSize2(wireFormat, " + getter + ", dataOut, bs, " + size.asInt() + ");");
+ }
+ else {
+ out.println(" TightMarshalObjectArray2(wireFormat, " + getter + ", dataOut, bs);");
+ }
+ }
+ else if (isThrowable(propertyType)) {
+ out.println(" TightMarshalBrokerError2(wireFormat, " + getter + ", dataOut, bs);");
+ }
+ else {
+ if (isCachedProperty(property)) {
+ out.println(" TightMarshalCachedObject2(wireFormat, (DataStructure)" + getter + ", dataOut, bs);");
+ }
+ else {
+ out.println(" TightMarshalNestedObject2(wireFormat, (DataStructure)" + getter + ", dataOut, bs);");
+ }
+ }
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////////////////
+ // This section is for the loose wire format encoding generator
+ //////////////////////////////////////////////////////////////////////////////////////
+
+ protected void generateLooseUnmarshalBodyForProperty(PrintWriter out, JProperty property, JAnnotationValue size) {
+
+ String propertyName = property.getSimpleName();
+ String type = property.getType().getSimpleName();
+
+ if (type.equals("boolean")) {
+ out.println(" info." + propertyName + " = dataIn.ReadBoolean();");
+ }
+ else if (type.equals("byte")) {
+ out.println(" info." + propertyName + " = dataIn.ReadByte();");
+ }
+ else if (type.equals("char")) {
+ out.println(" info." + propertyName + " = dataIn.ReadChar();");
+ }
+ else if (type.equals("short")) {
+ out.println(" info." + propertyName + " = dataIn.ReadInt16();");
+ }
+ else if (type.equals("int")) {
+ out.println(" info." + propertyName + " = dataIn.ReadInt32();");
+ }
+ else if (type.equals("long")) {
+ out.println(" info." + propertyName + " = LooseUnmarshalLong(wireFormat, dataIn);");
+ }
+ else if (type.equals("String")) {
+ out.println(" info." + propertyName + " = LooseUnmarshalString(dataIn);");
+ }
+ else if (type.equals("byte[]") || type.equals("ByteSequence")) {
+ if (size != null) {
+ out.println(" info." + propertyName + " = ReadBytes(dataIn, " + size.asInt() + ");");
+ }
+ else {
+ out.println(" info." + propertyName + " = ReadBytes(dataIn, dataIn.ReadBoolean());");
+ }
+ }
+ else if (isThrowable(property.getType())) {
+ out.println(" info." + propertyName + " = LooseUnmarshalBrokerError(wireFormat, dataIn);");
+ }
+ else if (isCachedProperty(property)) {
+ out.println(" info." + propertyName + " = (" + type + ") LooseUnmarshalCachedObject(wireFormat, dataIn);");
+ }
+ else {
+ out.println(" info." + propertyName + " = (" + type + ") LooseUnmarshalNestedObject(wireFormat, dataIn);");
+ }
+ }
+
+ protected void generateLooseUnmarshalBodyForArrayProperty(PrintWriter out, JProperty property, JAnnotationValue size) {
+ JClass propertyType = property.getType();
+ String arrayType = propertyType.getArrayComponentType().getSimpleName();
+ String propertyName = property.getSimpleName();
+ out.println();
+ if (size != null) {
+ out.println(" {");
+ out.println(" " + arrayType + "[] value = new " + arrayType + "[" + size.asInt() + "];");
+ out.println(" " + "for( int i=0; i < " + size.asInt() + "; i++ ) {");
+ out.println(" value[i] = (" + arrayType + ") LooseUnmarshalNestedObject(wireFormat,dataIn);");
+ out.println(" }");
+ out.println(" info." + propertyName + " = value;");
+ out.println(" }");
+ }
+ else {
+ out.println(" if (dataIn.ReadBoolean()) {");
+ out.println(" short size = dataIn.ReadInt16();");
+ out.println(" " + arrayType + "[] value = new " + arrayType + "[size];");
+ out.println(" for( int i=0; i < size; i++ ) {");
+ out.println(" value[i] = (" + arrayType + ") LooseUnmarshalNestedObject(wireFormat,dataIn);");
+ out.println(" }");
+ out.println(" info." + propertyName + " = value;");
+ out.println(" }");
+ out.println(" else {");
+ out.println(" info." + propertyName + " = null;");
+ out.println(" }");
+ }
+ }
+
+
+ protected void generateLooseMarshalBody(PrintWriter out) {
+ List properties = getProperties();
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ JAnnotation annotation = property.getAnnotation("openwire:property");
+ JAnnotationValue size = annotation.getValue("size");
+ JClass propertyType = property.getType();
+ String type = propertyType.getSimpleName();
+ String getter = "info." + property.getSimpleName();
+
+ if (type.equals("boolean")) {
+ out.println(" dataOut.Write(" + getter + ");");
+ }
+ else if (type.equals("byte")) {
+ out.println(" dataOut.Write(" + getter + ");");
+ }
+ else if (type.equals("char")) {
+ out.println(" dataOut.Write(" + getter + ");");
+ }
+ else if (type.equals("short")) {
+ out.println(" dataOut.Write(" + getter + ");");
+ }
+ else if (type.equals("int")) {
+ out.println(" dataOut.Write(" + getter + ");");
+ }
+ else if (type.equals("long")) {
+ out.println(" LooseMarshalLong(wireFormat, " + getter + ", dataOut);");
+ }
+ else if (type.equals("String")) {
+ out.println(" LooseMarshalString(" + getter + ", dataOut);");
+ }
+ else if (type.equals("byte[]") || type.equals("ByteSequence")) {
+ if (size != null) {
+ out.println(" dataOut.Write(" + getter + ", 0, " + size.asInt() + ");");
+ }
+ else {
+ out.println(" dataOut.Write(" + getter + "!=null);");
+ out.println(" if(" + getter + "!=null) {");
+ out.println(" dataOut.Write(" + getter + ".Length);");
+ out.println(" dataOut.Write(" + getter + ");");
+ out.println(" }");
+ }
+ }
+ else if (propertyType.isArrayType()) {
+ if (size != null) {
+ out.println(" LooseMarshalObjectArrayConstSize(wireFormat, " + getter + ", dataOut, " + size.asInt() + ");");
+ }
+ else {
+ out.println(" LooseMarshalObjectArray(wireFormat, " + getter + ", dataOut);");
+ }
+ }
+ else if (isThrowable(propertyType)) {
+ out.println(" LooseMarshalBrokerError(wireFormat, " + getter + ", dataOut);");
+ }
+ else {
+ if (isCachedProperty(property)) {
+ out.println(" LooseMarshalCachedObject(wireFormat, (DataStructure)" + getter + ", dataOut);");
+ }
+ else {
+ out.println(" LooseMarshalNestedObject(wireFormat, (DataStructure)" + getter + ", dataOut);");
+ }
+ }
+ }
+ }
+
+ public String getTargetDir() {
+ return targetDir;
+ }
+
+ public void setTargetDir(String targetDir) {
+ this.targetDir = targetDir;
+ }
+
+ private void generateLicence(PrintWriter out) {
+out.println("/*");
+out.println(" * Licensed to the Apache Software Foundation (ASF) under one or more");
+out.println(" * contributor license agreements. See the NOTICE file distributed with");
+out.println(" * this work for additional information regarding copyright ownership.");
+out.println(" * The ASF licenses this file to You under the Apache License, Version 2.0");
+out.println(" * (the \"License\"); you may not use this file except in compliance with");
+out.println(" * the License. You may obtain a copy of the License at");
+out.println(" *");
+out.println(" * http://www.apache.org/licenses/LICENSE-2.0");
+out.println(" *");
+out.println(" * Unless required by applicable law or agreed to in writing, software");
+out.println(" * distributed under the License is distributed on an \"AS IS\" BASIS,");
+out.println(" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.");
+out.println(" * See the License for the specific language governing permissions and");
+out.println(" * limitations under the License.");
+out.println(" */");
+ }
+
+ protected void generateFile(PrintWriter out) throws Exception {
+ generateLicence(out);
+out.println("");
+out.println("//");
+out.println("// NOTE!: This file is autogenerated - do not modify!");
+out.println("// if you need to make a change, please see the Groovy scripts in the");
+out.println("// activemq-core module");
+out.println("//");
+out.println("");
+out.println("using System;");
+out.println("using System.Collections;");
+out.println("using System.IO;");
+out.println("");
+out.println("using ActiveMQ.Commands;");
+out.println("using ActiveMQ.OpenWire;");
+out.println("using ActiveMQ.OpenWire.V"+getOpenwireVersion()+";");
+out.println("");
+out.println("namespace ActiveMQ.OpenWire.V"+getOpenwireVersion()+"");
+out.println("{");
+out.println(" /// <summary>");
+out.println(" /// Marshalling code for Open Wire Format for "+jclass.getSimpleName()+"");
+out.println(" /// </summary>");
+out.println(" "+getAbstractClassText()+"class "+getClassName()+" : "+getBaseClass()+"");
+out.println(" {");
+
+ if( !isAbstractClass() ) {
+out.println("");
+out.println("");
+out.println(" public override DataStructure CreateObject() ");
+out.println(" {");
+out.println(" return new "+jclass.getSimpleName()+"();");
+out.println(" }");
+out.println("");
+out.println(" public override byte GetDataStructureType() ");
+out.println(" {");
+out.println(" return "+jclass.getSimpleName()+".ID_"+jclass.getSimpleName()+";");
+out.println(" }");
+ }
+
+/*
+ * Generate the tight encoding marshallers
+ */
+out.println("");
+out.println(" // ");
+out.println(" // Un-marshal an object instance from the data input stream");
+out.println(" // ");
+out.println(" public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) ");
+out.println(" {");
+out.println(" base.TightUnmarshal(wireFormat, o, dataIn, bs);");
+
+ if( !getProperties().isEmpty() || isMarshallerAware() ) {
+out.println("");
+out.println(" "+jclass.getSimpleName()+" info = ("+jclass.getSimpleName()+")o;");
+ }
+
+ if( isMarshallerAware() ){
+out.println("");
+out.println(" info.BeforeUnmarshall(wireFormat);");
+out.println("");
+ }
+
+generateTightUnmarshalBody(out);
+
+ if( isMarshallerAware() ){
+out.println("");
+out.println(" info.AfterUnmarshall(wireFormat);");
+ }
+
+out.println("");
+out.println(" }");
+out.println("");
+out.println(" //");
+out.println(" // Write the booleans that this object uses to a BooleanStream");
+out.println(" //");
+out.println(" public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) {");
+out.println(" "+jclass.getSimpleName()+" info = ("+jclass.getSimpleName()+")o;");
+
+ if( isMarshallerAware() ) {
+out.println("");
+out.println(" info.BeforeMarshall(wireFormat);");
+ }
+
+out.println("");
+out.println(" int rc = base.TightMarshal1(wireFormat, info, bs);");
+
+int baseSize = generateTightMarshal1Body(out);
+
+out.println("");
+out.println(" return rc + "+baseSize+";");
+out.println(" }");
+out.println("");
+out.println(" // ");
+out.println(" // Write a object instance to data output stream");
+out.println(" //");
+out.println(" public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs) {");
+out.println(" base.TightMarshal2(wireFormat, o, dataOut, bs);");
+
+ if( !getProperties().isEmpty() || isMarshallerAware() ) {
+out.println("");
+out.println(" "+jclass.getSimpleName()+" info = ("+jclass.getSimpleName()+")o;");
+ }
+
+ generateTightMarshal2Body(out);
+
+ if( isMarshallerAware() ) {
+out.println("");
+out.println(" info.AfterMarshall(wireFormat);");
+ }
+
+out.println("");
+out.println(" }");
+
+out.println("");
+out.println(" // ");
+out.println(" // Un-marshal an object instance from the data input stream");
+out.println(" // ");
+out.println(" public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) ");
+out.println(" {");
+out.println(" base.LooseUnmarshal(wireFormat, o, dataIn);");
+
+ if( !getProperties().isEmpty() || isMarshallerAware() ) {
+out.println("");
+out.println(" "+jclass.getSimpleName()+" info = ("+jclass.getSimpleName()+")o;");
+ }
+
+ if( isMarshallerAware() ) {
+out.println("");
+out.println(" info.BeforeUnmarshall(wireFormat);");
+out.println("");
+ }
+
+ generateLooseUnmarshalBody(out);
+
+ if( isMarshallerAware() ) {
+out.println("");
+out.println(" info.AfterUnmarshall(wireFormat);");
+ }
+
+out.println("");
+out.println(" }");
+out.println("");
+out.println(" // ");
+out.println(" // Write a object instance to data output stream");
+out.println(" //");
+out.println(" public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut) {");
+
+ if( !getProperties().isEmpty() || isMarshallerAware() ) {
+out.println("");
+out.println(" "+jclass.getSimpleName()+" info = ("+jclass.getSimpleName()+")o;");
+ }
+
+ if( isMarshallerAware() ) {
+out.println("");
+out.println(" info.BeforeMarshall(wireFormat);");
+ }
+
+out.println("");
+out.println(" base.LooseMarshal(wireFormat, o, dataOut);");
+
+ generateLooseMarshalBody(out);
+
+ if( isMarshallerAware() ) {
+out.println("");
+out.println(" info.AfterMarshall(wireFormat);");
+ }
+out.println("");
+out.println(" }");
+out.println(" }");
+out.println("}");
+
+ }
+
+
+ public void generateFactory(PrintWriter out) {
+ generateLicence(out);
+out.println("");
+out.println("//");
+out.println("// NOTE!: This file is autogenerated - do not modify!");
+out.println("// if you need to make a change, please see the Groovy scripts in the");
+out.println("// activemq-core module");
+out.println("//");
+out.println("");
+out.println("using System;");
+out.println("using System.Collections;");
+out.println("using System.IO;");
+out.println("");
+out.println("using ActiveMQ.Commands;");
+out.println("using ActiveMQ.OpenWire;");
+out.println("using ActiveMQ.OpenWire.V"+getOpenwireVersion()+";");
+out.println("");
+out.println("namespace ActiveMQ.OpenWire.V"+getOpenwireVersion()+"");
+out.println("{");
+out.println(" /// <summary>");
+out.println(" /// Used to create marshallers for a specific version of the wire protocol");
+out.println(" /// </summary>");
+out.println(" public class MarshallerFactory");
+out.println(" {");
+out.println(" public void configure(OpenWireFormat format) ");
+out.println(" {");
+
+ List list = new ArrayList(getConcreteClasses());
+ Collections.sort(list, new Comparator(){
+ public int compare(Object o1, Object o2) {
+ JClass c1 = (JClass) o1;
+ JClass c2 = (JClass) o2;
+ return c1.getSimpleName().compareTo(c2.getSimpleName());
+ }});
+
+ for (Iterator iter = list.iterator(); iter.hasNext();) {
+ JClass jclass = (JClass) iter.next();
+out.println(" format.addMarshaller(new "+jclass.getSimpleName()+"Marshaller());");
+ }
+
+out.println("");
+out.println(" }");
+out.println(" }");
+out.println("}");
+
+ }
+}
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSourcesGenerator.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSourcesGenerator.java?view=auto&rev=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSourcesGenerator.java (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CSourcesGenerator.java Tue Sep 26 19:42:47 2006
@@ -0,0 +1,381 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.codehaus.jam.JAnnotation;
+import org.codehaus.jam.JAnnotationValue;
+import org.codehaus.jam.JClass;
+import org.codehaus.jam.JProperty;
+
+/**
+ *
+ * @version $Revision: 383749 $
+ */
+public class CSourcesGenerator extends CHeadersGenerator {
+
+ public Object run() {
+ filePostFix = ".c";
+ if (destFile == null) {
+ destFile = new File(targetDir + "/ow_commands_v" + getOpenwireVersion() + ".c");
+ }
+ return super.run();
+ }
+
+ protected List sort(List source) {
+ return source;
+ }
+
+ protected void generateSetup(PrintWriter out) {
+ generateLicence(out);
+ out.println("");
+ out.println("/*****************************************************************************************");
+ out.println(" * ");
+ out.println(" * NOTE!: This file is auto generated - do not modify!");
+ out.println(" * if you need to make a change, please see the modify the groovy scripts in the");
+ out.println(" * under src/gram/script and then use maven openwire:generate to regenerate ");
+ out.println(" * this file.");
+ out.println(" * ");
+ out.println(" *****************************************************************************************/");
+ out.println("");
+ out.println("");
+ out.println("#include \"ow_commands_v"+openwireVersion+".h\"");
+ out.println("");
+ out.println("#define SUCCESS_CHECK( f ) { apr_status_t rc=f; if(rc!=APR_SUCCESS) return rc; }");
+ out.println("");
+ }
+
+ protected void generateFile(PrintWriter out) throws Exception {
+
+ ArrayList properties = new ArrayList();
+ jclass.getDeclaredProperties();
+ for (int i = 0; i < jclass.getDeclaredProperties().length; i++) {
+ JProperty p = jclass.getDeclaredProperties()[i];
+ if (isValidProperty(p)) {
+ properties.add(p);
+ }
+ }
+
+ String name = jclass.getSimpleName();
+ String type = ("ow_"+name).toUpperCase()+"_TYPE";
+ String baseName = "DataStructure";
+ JClass superclass = jclass.getSuperclass();
+ while( superclass.getSuperclass() != null ) {
+ if( sortedClasses.contains(superclass) ) {
+ baseName = superclass.getSimpleName();
+ break;
+ } else {
+ superclass = superclass.getSuperclass();
+ }
+ }
+
+out.println("ow_boolean ow_is_a_"+name+"(ow_DataStructure *object) {");
+out.println(" if( object == 0 )");
+out.println(" return 0;");
+out.println(" ");
+out.println(" switch(object->structType) {");
+
+ for (Iterator iterator = sortedClasses.iterator(); iterator.hasNext();) {
+ JClass sub = (JClass) iterator.next();
+ String subtype = "OW_"+sub.getSimpleName().toUpperCase()+"_TYPE";
+ if( jclass.isAssignableFrom(sub) && !isAbstract(sub) ) {
+out.println("");
+out.println(" case "+subtype+":");
+ }
+ }
+out.println("");
+out.println(" return 1;");
+out.println(" }");
+out.println(" return 0;");
+out.println("}");
+
+ if( !isAbstract(jclass) ) {
+out.println("");
+out.println("");
+out.println("ow_"+name+" *ow_"+name+"_create(apr_pool_t *pool) ");
+out.println("{");
+out.println(" ow_"+name+" *value = apr_pcalloc(pool,sizeof(ow_"+name+"));");
+out.println(" if( value!=0 ) {");
+out.println(" ((ow_DataStructure*)value)->structType = "+type+";");
+out.println(" }");
+out.println(" return value;");
+out.println("}");
+ }
+
+out.println("");
+out.println("");
+out.println("apr_status_t ow_marshal1_"+name+"(ow_bit_buffer *buffer, ow_"+name+" *object)");
+out.println("{");
+out.println(" ow_marshal1_"+baseName+"(buffer, (ow_"+baseName+"*)object);");
+
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ String propname = toPropertyCase(property.getSimpleName());
+ boolean cached = isCachedProperty(property);
+ JAnnotation annotation = property.getGetter().getAnnotation("openwire:property");
+ JAnnotationValue size = annotation.getValue("size");
+
+ type = property.getType().getQualifiedName();
+ if( type.equals("boolean")) {
+out.println(" ow_bit_buffer_append(buffer, object->"+propname+");");
+ } else if( type.equals("byte")) {
+ } else if( type.equals("char")) {
+ } else if( type.equals("short")) {
+ } else if( type.equals("int")) {
+ } else if( type.equals("long")) {
+out.println(" ow_marshal1_long(buffer, object->"+propname+");");
+ } else if( type.equals("byte[]")) {
+ if( size ==null ) {
+out.println(" ow_bit_buffer_append(buffer, object->"+propname+"!=0 );");
+ }
+ } else if( type.equals("org.apache.activeio.packet.ByteSequence")) {
+ if( size ==null ) {
+out.println(" ow_bit_buffer_append(buffer, object->"+propname+"!=0 );");
+ }
+ } else if( type.equals("java.lang.String")) {
+out.println(" ow_marshal1_string(buffer, object->"+propname+");");
+ } else {
+ if( property.getType().isArrayType() ) {
+ if( size!=null ) {
+out.println(" SUCCESS_CHECK(ow_marshal1_DataStructure_array_const_size(buffer, object->"+propname+", "+size.asInt()+"));");
+ } else {
+out.println(" SUCCESS_CHECK(ow_marshal1_DataStructure_array(buffer, object->"+propname+"));");
+ }
+ } else if( isThrowable(property.getType()) ) {
+out.println(" SUCCESS_CHECK(ow_marshal1_throwable(buffer, object->"+propname+"));");
+ } else {
+ if( cached ) {
+out.println(" SUCCESS_CHECK(ow_marshal1_cached_object(buffer, (ow_DataStructure*)object->"+propname+"));");
+ } else {
+out.println(" SUCCESS_CHECK(ow_marshal1_nested_object(buffer, (ow_DataStructure*)object->"+propname+"));");
+ }
+ }
+ }
+out.println("");
+ }
+
+
+out.println(" ");
+out.println(" return APR_SUCCESS;");
+out.println("}");
+out.println("apr_status_t ow_marshal2_"+name+"(ow_byte_buffer *buffer, ow_bit_buffer *bitbuffer, ow_"+name+" *object)");
+out.println("{");
+out.println(" ow_marshal2_"+baseName+"(buffer, bitbuffer, (ow_"+baseName+"*)object); ");
+
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ JAnnotation annotation = property.getGetter().getAnnotation("openwire:property");
+ JAnnotationValue size = annotation.getValue("size");
+ Object propname = toPropertyCase(property.getSimpleName());
+ boolean cached = isCachedProperty(property);
+
+ type = property.getType().getQualifiedName();
+ if( type.equals("boolean") ) {
+out.println(" ow_bit_buffer_read(bitbuffer);");
+ } else if( type.equals("byte") ) {
+out.println(" SUCCESS_CHECK(ow_byte_buffer_append_"+type+"(buffer, object->"+propname+"));");
+ } else if( type.equals("char") ) {
+out.println(" SUCCESS_CHECK(ow_byte_buffer_append_"+type+"(buffer, object->"+propname+"));");
+ } else if( type.equals("short") ) {
+out.println(" SUCCESS_CHECK(ow_byte_buffer_append_"+type+"(buffer, object->"+propname+"));");
+ } else if( type.equals("int") ) {
+out.println(" SUCCESS_CHECK(ow_byte_buffer_append_"+type+"(buffer, object->"+propname+"));");
+ } else if( type.equals("long") ) {
+out.println(" SUCCESS_CHECK(ow_marshal2_long(buffer, bitbuffer, object->"+propname+"));");
+ } else if( type.equals("byte[]") ) {
+ if( size!=null ) {
+out.println(" SUCCESS_CHECK(ow_marshal2_byte_array_const_size(buffer, object->"+propname+", "+size.asInt()+"));");
+ } else {
+out.println(" SUCCESS_CHECK(ow_marshal2_byte_array(buffer, bitbuffer, object->"+propname+"));");
+ }
+ } else if( type.equals("org.apache.activeio.packet.ByteSequence") ) {
+ if( size!=null ) {
+out.println(" SUCCESS_CHECK(ow_marshal2_byte_array_const_size(buffer, object->"+propname+", "+size.asInt()+"));");
+ } else {
+out.println(" SUCCESS_CHECK(ow_marshal2_byte_array(buffer, bitbuffer, object->"+propname+"));");
+ }
+ } else if( type.equals("java.lang.String") ) {
+out.println(" SUCCESS_CHECK(ow_marshal2_string(buffer, bitbuffer, object->"+propname+"));");
+ } else {
+ if( property.getType().isArrayType() ) {
+ if( size!=null ) {
+out.println(" SUCCESS_CHECK(ow_marshal2_DataStructure_array_const_size(buffer, bitbuffer, object->"+propname+", "+size.asInt()+"));");
+ } else {
+out.println(" SUCCESS_CHECK(ow_marshal2_DataStructure_array(buffer, bitbuffer, object->"+propname+"));");
+ }
+ } else if( isThrowable(property.getType()) ) {
+out.println(" SUCCESS_CHECK(ow_marshal2_throwable(buffer, bitbuffer, object->"+propname+"));");
+ } else {
+ if( cached ) {
+out.println(" SUCCESS_CHECK(ow_marshal2_cached_object(buffer, bitbuffer, (ow_DataStructure*)object->"+propname+"));");
+ } else {
+out.println(" SUCCESS_CHECK(ow_marshal2_nested_object(buffer, bitbuffer, (ow_DataStructure*)object->"+propname+"));");
+ }
+ }
+ }
+out.println("");
+ }
+
+out.println(" ");
+out.println(" return APR_SUCCESS;");
+out.println("}");
+out.println("");
+out.println("apr_status_t ow_unmarshal_"+name+"(ow_byte_array *buffer, ow_bit_buffer *bitbuffer, ow_"+name+" *object, apr_pool_t *pool)");
+out.println("{");
+out.println(" ow_unmarshal_"+baseName+"(buffer, bitbuffer, (ow_"+baseName+"*)object, pool); ");
+
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ JAnnotation annotation = property.getGetter().getAnnotation("openwire:property");
+ JAnnotationValue size = annotation.getValue("size");
+ String propname = toPropertyCase(property.getSimpleName());
+ boolean cached = isCachedProperty(property);
+
+ type = property.getType().getQualifiedName();
+
+ if( type.equals("boolean") ) {
+out.println(" object->"+propname+" = ow_bit_buffer_read(bitbuffer);");
+ } else if( type.equals("byte") ) {
+out.println(" SUCCESS_CHECK(ow_byte_array_read_"+type+"(buffer, &object->"+propname+"));");
+ } else if( type.equals("char") ) {
+out.println(" SUCCESS_CHECK(ow_byte_array_read_"+type+"(buffer, &object->"+propname+"));");
+ } else if( type.equals("short") ) {
+out.println(" SUCCESS_CHECK(ow_byte_array_read_"+type+"(buffer, &object->"+propname+"));");
+ } else if( type.equals("int") ) {
+out.println(" SUCCESS_CHECK(ow_byte_array_read_"+type+"(buffer, &object->"+propname+"));");
+ } else if( type.equals("long") ) {
+out.println(" SUCCESS_CHECK(ow_unmarshal_long(buffer, bitbuffer, &object->"+propname+", pool));");
+ } else if( type.equals("byte[]") ) {
+ if( size!=null ) {
+out.println(" SUCCESS_CHECK(ow_unmarshal_byte_array_const_size(buffer, &object->"+propname+", "+size.asInt()+", pool));");
+ } else {
+out.println(" SUCCESS_CHECK(ow_unmarshal_byte_array(buffer, bitbuffer, &object->"+propname+", pool));");
+ }
+ } else if( type.equals("org.apache.activeio.packet.ByteSequence") ) {
+ if( size!=null ) {
+out.println(" SUCCESS_CHECK(ow_unmarshal_byte_array_const_size(buffer, &object->"+propname+", "+size.asInt()+", pool));");
+ } else {
+out.println(" SUCCESS_CHECK(ow_unmarshal_byte_array(buffer, bitbuffer, &object->"+propname+", pool));");
+ }
+ } else if( type.equals("java.lang.String") ) {
+out.println(" SUCCESS_CHECK(ow_unmarshal_string(buffer, bitbuffer, &object->"+propname+", pool));");
+ } else {
+ if( property.getType().isArrayType() ) {
+ if( size!=null ) {
+out.println(" SUCCESS_CHECK(ow_unmarshal_DataStructure_array_const_size(buffer, bitbuffer, &object->"+propname+", "+size.asInt()+", pool));");
+ } else {
+out.println(" SUCCESS_CHECK(ow_unmarshal_DataStructure_array(buffer, bitbuffer, &object->"+propname+", pool));");
+ }
+ } else if( isThrowable(property.getType()) ) {
+out.println(" SUCCESS_CHECK(ow_unmarshal_throwable(buffer, bitbuffer, &object->"+propname+", pool));");
+ } else {
+ if( cached ) {
+out.println(" SUCCESS_CHECK(ow_unmarshal_cached_object(buffer, bitbuffer, (ow_DataStructure**)&object->"+propname+", pool));");
+ } else {
+out.println(" SUCCESS_CHECK(ow_unmarshal_nested_object(buffer, bitbuffer, (ow_DataStructure**)&object->"+propname+", pool));");
+ }
+ }
+ }
+out.println("");
+ }
+
+out.println(" ");
+out.println(" return APR_SUCCESS;");
+out.println("}");
+ }
+
+ protected void generateTearDown(PrintWriter out) {
+out.println("");
+out.println("ow_DataStructure *ow_create_object(ow_byte type, apr_pool_t *pool)");
+out.println("{");
+out.println(" switch( type ) {");
+ for (Iterator iterator = sortedClasses.iterator(); iterator.hasNext();) {
+ JClass jclass = (JClass) iterator.next();
+ String name = jclass.getSimpleName();
+ String type = ("ow_"+name).toUpperCase()+"_TYPE";
+ if( !isAbstract(jclass) ) {
+out.println(" case "+type+": return (ow_DataStructure *)ow_"+name+"_create(pool);");
+ }
+ }
+
+out.println("");
+out.println(" }");
+out.println(" return 0;");
+out.println("}");
+out.println("");
+out.println("apr_status_t ow_marshal1_object(ow_bit_buffer *buffer, ow_DataStructure *object)");
+out.println("{");
+out.println(" switch( object->structType ) {");
+
+ for (Iterator iterator = sortedClasses.iterator(); iterator.hasNext();) {
+ JClass jclass = (JClass) iterator.next();
+ String name = jclass.getSimpleName();
+ String type = ("ow_"+name).toUpperCase()+"_TYPE";
+ if( !isAbstract(jclass) ) {
+out.println(" case "+type+": return ow_marshal1_"+name+"(buffer, (ow_"+name+"*)object);");
+ }
+ }
+
+out.println("");
+out.println(" }");
+out.println(" return APR_EGENERAL;");
+out.println("}");
+out.println("");
+out.println("apr_status_t ow_marshal2_object(ow_byte_buffer *buffer, ow_bit_buffer *bitbuffer, ow_DataStructure *object)");
+out.println("{");
+out.println(" switch( object->structType ) {");
+
+ for (Iterator iterator = sortedClasses.iterator(); iterator.hasNext();) {
+ JClass jclass = (JClass) iterator.next();
+ String name = jclass.getSimpleName();
+ String type = ("ow_"+name).toUpperCase()+"_TYPE";
+ if( !isAbstract(jclass) ) {
+out.println(" case "+type+": return ow_marshal2_"+name+"(buffer, bitbuffer, (ow_"+name+"*)object);");
+ }
+ }
+
+out.println("");
+out.println(" }");
+out.println(" return APR_EGENERAL;");
+out.println("}");
+out.println("");
+out.println("apr_status_t ow_unmarshal_object(ow_byte_array *buffer, ow_bit_buffer *bitbuffer, ow_DataStructure *object, apr_pool_t *pool)");
+out.println("{");
+out.println(" switch( object->structType ) {");
+
+ for (Iterator iterator = sortedClasses.iterator(); iterator.hasNext();) {
+ JClass jclass = (JClass) iterator.next();
+ String name = jclass.getSimpleName();
+ String type = ("ow_"+name).toUpperCase()+"_TYPE";
+ if( !isAbstract(jclass) ) {
+out.println(" case "+type+": return ow_unmarshal_"+name+"(buffer, bitbuffer, (ow_"+name+"*)object, pool);");
+ }
+ }
+
+out.println("");
+out.println(" }");
+out.println(" return APR_EGENERAL;");
+out.println("}");
+
+ }
+}
Copied: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppClassesGenerator.java (from r450087, incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireCppClassesScript.java)
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppClassesGenerator.java?view=diff&rev=450289&p1=incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireCppClassesScript.java&r1=450087&p2=incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppClassesGenerator.java&r2=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireCppClassesScript.java (original)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppClassesGenerator.java Tue Sep 26 19:42:47 2006
@@ -17,20 +17,26 @@
*/
package org.apache.activemq.openwire.tool;
-import org.codehaus.jam.JClass;
-
import java.io.File;
+import java.io.PrintWriter;
+import java.util.Iterator;
+import java.util.List;
+
+import org.codehaus.jam.JClass;
+import org.codehaus.jam.JProperty;
/**
*
* @version $Revision: 409828 $
*/
-public abstract class OpenWireCppClassesScript extends OpenWireClassesScript {
+public class CppClassesGenerator extends MultiSourceGenerator {
+
+ protected String targetDir="./src/main/cpp";
public Object run() {
filePostFix = getFilePostFix();
if (destDir == null) {
- destDir = new File("../openwire-cpp/src/main/cpp/activemq/command");
+ destDir = new File(targetDir+"/activemq/command");
}
return super.run();
}
@@ -207,4 +213,117 @@
else
return "" ;
}
+
+
+ protected void generateLicence(PrintWriter out) {
+out.println("/*");
+out.println(" *");
+out.println(" * Licensed to the Apache Software Foundation (ASF) under one or more");
+out.println(" * contributor license agreements. See the NOTICE file distributed with");
+out.println(" * this work for additional information regarding copyright ownership.");
+out.println(" * The ASF licenses this file to You under the Apache License, Version 2.0");
+out.println(" * (the \"License\"); you may not use this file except in compliance with");
+out.println(" * the License. You may obtain a copy of the License at");
+out.println(" *");
+out.println(" * http://www.apache.org/licenses/LICENSE-2.0");
+out.println(" *");
+out.println(" * Unless required by applicable law or agreed to in writing, software");
+out.println(" * distributed under the License is distributed on an \"AS IS\" BASIS,");
+out.println(" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.");
+out.println(" * See the License for the specific language governing permissions and");
+out.println(" * limitations under the License.");
+out.println(" */");
+ }
+
+ protected void generateFile(PrintWriter out) throws Exception {
+ generateLicence(out);
+out.println("#include \"activemq/command/"+className+".hpp\"");
+out.println("");
+out.println("using namespace apache::activemq::command;");
+out.println("");
+out.println("/*");
+out.println(" *");
+out.println(" * Command and marshalling code for OpenWire format for "+className+"");
+out.println(" *");
+out.println(" *");
+out.println(" * NOTE!: This file is autogenerated - do not modify!");
+out.println(" * if you need to make a change, please see the Groovy scripts in the");
+out.println(" * activemq-core module");
+out.println(" *");
+out.println(" */");
+out.println(""+className+"::"+className+"()");
+out.println("{");
+
+ List properties = getProperties();
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ String value = toCppDefaultValue(property.getType());
+ String propertyName = property.getSimpleName();
+ String parameterName = decapitalize(propertyName);
+out.println(" this->"+parameterName+" = "+value+" ;");
+ }
+out.println("}");
+out.println("");
+out.println(""+className+"::~"+className+"()");
+out.println("{");
+out.println("}");
+out.println("");
+out.println("unsigned char "+className+"::getDataStructureType()");
+out.println("{");
+out.println(" return "+className+"::TYPE ; ");
+out.println("}");
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ String type = toCppType(property.getType());
+ String propertyName = property.getSimpleName();
+ String parameterName = decapitalize(propertyName);
+out.println("");
+out.println(" ");
+out.println(""+type+" "+className+"::get"+propertyName+"()");
+out.println("{");
+out.println(" return "+parameterName+" ;");
+out.println("}");
+out.println("");
+out.println("void "+className+"::set"+propertyName+"("+type+" "+parameterName+")");
+out.println("{");
+out.println(" this->"+parameterName+" = "+parameterName+" ;");
+out.println("}");
+ }
+out.println("");
+out.println("int "+className+"::marshal(p<IMarshaller> marshaller, int mode, p<IOutputStream> ostream) throw (IOException)");
+out.println("{");
+out.println(" int size = 0 ;");
+out.println("");
+out.println(" size += "+baseClass+"::marshal(marshaller, mode, ostream) ; ");
+
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ String marshalMethod = toMarshalMethodName(property.getType());
+ String propertyName = decapitalize(property.getSimpleName());
+out.println(" size += marshaller->"+marshalMethod+"("+propertyName+", mode, ostream) ; ");
+ }
+out.println(" return size ;");
+out.println("}");
+out.println("");
+out.println("void "+className+"::unmarshal(p<IMarshaller> marshaller, int mode, p<IInputStream> istream) throw (IOException)");
+out.println("{");
+out.println(" "+baseClass+"::unmarshal(marshaller, mode, istream) ; ");
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ String cast = toUnmarshalCast(property.getType());
+ String unmarshalMethod = toUnmarshalMethodName(property.getType());
+ String propertyName = decapitalize(property.getSimpleName());
+out.println(" "+propertyName+" = "+cast+"(marshaller->"+unmarshalMethod+"(mode, istream)) ; ");
+ }
+out.println("}");
+ }
+
+ public String getTargetDir() {
+ return targetDir;
+ }
+
+ public void setTargetDir(String targetDir) {
+ this.targetDir = targetDir;
+ }
+
}
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppGeneratorTask.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppGeneratorTask.java?view=auto&rev=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppGeneratorTask.java (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppGeneratorTask.java Tue Sep 26 19:42:47 2006
@@ -0,0 +1,133 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.Task;
+import org.codehaus.jam.JamService;
+import org.codehaus.jam.JamServiceFactory;
+import org.codehaus.jam.JamServiceParams;
+
+/**
+ *
+ * @version $Revision: 384826 $
+ */
+public class CppGeneratorTask extends Task {
+
+ int version = 2;
+ File source = new File(".");
+ File target = new File(".");
+
+ public static void main(String[] args) {
+
+ Project project = new Project();
+ project.init();
+ CppGeneratorTask generator = new CppGeneratorTask();
+ generator.setProject(project);
+
+ if( args.length > 0 ) {
+ generator.version = Integer.parseInt(args[0]);
+ }
+
+ if( args.length > 1 ) {
+ generator.source = new File(args[1]);
+ }
+
+ if( args.length > 2 ) {
+ generator.target = new File(args[2]);
+ }
+
+ generator.execute();
+ }
+
+ public void execute() throws BuildException {
+ try {
+
+ String sourceDir = source+"/src/main/java";
+
+ System.out.println("Parsing source files in: " + sourceDir);
+
+ JamServiceFactory jamServiceFactory = JamServiceFactory.getInstance();
+ JamServiceParams params = jamServiceFactory.createServiceParams();
+ File[] dirs = new File[]{new File(sourceDir)};
+ params.includeSourcePattern(dirs, "**/*.java");
+ JamService jam = jamServiceFactory.createService(params);
+
+ {
+ CppClassesGenerator script = new CppClassesGenerator();
+ script.setJam(jam);
+ script.setTargetDir(target+"/src/main/cpp");
+ script.setOpenwireVersion(version);
+ script.run();
+ }
+ {
+ CppHeadersGenerator script = new CppHeadersGenerator();
+ script.setJam(jam);
+ script.setTargetDir(target+"/src/main/cpp");
+ script.setOpenwireVersion(version);
+ script.run();
+ }
+ {
+ CppMarshallingHeadersGenerator script = new CppMarshallingHeadersGenerator();
+ script.setJam(jam);
+ script.setTargetDir(target+"/src");
+ script.setOpenwireVersion(version);
+ script.run();
+ }
+ {
+ CppMarshallingClassesGenerator script = new CppMarshallingClassesGenerator();
+ script.setJam(jam);
+ script.setTargetDir(target+"/src");
+ script.setOpenwireVersion(version);
+ script.run();
+ }
+
+
+ } catch (Exception e) {
+ throw new BuildException(e);
+ }
+ }
+
+ public int getVersion() {
+ return version;
+ }
+
+ public void setVersion(int version) {
+ this.version = version;
+ }
+
+ public File getSource() {
+ return source;
+ }
+
+ public void setSource(File basedir) {
+ this.source = basedir;
+ }
+
+ public File getTarget() {
+ return target;
+ }
+
+ public void setTarget(File target) {
+ this.target = target;
+ }
+
+}