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 [3/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...
Copied: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppHeadersGenerator.java (from r450087, incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireCppHeadersScript.java)
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppHeadersGenerator.java?view=diff&rev=450289&p1=incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireCppHeadersScript.java&r1=450087&p2=incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppHeadersGenerator.java&r2=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireCppHeadersScript.java (original)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppHeadersGenerator.java Tue Sep 26 19:42:47 2006
@@ -17,15 +17,134 @@
*/
package org.apache.activemq.openwire.tool;
+import java.io.PrintWriter;
+import java.util.Iterator;
+import java.util.List;
+
+import org.codehaus.jam.JClass;
+import org.codehaus.jam.JProperty;
+
/**
*
* @version $Revision: 379734 $
*/
-public abstract class OpenWireCppHeadersScript extends OpenWireCppClassesScript {
+public class CppHeadersGenerator extends CppClassesGenerator {
protected String getFilePostFix() {
return ".hpp";
}
+
+ protected void generateFile(PrintWriter out) {
+ generateLicence(out);
+
+out.println("#ifndef ActiveMQ_"+className+"_hpp_");
+out.println("#define ActiveMQ_"+className+"_hpp_");
+out.println("");
+out.println("// Turn off warning message for ignored exception specification");
+out.println("#ifdef _MSC_VER");
+out.println("#pragma warning( disable : 4290 )");
+out.println("#endif");
+out.println("");
+out.println("#include <string>");
+out.println("#include \"activemq/command/"+baseClass+".hpp\"");
+
+ List properties = getProperties();
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ if( !property.getType().isPrimitiveType() &&
+ !property.getType().getSimpleName().equals("String") &&
+ !property.getType().getSimpleName().equals("ByteSequence") )
+ {
+ String includeName = toCppType(property.getType());
+ if( property.getType().isArrayType() )
+ {
+ JClass arrayType = property.getType().getArrayComponentType();
+ 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.println("#include \"activemq/"+includeName+".hpp\"");
+ } else {
+out.println("#include \"activemq/command/"+includeName+".hpp\"");
+ }
+ }
+ }
+out.println("");
+out.println("#include \"activemq/protocol/IMarshaller.hpp\"");
+out.println("#include \"ppr/io/IOutputStream.hpp\"");
+out.println("#include \"ppr/io/IInputStream.hpp\"");
+out.println("#include \"ppr/io/IOException.hpp\"");
+out.println("#include \"ppr/util/ifr/array\"");
+out.println("#include \"ppr/util/ifr/p\"");
+out.println("");
+out.println("namespace apache");
+out.println("{");
+out.println(" namespace activemq");
+out.println(" {");
+out.println(" namespace command");
+out.println(" {");
+out.println(" using namespace ifr;");
+out.println(" using namespace std;");
+out.println(" using namespace apache::activemq;");
+out.println(" using namespace apache::activemq::protocol;");
+out.println(" using namespace apache::ppr::io;");
+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("class "+className+" : public "+baseClass+"");
+out.println("{");
+out.println("protected:");
+
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+ String type = toCppType(property.getType());
+ String name = decapitalize(property.getSimpleName());
+out.println(" "+type+" "+name+" ;");
+ }
+out.println("");
+out.println("public:");
+out.println(" const static unsigned char TYPE = "+getOpenWireOpCode(jclass)+";");
+out.println("");
+out.println("public:");
+out.println(" "+className+"() ;");
+out.println(" virtual ~"+className+"() ;");
+out.println("");
+out.println(" virtual unsigned char getDataStructureType() ;");
+
+ 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(" virtual "+type+" get"+propertyName+"() ;");
+out.println(" virtual void set"+propertyName+"("+type+" "+parameterName+") ;");
+ }
+out.println("");
+out.println(" virtual int marshal(p<IMarshaller> marshaller, int mode, p<IOutputStream> ostream) throw (IOException) ;");
+out.println(" virtual void unmarshal(p<IMarshaller> marshaller, int mode, p<IInputStream> istream) throw (IOException) ;");
+out.println("} ;");
+out.println("");
+out.println("/* namespace */");
+out.println(" }");
+out.println(" }");
+out.println("}");
+out.println("");
+out.println("#endif /*ActiveMQ_"+className+"_hpp_*/");
+}
}
Copied: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppMarshallingClassesGenerator.java (from r450087, incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireCppMarshallingClassesScript.java)
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppMarshallingClassesGenerator.java?view=diff&rev=450289&p1=incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireCppMarshallingClassesScript.java&r1=450087&p2=incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppMarshallingClassesGenerator.java&r2=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireCppMarshallingClassesScript.java (original)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppMarshallingClassesGenerator.java Tue Sep 26 19:42:47 2006
@@ -23,6 +23,9 @@
import org.codehaus.jam.JProperty;
import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
@@ -30,7 +33,7 @@
*
* @version $Revision: 381410 $
*/
-public abstract class OpenWireCppMarshallingClassesScript extends OpenWireCppMarshallingHeadersScript {
+public class CppMarshallingClassesGenerator extends CppMarshallingHeadersGenerator {
protected String getFilePostFix() {
return ".cpp";
@@ -238,5 +241,166 @@
}
}
}
+ }
+
+
+ protected void generateFile(PrintWriter out) throws Exception {
+ generateLicence(out);
+
+out.println("#include \"marshal/"+className+".hpp\"");
+out.println("");
+out.println("using namespace apache::activemq::client::marshal;");
+out.println("");
+out.println("/*");
+out.println(" * Marshalling code for Open Wire Format for "+jclass.getSimpleName()+"");
+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("{");
+out.println(" // no-op");
+out.println("}");
+out.println("");
+out.println(""+className+"::~"+className+"()");
+out.println("{");
+out.println(" // no-op");
+out.println("}");
+out.println("");
+
+ if( !isAbstractClass() ) {
+out.println("");
+out.println("");
+out.println("IDataStructure* "+className+"::createObject() ");
+out.println("{");
+out.println(" return new "+jclass.getSimpleName()+"();");
+out.println("}");
+out.println("");
+out.println("char "+className+"::getDataStructureType() ");
+out.println("{");
+out.println(" return "+jclass.getSimpleName()+".ID_"+jclass.getSimpleName()+";");
+out.println("}");
+ }
+
+out.println("");
+out.println(" /* ");
+out.println(" * Un-marshal an object instance from the data input stream");
+out.println(" */ ");
+out.println("void "+className+"::unmarshal(ProtocolFormat& wireFormat, Object o, BinaryReader& dataIn, BooleanStream& bs) ");
+out.println("{");
+out.println(" base.unmarshal(wireFormat, o, dataIn, bs);");
+
+ List properties = getProperties();
+ boolean marshallerAware = isMarshallerAware();
+ if( !properties.isEmpty() || marshallerAware ) {
+out.println("");
+out.println(" "+jclass.getSimpleName()+"& info = ("+jclass.getSimpleName()+"&) o;");
+ }
+
+ if( marshallerAware ) {
+out.println("");
+out.println(" info.beforeUnmarshall(wireFormat);");
+out.println(" ");
+ }
+
+ generateTightUnmarshalBody(out);
+
+ if( marshallerAware ) {
+out.println("");
+out.println(" info.afterUnmarshall(wireFormat);");
+ }
+
+out.println("");
+out.println("}");
+out.println("");
+out.println("");
+out.println("/*");
+out.println(" * Write the booleans that this object uses to a BooleanStream");
+out.println(" */");
+out.println("int "+className+"::marshal1(ProtocolFormat& wireFormat, Object& o, BooleanStream& bs) {");
+out.println(" "+jclass.getSimpleName()+"& info = ("+jclass.getSimpleName()+"&) o;");
+
+
+ if( marshallerAware ) {
+out.println("");
+out.println(" info.beforeMarshall(wireFormat);");
+ }
+
+out.println("");
+out.println(" int rc = base.marshal1(wireFormat, info, bs);");
+
+ int baseSize = generateMarshal1Body(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("void "+className+"::marshal2(ProtocolFormat& wireFormat, Object& o, BinaryWriter& dataOut, BooleanStream& bs) {");
+out.println(" base.marshal2(wireFormat, o, dataOut, bs);");
+
+ if( !properties.isEmpty() || marshallerAware ) {
+out.println("");
+out.println(" "+jclass.getSimpleName()+"& info = ("+jclass.getSimpleName()+"&) o;");
+ }
+
+ generateMarshal2Body(out);
+
+ if( marshallerAware ) {
+out.println("");
+out.println(" info.afterMarshall(wireFormat);");
+ }
+
+out.println("");
+out.println("}");
+ }
+
+ public void generateFactory(PrintWriter out) {
+ generateLicence(out);
+out.println("");
+out.println("// Marshalling code for Open Wire Format");
+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-openwire module");
+out.println("//");
+out.println("");
+out.println("#include \"marshal/"+className+".hpp\"");
+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("#include \"marshal/"+jclass.getSimpleName()+"Marshaller.hpp\"");
+ }
+
+out.println("");
+out.println("");
+out.println("using namespace apache::activemq::client::marshal;");
+out.println("");
+out.println("");
+out.println("void MarshallerFactory::configure(ProtocolFormat& format) ");
+out.println("{");
+
+ for (Iterator iter = list.iterator(); iter.hasNext();) {
+ JClass jclass = (JClass) iter.next();
+out.println(" format.addMarshaller(new "+jclass.getSimpleName()+"Marshaller());");
+ }
+
+out.println("");
+out.println("}");
+
}
}
Copied: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppMarshallingHeadersGenerator.java (from r450087, incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireCppMarshallingHeadersScript.java)
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppMarshallingHeadersGenerator.java?view=diff&rev=450289&p1=incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireCppMarshallingHeadersScript.java&r1=450087&p2=incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppMarshallingHeadersGenerator.java&r2=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireCppMarshallingHeadersScript.java (original)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/CppMarshallingHeadersGenerator.java Tue Sep 26 19:42:47 2006
@@ -18,22 +18,168 @@
package org.apache.activemq.openwire.tool;
import java.io.File;
+import java.io.PrintWriter;
/**
*
* @version $Revision: 381410 $
*/
-public abstract class OpenWireCppMarshallingHeadersScript extends OpenWireJavaMarshallingScript {
+public class CppMarshallingHeadersGenerator extends JavaMarshallingGenerator {
+
+ protected String targetDir="./src";
public Object run() {
filePostFix = getFilePostFix();
if (destDir == null) {
- destDir = new File("../openwire-cpp/src/marshal");
+ destDir = new File(targetDir+"/marshal");
}
return super.run();
- }
+ }
protected String getFilePostFix() {
return ".hpp";
}
+
+
+ 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("#ifndef "+className+"_hpp_");
+out.println("#define "+className+"_hpp_");
+out.println("");
+out.println("#include <string>");
+out.println("");
+out.println("#include \"command/IDataStructure.hpp\"");
+out.println("");
+out.println("/* we could cut this down - for now include all possible headers */");
+out.println("#include \"command/BrokerId.hpp\"");
+out.println("#include \"command/ConnectionId.hpp\"");
+out.println("#include \"command/ConsumerId.hpp\"");
+out.println("#include \"command/ProducerId.hpp\"");
+out.println("#include \"command/SessionId.hpp\"");
+out.println("");
+out.println("#include \"io/BinaryReader.hpp\"");
+out.println("#include \"io/BinaryWriter.hpp\"");
+out.println("");
+out.println("#include \"command/"+baseClass+".hpp\"");
+out.println("#include \"util/ifr/p.hpp\"");
+out.println("");
+out.println("#include \"protocol/ProtocolFormat.hpp\"");
+out.println("");
+out.println("namespace apache");
+out.println("{");
+out.println(" namespace activemq");
+out.println(" {");
+out.println(" namespace client");
+out.println(" {");
+out.println(" namespace marshal");
+out.println(" {");
+out.println(" using namespace ifr ;");
+out.println(" using namespace apache::activemq::client::command;");
+out.println(" using namespace apache::activemq::client::io;");
+out.println(" using namespace apache::activemq::client::protocol;");
+out.println("");
+out.println("/*");
+out.println(" *");
+out.println(" */");
+out.println("class "+className+" : public "+baseClass+"");
+out.println("{");
+out.println("public:");
+out.println(" "+className+"() ;");
+out.println(" virtual ~"+className+"() ;");
+out.println("");
+out.println(" virtual IDataStructure* createCommand() ;");
+out.println(" virtual char getDataStructureType() ;");
+out.println(" ");
+out.println(" virtual void unmarshal(ProtocolFormat& wireFormat, Object o, BinaryReader& dataIn, BooleanStream& bs) ;");
+out.println(" virtual int marshal1(ProtocolFormat& wireFormat, Object& o, BooleanStream& bs) ;");
+out.println(" virtual void marshal2(ProtocolFormat& wireFormat, Object& o, BinaryWriter& dataOut, BooleanStream& bs) ;");
+out.println("} ;");
+out.println("");
+out.println("/* namespace */");
+out.println(" }");
+out.println(" }");
+out.println(" }");
+out.println("}");
+out.println("#endif /*"+className+"_hpp_*/");
+ }
+
+ public void generateFactory(PrintWriter out) {
+ generateLicence(out);
+out.println("");
+out.println("// Marshalling code for Open Wire Format ");
+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-openwire module");
+out.println("//");
+out.println("");
+out.println("#ifndef MarshallerFactory_hpp_");
+out.println("#define MarshallerFactory_hpp_");
+out.println("");
+out.println("");
+out.println("namespace apache");
+out.println("{");
+out.println(" namespace activemq");
+out.println(" {");
+out.println(" namespace client");
+out.println(" {");
+out.println(" namespace marshal");
+out.println(" {");
+out.println(" using namespace ifr ;");
+out.println(" using namespace std ;");
+out.println(" using namespace apache::activemq::client;");
+out.println(" using namespace apache::activemq::client::command;");
+out.println(" using namespace apache::activemq::client::io;");
+out.println("");
+out.println("/*");
+out.println(" * ");
+out.println(" */");
+out.println("class MarshallerFactory");
+out.println("{");
+out.println("public:");
+out.println(" MarshallerFactory() ;");
+out.println(" virtual ~MarshallerFactory() ;");
+out.println("");
+out.println(" virtual void configure(ProtocolFormat& format) ;");
+out.println("} ;");
+out.println("");
+out.println("/* namespace */");
+out.println(" }");
+out.println(" }");
+out.println(" }");
+out.println("}");
+out.println("");
+out.println("#endif /*MarshallerFactory_hpp_*/");
+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/JavaGeneratorTask.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/JavaGeneratorTask.java?view=auto&rev=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/JavaGeneratorTask.java (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/JavaGeneratorTask.java Tue Sep 26 19:42:47 2006
@@ -0,0 +1,105 @@
+/**
+ *
+ * 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 JavaGeneratorTask extends Task {
+
+ int version = 2;
+ File basedir = new File(".");
+
+ public static void main(String[] args) {
+
+ Project project = new Project();
+ project.init();
+ JavaGeneratorTask generator = new JavaGeneratorTask();
+ generator.setProject(project);
+
+ if( args.length > 0 ) {
+ generator.version = Integer.parseInt(args[0]);
+ }
+
+ if( args.length > 1 ) {
+ generator.basedir = new File(args[1]);
+ }
+
+ generator.execute();
+ }
+
+ public void execute() throws BuildException {
+ try {
+
+ String sourceDir = basedir+"/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);
+
+ {
+ JavaMarshallingGenerator script = new JavaMarshallingGenerator();
+ script.setJam(jam);
+ script.setTargetDir(basedir+"/src/main/java");
+ script.setOpenwireVersion(version);
+ script.run();
+ }
+ {
+ JavaTestsGenerator script = new JavaTestsGenerator();
+ script.setJam(jam);
+ script.setTargetDir(basedir+"/src/test/java");
+ 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 getBasedir() {
+ return basedir;
+ }
+
+ public void setBasedir(File basedir) {
+ this.basedir = basedir;
+ }
+
+}
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/JavaMarshallingGenerator.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/JavaMarshallingGenerator.java?view=auto&rev=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/JavaMarshallingGenerator.java (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/JavaMarshallingGenerator.java Tue Sep 26 19:42:47 2006
@@ -0,0 +1,733 @@
+/**
+ *
+ * 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.FileWriter;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+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.JPackage;
+import org.codehaus.jam.JProperty;
+
+/**
+ *
+ * @version $Revision: 384826 $
+ */
+public class JavaMarshallingGenerator extends MultiSourceGenerator {
+
+ protected List concreteClasses = new ArrayList();
+ protected File factoryFile;
+ protected String factoryFileName = "MarshallerFactory";
+ protected String indent = " ";
+ protected String targetDir="src/main/java";
+
+ public Object run() {
+ if (destDir == null) {
+ destDir = new File(targetDir+"/org/apache/activemq/openwire/v" + getOpenwireVersion());
+ }
+ Object answer = super.run();
+ processFactory();
+ return answer;
+ }
+
+ protected void generateFile(PrintWriter out) throws Exception {
+
+ generateLicence(out);
+out.println("");
+out.println("package org.apache.activemq.openwire.v" + getOpenwireVersion() + ";");
+out.println("");
+out.println("import java.io.DataInputStream;");
+out.println("import java.io.DataOutputStream;");
+out.println("import java.io.IOException;");
+out.println("");
+out.println("import org.apache.activemq.openwire.*;");
+out.println("import org.apache.activemq.command.*;");
+out.println("");
+out.println("");
+ for (int i = 0; i < getJclass().getImportedPackages().length; i++) {
+ JPackage pkg = getJclass().getImportedPackages()[i];
+ for (int j = 0; j < pkg.getClasses().length; j++) {
+ JClass clazz = pkg.getClasses()[j];
+out.println("import " + clazz.getQualifiedName() + ";");
+ }
+ }
+
+out.println("");
+out.println("/**");
+out.println(" * Marshalling code for Open Wire Format for "+getClassName()+"");
+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(" * @version $Revision$");
+out.println(" */");
+out.println("public " + getAbstractClassText() + "class " + getClassName() + " extends " + getBaseClass() + " {");
+out.println("");
+
+ if (!isAbstractClass()) {
+
+out.println(" /**");
+out.println(" * Return the type of Data Structure we marshal");
+out.println(" * @return short representation of the type data structure");
+out.println(" */");
+out.println(" public byte getDataStructureType() {");
+out.println(" return "+getJclass().getSimpleName()+".DATA_STRUCTURE_TYPE;");
+out.println(" }");
+out.println(" ");
+out.println(" /**");
+out.println(" * @return a new object instance");
+out.println(" */");
+out.println(" public DataStructure createObject() {");
+out.println(" return new "+getJclass().getSimpleName()+"();");
+out.println(" }");
+out.println("");
+ }
+
+out.println(" /**");
+out.println(" * Un-marshal an object instance from the data input stream");
+out.println(" *");
+out.println(" * @param o the object to un-marshal");
+out.println(" * @param dataIn the data input stream to build the object from");
+out.println(" * @throws IOException");
+out.println(" */");
+out.println(" public void tightUnmarshal(OpenWireFormat wireFormat, Object o, DataInputStream dataIn, BooleanStream bs) throws IOException {");
+out.println(" super.tightUnmarshal(wireFormat, o, dataIn, bs);");
+
+ if (!getProperties().isEmpty()) {
+out.println("");
+out.println(" " + getJclass().getSimpleName() + " info = (" + getJclass().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(" /**");
+out.println(" * Write the booleans that this object uses to a BooleanStream");
+out.println(" */");
+out.println(" public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) throws IOException {");
+
+ if (!getProperties().isEmpty()) {
+out.println("");
+out.println(" " + getJclass().getSimpleName() + " info = (" + getJclass().getSimpleName() + ")o;");
+ }
+
+ if (isMarshallerAware()) {
+out.println("");
+out.println(" info.beforeMarshall(wireFormat);");
+ }
+
+out.println("");
+out.println(" int rc = super.tightMarshal1(wireFormat, o, 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(" * @param o the instance to be marshaled");
+out.println(" * @param dataOut the output stream");
+out.println(" * @throws IOException thrown if an error occurs");
+out.println(" */");
+out.println(" public void tightMarshal2(OpenWireFormat wireFormat, Object o, DataOutputStream dataOut, BooleanStream bs) throws IOException {");
+out.println(" super.tightMarshal2(wireFormat, o, dataOut, bs);");
+ if (!getProperties().isEmpty()) {
+out.println("");
+out.println(" " + getJclass().getSimpleName() + " info = (" + getJclass().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(" * @param o the object to un-marshal");
+out.println(" * @param dataIn the data input stream to build the object from");
+out.println(" * @throws IOException");
+out.println(" */");
+out.println(" public void looseUnmarshal(OpenWireFormat wireFormat, Object o, DataInputStream dataIn) throws IOException {");
+out.println(" super.looseUnmarshal(wireFormat, o, dataIn);");
+
+ if (!getProperties().isEmpty()) {
+out.println("");
+out.println(" " + getJclass().getSimpleName() + " info = (" + getJclass().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(" /**");
+out.println(" * Write the booleans that this object uses to a BooleanStream");
+out.println(" */");
+out.println(" public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutputStream dataOut) throws IOException {");
+
+ if (!getProperties().isEmpty()) {
+out.println("");
+out.println(" " + getJclass().getSimpleName() + " info = (" + getJclass().getSimpleName() + ")o;");
+ }
+
+ if (isMarshallerAware()) {
+out.println("");
+out.println(" info.beforeMarshall(wireFormat);");
+ }
+
+out.println("");
+out.println(" super.looseMarshal(wireFormat, o, dataOut);");
+
+ generateLooseMarshalBody(out);
+
+out.println("");
+out.println(" }");
+out.println("}");
+ }
+
+ private 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 processFactory() {
+ if (factoryFile == null) {
+ factoryFile = new File(destDir, factoryFileName + filePostFix);
+ }
+ PrintWriter out = null;
+ try {
+ out = new PrintWriter(new FileWriter(factoryFile));
+ generateFactory(out);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ } finally {
+ if (out != null) {
+ out.close();
+ }
+ }
+ }
+
+ protected void generateFactory(PrintWriter out) {
+ generateLicence(out);
+out.println("");
+out.println("package org.apache.activemq.openwire.v"+getOpenwireVersion()+";");
+out.println("");
+out.println("import org.apache.activemq.openwire.DataStreamMarshaller;");
+out.println("import org.apache.activemq.openwire.OpenWireFormat;");
+out.println("");
+out.println("/**");
+out.println(" * MarshallerFactory for Open Wire Format.");
+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(" * @version $Revision$");
+out.println(" */");
+out.println("public class MarshallerFactory {");
+out.println("");
+out.println(" /**");
+out.println(" * Creates a Map of command type -> Marshallers");
+out.println(" */");
+out.println(" static final private DataStreamMarshaller marshaller[] = new DataStreamMarshaller[256];");
+out.println(" static {");
+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(" add(new " + jclass.getSimpleName() + "Marshaller());");
+ }
+
+out.println("");
+out.println(" }");
+out.println("");
+out.println(" static private void add(DataStreamMarshaller dsm) {");
+out.println(" marshaller[dsm.getDataStructureType()] = dsm;");
+out.println(" }");
+out.println(" ");
+out.println(" static public DataStreamMarshaller[] createMarshallerMap(OpenWireFormat wireFormat) {");
+out.println(" return marshaller;");
+out.println(" }");
+out.println("}");
+ }
+
+ protected void processClass(JClass jclass) {
+ super.processClass(jclass);
+
+ if (!jclass.isAbstract()) {
+ concreteClasses.add(jclass);
+ }
+ }
+
+ protected String getClassName(JClass jclass) {
+ return super.getClassName(jclass) + "Marshaller";
+ }
+
+ protected String getBaseClassName(JClass jclass) {
+ String answer = "BaseDataStreamMarshaller";
+ JClass superclass = jclass.getSuperclass();
+ if (superclass != null) {
+ String superName = superclass.getSimpleName();
+ if (!superName.equals("Object") && !superName.equals("JNDIBaseStorable") && !superName.equals("DataStructureSupport")) {
+ answer = superName + "Marshaller";
+ }
+ }
+ return answer;
+ }
+
+ protected void initialiseManuallyMaintainedClasses() {
+ }
+
+ protected void generateTightUnmarshalBody(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 propertyTypeName = propertyType.getSimpleName();
+
+ if (propertyType.isArrayType() && !propertyTypeName.equals("byte[]")) {
+ generateTightUnmarshalBodyForArrayProperty(out, property, size);
+ } else {
+ generateTightUnmarshalBodyForProperty(out, property, size);
+ }
+ }
+ }
+
+ protected void generateTightUnmarshalBodyForProperty(PrintWriter out, JProperty property, JAnnotationValue size) {
+ String setter = property.getSetter().getSimpleName();
+ String type = property.getType().getSimpleName();
+
+ if (type.equals("boolean")) {
+ out.println(" info." + setter + "(bs.readBoolean());");
+ } else if (type.equals("byte")) {
+ out.println(" info." + setter + "(dataIn.readByte());");
+ } else if (type.equals("char")) {
+ out.println(" info." + setter + "(dataIn.readChar());");
+ } else if (type.equals("short")) {
+ out.println(" info." + setter + "(dataIn.readShort());");
+ } else if (type.equals("int")) {
+ out.println(" info." + setter + "(dataIn.readInt());");
+ } else if (type.equals("long")) {
+ out.println(" info." + setter + "(tightUnmarshalLong(wireFormat, dataIn, bs));");
+ } else if (type.equals("String")) {
+ out.println(" info." + setter + "(tightUnmarshalString(dataIn, bs));");
+ } else if (type.equals("byte[]")) {
+ if (size != null) {
+ out.println(" info." + setter + "(tightUnmarshalConstByteArray(dataIn, bs, " + size.asInt() + "));");
+ } else {
+ out.println(" info." + setter + "(tightUnmarshalByteArray(dataIn, bs));");
+ }
+ } else if (type.equals("ByteSequence")) {
+ out.println(" info." + setter + "(tightUnmarshalByteSequence(dataIn, bs));");
+ } else if (isThrowable(property.getType())) {
+ out.println(" info." + setter + "((" + property.getType().getQualifiedName() + ") tightUnmarsalThrowable(wireFormat, dataIn, bs));");
+ } else if (isCachedProperty(property)) {
+ out.println(" info." + setter + "((" + property.getType().getQualifiedName() + ") tightUnmarsalCachedObject(wireFormat, dataIn, bs));");
+ } else {
+ out.println(" info." + setter + "((" + property.getType().getQualifiedName() + ") tightUnmarsalNestedObject(wireFormat, dataIn, bs));");
+ }
+ }
+
+ protected void generateTightUnmarshalBodyForArrayProperty(PrintWriter out, JProperty property, JAnnotationValue size) {
+ JClass propertyType = property.getType();
+ String arrayType = propertyType.getArrayComponentType().getQualifiedName();
+ String setter = property.getSetter().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 + ") tightUnmarsalNestedObject(wireFormat,dataIn, bs);");
+ out.println(" }");
+ out.println(" info." + setter + "(value);");
+ out.println(" }");
+ } else {
+ out.println(" if (bs.readBoolean()) {");
+ out.println(" short size = dataIn.readShort();");
+ out.println(" " + arrayType + " value[] = new " + arrayType + "[size];");
+ out.println(" for( int i=0; i < size; i++ ) {");
+ out.println(" value[i] = (" + arrayType + ") tightUnmarsalNestedObject(wireFormat,dataIn, bs);");
+ out.println(" }");
+ out.println(" info." + setter + "(value);");
+ out.println(" }");
+ out.println(" else {");
+ out.println(" info." + setter + "(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.getGetter().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.println(" rc += tightMarshalString1(" + getter + ", bs);");
+ } else if (type.equals("byte[]")) {
+ if (size == null) {
+ out.println(" rc += tightMarshalByteArray1(" + getter + ", bs);");
+ } else {
+ out.println(" rc += tightMarshalConstByteArray1(" + getter + ", bs, " + size.asInt() + ");");
+ }
+ } else if (type.equals("ByteSequence")) {
+ out.println(" rc += tightMarshalByteSequence1(" + getter + ", bs);");
+ } 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 += tightMarshalThrowable1(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.getGetter().getSimpleName() + "()";
+
+ if (type.equals("boolean")) {
+ out.println(" bs.readBoolean();");
+ } else if (type.equals("byte")) {
+ out.println(" dataOut.writeByte(" + getter + ");");
+ } else if (type.equals("char")) {
+ out.println(" dataOut.writeChar(" + getter + ");");
+ } else if (type.equals("short")) {
+ out.println(" dataOut.writeShort(" + getter + ");");
+ } else if (type.equals("int")) {
+ out.println(" dataOut.writeInt(" + 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[]")) {
+ String mandatory = getMandatoryFlag(annotation);
+ if (size != null) {
+ out.println(" tightMarshalConstByteArray2(" + getter + ", dataOut, bs, " + size.asInt() + ");");
+ } else {
+ out.println(" tightMarshalByteArray2(" + getter + ", dataOut, bs);");
+ }
+ } else if (type.equals("ByteSequence")) {
+ out.println(" tightMarshalByteSequence2(" + getter + ", dataOut, bs);");
+ } 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(" tightMarshalThrowable2(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);");
+ }
+ }
+ }
+ }
+
+ 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.getGetter().getSimpleName() + "()";
+
+ if (type.equals("boolean")) {
+ out.println(" dataOut.writeBoolean(" + getter + ");");
+ } else if (type.equals("byte")) {
+ out.println(" dataOut.writeByte(" + getter + ");");
+ } else if (type.equals("char")) {
+ out.println(" dataOut.writeChar(" + getter + ");");
+ } else if (type.equals("short")) {
+ out.println(" dataOut.writeShort(" + getter + ");");
+ } else if (type.equals("int")) {
+ out.println(" dataOut.writeInt(" + 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[]")) {
+ if (size != null) {
+ out.println(" looseMarshalConstByteArray(wireFormat, " + getter + ", dataOut, " + size.asInt() + ");");
+ } else {
+ out.println(" looseMarshalByteArray(wireFormat, " + getter + ", dataOut);");
+ }
+ } else if (type.equals("ByteSequence")) {
+ out.println(" looseMarshalByteSequence(wireFormat, " + getter + ", dataOut);");
+ } 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(" looseMarshalThrowable(wireFormat, " + getter + ", dataOut);");
+ } else {
+ if (isCachedProperty(property)) {
+ out.println(" looseMarshalCachedObject(wireFormat, (DataStructure)" + getter + ", dataOut);");
+ } else {
+ out.println(" looseMarshalNestedObject(wireFormat, (DataStructure)" + getter + ", dataOut);");
+ }
+ }
+ }
+ }
+
+ protected void generateLooseUnmarshalBody(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 propertyTypeName = propertyType.getSimpleName();
+
+ if (propertyType.isArrayType() && !propertyTypeName.equals("byte[]")) {
+ generateLooseUnmarshalBodyForArrayProperty(out, property, size);
+ } else {
+ generateLooseUnmarshalBodyForProperty(out, property, size);
+ }
+ }
+ }
+
+ protected void generateLooseUnmarshalBodyForProperty(PrintWriter out, JProperty property, JAnnotationValue size) {
+ String setter = property.getSetter().getSimpleName();
+ String type = property.getType().getSimpleName();
+
+ if (type.equals("boolean")) {
+ out.println(" info." + setter + "(dataIn.readBoolean());");
+ } else if (type.equals("byte")) {
+ out.println(" info." + setter + "(dataIn.readByte());");
+ } else if (type.equals("char")) {
+ out.println(" info." + setter + "(dataIn.readChar());");
+ } else if (type.equals("short")) {
+ out.println(" info." + setter + "(dataIn.readShort());");
+ } else if (type.equals("int")) {
+ out.println(" info." + setter + "(dataIn.readInt());");
+ } else if (type.equals("long")) {
+ out.println(" info." + setter + "(looseUnmarshalLong(wireFormat, dataIn));");
+ } else if (type.equals("String")) {
+ out.println(" info." + setter + "(looseUnmarshalString(dataIn));");
+ } else if (type.equals("byte[]")) {
+ if (size != null) {
+ out.println(" info." + setter + "(looseUnmarshalConstByteArray(dataIn, " + size.asInt() + "));");
+ } else {
+ out.println(" info." + setter + "(looseUnmarshalByteArray(dataIn));");
+ }
+ } else if (type.equals("ByteSequence")) {
+ out.println(" info." + setter + "(looseUnmarshalByteSequence(dataIn));");
+ } else if (isThrowable(property.getType())) {
+ out.println(" info." + setter + "((" + property.getType().getQualifiedName() + ") looseUnmarsalThrowable(wireFormat, dataIn));");
+ } else if (isCachedProperty(property)) {
+ out.println(" info." + setter + "((" + property.getType().getQualifiedName() + ") looseUnmarsalCachedObject(wireFormat, dataIn));");
+ } else {
+ out.println(" info." + setter + "((" + property.getType().getQualifiedName() + ") looseUnmarsalNestedObject(wireFormat, dataIn));");
+ }
+ }
+
+ protected void generateLooseUnmarshalBodyForArrayProperty(PrintWriter out, JProperty property, JAnnotationValue size) {
+ JClass propertyType = property.getType();
+ String arrayType = propertyType.getArrayComponentType().getQualifiedName();
+ String setter = property.getSetter().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 + ") looseUnmarsalNestedObject(wireFormat,dataIn);");
+ out.println(" }");
+ out.println(" info." + setter + "(value);");
+ out.println(" }");
+ } else {
+ out.println(" if (dataIn.readBoolean()) {");
+ out.println(" short size = dataIn.readShort();");
+ out.println(" " + arrayType + " value[] = new " + arrayType + "[size];");
+ out.println(" for( int i=0; i < size; i++ ) {");
+ out.println(" value[i] = (" + arrayType + ") looseUnmarsalNestedObject(wireFormat,dataIn);");
+ out.println(" }");
+ out.println(" info." + setter + "(value);");
+ out.println(" }");
+ out.println(" else {");
+ out.println(" info." + setter + "(null);");
+ out.println(" }");
+ }
+ }
+
+ /**
+ * Returns whether or not the given annotation has a mandatory flag on it or
+ * not
+ */
+ protected String getMandatoryFlag(JAnnotation annotation) {
+ JAnnotationValue value = annotation.getValue("mandatory");
+ if (value != null) {
+ String text = value.asString();
+ if (text != null && text.equalsIgnoreCase("true")) {
+ return "true";
+ }
+ }
+ return "false";
+ }
+
+ public List getConcreteClasses() {
+ return concreteClasses;
+ }
+
+ public void setConcreteClasses(List concreteClasses) {
+ this.concreteClasses = concreteClasses;
+ }
+
+ public File getFactoryFile() {
+ return factoryFile;
+ }
+
+ public void setFactoryFile(File factoryFile) {
+ this.factoryFile = factoryFile;
+ }
+
+ public String getFactoryFileName() {
+ return factoryFileName;
+ }
+
+ public void setFactoryFileName(String factoryFileName) {
+ this.factoryFileName = factoryFileName;
+ }
+
+ public String getIndent() {
+ return indent;
+ }
+
+ public void setIndent(String indent) {
+ this.indent = indent;
+ }
+
+ public String getTargetDir() {
+ return targetDir;
+ }
+
+ public void setTargetDir(String sourceDir) {
+ this.targetDir = sourceDir;
+ }
+}
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/JavaTestsGenerator.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/JavaTestsGenerator.java?view=auto&rev=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/JavaTestsGenerator.java (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/JavaTestsGenerator.java Tue Sep 26 19:42:47 2006
@@ -0,0 +1,216 @@
+/**
+ *
+ * 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.Iterator;
+import java.util.List;
+
+import org.codehaus.jam.JAnnotation;
+import org.codehaus.jam.JClass;
+import org.codehaus.jam.JPackage;
+import org.codehaus.jam.JProperty;
+
+
+/**
+ *
+ * @version $Revision: 384826 $
+ */
+public class JavaTestsGenerator extends MultiSourceGenerator {
+
+ protected String targetDir="src/test/java";
+
+ public Object run() {
+ if (destDir == null) {
+ destDir = new File(targetDir+"/org/apache/activemq/openwire/v" + getOpenwireVersion());
+ }
+ return super.run();
+ }
+
+ protected String getClassName(JClass jclass) {
+ if( isAbstract(jclass) ) {
+ return super.getClassName(jclass) + "TestSupport";
+ } else {
+ return super.getClassName(jclass) + "Test";
+ }
+ }
+
+ protected String getBaseClassName(JClass jclass) {
+ String answer = "DataFileGeneratorTestSupport";
+ if (superclass != null) {
+ String name = superclass.getSimpleName();
+ if (name!=null
+ && !name.equals("JNDIBaseStorable")
+ && !name.equals("DataStructureSupport")
+ && !name.equals("Object")) {
+ answer = name + "Test";
+ if (isAbstract(getJclass().getSuperclass()))
+ answer += "Support";
+ }
+ }
+ return answer;
+ }
+
+ private 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) {
+
+ generateLicence(out);
+
+out.println("package org.apache.activemq.openwire.v"+openwireVersion+";");
+out.println("");
+out.println("import java.io.DataInputStream;");
+out.println("import java.io.DataOutputStream;");
+out.println("import java.io.IOException;");
+out.println("");
+out.println("import org.apache.activemq.openwire.*;");
+out.println("import org.apache.activemq.command.*;");
+out.println("");
+ for (int i = 0; i < getJclass().getImportedPackages().length; i++) {
+ JPackage pkg = getJclass().getImportedPackages()[i];
+ for (int j = 0; j < pkg.getClasses().length; j++) {
+ JClass clazz = pkg.getClasses()[j];
+out.println("import " + clazz.getQualifiedName() + ";");
+ }
+ }
+
+ boolean marshallerAware = isMarshallAware(jclass);
+
+out.println("");
+out.println("/**");
+out.println(" * Test case for the OpenWire marshalling for "+jclass.getSimpleName()+"");
+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(" * @version $Revision: $");
+out.println(" */");
+out.println("public "+getAbstractClassText()+"class "+className+" extends "+baseClass+" {");
+out.println("");
+ if (!isAbstractClass()) {
+out.println("");
+out.println(" public static "+jclass.getSimpleName()+"Test SINGLETON = new "+jclass.getSimpleName()+"Test();");
+out.println("");
+out.println(" public Object createObject() throws Exception {");
+out.println(" "+jclass.getSimpleName()+" info = new "+jclass.getSimpleName()+"();");
+out.println(" populateObject(info);");
+out.println(" return info;");
+out.println(" }");
+ }
+out.println("");
+out.println(" protected void populateObject(Object object) throws Exception {");
+out.println(" super.populateObject(object);");
+out.println(" "+getJclass().getSimpleName()+" info = ("+getJclass().getSimpleName()+") object;");
+out.println("");
+
+ TestDataGenerator generator = new TestDataGenerator();
+
+ List properties = getProperties();
+ for (Iterator iter = properties.iterator(); iter.hasNext();) {
+ JProperty property = (JProperty) iter.next();
+
+ JAnnotation annotation = property.getAnnotation("openwire:property");
+ String size = stringValue(annotation, "size");
+ String testSize = stringValue(annotation, "testSize");
+ String type = property.getType().getSimpleName();
+ boolean cached = isCachedProperty(property);
+ String propertyName = property.getSimpleName();
+ if ("-1".equals(testSize))
+ continue;
+
+
+ String setterName = property.getSetter().getSimpleName();
+
+ if( type.equals("boolean")) {
+out.println(" info."+setterName+"("+generator.createBool()+");");
+ } else if( type.equals("byte")) {
+out.println(" info."+setterName+"("+generator.createByte()+");");
+ } else if( type.equals("char")) {
+out.println(" info."+setterName+"("+generator.createChar()+");");
+ } else if( type.equals("short")) {
+out.println(" info."+setterName+"("+generator.createShort()+");");
+ } else if( type.equals("int")) {
+out.println(" info."+setterName+"("+generator.createInt()+");");
+ } else if( type.equals("long")) {
+out.println(" info."+setterName+"("+generator.createLong()+");");
+ } else if( type.equals("byte[]")) {
+out.println(" info."+setterName+"("+generator.createByteArray(propertyName)+");");
+ } else if( type.equals("String")) {
+out.println(" info."+setterName+"(\""+generator.createString(propertyName)+"\");");
+ } else if( type.equals("ByteSequence")) {
+out.println(" {");
+out.println(" byte data[] = "+generator.createByteArray(propertyName)+";");
+out.println(" info."+setterName+"(new org.apache.activemq.util.ByteSequence(data,0,data.length));");
+out.println( "}");
+ } else if( type.equals("Throwable")) {
+out.println(" info."+setterName+"(createThrowable(\""+generator.createString(propertyName)+"\"));");
+ } else {
+ if( property.getType().isArrayType() ) {
+ String arrayType = property.getType().getArrayComponentType().getSimpleName();
+ if (size == null)
+ size = "2";
+ if (arrayType == jclass.getSimpleName())
+ size = "0";
+out.println(" {");
+out.println(" "+arrayType+" value[] = new "+arrayType+"["+size+"];");
+out.println(" for( int i=0; i < "+size+"; i++ ) {");
+out.println(" value[i] = create"+arrayType+"(\""+generator.createString(propertyName)+"\");");
+out.println(" }");
+out.println(" info."+setterName+"(value);");
+out.println(" }");
+ } else {
+out.println(" info."+setterName+"(create"+type+"(\""+generator.createString(propertyName)+"\"));");
+ }
+ }
+ }
+
+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/MultiSourceGenerator.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/MultiSourceGenerator.java?view=auto&rev=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/MultiSourceGenerator.java (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/MultiSourceGenerator.java Tue Sep 26 19:42:47 2006
@@ -0,0 +1,234 @@
+/**
+ *
+ * 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.FileWriter;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.taskdefs.FixCRLF;
+import org.codehaus.jam.JClass;
+import org.codehaus.jam.JProperty;
+import org.codehaus.jam.JamClassIterator;
+
+/**
+ *
+ * @version $Revision: 386442 $
+ */
+public abstract class MultiSourceGenerator extends OpenWireGenerator {
+ protected Set manuallyMaintainedClasses = new HashSet();
+ protected File destDir;
+ protected File destFile;
+
+ protected JClass jclass;
+ protected JClass superclass;
+ protected String simpleName;
+ protected String className;
+ protected String baseClass;
+ protected StringBuffer buffer;
+
+ public MultiSourceGenerator() {
+ initialiseManuallyMaintainedClasses();
+ }
+
+ public Object run() {
+ if (destDir == null) {
+ throw new IllegalArgumentException("No destDir defined!");
+ }
+ System.out.println(getClass().getName() + " generating files in: " + destDir);
+ destDir.mkdirs();
+ buffer = new StringBuffer();
+
+ JamClassIterator iter = getClasses();
+ while (iter.hasNext()) {
+ jclass = iter.nextClass();
+ if (isValidClass(jclass)) {
+ processClass(jclass);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns all the valid properties available on the current class
+ */
+ public List getProperties() {
+ List answer = new ArrayList();
+ JProperty[] properties = jclass.getDeclaredProperties();
+ for (int i = 0; i < properties.length; i++) {
+ JProperty property = properties[i];
+ if (isValidProperty(property)) {
+ answer.add(property);
+ }
+ }
+ return answer;
+ }
+
+ protected boolean isValidClass(JClass jclass) {
+ if (jclass.getAnnotation("openwire:marshaller") == null) {
+ return false;
+ }
+ return !manuallyMaintainedClasses.contains(jclass.getSimpleName());
+ }
+
+ protected void processClass(JClass jclass) {
+ simpleName = jclass.getSimpleName();
+ superclass = jclass.getSuperclass();
+
+ System.out.println(getClass().getName() + " processing class: " + simpleName);
+
+ className = getClassName(jclass);
+
+ destFile = new File(destDir, className + filePostFix);
+
+ baseClass = getBaseClassName(jclass);
+
+ PrintWriter out = null;
+ try {
+ out = new PrintWriter(new FileWriter(destFile));
+ generateFile(out);
+ }
+ catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ finally {
+ if (out != null) {
+ out.close();
+ }
+ }
+
+ // 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(destFile.getParentFile());
+ fixCRLF.setIncludes(destFile.getName());
+ fixCRLF.execute();
+ }
+
+ protected abstract void generateFile(PrintWriter out) throws Exception;
+
+ protected String getBaseClassName(JClass jclass) {
+ String answer = "BaseDataStructure";
+ if (superclass != null) {
+ String name = superclass.getSimpleName();
+ if (name != null && !name.equals("Object")) {
+ answer = name;
+ }
+ }
+ return answer;
+ }
+
+ protected String getClassName(JClass jclass) {
+ return jclass.getSimpleName();
+ }
+
+ public boolean isAbstractClass() {
+ return jclass != null & jclass.isAbstract();
+ }
+
+ public String getAbstractClassText() {
+ return isAbstractClass() ? "abstract " : "";
+ }
+
+ public boolean isMarshallerAware() {
+ return isMarshallAware(jclass);
+ }
+
+ protected void initialiseManuallyMaintainedClasses() {
+ String[] names = { "ActiveMQDestination", "ActiveMQTempDestination", "ActiveMQQueue", "ActiveMQTopic", "ActiveMQTempQueue", "ActiveMQTempTopic",
+ "BaseCommand", "ActiveMQMessage", "ActiveMQTextMessage", "ActiveMQMapMessage", "ActiveMQBytesMessage", "ActiveMQStreamMessage",
+ "ActiveMQStreamMessage", "DataStructureSupport", "WireFormatInfo", "ActiveMQObjectMessage" };
+
+ for (int i = 0; i < names.length; i++) {
+ manuallyMaintainedClasses.add(names[i]);
+ }
+ }
+
+ public String getBaseClass() {
+ return baseClass;
+ }
+
+ public void setBaseClass(String baseClass) {
+ this.baseClass = baseClass;
+ }
+
+ public String getClassName() {
+ return className;
+ }
+
+ public void setClassName(String className) {
+ this.className = className;
+ }
+
+ public File getDestDir() {
+ return destDir;
+ }
+
+ public void setDestDir(File destDir) {
+ this.destDir = destDir;
+ }
+
+ public File getDestFile() {
+ return destFile;
+ }
+
+ public void setDestFile(File destFile) {
+ this.destFile = destFile;
+ }
+
+ public JClass getJclass() {
+ return jclass;
+ }
+
+ public void setJclass(JClass jclass) {
+ this.jclass = jclass;
+ }
+
+ public Set getManuallyMaintainedClasses() {
+ return manuallyMaintainedClasses;
+ }
+
+ public void setManuallyMaintainedClasses(Set manuallyMaintainedClasses) {
+ this.manuallyMaintainedClasses = manuallyMaintainedClasses;
+ }
+
+ public String getSimpleName() {
+ return simpleName;
+ }
+
+ public void setSimpleName(String simpleName) {
+ this.simpleName = simpleName;
+ }
+
+ public JClass getSuperclass() {
+ return superclass;
+ }
+
+ public void setSuperclass(JClass superclass) {
+ this.superclass = superclass;
+ }
+
+}
Copied: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireGenerator.java (from r450087, incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireScript.java)
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireGenerator.java?view=diff&rev=450289&p1=incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireScript.java&r1=450087&p2=incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireGenerator.java&r2=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireScript.java (original)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/OpenWireGenerator.java Tue Sep 26 19:42:47 2006
@@ -17,7 +17,7 @@
*/
package org.apache.activemq.openwire.tool;
-import org.codehaus.gram.GramSupport;
+import org.codehaus.jam.JAnnotation;
import org.codehaus.jam.JAnnotationValue;
import org.codehaus.jam.JClass;
import org.codehaus.jam.JField;
@@ -29,12 +29,14 @@
/**
* @version $Revision$
*/
-public abstract class OpenWireScript extends GramSupport {
+public abstract class OpenWireGenerator {
- private String openwireVersion;
+ protected int openwireVersion;
protected String filePostFix = ".java";
+ protected JamService jam;
+
- public boolean isValidProperty(JProperty it) {
+ public boolean isValidProperty(JProperty it) {
JMethod getter = it.getGetter();
return getter != null && it.getSetter() != null && getter.isStatic() == false && getter.getAnnotation("openwire:property") != null;
}
@@ -74,8 +76,7 @@
}
}
return false;
- }
- else {
+ } else {
String simpleName = j.getSimpleName();
return simpleName.equals("ActiveMQMessage") || simpleName.equals("WireFormatInfo");
}
@@ -88,21 +89,18 @@
}
public JamService getJam() {
- return (JamService) getBinding().getVariable("jam");
+ return jam;
}
public JamClassIterator getClasses() {
return getJam().getClasses();
}
- public String getOpenwireVersion() {
- if (openwireVersion == null) {
- openwireVersion = (String) getProperty("version");
- }
+ public int getOpenwireVersion() {
return openwireVersion;
}
- public void setOpenwireVersion(String openwireVersion) {
+ public void setOpenwireVersion(int openwireVersion) {
this.openwireVersion = openwireVersion;
}
@@ -128,7 +126,43 @@
}
}
- public String getOpenWireOpCode(JClass aClass) {
- return annotationValue(aClass, "openwire:marshaller", "code", "0");
- }
+ public String getOpenWireOpCode(JClass element) {
+ if (element != null) {
+ JAnnotation annotation = element.getAnnotation("openwire:marshaller");
+ return stringValue(annotation, "code", "0");
+ }
+ return "0";
+ }
+
+ protected String stringValue(JAnnotation annotation, String name) {
+ return stringValue(annotation, name, null);
+ }
+
+ protected String stringValue(JAnnotation annotation, String name, String defaultValue) {
+ if (annotation != null) {
+ JAnnotationValue value = annotation.getValue(name);
+ if (value != null) {
+ return value.asString();
+ }
+ }
+ return defaultValue;
+ }
+
+ public void setJam(JamService jam) {
+ this.jam = jam;
+ }
+
+ public String decapitalize(String text) {
+ if (text == null) {
+ return null;
+ }
+ return text.substring(0, 1).toLowerCase() + text.substring(1);
+ }
+
+ public String capitalize(String text) {
+ if (text == null) {
+ return null;
+ }
+ return text.substring(0, 1).toUpperCase() + text.substring(1);
+ }
}
Added: incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/SingleSourceGenerator.java
URL: http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/SingleSourceGenerator.java?view=auto&rev=450289
==============================================================================
--- incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/SingleSourceGenerator.java (added)
+++ incubator/activemq/trunk/activemq-openwire-generator/src/main/java/org/apache/activemq/openwire/tool/SingleSourceGenerator.java Tue Sep 26 19:42:47 2006
@@ -0,0 +1,238 @@
+/**
+ *
+ * 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.FileWriter;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.taskdefs.FixCRLF;
+import org.codehaus.jam.JClass;
+import org.codehaus.jam.JProperty;
+import org.codehaus.jam.JamClassIterator;
+
+/**
+ *
+ * @version $Revision: 386442 $
+ */
+public abstract class SingleSourceGenerator extends OpenWireGenerator {
+
+ protected Set manuallyMaintainedClasses = new HashSet();
+ protected File destFile;
+
+ protected JClass jclass;
+ protected JClass superclass;
+ protected String simpleName;
+ protected String className;
+ protected String baseClass;
+ protected List sortedClasses;
+
+ public SingleSourceGenerator() {
+ initialiseManuallyMaintainedClasses();
+ }
+
+ public Object run() {
+
+ if (destFile == null) {
+ throw new IllegalArgumentException("No destFile defined!");
+ }
+ destFile.getParentFile().mkdirs();
+
+ PrintWriter out = null;
+ try {
+ out = new PrintWriter(new FileWriter(destFile));
+
+ ArrayList classes = new ArrayList();
+ JamClassIterator iter = getClasses();
+ while (iter.hasNext()) {
+ jclass = iter.nextClass();
+ if (isValidClass(jclass)) {
+ classes.add(jclass);
+ }
+ }
+ sortedClasses = sort(classes);
+
+ generateSetup(out);
+ for (Iterator iterator = sortedClasses.iterator(); iterator.hasNext();) {
+ jclass = (JClass) iterator.next();
+ simpleName = jclass.getSimpleName();
+ superclass = jclass.getSuperclass();
+ className = getClassName(jclass);
+ baseClass = getBaseClassName(jclass);
+
+ System.out.println(getClass().getName() + " processing class: " + simpleName);
+ generateFile(out);
+ }
+ generateTearDown(out);
+
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ } finally {
+ if (out != null) {
+ out.close();
+ }
+ }
+
+ // 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(destFile.getParentFile());
+ fixCRLF.setIncludes(destFile.getName());
+ fixCRLF.execute();
+ return null;
+ }
+
+ protected List sort(List classes) {
+ return classes;
+ }
+
+ protected void generateTearDown(PrintWriter out) {
+ }
+
+ protected void generateSetup(PrintWriter out) {
+ }
+
+ /**
+ * Returns all the valid properties available on the current class
+ */
+ public List getProperties() {
+ List answer = new ArrayList();
+ JProperty[] properties = jclass.getDeclaredProperties();
+ for (int i = 0; i < properties.length; i++) {
+ JProperty property = properties[i];
+ if (isValidProperty(property)) {
+ answer.add(property);
+ }
+ }
+ return answer;
+ }
+
+ protected boolean isValidClass(JClass jclass) {
+ if (jclass==null || jclass.getAnnotation("openwire:marshaller") == null) {
+ return false;
+ }
+ return true;
+ //return !manuallyMaintainedClasses.contains(jclass.getSimpleName());
+ }
+
+
+ protected abstract void generateFile(PrintWriter out) throws Exception;
+
+ protected String getBaseClassName(JClass jclass) {
+ String answer = "BaseDataStructure";
+ if (superclass != null) {
+ String name = superclass.getSimpleName();
+ if (name != null && !name.equals("Object")) {
+ answer = name;
+ }
+ }
+ return answer;
+ }
+
+ protected String getClassName(JClass jclass) {
+ return jclass.getSimpleName();
+ }
+
+ public boolean isAbstractClass() {
+ return jclass != null & jclass.isAbstract();
+ }
+
+ public String getAbstractClassText() {
+ return isAbstractClass() ? "abstract " : "";
+ }
+
+ public boolean isMarshallerAware() {
+ return isMarshallAware(jclass);
+ }
+
+ protected void initialiseManuallyMaintainedClasses() {
+ String[] names = { "ActiveMQDestination", "ActiveMQTempDestination", "ActiveMQQueue", "ActiveMQTopic", "ActiveMQTempQueue", "ActiveMQTempTopic",
+ "BaseCommand", "ActiveMQMessage", "ActiveMQTextMessage", "ActiveMQMapMessage", "ActiveMQBytesMessage", "ActiveMQStreamMessage",
+ "ActiveMQStreamMessage", "DataStructureSupport", "WireFormatInfo", "ActiveMQObjectMessage" };
+
+ for (int i = 0; i < names.length; i++) {
+ manuallyMaintainedClasses.add(names[i]);
+ }
+ }
+
+ public String getBaseClass() {
+ return baseClass;
+ }
+
+ public void setBaseClass(String baseClass) {
+ this.baseClass = baseClass;
+ }
+
+ public String getClassName() {
+ return className;
+ }
+
+ public void setClassName(String className) {
+ this.className = className;
+ }
+
+ public File getDestFile() {
+ return destFile;
+ }
+
+ public void setDestFile(File destFile) {
+ this.destFile = destFile;
+ }
+
+ public JClass getJclass() {
+ return jclass;
+ }
+
+ public void setJclass(JClass jclass) {
+ this.jclass = jclass;
+ }
+
+ public Set getManuallyMaintainedClasses() {
+ return manuallyMaintainedClasses;
+ }
+
+ public void setManuallyMaintainedClasses(Set manuallyMaintainedClasses) {
+ this.manuallyMaintainedClasses = manuallyMaintainedClasses;
+ }
+
+ public String getSimpleName() {
+ return simpleName;
+ }
+
+ public void setSimpleName(String simpleName) {
+ this.simpleName = simpleName;
+ }
+
+ public JClass getSuperclass() {
+ return superclass;
+ }
+
+ public void setSuperclass(JClass superclass) {
+ this.superclass = superclass;
+ }
+
+}