mirror of https://github.com/apache/activemq.git
refactored the C# code generation scripts to make them a little easier to work with
git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@379507 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e733f71b48
commit
66dd4364ea
|
@ -0,0 +1,34 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright 2005-2006 The Apache Software Foundation
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.activemq.openwire.tool;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @version $Revision$
|
||||||
|
*/
|
||||||
|
public abstract class OpenWireCSharpClassesScript extends OpenWireClassesScript {
|
||||||
|
|
||||||
|
public Object run() {
|
||||||
|
filePostFix = ".cs";
|
||||||
|
destDir = new File("../openwire-dotnet/src/OpenWire.Client/Commands");
|
||||||
|
|
||||||
|
return super.run();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,119 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright 2005-2006 The Apache Software Foundation
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.activemq.openwire.tool;
|
||||||
|
|
||||||
|
import mx4j.tools.adaptor.http.GetAttributeCommandProcessor;
|
||||||
|
|
||||||
|
import org.codehaus.jam.JClass;
|
||||||
|
import org.codehaus.jam.JamClassIterator;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @version $Revision$
|
||||||
|
*/
|
||||||
|
public abstract class OpenWireClassesScript extends OpenWireScript {
|
||||||
|
protected Set manuallyMaintainedClasses = new HashSet();
|
||||||
|
protected File destDir = new File("target/generated/classes");
|
||||||
|
protected File destFile;
|
||||||
|
protected String filePostFix = "";
|
||||||
|
|
||||||
|
protected JClass jclass;
|
||||||
|
protected JClass superclass;
|
||||||
|
protected String simpleName;
|
||||||
|
protected String className;
|
||||||
|
protected String baseClass;
|
||||||
|
protected StringBuffer buffer;
|
||||||
|
|
||||||
|
public OpenWireClassesScript() {
|
||||||
|
String[] names = { "ActiveMQDestination", "ActiveMQTempDestination", "ActiveMQQueue", "ActiveMQTopic", "ActiveMQTempQueue", "ActiveMQTempTopic",
|
||||||
|
"BaseCommand", "ActiveMQMessage", "ActiveMQTextMessage", "ActiveMQMapMessage", "ActiveMQBytesMessage", "ActiveMQStreamMessage",
|
||||||
|
"ActiveMQStreamMessage", "DataStructureSupport" };
|
||||||
|
|
||||||
|
for (int i = 0; i < names.length; i++) {
|
||||||
|
manuallyMaintainedClasses.add(names[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object run() {
|
||||||
|
destDir.mkdirs();
|
||||||
|
buffer = new StringBuffer();
|
||||||
|
|
||||||
|
JamClassIterator iter = getClasses();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
jclass = iter.nextClass();
|
||||||
|
if (isValidClass(jclass)) {
|
||||||
|
processClass(jclass);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
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("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));
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if (out != null) {
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract void generateFile(PrintWriter out);
|
||||||
|
|
||||||
|
protected String getBaseClassName(JClass jclass) {
|
||||||
|
String answer = "AbstractCommand";
|
||||||
|
if (superclass != null) {
|
||||||
|
String name = superclass.getSimpleName();
|
||||||
|
if (name != null && !name.equals("Object")) {
|
||||||
|
answer = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return answer;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getClassName(JClass jclass) {
|
||||||
|
return "AbstractCommand";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -23,6 +23,8 @@ import org.codehaus.jam.JClass;
|
||||||
import org.codehaus.jam.JField;
|
import org.codehaus.jam.JField;
|
||||||
import org.codehaus.jam.JMethod;
|
import org.codehaus.jam.JMethod;
|
||||||
import org.codehaus.jam.JProperty;
|
import org.codehaus.jam.JProperty;
|
||||||
|
import org.codehaus.jam.JamClassIterator;
|
||||||
|
import org.codehaus.jam.JamService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @version $Revision$
|
* @version $Revision$
|
||||||
|
@ -72,6 +74,14 @@ public abstract class OpenWireScript extends GramSupport {
|
||||||
return false; //j.getSuperclass()!=null && isMarshallAware(j.getSuperclass());
|
return false; //j.getSuperclass()!=null && isMarshallAware(j.getSuperclass());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public JamService getJam() {
|
||||||
|
return (JamService) getBinding().getVariable("jam");
|
||||||
|
}
|
||||||
|
|
||||||
|
public JamClassIterator getClasses() {
|
||||||
|
return getJam().getClasses();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts the Java type to a C# type name
|
* Converts the Java type to a C# type name
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -14,59 +14,16 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
import org.apache.activemq.openwire.tool.OpenWireScript
|
import org.apache.activemq.openwire.tool.OpenWireCSharpClassesScript
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates the C# marshalling code for the Open Wire Format
|
* Generates the C# marshalling code for the Open Wire Format
|
||||||
*
|
*
|
||||||
* @version $Revision$
|
* @version $Revision$
|
||||||
*/
|
*/
|
||||||
class GenerateCSharpClasses extends OpenWireScript {
|
class GenerateCSharpClasses extends OpenWireCSharpClassesScript {
|
||||||
|
|
||||||
Object run() {
|
void generateFile(PrintWriter out) {
|
||||||
def destDir = new File("../openwire-dotnet/src/OpenWire.Client/Commands")
|
|
||||||
destDir.mkdirs()
|
|
||||||
|
|
||||||
def messageClasses = classes.findAll {
|
|
||||||
it.getAnnotation("openwire:marshaller")!=null
|
|
||||||
}
|
|
||||||
|
|
||||||
def manuallyMaintainedClasses = ['ActiveMQDestination', 'ActiveMQTempDestination', 'ActiveMQQueue', 'ActiveMQTopic', 'ActiveMQTempQueue', 'ActiveMQTempTopic', 'BaseCommand',
|
|
||||||
'ActiveMQMessage', 'ActiveMQTextMessage', 'ActiveMQMapMessage', 'ActiveMQBytesMessage', 'ActiveMQStreamMessage', 'ActiveMQStreamMessage']
|
|
||||||
|
|
||||||
println "Generating Java marshalling code to directory ${destDir}"
|
|
||||||
|
|
||||||
def buffer = new StringBuffer()
|
|
||||||
|
|
||||||
int counter = 0
|
|
||||||
Map map = [:]
|
|
||||||
|
|
||||||
for (jclass in messageClasses) {
|
|
||||||
|
|
||||||
if (manuallyMaintainedClasses.contains(jclass.simpleName)) continue
|
|
||||||
|
|
||||||
println "Processing $jclass.simpleName"
|
|
||||||
|
|
||||||
def properties = jclass.declaredProperties.findAll { isValidProperty(it) }
|
|
||||||
def file = new File(destDir, jclass.simpleName + ".cs")
|
|
||||||
|
|
||||||
|
|
||||||
String baseClass = jclass.superclass.simpleName
|
|
||||||
if (baseClass == "Object") {
|
|
||||||
baseClass = "AbstractCommand"
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
String baseClass = "AbstractCommand"
|
|
||||||
if (jclass.superclass?.simpleName == "ActiveMQMessage") {
|
|
||||||
baseClass = "ActiveMQMessage"
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
buffer << """
|
|
||||||
${jclass.simpleName}.class
|
|
||||||
"""
|
|
||||||
|
|
||||||
file.withWriter { out |
|
|
||||||
out << """//
|
out << """//
|
||||||
// Marshalling code for Open Wire Format for ${jclass.simpleName}
|
// Marshalling code for Open Wire Format for ${jclass.simpleName}
|
||||||
//
|
//
|
||||||
|
@ -133,7 +90,5 @@ namespace OpenWire.Client.Commands
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue