You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2009/07/28 15:37:49 UTC
svn commit: r798517 - in
/activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator: ./ src/
src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/activemq/ src/main/java/org/apache/activemq/nms/
src/main/...
Author: tabish
Date: Tue Jul 28 13:37:48 2009
New Revision: 798517
URL: http://svn.apache.org/viewvc?rev=798517&view=rev
Log:
Populate with the initial generators work, not complete.
Added:
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/pom.xml (with props)
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/AmqCSharpGeneratorTask.java (with props)
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandClassGenerator.java (with props)
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandCodeGenerator.java (with props)
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandCodeGeneratorsFactory.java (with props)
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandGenerator.java (with props)
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/marshalers/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/marshalers/AmqCSharpMarshallersGenerator.java (with props)
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/resources/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/test/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/test/java/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/test/resources/
Added: activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/pom.xml
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/pom.xml?rev=798517&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/pom.xml (added)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/pom.xml Tue Jul 28 13:37:48 2009
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ 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.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <parent>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>6</version>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>nms-activemq-openwire-generator</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <name>NMS.ActiveMQ Openwire Protocol Generator</name>
+ <description>Tool used to create the NMS.ActiveMQ OpenWire Commands and Marshallers.</description>
+ <inceptionYear>2009</inceptionYear>
+ <prerequisites>
+ <maven>2.0.9</maven>
+ </prerequisites>
+
+ <organization>
+ <name>Apache Software Foundation</name>
+ <url>http://www.apache.org/</url>
+ </organization>
+
+ <url>http://activemq.apache.org/cms</url>
+
+ <licenses>
+ <license>
+ <name>The Apache Software License, Version 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+
+ <mailingLists>
+ <mailingList>
+ <name>Development List</name>
+ <subscribe>dev-subscribe@activemq.apache.org</subscribe>
+ <unsubscribe>dev-unsubscribe@activemq.apache.org</unsubscribe>
+ <post>dev@activemq.apache.org</post>
+ </mailingList>
+ </mailingLists>
+
+ <properties>
+ <activemq-version>5.3-SNAPSHOT</activemq-version>
+ <projectName>Apache NMS.ActiveMQ</projectName>
+ <annogen-version>0.1.0</annogen-version>
+ <ant-version>1.6.2</ant-version>
+ <xstream-version>1.3.1</xstream-version>
+ <activemq-core-dir>${ACTIVEMQ_SRC_HOME}/activemq-core/</activemq-core-dir>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>activemq-openwire-generator</artifactId>
+ <version>${activemq-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.activemq</groupId>
+ <artifactId>activemq-core</artifactId>
+ <version>${activemq-version}</version>
+ </dependency>
+ </dependencies>
+
+ <distributionManagement>
+ <repository>
+ <id>release.apache.org</id>
+ <name>ActiveMQ-CPP Release Repository</name>
+ <url>file:///home/tabish/dev/maven2/repo/release</url>
+ </repository>
+ <snapshotRepository>
+ <id>snapshots.apache.org</id>
+ <name>ActiveMQ-CPP Snapshots Repository</name>
+ <url>file:///home/tabish/dev/maven2/repo/snapshots</url>
+ </snapshotRepository>
+ </distributionManagement>
+
+ <scm>
+ <connection>scm:svn:https://svn.apache.org/repos/asf/activemq/activemq-dotnet/Apache.NMS.ActiveMQ.OpenWire.Tool</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/activemq/activemq-dotnet/Apache.NMS.ActiveMQ.OpenWire.Tool</developerConnection>
+ <url>http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ.OpenWire.Tool</url>
+ </scm>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>rat-maven-plugin</artifactId>
+ <version>1.0-alpha-3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/AmqCSharpGeneratorTask.java
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/AmqCSharpGeneratorTask.java?rev=798517&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/AmqCSharpGeneratorTask.java (added)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/AmqCSharpGeneratorTask.java Tue Jul 28 13:37:48 2009
@@ -0,0 +1,145 @@
+/**
+ *
+ * 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.nms.openwire.tool;
+
+import java.io.File;
+
+import org.apache.activemq.nms.openwire.tool.commands.CommandGenerator;
+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;
+
+public class AmqCSharpGeneratorTask extends Task {
+
+ int maxVersion = 3;
+ File source = new File(".");
+ File target = new File(".");
+
+ public static void main(String[] args) {
+
+ Project project = new Project();
+ project.init();
+ AmqCSharpGeneratorTask generator = new AmqCSharpGeneratorTask();
+ generator.setProject(project);
+
+ if (args.length > 0) {
+ generator.maxVersion = Integer.parseInt(args[0]);
+ System.out.println("Generator Max Version: "
+ + Integer.parseInt(args[0]));
+ }
+
+ if (args.length > 1) {
+ generator.source = new File(args[1]);
+ System.out.println("Generator Source: " + generator.source);
+ }
+
+ if (args.length > 2) {
+ generator.target = new File(args[2]);
+ System.out.println("Generator Source: " + generator.target);
+ }
+
+ 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);
+
+ {
+ CommandGenerator script = new CommandGenerator();
+ script.setJam(jam);
+ script.setTargetDir(target + "/src/main");
+ script.setOpenwireVersion(maxVersion);
+ script.run();
+ }
+
+// for (int i = 1; i <= maxVersion; ++i) {
+//
+// {
+// AmqCppMarshallingHeadersGenerator script = new AmqCppMarshallingHeadersGenerator();
+// script.setJam(jam);
+// script.setTargetDir(target + "/src/main");
+// script.setOpenwireVersion(i);
+// script.run();
+// }
+// {
+// AmqCppMarshallingClassesGenerator script = new AmqCppMarshallingClassesGenerator();
+// script.setJam(jam);
+// script.setTargetDir(target + "/src/main");
+// script.setOpenwireVersion(i);
+// script.run();
+// }
+// {
+// AmqCppTestMarshallingHeadersGenerator script = new AmqCppTestMarshallingHeadersGenerator();
+// script.setJam(jam);
+// script.setTargetDir(target + "/src/test");
+// script.setOpenwireVersion(i);
+// script.run();
+// }
+// {
+// AmqCppTestMarshallingClassesGenerator script = new AmqCppTestMarshallingClassesGenerator();
+// script.setJam(jam);
+// script.setTargetDir(target + "/src/test");
+// script.setOpenwireVersion(i);
+// script.run();
+// }
+// }
+
+ } catch (Exception e) {
+ throw new BuildException(e);
+ }
+ }
+
+ public int getMaxVersion() {
+ return maxVersion;
+ }
+
+ public void setMaxVersion(int version) {
+ this.maxVersion = 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;
+ }
+
+}
Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/AmqCSharpGeneratorTask.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandClassGenerator.java
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandClassGenerator.java?rev=798517&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandClassGenerator.java (added)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandClassGenerator.java Tue Jul 28 13:37:48 2009
@@ -0,0 +1,293 @@
+/**
+ * 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.nms.openwire.tool.commands;
+
+import java.io.PrintWriter;
+import java.util.Set;
+
+import org.codehaus.jam.JProperty;
+
+public class CommandClassGenerator extends CommandCodeGenerator {
+
+ public void generate( PrintWriter out ) {
+
+ // Start with the license.
+ generateLicence(out);
+
+ out.println("#ifndef _ACTIVEMQ_COMMANDS_"+getClassName().toUpperCase()+"_H_");
+ out.println("#define _ACTIVEMQ_COMMANDS_"+getClassName().toUpperCase()+"_H_");
+ 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("");
+
+ populateIncludeFilesSet();
+ for( String include : getIncludeFiles() ) {
+ if( include != null ) {
+ out.println("#include "+include);
+ }
+ }
+
+ out.println("");
+ generateNamespaceWrapper( out );
+ generateForwardDeclarations( out );
+
+ out.println(" using decaf::lang::Pointer;");
+ out.println("");
+ out.println(" /*");
+ out.println(" *");
+ out.println(" * Command code for OpenWire format for "+getClassName() );
+ 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 Java Classes");
+ out.println(" * in the activemq-cpp-openwire-generator module");
+ out.println(" *");
+ out.println(" */");
+
+ generateClassDefinition( out );
+ generateProperties( out );
+
+ if( !isAssignable() ) {
+ out.println(" protected:");
+ out.println("");
+ out.println(" "+getClassName()+"( const "+getClassName()+"& ) : " + getBaseClassName() + "() {};");
+ out.println(" "+getClassName()+"& operator= ( const "+getClassName()+"& ) { return *this; };");
+ out.println("");
+ }
+
+ out.println(" public:");
+ out.println("");
+ out.println(" "+getClassName()+"();");
+ out.println("");
+
+ if( isAssignable() ) {
+ out.println(" "+getClassName()+"( const "+getClassName()+"& other );");
+ out.println("");
+ }
+
+ generateAdditionalConstructors( out );
+
+ out.println(" virtual ~"+getClassName()+"();");
+ out.println("");
+ out.println(" /**");
+ out.println(" * Get the unique identifier that this object and its own");
+ out.println(" * Marshaler share.");
+ out.println(" * @returns new DataStructure type copy.");
+ out.println(" */");
+ out.println(" virtual unsigned char getDataStructureType() const;");
+ out.println("");
+ out.println(" /**");
+ out.println(" * Clone this object and return a new instance that the");
+ out.println(" * caller now owns, this will be an exact copy of this one");
+ out.println(" * @returns new copy of this object.");
+ out.println(" */");
+ out.println(" virtual "+getClassName()+"* cloneDataStructure() const;");
+ out.println("");
+ out.println(" /**");
+ out.println(" * Copy the contents of the passed object into this object's");
+ out.println(" * members, overwriting any existing data.");
+ out.println(" * @param src - Source Object");
+ out.println(" */");
+ out.println(" virtual void copyDataStructure( const DataStructure* src );");
+ out.println("");
+ out.println(" /**");
+ out.println(" * Returns a string containing the information for this DataStructure");
+ out.println(" * such as its type and value of its elements.");
+ out.println(" * @return formatted string useful for debugging.");
+ out.println(" */");
+ out.println(" virtual std::string toString() const;");
+ out.println("");
+ out.println(" /**" );
+ out.println(" * Compares the DataStructure passed in to this one, and returns if" );
+ out.println(" * they are equivalent. Equivalent here means that they are of the" );
+ out.println(" * same type, and that each element of the objects are the same." );
+ out.println(" * @returns true if DataStructure's are Equal." );
+ out.println(" */" );
+ out.println(" virtual bool equals( const DataStructure* value ) const;" );
+ out.println("");
+
+ generateAdditonalMembers( out );
+ generatePropertyAccessors( out );
+
+ if( isComparable() ) {
+ out.println(" virtual int compareTo( const "+getClassName()+"& value ) const;");
+ out.println("");
+ out.println(" virtual bool equals( const "+getClassName()+"& value ) const;");
+ out.println("");
+ out.println(" virtual bool operator==( const "+getClassName()+"& value ) const;");
+ out.println("");
+ out.println(" virtual bool operator<( const "+getClassName()+"& value ) const;");
+ out.println("");
+ }
+
+ if( isAssignable() ) {
+ out.println(" "+getClassName()+"& operator= ( const "+getClassName()+"& other );");
+ out.println("");
+ }
+
+ if( isGenIsClass() ) {
+ out.println(" /**");
+ out.println(" * @return an answer of true to the is"+getClassName()+"() query.");
+ out.println(" */");
+ out.println(" virtual bool is"+getClassName()+"() const {");
+ out.println(" return true;");
+ out.println(" }");
+ out.println("");
+ }
+
+ if( getBaseClassName().equals( "BaseCommand" ) ) {
+ out.println(" /**" );
+ out.println(" * Allows a Visitor to visit this command and return a response to the" );
+ out.println(" * command based on the command type being visited. The command will call" );
+ out.println(" * the proper processXXX method in the visitor." );
+ out.println(" * " );
+ out.println(" * @return a Response to the visitor being called or NULL if no response." );
+ out.println(" */" );
+ out.println(" virtual Pointer<Command> visit( activemq::state::CommandVisitor* visitor )" );
+ out.println(" throw( exceptions::ActiveMQException );" );
+ out.println("");
+ }
+
+ out.println(" };");
+ out.println("");
+ out.println("}}");
+ out.println("");
+ out.println("#endif /*_ACTIVEMQ_COMMANDS_"+getClassName().toUpperCase()+"_H_*/");
+ }
+
+ protected void populateIncludeFilesSet() {
+
+ Set<String> includes = getIncludeFiles();
+
+ includes.add("<vector>");
+ includes.add("<string>");
+ includes.add("<activemq/util/Config.h>");
+ includes.add("<activemq/commands/"+getBaseClassName()+".h>");
+ includes.add("<decaf/lang/Pointer.h>");
+
+ if( isComparable() ) {
+ includes.add("<decaf/lang/Comparable.h>");
+ }
+
+ for( JProperty property : getProperties() ) {
+ if( !property.getType().isPrimitiveType() &&
+ !property.getType().getSimpleName().equals("String") &&
+ !property.getType().getSimpleName().equals("ByteSequence") )
+ {
+
+ if( toHeaderFileName( property.getType() ) != null ) {
+ includes.add(
+ "<activemq/commands/"+toHeaderFileName( property.getType() )+".h>");
+ }
+ }
+ }
+ }
+
+ protected void generateNamespaceWrapper( PrintWriter out ) {
+ out.println("namespace activemq{");
+ out.println("namespace commands{");
+ out.println("");
+ }
+
+ protected void generateForwardDeclarations( PrintWriter out ) {
+ }
+
+ protected void generateClassDefinition( PrintWriter out ) {
+ out.print(" class AMQCPP_API "+getClassName()+" : " );
+
+ if( isComparable() ) {
+ out.println("public "+ getBaseClassName() +", public decaf::lang::Comparable<"+getClassName()+"> {" );
+ } else {
+ out.print("public "+ getBaseClassName() +" {" );
+ out.println("");
+ }
+ }
+
+ protected void generateProperties( PrintWriter out ) {
+ out.println(" protected:");
+ out.println("");
+
+ for( JProperty property : getProperties() ) {
+ String type = toCppType(property.getType());
+ String name = decapitalize(property.getSimpleName());
+
+ if( !property.getType().isPrimitiveType() &&
+ !property.getType().getSimpleName().equals("ByteSequence") &&
+ !property.getType().getSimpleName().equals("String") &&
+ !type.startsWith("std::vector") ) {
+
+ type = "Pointer<" + type + ">";
+ }
+
+ out.println(" "+type+" "+name+";");
+ }
+
+ out.println("");
+ out.println(" public:");
+ out.println("");
+ out.println(" const static unsigned char ID_"+
+ getClassName().toUpperCase()+" = "+getOpenWireOpCode()+";");
+ out.println("");
+ if( isComparable() ) {
+ out.println(" typedef decaf::lang::PointerComparator<"+getClassName()+"> COMPARATOR;");
+ out.println("");
+ }
+ }
+
+ protected void generateAdditionalConstructors( PrintWriter out ) {
+ }
+
+ protected void generateAdditonalMembers( PrintWriter out ) {
+ }
+
+ protected void generatePropertyAccessors( PrintWriter out ) {
+
+ for( JProperty property : getProperties() ) {
+ String type = toCppType(property.getType());
+ String propertyName = property.getSimpleName();
+ String parameterName = decapitalize(propertyName);
+ String constness = "";
+
+ if( !property.getType().isPrimitiveType() &&
+ !property.getType().getSimpleName().equals("ByteSequence") &&
+ !property.getType().getSimpleName().equals("String") &&
+ !type.startsWith("std::vector") ) {
+
+ type = "Pointer<" + type + ">&";
+ constness = "const ";
+ } else if( property.getType().getSimpleName().equals("String") ||
+ type.startsWith("std::vector") ) {
+
+ type = type + "&";
+ constness = "const ";
+ }
+
+ if( property.getType().isPrimitiveType() ) {
+ out.println(" virtual "+type+" "+property.getGetter().getSimpleName()+"() const;");
+ } else {
+ out.println(" virtual const "+type+" "+property.getGetter().getSimpleName()+"() const;");
+ out.println(" virtual "+type+" "+property.getGetter().getSimpleName()+"();");
+ }
+
+ out.println(" virtual void "+property.getSetter().getSimpleName()+"( "+constness+type+" "+parameterName+" );");
+ out.println("");
+ }
+ }
+
+}
Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandClassGenerator.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandCodeGenerator.java
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandCodeGenerator.java?rev=798517&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandCodeGenerator.java (added)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandCodeGenerator.java Tue Jul 28 13:37:48 2009
@@ -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.nms.openwire.tool.commands;
+
+import java.io.PrintWriter;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.codehaus.jam.JClass;
+import org.codehaus.jam.JProperty;
+
+public abstract class CommandCodeGenerator {
+
+ private JClass jClass;
+ private List<JProperty> properties;
+ private boolean marshalAware = false;
+ private String className;
+ private String baseClassName;
+ private Set<String> includeFiles = new TreeSet<String>();
+ private String openWireOpCode;
+ private boolean comparable = false;
+ private boolean assignable = false;
+ private boolean genIsClass = false;
+
+ public abstract void generate( PrintWriter out );
+
+ protected 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(" */");
+ out.println("");
+ }
+
+ public boolean isGenIsClass() {
+ return genIsClass;
+ }
+
+ public void setGenIsClass(boolean genIsClass) {
+ this.genIsClass = genIsClass;
+ }
+
+ public boolean isComparable() {
+ return comparable;
+ }
+
+ public void setComparable(boolean comparable) {
+ this.comparable = comparable;
+ }
+
+ public boolean isAssignable() {
+ return assignable;
+ }
+
+ public void setAssignable(boolean assignable) {
+ this.assignable = assignable;
+ }
+
+ public JClass getJClass() {
+ return jClass;
+ }
+
+ public void setJClass(JClass jClass) {
+ this.jClass = jClass;
+ }
+
+ public List<JProperty> getProperties() {
+ return properties;
+ }
+
+ public void setProperties(List<JProperty> properties) {
+ this.properties = properties;
+ }
+
+ public boolean isMarshalAware() {
+ return marshalAware;
+ }
+
+ public void setMarshalAware(boolean marshalAware) {
+ this.marshalAware = marshalAware;
+ }
+
+ public String getClassName() {
+ return className;
+ }
+
+ public void setClassName(String className) {
+ this.className = className;
+ }
+
+ public String getBaseClassName() {
+ return baseClassName;
+ }
+
+ public void setBaseClassName(String baseClassName) {
+ this.baseClassName = baseClassName;
+ }
+
+ public Set<String> getIncludeFiles() {
+ return includeFiles;
+ }
+
+ public void setIncludeFiles(Set<String> includeFiles) {
+ this.includeFiles = includeFiles;
+ }
+
+ public String getOpenWireOpCode() {
+ return openWireOpCode;
+ }
+
+ public void setOpenWireOpCode(String openWireOpCode) {
+ this.openWireOpCode = openWireOpCode;
+ }
+
+ protected String toHeaderFileName( JClass type ) {
+ String name = type.getSimpleName();
+
+ if( name.equals( "String" ) ) {
+ return null;
+ } else if( type.isArrayType() ) {
+ JClass arrayClass = type.getArrayComponentType();
+ return toHeaderFileName( arrayClass );
+ } else if( name.equals( "Throwable" ) || name.equals( "Exception" ) ) {
+ return "BrokerError";
+ } else if( name.equals("BaseDataStructure" ) ){
+ return "DataStructure";
+ } else if( name.equals("ByteSequence") ) {
+ return "std::vector<unsigned char>";
+ } else if( !type.isPrimitiveType() ) {
+ return name;
+ } else {
+ return null;
+ }
+ }
+
+ protected String toCppType(JClass type) {
+ String name = type.getSimpleName();
+ if (name.equals("String")) {
+ return "std::string";
+ }
+ else if( type.isArrayType() ) {
+ if( name.equals( "byte[]" ) )
+ name = "unsigned char[]";
+
+ JClass arrayClass = type.getArrayComponentType();
+
+ if( arrayClass.isPrimitiveType() ) {
+ return "std::vector<" + name.substring( 0, name.length()-2 ) + ">";
+ } else {
+ return "std::vector< decaf::lang::Pointer<" +
+ name.substring( 0, name.length()-2 ) + "> >";
+ }
+ }
+ else if( name.equals( "Throwable" ) || name.equals( "Exception" ) ) {
+ return "BrokerError";
+ }
+ else if( name.equals("BaseDataStructure" ) ){
+ return "DataStructure";
+ }
+ else if( name.equals("ByteSequence") ) {
+ return "std::vector<unsigned char>";
+ }
+ else if( name.equals("boolean") ) {
+ return "bool";
+ }
+ else if( name.equals("long") ) {
+ return "long long";
+ }
+ else if( name.equals("byte") ) {
+ return "unsigned char";
+ }
+ else if( !type.isPrimitiveType() ) {
+ return name;
+ }
+ else {
+ return name;
+ }
+ }
+
+ /**
+ * Converts the Java type to a C++ default value
+ */
+ protected String toCppDefaultValue(JClass type) {
+ String name = type.getSimpleName();
+
+ if (name.equals("boolean")) {
+ return "false";
+ } else if( name.equals("String") ) {
+ return "\"\"";
+ } else if( !type.isPrimitiveType() ) {
+ return "NULL";
+ } else {
+ return "0";
+ }
+ }
+
+ protected String decapitalize(String text) {
+ if (text == null) {
+ return null;
+ }
+ return text.substring(0, 1).toLowerCase() + text.substring(1);
+ }
+
+ protected String capitalize(String text) {
+ if (text == null) {
+ return null;
+ }
+ return text.substring(0, 1).toUpperCase() + text.substring(1);
+ }
+
+}
Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandCodeGenerator.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandCodeGeneratorsFactory.java
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandCodeGeneratorsFactory.java?rev=798517&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandCodeGeneratorsFactory.java (added)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandCodeGeneratorsFactory.java Tue Jul 28 13:37:48 2009
@@ -0,0 +1,98 @@
+/**
+ * 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.nms.openwire.tool.commands;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Provides methods to get a Source file and Header file Code generator given a Class
+ * name.
+ *
+ * @since 2.0
+ */
+public class CommandCodeGeneratorsFactory {
+
+ private Set<String> commandsWithShortcuts;
+
+ /*
+ * Here we store all Commands that need to have a isXXX method generated
+ * such as isMessage. We then check in the <code>checkNeedsShortcut</code>
+ * method and if the Command being generated is in this list we create a
+ * method call to override the virtual method in the base Command interface.
+ */
+ {
+ commandsWithShortcuts = new HashSet<String>();
+ commandsWithShortcuts.add( "Response" );
+ commandsWithShortcuts.add( "RemoveInfo" );
+ commandsWithShortcuts.add( "MessageDispatch" );
+ commandsWithShortcuts.add( "BrokerInfo" );
+ commandsWithShortcuts.add( "KeepAliveInfo" );
+ commandsWithShortcuts.add( "WireFormatInfo" );
+ commandsWithShortcuts.add( "Message" );
+ commandsWithShortcuts.add( "MessageAck" );
+ commandsWithShortcuts.add( "ProducerAck" );
+ commandsWithShortcuts.add( "ProducerInfo" );
+ commandsWithShortcuts.add( "MessageDispatchNotification" );
+ commandsWithShortcuts.add( "ShutdownInfo" );
+ commandsWithShortcuts.add( "TransactionInfo" );
+ commandsWithShortcuts.add( "ConnectionInfo" );
+ commandsWithShortcuts.add( "ConsumerInfo" );
+ commandsWithShortcuts.add( "RemoveSubscriptionInfo" );
+
+ }
+
+ /**
+ * Given a class name return an instance of a CSharp Class File Generator
+ * that can generate the file for the Class.
+ *
+ * @param className - name of the class to find the generator for
+ *
+ * @return a new Header File code generator.
+ */
+ public CommandCodeGenerator getCodeGenerator( String className ) {
+
+ CommandCodeGenerator generator = null;
+// if( className.equals("Message") ) {
+// generator = new MessageHeaderGenerator();
+// } else if( className.equals("ConnectionId") ) {
+// generator = new ConnectionIdHeaderGenerator();
+// } else if( className.equals("ConsumerId") ) {
+// generator = new ConsumerIdHeaderGenerator();
+// } else if( className.equals("ProducerId") ) {
+// generator = new ProducerIdHeaderGenerator();
+// } else if( className.equals("SessionId") ) {
+// generator = new SessionIdHeaderGenerator();
+// } else if( className.equals("SessionInfo") ) {
+// generator = new SessionInfoHeaderGenerator();
+// } else {
+ generator = new CommandClassGenerator();
+// }
+
+ if( className.endsWith("Id") ) {
+ generator.setComparable( true );
+ generator.setAssignable( true );
+ }
+
+ if( this.commandsWithShortcuts.contains( className ) ) {
+ generator.setGenIsClass( true );
+ }
+
+ return generator;
+ }
+
+}
Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandCodeGeneratorsFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandGenerator.java
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandGenerator.java?rev=798517&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandGenerator.java (added)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandGenerator.java Tue Jul 28 13:37:48 2009
@@ -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.nms.openwire.tool.commands;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+
+import org.apache.activemq.openwire.tool.MultiSourceGenerator;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.taskdefs.FixCRLF;
+import org.codehaus.jam.JClass;
+
+/**
+ *
+ * @version $Revision: 409828 $
+ */
+public class CommandGenerator extends MultiSourceGenerator {
+
+ private CommandCodeGeneratorsFactory generatorsFactory =
+ new CommandCodeGeneratorsFactory();
+
+ protected String targetDir="./src/main";
+
+ public String getTargetDir() {
+ return targetDir;
+ }
+
+ public void setTargetDir(String targetDir) {
+ this.targetDir = targetDir;
+ }
+
+ protected void processClass(JClass jclass) {
+
+ // Prepare the State variables for the current class
+ simpleName = jclass.getSimpleName();
+ superclass = jclass.getSuperclass();
+ className = getClassName(jclass);
+ baseClass = getBaseClassName(jclass);
+
+ System.out.println(getClass().getName() + " processing class: " + simpleName);
+
+ try {
+ // Using the current JClass state in the MultiSourceGenerator we can
+ // now generate the Header and Source for the CSharp commands.
+ generateClassFile();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public Object run() {
+ filePostFix = ".cpp";
+ if (destDir == null) {
+ destDir = new File(
+ targetDir+"/activemq/commands");
+ }
+
+ return super.run();
+ }
+
+ protected void generateClassFile() throws Exception {
+
+ File headerFile = new File(destDir, className + ".cs");
+
+ CommandCodeGenerator generator = generatorsFactory.getCodeGenerator( className );
+
+ generator.setJClass( getJclass() );
+ generator.setProperties( getProperties() );
+ generator.setMarshalAware( isMarshallerAware() );
+ generator.setClassName( getClassName() );
+ generator.setBaseClassName( getBaseClass() );
+ generator.setOpenWireOpCode( getOpenWireOpCode(getJclass()) );
+
+ PrintWriter out = null;
+ try {
+ out = new PrintWriter(new FileWriter(headerFile));
+ generator.generate(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(headerFile.getParentFile());
+ fixCRLF.setIncludes(headerFile.getName());
+ fixCRLF.execute();
+ }
+
+ @Override
+ protected void generateFile(PrintWriter arg0) throws Exception {
+ // Not used here since we override the process method.
+ }
+
+}
Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/commands/CommandGenerator.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/marshalers/AmqCSharpMarshallersGenerator.java
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/marshalers/AmqCSharpMarshallersGenerator.java?rev=798517&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/marshalers/AmqCSharpMarshallersGenerator.java (added)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/marshalers/AmqCSharpMarshallersGenerator.java Tue Jul 28 13:37:48 2009
@@ -0,0 +1,434 @@
+/**
+ *
+ * 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.nms.openwire.tool.marshalers;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.activemq.openwire.tool.MultiSourceGenerator;
+import org.codehaus.jam.JAnnotation;
+import org.codehaus.jam.JAnnotationValue;
+import org.codehaus.jam.JClass;
+import org.codehaus.jam.JProperty;
+
+/**
+ *
+ * @version $Revision: 381410 $
+ */
+public class AmqCSharpMarshallersGenerator extends MultiSourceGenerator {
+
+ protected String targetDir="./src/main";
+ protected List<JClass> concreteClasses = new ArrayList<JClass>();
+ protected File factoryFile;
+ protected String factoryFileName = "MarshallerFactory";
+ protected String indent = " ";
+
+ /**
+ * Overrides the base class init since we don't mark any marshaller classes as
+ * being manually maintained.
+ */
+ protected void initialiseManuallyMaintainedClasses() {
+ }
+
+ /**
+ * Returns all the valid properties available on the current class. Overrides the
+ * method in {@link MultiSourceGenerator} to add filtering on the Openwire Version
+ * number so that we can rerun this tool for older versions and produce an exact
+ * match to what was previously generated.
+ *
+ * @return List of Properties valid for the current {@link JClass} and Openwire version.
+ */
+ public List<JProperty> getProperties() {
+ List<JProperty> answer = new ArrayList<JProperty>();
+ JProperty[] properties = jclass.getDeclaredProperties();
+ for (int i = 0; i < properties.length; i++) {
+ JProperty property = properties[i];
+ if (isValidProperty(property)) {
+
+ JAnnotation annotation = property.getAnnotation("openwire:property");
+ JAnnotationValue version = annotation.getValue("version");
+
+ if( version.asInt() <= this.getOpenwireVersion() ) {
+ answer.add(property);
+ }
+ }
+ }
+ return answer;
+ }
+
+ public Object run() {
+ filePostFix = getFilePostFix();
+ if (destDir == null) {
+ destDir = new File(targetDir+"/activemq/wireformat/openwire/marshal/v"+getOpenwireVersion());
+ }
+ Object answer = super.run();
+ processFactory();
+ return answer;
+ }
+
+ 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 = jclass.getSimpleName();
+
+ if( answer.equals("ActiveMQTextMessage") ) {
+ answer = "MessageMarshaller";
+ } else if( answer.equals("ActiveMQBytesMessage") ) {
+ answer = "MessageMarshaller";
+ } else if( answer.equals("ActiveMQMapMessage") ) {
+ answer = "MessageMarshaller";
+ } else if( answer.equals("ActiveMQObjectMessage") ) {
+ answer = "MessageMarshaller";
+ } else if( answer.equals("ActiveMQStreamMessage") ) {
+ answer = "MessageMarshaller";
+ } else if( answer.equals("ActiveMQBlobMessage") ) {
+ answer = "MessageMarshaller";
+ }
+
+ // We didn't map it directly so we turn it into something generic.
+ if( answer.equals( jclass.getSimpleName() ) ) {
+ 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;
+ }
+
+ return answer;
+ }
+
+ public boolean isMarshallAware(JClass j) {
+
+ String answer = jclass.getSimpleName();
+
+ if( answer.equals("ActiveMQTextMessage") ) {
+ return true;
+ } else if( answer.equals("ActiveMQBytesMessage") ) {
+ return true;
+ } else if( answer.equals("ActiveMQMapMessage") ) {
+ return true;
+ } else if( answer.equals("ActiveMQObjectMessage") ) {
+ return true;
+ } else if( answer.equals("ActiveMQStreamMessage") ) {
+ return true;
+ } else if( answer.equals("ActiveMBlobMessage") ) {
+ return true;
+ } else {
+ return super.isMarshallAware(jclass);
+ }
+ }
+
+ protected String getFilePostFix() {
+ return ".h";
+ }
+
+ public String toCppType(JClass type) {
+ String name = type.getSimpleName();
+ if (name.equals("String")) {
+ return "std::string";
+ }
+ else if( type.isArrayType() ) {
+ if( name.equals( "byte[]" ) )
+ name = "unsigned char[]";
+
+ JClass arrayClass = type.getArrayComponentType();
+
+ if( arrayClass.isPrimitiveType() ) {
+ return "std::vector<" + name.substring(0, name.length()-2) + ">";
+ } else {
+ return "std::vector<" + name.substring(0, name.length()-2) + "*>";
+ }
+ }
+ else if( name.equals( "Throwable" ) || name.equals( "Exception" ) ) {
+ return "BrokerError";
+ }
+ else if( name.equals("BaseDataStructure" ) ){
+ return "DataStructure";
+ }
+ else if( name.equals("ByteSequence") ) {
+ return "std::vector<char>";
+ }
+ else if( name.equals("boolean") ) {
+ return "bool";
+ }
+ else if( name.equals("long") ) {
+ return "long long";
+ }
+ else if( name.equals("byte") ) {
+ return "unsigned char";
+ }
+ else if( !type.isPrimitiveType() ) {
+ return name;
+ }
+ else {
+ return name;
+ }
+ }
+
+ protected 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("#ifndef _ACTIVEMQ_WIREFORMAT_OPENWIRE_MARSAHAL_V"+getOpenwireVersion()+"_"+className.toUpperCase()+"_H_");
+out.println("#define _ACTIVEMQ_WIREFORMAT_OPENWIRE_MARSAHAL_V"+getOpenwireVersion()+"_"+className.toUpperCase()+"_H_");
+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("");
+
+ if( baseClass.equals("BaseDataStreamMarshaller") ) {
+ out.println("#include <activemq/wireformat/openwire/marshal/"+baseClass+".h>");
+ } else {
+ out.println("#include <activemq/wireformat/openwire/marshal/v"+getOpenwireVersion()+"/"+baseClass+".h>");
+ }
+
+out.println("");
+out.println("#include <decaf/io/DataInputStream.h>");
+out.println("#include <decaf/io/DataOutputStream.h>");
+out.println("#include <decaf/io/IOException.h>");
+out.println("#include <activemq/util/Config.h>");
+out.println("#include <activemq/commands/DataStructure.h>");
+out.println("#include <activemq/wireformat/openwire/OpenWireFormat.h>");
+out.println("#include <activemq/wireformat/openwire/utils/BooleanStream.h>");
+out.println("");
+out.println("namespace activemq{");
+out.println("namespace wireformat{");
+out.println("namespace openwire{");
+out.println("namespace marshal{");
+out.println("namespace v"+getOpenwireVersion()+"{");
+out.println("");
+out.println(" /**");
+out.println(" * Marshaling code for Open Wire Format for "+className);
+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 Java Classes");
+out.println(" * in the activemq-openwire-generator module");
+out.println(" */");
+out.println(" class AMQCPP_API "+className+" : public "+baseClass+" {");
+out.println(" public:");
+out.println("");
+out.println(" "+className+"() {}");
+out.println(" virtual ~"+className+"() {}");
+out.println("");
+
+ if( !isAbstractClass() ) {
+
+out.println(" /**");
+out.println(" * Creates a new instance of this marshalable type.");
+out.println(" *");
+out.println(" * @return new DataStructure object pointer caller owns it.");
+out.println(" */");
+out.println(" virtual commands::DataStructure* createObject() const;");
+out.println("");
+out.println(" /**");
+out.println(" * Get the Data Structure Type that identifies this Marshaler");
+out.println(" *");
+out.println(" * @return byte holding the data structure type value");
+out.println(" */");
+out.println(" virtual unsigned char getDataStructureType() const;");
+out.println("");
+ }
+out.println(" /**");
+out.println(" * Un-marshal an object instance from the data input stream.");
+out.println(" *");
+out.println(" * @param wireFormat - describes the wire format of the broker.");
+out.println(" * @param dataStructure - Object to be un-marshaled.");
+out.println(" * @param dataIn - BinaryReader that provides that data.");
+out.println(" * @param bs - BooleanStream stream used to unpack bits from the wire.");
+out.println(" *");
+out.println(" * @throws IOException if an error occurs during the unmarshal.");
+out.println(" */");
+out.println(" virtual void tightUnmarshal( OpenWireFormat* wireFormat,");
+out.println(" commands::DataStructure* dataStructure,");
+out.println(" decaf::io::DataInputStream* dataIn,");
+out.println(" utils::BooleanStream* bs ) throw( decaf::io::IOException );");
+out.println("");
+out.println(" /**");
+out.println(" * Write the booleans that this object uses to a BooleanStream");
+out.println(" *");
+out.println(" * @param wireFormat - describes the wire format of the broker");
+out.println(" * @param dataStructure - Object to be marshaled");
+out.println(" * @param bs - BooleanStream stream used to pack bits from the wire.");
+out.println(" * @returns int value indicating the size of the marshaled object.");
+out.println(" *");
+out.println(" * @throws IOException if an error occurs during the marshal.");
+out.println(" */");
+out.println(" virtual int tightMarshal1( OpenWireFormat* wireFormat,");
+out.println(" commands::DataStructure* dataStructure,");
+out.println(" utils::BooleanStream* bs ) throw( decaf::io::IOException );");
+out.println("");
+out.println(" /**");
+out.println(" * Write a object instance to data output stream");
+out.println(" *");
+out.println(" * @param wireFormat - describes the wire format of the broker");
+out.println(" * @param dataStructure - Object to be marshaled");
+out.println(" * @param dataOut - BinaryReader that provides that data sink");
+out.println(" * @param bs - BooleanStream stream used to pack bits from the wire.");
+out.println(" *");
+out.println(" * @throws IOException if an error occurs during the marshal.");
+out.println(" */");
+out.println(" virtual void tightMarshal2( OpenWireFormat* wireFormat,");
+out.println(" commands::DataStructure* dataStructure,");
+out.println(" decaf::io::DataOutputStream* dataOut,");
+out.println(" utils::BooleanStream* bs ) throw( decaf::io::IOException );");
+out.println("");
+out.println(" /**");
+out.println(" * Un-marshal an object instance from the data input stream");
+out.println(" *");
+out.println(" * @param wireFormat - describes the wire format of the broker");
+out.println(" * @param dataStructure - Object to be marshaled");
+out.println(" * @param dataIn - BinaryReader that provides that data source");
+out.println(" *");
+out.println(" * @throws IOException if an error occurs during the unmarshal.");
+out.println(" */");
+out.println(" virtual void looseUnmarshal( OpenWireFormat* wireFormat,");
+out.println(" commands::DataStructure* dataStructure,");
+out.println(" decaf::io::DataInputStream* dataIn ) throw( decaf::io::IOException );");
+out.println("");
+out.println(" /**");
+out.println(" * Write a object instance to data output stream");
+out.println(" *");
+out.println(" * @param wireFormat - describs the wire format of the broker");
+out.println(" * @param dataStructure - Object to be marshaled");
+out.println(" * @param dataOut - BinaryWriter that provides that data sink");
+out.println(" *");
+out.println(" * @throws IOException if an error occurs during the marshal.");
+out.println(" */");
+out.println(" virtual void looseMarshal( OpenWireFormat* wireFormat,");
+out.println(" commands::DataStructure* dataStructure,");
+out.println(" decaf::io::DataOutputStream* dataOut ) throw( decaf::io::IOException );");
+out.println("");
+out.println(" };");
+out.println("");
+out.println("}}}}}");
+out.println("");
+out.println("#endif /*_ACTIVEMQ_WIREFORMAT_OPENWIRE_MARSAHAL_V"+getOpenwireVersion()+"_"+className.toUpperCase()+"_H_*/");
+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();
+ }
+ }
+ }
+
+ public void generateFactory(PrintWriter out) {
+ generateLicence(out);
+out.println("#ifndef _ACTIVEMQ_WIREFORMAT_OPENWIRE_MARSAHAL_V"+getOpenwireVersion()+"_MARSHALERFACTORY_H_");
+out.println("#define _ACTIVEMQ_WIREFORMAT_OPENWIRE_MARSAHAL_V"+getOpenwireVersion()+"_MARSHALERFACTORY_H_");
+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 <activemq/wireformat/openwire/OpenWireFormat.h>");
+out.println("");
+out.println("namespace activemq{");
+out.println("namespace wireformat{");
+out.println("namespace openwire{");
+out.println("namespace marshal{");
+out.println("namespace v"+getOpenwireVersion()+"{");
+out.println("");
+out.println(" /**");
+out.println(" * Used to create marshallers for a specific version of the wire");
+out.println(" * protocol.");
+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 Groovy scripts");
+out.println(" * in the activemq-openwire-generator module");
+out.println(" */");
+out.println(" class MarshallerFactory {");
+out.println(" public:");
+out.println("");
+out.println(" virtual ~MarshallerFactory() {};");
+out.println("");
+out.println(" virtual void configure( OpenWireFormat* format );");
+out.println("");
+out.println(" };");
+out.println("");
+out.println("}}}}}");
+out.println("");
+out.println("#endif /*_ACTIVEMQ_WIREFORMAT_OPENWIRE_MARSHAL_V"+getOpenwireVersion()+"_MARSHALLERFACTORY_H_*/");
+ }
+
+ public List<JClass> getConcreteClasses() {
+ return concreteClasses;
+ }
+
+ public void setConcreteClasses(List<JClass> concreteClasses) {
+ this.concreteClasses = concreteClasses;
+ }
+
+ public String getTargetDir() {
+ return targetDir;
+ }
+
+ public void setTargetDir(String targetDir) {
+ this.targetDir = targetDir;
+ }
+}
Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ.Openwire.Generator/src/main/java/org/apache/activemq/nms/openwire/tool/marshalers/AmqCSharpMarshallersGenerator.java
------------------------------------------------------------------------------
svn:eol-style = native