You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cm...@apache.org on 2010/01/18 21:12:49 UTC
svn commit: r900531 [2/2] - in
/activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src:
handcoded/ handcoded/org/ handcoded/org/apache/
handcoded/org/apache/activemq/ handcoded/org/apache/activemq/amqp/
handcoded/org/apache/activemq/amqp/ge...
Modified: activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpClass.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpClass.java?rev=900531&r1=900530&r2=900531&view=diff
==============================================================================
--- activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpClass.java (original)
+++ activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpClass.java Mon Jan 18 20:12:47 2010
@@ -8,24 +8,32 @@
import static org.apache.activemq.amqp.generator.Utils.writeJavaCopyWrite;
import java.io.BufferedWriter;
+import java.io.DataInputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
-import java.util.HashSet;
+import java.io.UnsupportedEncodingException;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
+import java.util.TreeSet;
+import org.apache.activemq.amqp.generator.TypeRegistry.JavaTypeMapping;
import org.apache.activemq.amqp.generator.jaxb.schema.Choice;
import org.apache.activemq.amqp.generator.jaxb.schema.Descriptor;
import org.apache.activemq.amqp.generator.jaxb.schema.Doc;
import org.apache.activemq.amqp.generator.jaxb.schema.Encoding;
import org.apache.activemq.amqp.generator.jaxb.schema.Field;
import org.apache.activemq.amqp.generator.jaxb.schema.Type;
+import org.apache.activemq.amqp.v1pr2.messaging.AmqpDistributionMode;
+import org.apache.activemq.amqp.v1pr2.transport.AmqpConnectionErrorCode;
+import org.apache.activemq.amqp.v1pr2.types.AmqpUint;
+import org.apache.activemq.amqp.v1pr2.types.AmqpUshort;
public class AmqpClass {
protected String name;
+ protected String label;
protected AmqpDoc doc;
protected AmqpChoice choice;
protected AmqpException exception;
@@ -37,19 +45,17 @@
protected boolean primitive;
LinkedHashMap<String, AmqpField> fields = new LinkedHashMap<String, AmqpField>();
- protected String javaPackage = "";
- protected String javaType = "";
public boolean handcoded;
- public void parseFromType(Generator generator, String source, Type type) {
+ // Java mapping for this class:
+ public TypeRegistry.JavaTypeMapping typeMapping;
+ // Java mapping of the value that this type holds (if any)
+ public TypeRegistry.JavaTypeMapping valueMapping;
+
+ public void parseFromType(Generator generator, String source, Type type) throws UnknownTypeException {
this.name = type.getName();
this.restrictedType = type.getSource();
-
- // See if this is a restricting type (used to restrict the type of a
- // field):
- if (type.getClazz().equalsIgnoreCase("restricted")) {
- this.restricted = true;
- }
+ this.label = type.getLabel();
for (Object typeAttribute : type.getEncodingOrDescriptorOrFieldOrChoiceOrExceptionOrDoc()) {
if (typeAttribute instanceof Field) {
@@ -81,12 +87,16 @@
}
if (type.getClazz().equalsIgnoreCase("primitive")) {
- javaType = "Amqp" + capFirst(toJavaName(name));
setPrimitive(true);
- } else {
- javaType = capFirst(toJavaName(name));
}
- javaPackage = generator.getPackagePrefix() + "." + source;
+
+ // See if this is a restricting type (used to restrict the type of a
+ // field):
+ if (type.getClazz().equalsIgnoreCase("restricted")) {
+ this.restricted = true;
+ }
+
+ typeMapping = new JavaTypeMapping(name, generator.getPackagePrefix() + "." + source + "." + "Amqp" + capFirst(toJavaName(name)));
}
public void generate(Generator generator) throws IOException, UnknownTypeException {
@@ -95,7 +105,7 @@
}
String className = getJavaType();
- File file = new File(generator.getOutputDirectory() + File.separator + new String(javaPackage + "." + className).replace(".", File.separator) + ".java");
+ File file = new File(generator.getOutputDirectory() + File.separator + new String(typeMapping.getFullName()).replace(".", File.separator) + ".java");
file.getParentFile().mkdirs();
if (file.exists()) {
file.delete();
@@ -103,27 +113,43 @@
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writeJavaCopyWrite(writer);
- writer.write("package " + javaPackage + ";\n");
+ writer.write("package " + typeMapping.getPackageName() + ";\n");
writer.newLine();
if (writeImports(writer, generator)) {
writer.newLine();
}
- writer.write("public class " + className);
- if (isPrimitive() || descriptor != null) {
- writer.write(" implements AmqpType");
+ if (doc != null) {
+ doc.writeJavaDoc(writer, 0);
+ } else if (label != null) {
+ Utils.writeJavaComment(writer, 0, "Represents a " + label);
+ }
+
+ // We use enums for restricted types with a choice:
+ if (isRestricted() && choice != null) {
+ writer.write("public enum " + className);
+ } else {
+ writer.write("public class " + className);
+ if (isPrimitive() || descriptor != null) {
+ writer.write(" extends AmqpType");
+ } else if (isRestricted()) {
+ writer.write(" extends " + resolveRestrictedType().getTypeMapping().getShortName());
+ }
}
+
writer.write(" {");
writer.newLine();
writeConstants(writer);
-
+
writeFields(writer);
-
+
+ writeConstructors(writer);
+
writeFieldAccesors(writer);
-
- writeSerializers(writer);
-
+
+ writeSerializers(writer);
+
writer.write("}");
writer.flush();
writer.close();
@@ -132,37 +158,81 @@
private boolean writeImports(BufferedWriter writer, Generator generator) throws IOException, UnknownTypeException {
- HashSet<String> imports = new HashSet<String>();
-
+ TreeSet<String> imports = new TreeSet<String>();
for (AmqpField field : fields.values()) {
- imports.add(field.getJavaPackage());
+
+ AmqpClass fieldType = field.resolveAmqpFieldType();
+ filterOrAddImport(imports, fieldType.getTypeMapping());
+ filterOrAddImport(imports, fieldType.resolveValueMapping());
+ if (fieldType.choice != null) {
+ filterOrAddImport(imports, fieldType.resolveBaseTypeMapping());
+ }
+
+ if (fieldType.getName().equals("*")) {
+ imports.add(generator.getPackagePrefix() + ".AmqpMarshaller");
+ }
+ }
+
+ if (isPrimitive() || descriptor != null) {
+
+ imports.add(generator.getPackagePrefix() + ".types.AmqpType");
+ imports.add("java.io.DataOutputStream");
+ imports.add("java.io.DataInputStream");
+ imports.add("java.io.IOException");
}
if (isPrimitive()) {
- imports.add(TypeRegistry.getJavaPackage(name));
- imports.add("java.io");
- imports.add(generator.getPackagePrefix());
+ filterOrAddImport(imports, resolveValueMapping());
+ //Need the AmqpMarshaller to help with encodings:
+ if (hasNonZeroEncoding() || encodings.size() > 1) {
+ imports.add(generator.getPackagePrefix() + ".AmqpMarshaller");
+ }
+ imports.add("java.io.UnsupportedEncodingException");
}
- if (descriptor != null) {
- imports.add(generator.getPackagePrefix());
- imports.add(generator.getPackagePrefix() + ".types" );
- imports.add("java.io");
+ if (isRestricted()) {
+ if (choice != null) {
+ imports.add("java.io.UnsupportedEncodingException");
+ }
+ imports.add(TypeRegistry.resolveAmqpClass(restrictedType).getTypeMapping().getImport());
}
- imports.remove(getJavaPackage());
- imports.remove("java.lang");
+ if (descriptor != null) {
+ AmqpClass describedType = descriptor.resolveDescribedType();
+ if (describedType.getName().equals("list")) {
+ imports.add("java.util.ArrayList");
+ } else if (describedType.getName().equals("map")) {
+ // Import symbol which is used for the keys:
+ imports.add(TypeRegistry.resolveAmqpClass("symbol").getTypeMapping().getImport());
+ }
+
+ filterOrAddImport(imports, describedType.getTypeMapping());
+ // filterOrAddImport(imports, describedType.resolveValueMapping());
+ }
boolean ret = false;
for (String toImport : imports) {
ret = true;
- writer.write("import " + toImport + ".*;");
+ writer.write("import " + toImport + ";");
writer.newLine();
}
return ret;
}
+ private void filterOrAddImport(TreeSet<String> imports, JavaTypeMapping mapping) {
+ if (mapping == null) {
+ return;
+ }
+ if (mapping.getImport() == null) {
+ return;
+ }
+ if (mapping.getPackageName().equals(typeMapping.getPackageName())) {
+ return;
+ }
+ imports.add(mapping.getImport());
+ }
+
private boolean writeConstants(BufferedWriter writer) throws IOException, UnknownTypeException {
boolean ret = false;
@@ -211,6 +281,18 @@
writer.newLine();
writer.write(tab(1) + "};");
writer.newLine();
+
+ if (descriptor.getDescribedType().equals("map")) {
+ writer.newLine();
+ writer.write(tab(1) + "//Accessor keys for field mapped fields:");
+ writer.newLine();
+ for (AmqpField field : fields.values()) {
+
+ writer.write(tab(1) + "private static final AmqpSymbol " + toJavaConstant(field.getName()) + "_KEY = " + " new AmqpSymbol(\"" + field.getName() + "\");");
+ writer.newLine();
+ }
+ writer.newLine();
+ }
}
// Write out encodings:
@@ -221,12 +303,110 @@
if (choice != null) {
ret = true;
writer.newLine();
- writer.write(tab(1) + "//Constants:");
+ int i = 0;
+ AmqpClass amqpType = TypeRegistry.resolveAmqpClass(restrictedType);
+ for (Choice constant : choice.choices) {
+ i++;
+ if (constant.getDoc() != null) {
+ AmqpDoc docs = new AmqpDoc();
+ for (Doc doc : constant.getDoc()) {
+ docs.parseFromDoc(doc);
+ }
+ docs.writeJavaDoc(writer, 1);
+ }
+
+ writer.write(tab(1) + toJavaConstant(constant.getName()) + "((" + amqpType.resolveValueMapping().getJavaType() + ") " + constant.getValue() + ")");
+ if (i < choice.choices.size()) {
+ writer.write(",");
+ } else {
+ writer.write(";");
+ }
+ writer.newLine();
+ }
+
+ writer.newLine();
+ writer.write(tab(1) + "private final " + amqpType.getTypeMapping().getJavaType() + " value = new " + amqpType.getTypeMapping().getJavaType() + "();");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "private " + typeMapping.getShortName() + "(" + amqpType.resolveValueMapping().getJavaType() + " value) {");
+ writer.newLine();
+ writer.write(tab(2) + "this.value.setValue(value);");
writer.newLine();
- for (Map.Entry<String, String> constant : choice.choices.entrySet()) {
- writer.write(tab(1) + "public static final " + TypeRegistry.getJavaType(restrictedType) + " " + Utils.toJavaConstant(constant.getKey()) + " = " + constant.getValue() + ";");
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "//TODO: Remove?");
+ writer.newLine();
+ writer.write(tab(1) + "public " + amqpType.getTypeMapping().getJavaType() + " getValue() {");
+ writer.newLine();
+ writer.write(tab(2) + "return value;");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public static final " + getTypeMapping().getJavaType() + " get(" + amqpType.resolveValueMapping().getJavaType() + " value) throws UnsupportedEncodingException{");
+ if (amqpType.resolveValueMapping().getJavaType().equals("int")) {
writer.newLine();
+ writer.write(tab(2) + "switch (value) {");
+ writer.newLine();
+ for (Choice constant : choice.choices) {
+ writer.write(tab(2) + "case " + constant.getValue() + ": {");
+ writer.newLine();
+ writer.write(tab(3) + "return " + toJavaConstant(constant.getName()) + ";");
+ writer.newLine();
+ writer.write(tab(2) + "}");
+ writer.newLine();
+ }
+
+ writer.write(tab(2) + "default: {");
+ writer.newLine();
+ writer.write(tab(3) + "throw new UnsupportedEncodingException();");
+ writer.newLine();
+ writer.write(tab(2) + "}");
+ writer.newLine();
+ writer.write(tab(2) + "}");
+ } else {
+ writer.newLine();
+ i = 0;
+ for (Choice constant : choice.choices) {
+ writer.write(tab(2));
+ if (i > 0) {
+ writer.write("else ");
+ }
+ writer.write("if (value == " + constant.getValue() + ") {");
+ writer.newLine();
+ writer.write(tab(3) + "return " + toJavaConstant(constant.getName()) + ";");
+ writer.newLine();
+ writer.write(tab(2) + "}");
+ writer.newLine();
+ i++;
+ }
+
+ writer.write(tab(2) + "else {");
+ writer.newLine();
+ writer.write(tab(3) + "throw new UnsupportedEncodingException();");
+ writer.newLine();
+ writer.write(tab(2) + "}");
}
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ // writer.newLine();
+ // writer.write(tab(1) + "public static final " +
+ // getTypeMapping().getJavaType() +
+ // " createFromStream(DataInputStream dis) throws IOException {");
+ // writer.newLine();
+ // writer.write(tab(2) + " return get(" +
+ // amqpType.getTypeMapping().getJavaType() +
+ // ".createFromStream(dis)).getValue();");
+ // writer.newLine();
+ // writer.write(tab(1) + "}");
+ // writer.newLine();
+
}
return ret;
}
@@ -236,9 +416,12 @@
writer.newLine();
writer.write(tab(1) + "public static final byte FORMAT_CODE = (byte) " + encodings.getFirst().getCode() + ";");
writer.newLine();
+ writer.write(tab(1) + "public static final FormatSubCategory FORMAT_CATEGORY = FormatSubCategory.getCategory(FORMAT_CODE);");
+ writer.newLine();
} else {
+ String encodingName = getEncodingName(false);
writer.newLine();
- writer.write(tab(1) + "public static enum " + toJavaConstant(name) + "_ENCODING {");
+ writer.write(tab(1) + "public static enum " + encodingName + " {");
writer.newLine();
int i = 0;
@@ -250,7 +433,7 @@
}
eName = toJavaConstant(eName);
- writer.write(tab(2) + eName + " ((byte) " + encoding.getCode() + ", " + encoding.getWidth() + ")");
+ writer.write(tab(2) + eName + " ((byte) " + encoding.getCode() + ")");
if (i < encodings.size()) {
writer.write(",");
} else {
@@ -265,52 +448,67 @@
}
writer.newLine();
- writer.write(tab(2) + "private final byte formatCode;");
+ writer.write(tab(2) + "public final byte FORMAT_CODE;");
writer.newLine();
- writer.write(tab(2) + "private final int width;");
+ writer.write(tab(2) + "public final FormatSubCategory CATEGORY;");
writer.newLine();
// Write constructor:
writer.newLine();
- writer.write(tab(2) + toJavaConstant(name) + "_ENCODING(byte formatCode, int width) {");
+ writer.write(tab(2) + encodingName + "(byte formatCode) {");
writer.newLine();
- writer.write(tab(3) + "this.formatCode = formatCode;");
+ writer.write(tab(3) + "this.FORMAT_CODE = formatCode;");
writer.newLine();
- writer.write(tab(3) + "this.width = width;");
+ writer.write(tab(3) + "this.CATEGORY = FormatSubCategory.getCategory(formatCode);");
writer.newLine();
writer.write(tab(2) + "}");
writer.newLine();
- // Write Accessors:
writer.newLine();
- writer.write(tab(2) + "public final byte getFormatCode() {");
+ writer.write(tab(2) + "public final int getEncodedSize(" + TypeRegistry.getJavaType(name) + " val) throws IOException {");
+ writer.newLine();
+ writer.write(tab(3) + "if(CATEGORY.WIDTH > 0) {");
+ writer.newLine();
+ writer.write(tab(4) + "return 1 + CATEGORY.WIDTH + AmqpMarshaller.getEncodedSizeOf" + capFirst(toJavaName(name)) + "(val, this);");
writer.newLine();
- writer.write(tab(3) + "return formatCode;");
+ writer.write(tab(3) + "}");
+ writer.newLine();
+ writer.write(tab(3) + "return 1;");
writer.newLine();
writer.write(tab(2) + "}");
writer.newLine();
writer.newLine();
- writer.write(tab(2) + "public final int getWidth() {");
+ writer.write(tab(2) + "public final int getEncodedCount(" + TypeRegistry.getJavaType(name) + " val) throws IOException {");
writer.newLine();
- writer.write(tab(3) + "return width;");
+ if (hasCompoundEncoding() || hasArrayEncoding()) {
+ writer.write(tab(3) + "return AmqpMarshaller.getEncodedCounfOf" + capFirst(toJavaName(name)) + "(val, this);");
+ } else {
+ writer.write(tab(3) + "return 1;");
+ }
writer.newLine();
writer.write(tab(2) + "}");
writer.newLine();
writer.newLine();
- writer.write(tab(2) + "public final int getEncodedSize(" + TypeRegistry.getJavaType(name) + " val) throws IOException{");
+
+ writer.write(tab(2) + "public static " + encodingName + " getEncoding(byte formatCode) throws UnsupportedEncodingException {");
writer.newLine();
- writer.write(tab(3) + "if(width > 0) {");
+ writer.write(tab(3) + "for(" + encodingName + " e: " + encodingName + ".values()) {");
writer.newLine();
- writer.write(tab(4) + "return 1 + width + AmqpMarshaller.getEncodedSizeOf" + capFirst(toJavaName(name)) + "(val, this);");
+ writer.write(tab(4) + "if(e.FORMAT_CODE == formatCode) {");
+ writer.newLine();
+ writer.write(tab(5) + "return e;");
+ writer.newLine();
+ writer.write(tab(4) + "}");
writer.newLine();
writer.write(tab(3) + "}");
writer.newLine();
- writer.write(tab(3) + "return 1;");
+ writer.write(tab(3) + "throw new UnsupportedEncodingException(\"Unexpected format code for " + capFirst(name) + ": \" + formatCode);");
writer.newLine();
writer.write(tab(2) + "}");
writer.newLine();
+
writer.write(tab(1) + "}");
writer.newLine();
}
@@ -318,27 +516,24 @@
private boolean writeFields(BufferedWriter writer) throws IOException, UnknownTypeException {
boolean ret = false;
-
- if (descriptor != null)
- {
+
+ if (descriptor != null) {
ret = true;
- String encodingType = descriptor.getSymbolicName();
- encodingType = encodingType.substring(encodingType.lastIndexOf(":") + 1);
- encodingType = "Amqp" + capFirst(toJavaName(encodingType));
-
+ String encodingType = TypeRegistry.resolveAmqpClass(descriptor.getDescribedType()).getJavaType();
writer.newLine();
writer.write(tab(1) + "private " + encodingType + " value;");
writer.newLine();
}
-
+
for (AmqpField field : fields.values()) {
ret = true;
if (field.getDoc() != null) {
// TODO
}
- String array = field.isMultiple() ? " []" : "";
- writer.write(tab(1) + "private " + field.getJavaType() + array + " " + field.getJavaName());
+ AmqpClass amqpType = field.resolveAmqpFieldType();
+
+ writer.write(tab(1) + "private " + amqpType.getJavaType() + " " + field.getJavaName());
if (field.getDefaultValue() != null) {
writer.write(" = " + field.getDefaultValue());
@@ -364,30 +559,66 @@
return ret;
}
+ private boolean writeConstructors(BufferedWriter writer) throws IOException, UnknownTypeException {
+ boolean ret = false;
+
+ if (isPrimitive()) {
+ writer.newLine();
+ writer.write(tab(1) + "public " + typeMapping.getShortName() + "() {");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public " + typeMapping.getShortName() + "(" + valueMapping.getJavaType() + " value) {");
+ writer.newLine();
+ writer.write(tab(2) + "this.value = value;");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+ }
+
+ return ret;
+ }
+
private boolean writeFieldAccesors(BufferedWriter writer) throws IOException, UnknownTypeException {
boolean ret = false;
-
+
for (AmqpField field : fields.values()) {
ret = true;
if (field.getDoc() != null) {
// TODO
}
- String array = field.isMultiple() ? " []" : "";
+ AmqpClass amqpType = field.resolveAmqpFieldType();
// Setter:
writer.newLine();
- writer.write(tab(1) + "public final void set" + capFirst(field.getJavaName()) + "(" + field.getJavaType() + array + " " + toJavaName(field.getName()) + ") {");
+ if (field.getDoc() != null) {
+ field.getDoc().writeJavaDoc(writer, 1);
+ }
+ writer.write(tab(1) + "public final void set" + capFirst(field.getJavaName()) + "(" + amqpType.resolveValueType() + " " + toJavaName(field.getName()) + ") {");
writer.newLine();
- writer.write(tab(2) + "this." + field.getJavaName() + " = " + field.getJavaName() + ";");
+ if (amqpType.isPrimitive() && !amqpType.getName().equals("*")) {
+ writer.write(tab(2) + "this." + field.getJavaName() + ".setValue(" + toJavaName(field.getName()) + ");");
+ } else {
+ writer.write(tab(2) + "this." + field.getJavaName() + " = " + toJavaName(field.getName()) + ";");
+ }
writer.newLine();
writer.write(tab(1) + "}");
writer.newLine();
writer.newLine();
// Getter:
- writer.write(tab(1) + "public final " + field.getJavaType() + array + " get" + capFirst(field.getJavaName()) + "() {");
+ if (field.getDoc() != null) {
+ field.getDoc().writeJavaDoc(writer, 1);
+ }
+ writer.write(tab(1) + "public final " + amqpType.resolveValueType() + " get" + capFirst(field.getJavaName()) + "() {");
writer.newLine();
- writer.write(tab(2) + "return " + field.getJavaName() + ";");
+ if (amqpType.isPrimitive() && !amqpType.getName().equals("*")) {
+ writer.write(tab(2) + "return " + field.getJavaName() + ".getValue();");
+ } else {
+ writer.write(tab(2) + "return " + field.getJavaName() + ";");
+ }
writer.newLine();
writer.write(tab(1) + "}");
writer.newLine();
@@ -403,6 +634,10 @@
if (hasMultipleEncodings()) {
writer.newLine();
writer.write(tab(2) + "this.encoding = null;");
+ writer.newLine();
+ writer.write(tab(2) + "encodedSize = -1;");
+ writer.newLine();
+ writer.write(tab(2) + "encodedCount = -1;");
}
writer.newLine();
writer.write(tab(1) + "}");
@@ -422,82 +657,195 @@
private boolean writeSerializers(BufferedWriter writer) throws IOException, UnknownTypeException {
boolean ret = false;
+ if (!(isPrimitive() || descriptor != null)) {
+ return false;
+ }
+
+ ret = true;
+
+ writer.newLine();
+ writer.write(tab(1) + "public static final " + typeMapping.javaType + " createFromStream(DataInputStream dis) throws IOException {");
+ writer.newLine();
+ writer.write(tab(2) + typeMapping.javaType + " rc = new " + typeMapping.javaType + "();");
+ writer.newLine();
+ writer.write(tab(2) + "rc.unmarshal(dis);");
+ writer.newLine();
+ writer.write(tab(2) + "return rc;");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public final void marshal(DataOutputStream dos) throws IOException {");
+ writer.newLine();
+ writer.write(tab(2) + "marshalConstructor(dos);");
+ writer.newLine();
+ writer.write(tab(2) + "marshalData(dos);");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public final void unmarshal(DataInputStream dis) throws IOException {");
+ writer.newLine();
+ writer.write(tab(2) + "unmarshalConstructor(dis);");
+ writer.newLine();
+ writer.write(tab(2) + "unmarshalData(dis);");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
// Add accessors for primitive encoded sizes:
if (isPrimitive()) {
- ret = true;
- writer.newLine();
- writer.write(tab(1) + "public final int getEncodedSize() throws IOException{");
+
writer.newLine();
// Handle fixed width encodings:
if (encodings != null && encodings.size() == 1 && "fixed".equals(encodings.getFirst().getCategory())) {
AmqpEncoding encoding = encodings.getFirst();
+ writer.write(tab(1) + "public final int getEncodedSize() throws IOException{");
+ writer.newLine();
writer.write(tab(2) + "return " + (1 + new Integer(encoding.getWidth())) + ";");
writer.newLine();
writer.write(tab(1) + "}");
writer.newLine();
writer.newLine();
- writer.write(tab(1) + "public final void marshal(DataOutputStream dos) throws IOException {");
+ writer.write(tab(1) + "public final int getEncodedCount() throws IOException{");
+ writer.newLine();
+ writer.write(tab(2) + "return 1;");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public final void marshalConstructor(DataOutputStream dos) throws IOException {");
writer.newLine();
writer.write(tab(2) + "dos.writeByte(FORMAT_CODE);");
writer.newLine();
- if (Integer.parseInt(encoding.getWidth()) > 0) {
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public final void unmarshalConstructor(DataInputStream dis) throws IOException {");
+ writer.newLine();
+ writer.write(tab(2) + "byte fc = dis.readByte();");
+ writer.newLine();
+ writer.write(tab(2) + "if(fc != FORMAT_CODE) {");
+ writer.newLine();
+ writer.write(tab(3) + "throw new UnsupportedEncodingException(\"Unexpected format code for " + capFirst(toJavaName(name)) + "\" + fc + \" expected: \" + FORMAT_CODE);");
+ writer.newLine();
+ writer.write(tab(2) + "}");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public final void marshalData(DataOutputStream dos) throws IOException {");
+ writer.newLine();
+ if (hasNonZeroEncoding()) {
+
writer.write(tab(2) + "AmqpMarshaller.write" + capFirst(toJavaName(name)) + "(value, dos);");
- writer.newLine();
}
+ writer.newLine();
writer.write(tab(1) + "}");
writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public final void unmarshalData(DataInputStream dis) throws IOException {");
+ writer.newLine();
+ if (hasNonZeroEncoding()) {
+ writer.write(tab(2) + "value = AmqpMarshaller.read" + capFirst(toJavaName(name)) + "(dis);");
+ }
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
} else {
+ writer.write(tab(1) + "public final void chooseEncoding() throws IOException {");
+ writer.newLine();
+ writer.write(tab(2) + "if(encoding == null) {");
+ writer.newLine();
+ writer.write(tab(3) + "encoding = AmqpMarshaller.choose" + capFirst(name) + "Encoding(value);");
+ writer.newLine();
+ writer.write(tab(2) + "}");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public final int getEncodedSize() throws IOException {");
+ writer.newLine();
+ writer.write(tab(2) + "if(encodedSize == -1) {");
+ writer.newLine();
+ writer.write(tab(3) + "chooseEncoding();");
+ writer.newLine();
+ writer.write(tab(3) + "encodedSize = encoding.getEncodedSize(value);");
+ writer.newLine();
+ writer.write(tab(2) + "}");
+ writer.newLine();
+ writer.write(tab(2) + "return encodedSize;");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public final int getEncodedCount() throws IOException {");
+ writer.newLine();
+ writer.write(tab(2) + "if(encodedCount == -1) {");
+ writer.newLine();
+ writer.write(tab(3) + "chooseEncoding();");
+ writer.newLine();
+ writer.write(tab(3) + "encodedCount = encoding.getEncodedCount(value);");
+ writer.newLine();
+ writer.write(tab(2) + "}");
writer.newLine();
writer.write(tab(2) + "chooseEncoding();");
writer.newLine();
- writer.write(tab(2) + "return encoding.getEncodedSize(value);");
+ writer.write(tab(2) + "return encoding.getEncodedCount(value);");
writer.newLine();
writer.write(tab(1) + "}");
writer.newLine();
writer.newLine();
- writer.write(tab(1) + "public final void marshal(DataOutputStream dos) throws IOException {");
+ writer.write(tab(1) + "public final void marshalConstructor(DataOutputStream dos) throws IOException {");
writer.newLine();
writer.write(tab(2) + "chooseEncoding();");
writer.newLine();
- writer.write(tab(2) + "dos.writeByte(encoding.getFormatCode());");
+ writer.write(tab(2) + "dos.writeByte(encoding.FORMAT_CODE);");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public final void unmarshalConstructor(DataInputStream dis) throws IOException {");
+ writer.newLine();
+ writer.write(tab(2) + "encoding = " + getEncodingName(false) + ".getEncoding(dis.readByte());");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public final void marshalData(DataOutputStream dos) throws IOException {");
if (hasNonZeroEncoding()) {
writer.newLine();
- writer.write(tab(2) + "int size = encoding.getEncodedSize(value);");
- writer.newLine();
- writer.write(tab(2) + "if(encoding.getWidth() == 1) {");
- writer.newLine();
- writer.write(tab(3) + "dos.writeByte(size);");
- writer.newLine();
- writer.write(tab(2) + "}");
- writer.newLine();
- writer.write(tab(2) + "else if(encoding.getWidth() == 4) {");
- writer.newLine();
- writer.write(tab(3) + "dos.writeInt(size);");
- writer.newLine();
- writer.write(tab(2) + "}");
+ writer.write(tab(2) + "encoding.CATEGORY.marshalFormatHeader(this, dos);");
writer.newLine();
writer.write(tab(2) + "AmqpMarshaller.write" + capFirst(toJavaName(name)) + "(value, encoding, dos);");
writer.newLine();
}
-
writer.write(tab(1) + "}");
writer.newLine();
writer.newLine();
- writer.write(tab(1) + "public final void chooseEncoding() throws IOException {");
- writer.newLine();
- writer.write(tab(2) + "if(encoding == null) {");
- writer.newLine();
- writer.write(tab(3) + "encoding = AmqpMarshaller.choose" + capFirst(name) + "Encoding(value);");
- writer.newLine();
- writer.write(tab(2) + "}");
- writer.newLine();
+ writer.write(tab(1) + "public final void unmarshalData(DataInputStream dis) throws IOException {");
+ if (hasNonZeroEncoding()) {
+ writer.newLine();
+ writer.write(tab(2) + "value = AmqpMarshaller.read" + capFirst(toJavaName(name)) + "(encoding, encodedSize, encodedCount, dis);");
+ writer.newLine();
+ }
writer.write(tab(1) + "}");
writer.newLine();
-
}
}
@@ -510,26 +858,118 @@
writer.newLine();
writer.write(tab(1) + "}");
writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public final int getEncodedCount() throws IOException {");
+ writer.newLine();
+ writer.write(tab(2) + "return 1;");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
writer.newLine();
- writer.write(tab(1) + "public final void marshal(DataOutputStream dos) throws IOException {");
+ writer.write(tab(1) + "public final void marshalConstructor(DataOutputStream dos) throws IOException {");
writer.newLine();
writer.write(tab(2) + "dos.write(CONSTRUCTOR);");
writer.newLine();
- writer.write(tab(2) + "value.marshal(dos);");
+ writer.write(tab(2) + "value.marshalConstructor(dos);");
writer.newLine();
writer.write(tab(1) + "}");
writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public final void marshalData(DataOutputStream dos) throws IOException {");
+ writer.newLine();
+ writer.write(tab(2) + "value.marshalData(dos);");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public final void unmarshalConstructor(DataInputStream dos) throws IOException {");
+ writer.newLine();
+ writer.write(tab(2) + "//TODO");
+ writer.newLine();
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
+ writer.newLine();
+ writer.write(tab(1) + "public final void unmarshalData(DataInputStream dis) throws IOException {");
+ writer.newLine();
+ if (descriptor.getDescribedType().equals("list")) {
+ writer.write(tab(2) + "value = new " + TypeRegistry.resolveAmqpClass(descriptor.getDescribedType()).getJavaType() + "();");
+ writer.newLine();
+ writer.write(tab(2) + "value.setValue(new ArrayList<AmqpType>(" + fields.size() + "));");
+ writer.newLine();
+ writer.newLine();
+ writer.write(tab(2) + "//Deserialize the values and add them to the list:");
+ writer.newLine();
+ } else if (descriptor.getDescribedType().equals("map")) {
+ writer.write(tab(2) + "value = " + TypeRegistry.resolveAmqpClass(descriptor.getDescribedType()).getJavaType() + ".createFromStream(dis);");
+ writer.newLine();
+ writer.newLine();
+ writer.write(tab(2) + "//Get the values from the map:");
+ writer.newLine();
+ } else {
+ throw new UnknownTypeException("Support for " + descriptor.getDescribedType() + " as a described type isn't yet implemented");
+ }
+
+ int f = 0;
+ for (AmqpField field : fields.values()) {
+
+ AmqpClass fieldType = field.resolveAmqpFieldType();
+ if (descriptor.getDescribedType().equals("list")) {
+ if (fieldType.isRestricted() && fieldType.choice != null) {
+ writer.write(tab(2) + field.getJavaName() + " = " + fieldType.getJavaType() + ".get(" + fieldType.resolveRestrictedType().getTypeMapping().getShortName()
+ + ".createFromStream(dis).getValue());");
+ writer.newLine();
+ writer.write(tab(2) + "value.getValue().set(" + f + ", " + field.getJavaName() + ".getValue());");
+ } else if (field.getType().equals("*")) {
+ writer.newLine();
+ writer.write(tab(2) + field.getJavaName() + " = " + "AmqpMarshaller.readType(dis);");
+ writer.newLine();
+ writer.write(tab(2) + "value.getValue().set(" + f + ", " + field.getJavaName() + ");");
+ writer.newLine();
+ } else {
+ writer.newLine();
+ writer.write(tab(2) + field.getJavaName() + " = new " + fieldType.getTypeMapping().getShortName() + "();");
+ writer.newLine();
+ writer.write(tab(2) + field.getJavaName() + ".unmarshal(dis);");
+ writer.newLine();
+ writer.write(tab(2) + "value.getValue().set(" + f + ", " + field.getJavaName() + ");");
+ }
+ writer.newLine();
+ } else if (descriptor.getDescribedType().equals("map")) {
+ if (fieldType.isRestricted() && fieldType.choice != null) {
+ // e.g. value =
+ // AmqpDistributionMode.get(((AmqpUint)value.getValue().get(DISTRIBUTION_MODE_KEY)).getValue());
+ writer.write(tab(2) + field.getJavaName() + " = " + fieldType.getJavaType() + ".get(((" + fieldType.resolveBaseTypeMapping().getJavaType() + ") value.getValue().get("
+ + toJavaConstant(field.getName()) + "_KEY)).getValue());");
+
+ } else {
+ writer.write(tab(2) + field.getJavaName() + " = (" + fieldType.getJavaType() + ") value.getValue().get(" + toJavaConstant(field.getName()) + "_KEY);");
+ }
+ writer.newLine();
+ } else {
+ throw new UnknownTypeException("Support for " + descriptor.getDescribedType() + " as a described type isn't yet implemented");
+ }
+ f++;
+ }
+
+ writer.write(tab(1) + "}");
+ writer.newLine();
+
}
return ret;
}
public String getJavaType() {
- return javaType;
+ return typeMapping.getJavaType();
}
public String getJavaPackage() {
- return javaPackage;
+ return typeMapping.getPackageName();
}
public String getName() {
@@ -552,6 +992,10 @@
return restrictedType;
}
+ public AmqpClass resolveRestrictedType() throws UnknownTypeException {
+ return TypeRegistry.resolveAmqpClass(restrictedType);
+ }
+
public void setPrimitive(boolean primitive) {
this.primitive = primitive;
}
@@ -588,6 +1032,48 @@
return false;
}
+ public boolean hasVariableEncoding() {
+ if (encodings == null) {
+ return false;
+ }
+
+ for (AmqpEncoding encoding : encodings) {
+ if (encoding.isVariable()) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public boolean hasCompoundEncoding() {
+ if (encodings == null) {
+ return false;
+ }
+
+ for (AmqpEncoding encoding : encodings) {
+ if (encoding.isCompound()) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public boolean hasArrayEncoding() {
+ if (encodings == null) {
+ return false;
+ }
+
+ for (AmqpEncoding encoding : encodings) {
+ if (encoding.isArray()) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
public String getEncodingName(boolean full) {
if (full) {
return getJavaType() + "." + getEncodingName(false);
@@ -596,6 +1082,63 @@
}
}
+ /**
+ * Resolves the JavaTypeMapping that will be exposed via the class' api.
+ *
+ * @return
+ * @throws UnknownTypeException
+ */
+ public JavaTypeMapping resolveValueMapping() throws UnknownTypeException {
+ if (valueMapping != null) {
+ return valueMapping;
+ }
+
+ if (isPrimitive()) {
+ valueMapping = TypeRegistry.getJavaTypeMapping(name);
+ return valueMapping;
+ }
+
+ if (descriptor != null) {
+ String encodingType = descriptor.getSymbolicName();
+ encodingType = encodingType.substring(encodingType.lastIndexOf(":") + 1);
+ valueMapping = TypeRegistry.resolveAmqpClass(encodingType).typeMapping;
+ return valueMapping;
+ }
+
+ if (isRestricted()) {
+ return typeMapping;
+ }
+
+ return null;
+ }
+
+ /**
+ * Resolves the TypeMapping of this class' base class
+ *
+ * @return
+ * @throws UnknownTypeException
+ */
+ public JavaTypeMapping resolveBaseTypeMapping() throws UnknownTypeException {
+ if (isRestricted()) {
+ return TypeRegistry.resolveAmqpClass(restrictedType).typeMapping;
+ } else {
+ // Return the any type:
+ return TypeRegistry.resolveAmqpClass("*").typeMapping;
+ }
+ }
+
+ public JavaTypeMapping getTypeMapping() {
+ return typeMapping;
+ }
+
+ public String resolveValueType() throws UnknownTypeException {
+ if (isRestricted()) {
+ return typeMapping.getJavaType();
+ } else {
+ return TypeRegistry.getJavaType(name);
+ }
+ }
+
public String toString() {
String ret = "Class: " + name + " [Encoding=" + encodings + ", Descriptor=" + descriptor + "]\n";
ret += " Fields:\n";
Modified: activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpDescriptor.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpDescriptor.java?rev=900531&r1=900530&r2=900531&view=diff
==============================================================================
--- activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpDescriptor.java (original)
+++ activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpDescriptor.java Mon Jan 18 20:12:47 2010
@@ -53,6 +53,14 @@
this.descriptorId = descriptorId;
}
+ public AmqpClass resolveDescribedType() throws UnknownTypeException {
+ return TypeRegistry.resolveAmqpClass(getDescribedType());
+ }
+
+ public String getDescribedType() {
+ return symbolicName.substring(symbolicName.lastIndexOf(":") + 1);
+ }
+
public String toString() {
return "{" + symbolicName + ", code=" + formatCode + "}";
}
Modified: activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpDoc.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpDoc.java?rev=900531&r1=900530&r2=900531&view=diff
==============================================================================
--- activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpDoc.java (original)
+++ activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpDoc.java Mon Jan 18 20:12:47 2010
@@ -1,12 +1,100 @@
package org.apache.activemq.amqp.generator;
-import org.apache.activemq.amqp.generator.jaxb.schema.Doc;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.activemq.amqp.generator.jaxb.schema.*;
public class AmqpDoc {
-
- public void parseFromDoc(Doc doc)
- {
- //TODO
+ List<Doc> docs = new LinkedList<Doc>();
+
+ public void parseFromDoc(Doc doc) {
+
+ this.docs.add(doc);
+ }
+
+ public void writeJavaDoc(BufferedWriter writer, int indent) throws IOException {
+ String comment = "";
+ for (Doc doc : docs) {
+ for (Object docType : doc.getPOrUlOrOlOrDlOrPicture()) {
+
+ if (docType instanceof P) {
+ comment += handleP((P) docType);
+ } else if (docType instanceof Ul) {
+ comment += handleUl((Ul) docType);
+ } else if (docType instanceof Ol) {
+ comment += handleOl((Ol) docType);
+ } else if (docType instanceof Dl) {
+ comment += handleDl((Dl) docType);
+ } else if (docType instanceof Picture) {
+ comment += "\n<pre>\n" + ((Picture) docType).getvalue() + "</pre>\n";
+ }
+ }
+ comment += "\n";
+ }
+
+ if (comment.length() > 0) {
+ Utils.writeJavaComment(writer, indent, Utils.convertToLines(comment, 80));
+ }
+ }
+
+ private static final String handleP(P p) {
+ return "<p>\n" + p.getvalue() + "\n</p>\n";
+ }
+
+ private static final String handleUl(Ul ul) {
+ String comment = "";
+ comment += "<ul>\n";
+ for (Li li : ul.getLi()) {
+ comment += "<li>\n";
+ for (Object uType : li.getPOrUl()) {
+ if (uType instanceof P) {
+ comment += handleP((P) uType);
+ } else {
+ comment += handleUl((Ul) uType);
+ }
+ }
+ comment += "<\n></li>\n";
+ }
+ comment += "<\n></ul>\n";
+ return comment;
+ }
+
+ private static final String handleOl(Ol ol) {
+ String comment = "";
+ comment += "<ol>\n";
+ for (Li li : ol.getLi()) {
+ comment += "<li>\n";
+ for (Object uType : li.getPOrUl()) {
+ if (uType instanceof P) {
+ comment += handleP((P) uType);
+ } else {
+ comment += handleUl((Ul) uType);
+ }
+ }
+ comment += "\n</li>\n";
+ }
+ comment += "\n</ol>\n";
+ return comment;
+ }
+
+ private static final String handleDl(Dl dl) {
+ String comment = "";
+ comment += "<dl>\n";
+ for (Object dType : dl.getDtOrDd()) {
+ if (dType instanceof Dt) {
+ comment += "<dt>\n" + ((Dt) dType).getvalue() + "\n</dt>\n";
+ } else {
+ for (P p : ((Dd) dType).getP()) {
+ comment += handleP(p);
+ }
+ }
+ }
+ comment += "\n</dl>\n";
+ return comment;
}
+
}
Modified: activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpEncoding.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpEncoding.java?rev=900531&r1=900530&r2=900531&view=diff
==============================================================================
--- activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpEncoding.java (original)
+++ activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpEncoding.java Mon Jan 18 20:12:47 2010
@@ -74,6 +74,11 @@
return "compound".equals(getCategory());
}
+ public boolean isArray()
+ {
+ return "array".equals(getCategory());
+ }
+
public String toString() {
return "{" + name + ", cat=" + category + ", code=" + code + ", width=" + width +"}";
}
Modified: activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpField.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpField.java?rev=900531&r1=900530&r2=900531&view=diff
==============================================================================
--- activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpField.java (original)
+++ activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpField.java Mon Jan 18 20:12:47 2010
@@ -1,11 +1,13 @@
package org.apache.activemq.amqp.generator;
-import org.apache.activemq.amqp.generator.jaxb.schema.*;
-import static org.apache.activemq.amqp.generator.Utils.*;
+import static org.apache.activemq.amqp.generator.Utils.toJavaName;
+
+import org.apache.activemq.amqp.generator.jaxb.schema.Doc;
+import org.apache.activemq.amqp.generator.jaxb.schema.Field;
public class AmqpField {
- String doc;
+ AmqpDoc doc;
String name;
String defaultValue;
String label;
@@ -22,7 +24,14 @@
type = field.getType();
for (Object object : field.getDocOrException()) {
- // TODO;
+ if (object instanceof Doc) {
+ if (doc == null) {
+ doc = new AmqpDoc();
+ }
+ doc.parseFromDoc((Doc) object);
+ } else {
+ // TODO handle exception:
+ }
}
}
@@ -34,11 +43,11 @@
this.name = name;
}
- public String getDoc() {
+ public AmqpDoc getDoc() {
return doc;
}
- public void setDoc(String doc) {
+ public void setDoc(AmqpDoc doc) {
this.doc = doc;
}
@@ -82,14 +91,15 @@
this.required = required;
}
- public String getJavaType() throws UnknownTypeException {
- return TypeRegistry.getJavaType(this);
- }
-
- public String getJavaPackage() throws UnknownTypeException {
- return TypeRegistry.getJavaPackage(this);
+ public AmqpClass resolveAmqpFieldType() throws UnknownTypeException {
+ if (isMultiple()) {
+ return TypeRegistry.resolveAmqpClass("list");
+ }
+
+ AmqpClass ampqClass = TypeRegistry.resolveAmqpClass(this);
+ return ampqClass;
}
-
+
public String getJavaName() {
return toJavaName(name);
}
Modified: activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpMarshallerGen.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpMarshallerGen.java?rev=900531&r1=900530&r2=900531&view=diff
==============================================================================
--- activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpMarshallerGen.java (original)
+++ activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/AmqpMarshallerGen.java Mon Jan 18 20:12:47 2010
@@ -1,6 +1,10 @@
package org.apache.activemq.amqp.generator;
-import static org.apache.activemq.amqp.generator.Utils.*;
+import static org.apache.activemq.amqp.generator.Utils.capFirst;
+import static org.apache.activemq.amqp.generator.Utils.tab;
+import static org.apache.activemq.amqp.generator.Utils.toJavaName;
+import static org.apache.activemq.amqp.generator.Utils.writeJavaComment;
+import static org.apache.activemq.amqp.generator.Utils.writeJavaCopyWrite;
import java.io.BufferedWriter;
import java.io.File;
@@ -9,7 +13,7 @@
import java.util.HashSet;
/**
- * Generates the AMQP marshaller
+ * Generates the AMQPMarshaller template:
*
* @author cmacnaug
*/
@@ -33,7 +37,7 @@
writeImports(writer, generator);
writer.newLine();
- writer.write("public abstract class " + MARSHALLER_CLASS_NAME + " {");
+ writer.write("public class " + MARSHALLER_CLASS_NAME + " {");
writer.newLine();
// Write out encoding enums:
@@ -76,10 +80,13 @@
if (!c.isPrimitive()) {
continue;
}
+
for (AmqpField field : c.fields.values()) {
- imports.add(field.getJavaPackage());
+
+ AmqpClass fieldType = field.resolveAmqpFieldType();
+ imports.add(fieldType.resolveValueMapping().getPackageName());
}
- imports.add(TypeRegistry.getJavaPackage(c.name));
+ imports.add(c.getTypeMapping().getPackageName());
}
imports.add("java.io");
imports.add(generator.getPackagePrefix() + ".types");
@@ -98,57 +105,71 @@
private static void writeEncodingSerializers(AmqpClass amqpClass, BufferedWriter writer) throws IOException, UnknownTypeException {
String javaType = TypeRegistry.getJavaType(amqpClass.name);
- String javaTypeName = javaType;
- if (javaType.endsWith(" []")) {
- javaTypeName = javaType.substring(0, javaType.indexOf(" []")) + " Array";
- }
if (amqpClass.encodings.size() > 1) {
writer.newLine();
writeJavaComment(writer, 1, "Chooses a " + amqpClass.getEncodingName(true) + " for the given " + javaType);
- writer.write(tab(1) + "public abstract " + amqpClass.getEncodingName(true) + " choose" + capFirst(amqpClass.name) + "Encoding(" + javaType + " val) throws IOException;");
- writer.newLine();
+ writer.write(tab(1) + "public static final " + amqpClass.getEncodingName(true) + " choose" + capFirst(amqpClass.name) + "Encoding(" + javaType + " val) throws IOException {");
+ writeUnimplementedMethodBody(writer, 1);
writer.newLine();
writeJavaComment(writer, 1, "Gets the encoded size of " + javaType + " with the given encoding");
- writer.write(tab(1) + "public abstract int getEncodedSizeOf" + capFirst(toJavaName(amqpClass.name)) + "(" + javaType + " value, " + amqpClass.getEncodingName(true) + " encoding) throws IOException;");
+ writer.write(tab(1) + "public static final int getEncodedSizeOf" + capFirst(toJavaName(amqpClass.name)) + "(" + javaType + " value, " + amqpClass.getEncodingName(true)
+ + " encoding) throws IOException {");
+ writeUnimplementedMethodBody(writer, 1);
writer.newLine();
- boolean hasNonZeroWidthEncoding = false;
- for (AmqpEncoding encoding : amqpClass.encodings) {
- if (Integer.parseInt(encoding.getWidth()) > 0) {
- hasNonZeroWidthEncoding = true;
- }
- }
- if (hasNonZeroWidthEncoding) {
+ if (amqpClass.hasNonZeroEncoding()) {
writer.newLine();
writeJavaComment(writer, 1, "Writes a " + javaType + " with the given encoding");
- writer.write(tab(1) + "public abstract void write" + capFirst(toJavaName(amqpClass.name)) + "(" + javaType + " val, " + amqpClass.getEncodingName(true)
- + " encoding, DataOutputStream dos) throws IOException;");
- writer.newLine();
+ writer.write(tab(1) + "public static final void write" + capFirst(toJavaName(amqpClass.name)) + "(" + javaType + " val, " + amqpClass.getEncodingName(true)
+ + " encoding, DataOutputStream dos) throws IOException {");
+ writeUnimplementedMethodBody(writer, 1);
writer.newLine();
writeJavaComment(writer, 1, "Reads a " + javaType + " with the given encoding");
- writer.write(tab(1) + "public abstract " + javaType + " read" + capFirst(toJavaName(amqpClass.name)) + "(" + amqpClass.getEncodingName(true)
- + " encoding, DataInputStream dis) throws IOException;");
- writer.newLine();
+ if(amqpClass.hasCompoundEncoding() || amqpClass.hasArrayEncoding() || amqpClass.hasVariableEncoding())
+ {
+ writer.write(tab(1) + "public static final " + javaType + " read" + capFirst(toJavaName(amqpClass.name)) + "(" + amqpClass.getEncodingName(true)
+ + " encoding, int size, int count, DataInputStream dis) throws IOException {");
+ }
+ else {
+ writer.write(tab(1) + "public static final " + javaType + " read" + capFirst(toJavaName(amqpClass.name)) + "(" + amqpClass.getEncodingName(true)
+ + " encoding, DataInputStream dis) throws IOException {");
+ }
+ writeUnimplementedMethodBody(writer, 1);
}
} else {
AmqpEncoding encoding = amqpClass.encodings.getFirst();
// Don't need a serializer if the width is 0:
- if (new Integer(encoding.getWidth()) > 0) {
+ if (amqpClass.hasNonZeroEncoding()) {
writer.newLine();
writeJavaComment(writer, 1, "Writes a " + javaType + " encoded as " + encoding.getLabel());
- writer.write(tab(1) + "public abstract void write" + capFirst(toJavaName(amqpClass.name)) + "(" + javaType + " val, DataOutputStream dos) throws IOException;");
- writer.newLine();
+ writer.write(tab(1) + "public static final void write" + capFirst(toJavaName(amqpClass.name)) + "(" + javaType + " val, DataOutputStream dos) throws IOException {");
+ writeUnimplementedMethodBody(writer, 1);
writer.newLine();
writeJavaComment(writer, 1, "Reads a " + javaType + " encoded as " + encoding.getLabel());
- writer.write(tab(1) + "public abstract " + javaType + " read" + capFirst(toJavaName(amqpClass.name)) + "(DataInputStream dis) throws IOException;");
- writer.newLine();
+ if (amqpClass.hasNonFixedEncoding()) {
+ writer.write(tab(1) + "public static final " + javaType + " read" + capFirst(toJavaName(amqpClass.name)) + "(int size, int count, DataInputStream dis) throws IOException {");
+ } else {
+ writer.write(tab(1) + "public static final " + javaType + " read" + capFirst(toJavaName(amqpClass.name)) + "(DataInputStream dis) throws IOException {");
+ }
+ writeUnimplementedMethodBody(writer, 1);
+
}
}
-
}
+
+ private static void writeUnimplementedMethodBody(BufferedWriter writer, int indent) throws IOException
+ {
+ writer.newLine();
+ writer.write(tab(indent + 1) + "//TODO: Implement");
+ writer.newLine();
+ writer.write(tab(indent + 1) + "throw new UnsupportedOperationException(\"not implemented\");");
+ writer.newLine();
+ writer.write(tab(indent) + "}");
+ }
+
}
Modified: activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/Generator.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/Generator.java?rev=900531&r1=900530&r2=900531&view=diff
==============================================================================
--- activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/Generator.java (original)
+++ activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/Generator.java Mon Jan 18 20:12:47 2010
@@ -1,15 +1,11 @@
package org.apache.activemq.amqp.generator;
-import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
-import java.io.FileOutputStream;
+import java.io.FileReader;
import java.io.FileWriter;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.HashMap;
-import java.util.List;
+
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.SAXParserFactory;
@@ -19,21 +15,16 @@
import org.apache.activemq.amqp.generator.jaxb.schema.Amqp;
import org.apache.activemq.amqp.generator.jaxb.schema.Section;
import org.apache.activemq.amqp.generator.jaxb.schema.Type;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
public class Generator {
- private Log LOG = LogFactory.getLog(Generator.class);
-
private String[] inputFiles;
private String outputDirectory;
+ private String sourceDirectory;
private String packagePrefix;
- private TypeRegistry typeRegistry = new TypeRegistry();
-
public String[] getInputFile() {
return inputFiles;
}
@@ -50,6 +41,10 @@
this.outputDirectory = outputDirectory;
}
+ public void setSourceDirectory(String sourceDirectory) {
+ this.sourceDirectory = sourceDirectory;
+ }
+
public String getPackagePrefix() {
return packagePrefix;
}
@@ -73,8 +68,7 @@
// Amqp amqp = (Amqp) unmarshaller.unmarshal(new StreamSource(new
// File(inputFile)), Amqp.class).getValue();
Amqp amqp = (Amqp) unmarshaller.unmarshal(er);
- List<Object> list = amqp.getDocOrSection();
-
+
// Scan document:
for (Object docOrSection : amqp.getDocOrSection()) {
if (docOrSection instanceof Section) {
@@ -90,17 +84,19 @@
}
// Copy handcoded:
- String[] handcoded = new String[] { "AmqpMarshaller", "AmqpType"};
- for (String javaFile : handcoded) {
- BufferedReader reader = new BufferedReader(new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream("org/apache/activemq/amqp/generator/handcoded/" + javaFile + ".jtemp")));
- String line = reader.readLine();
- line = line.replace("org.apache.activemq.amqp.generator.handcoded", packagePrefix);
-
- File out = new File(this.outputDirectory + File.separator + packagePrefix.replace(".", File.separator) + File.separator + javaFile + ".java");
+ String handCodedSource = "org/apache/activemq/amqp/generator/handcoded";
+ String outputPackage = packagePrefix.replace(".", File.separator);
+ File sourceDir = new File(sourceDirectory + File.separator + handCodedSource);
+ for (File javaFile : Utils.findFiles(sourceDir)) {
+ javaFile.setWritable(true);
+ BufferedReader reader = new BufferedReader(new FileReader(javaFile));
+ File out = new File(outputDirectory + File.separator + outputPackage + File.separator + javaFile.getCanonicalPath().substring((int)sourceDir.getCanonicalPath().length()));
out.getParentFile().mkdirs();
+ String line = reader.readLine();
BufferedWriter writer = new BufferedWriter(new FileWriter(out));
while (line != null) {
+ line = line.replace("org.apache.activemq.amqp.generator.handcoded", packagePrefix);
writer.write(line);
writer.newLine();
line = reader.readLine();
@@ -122,4 +118,6 @@
TypeRegistry.addType(amqpClass);
System.out.println("Found: " + amqpClass);
}
+
+
}
Modified: activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/Main.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/Main.java?rev=900531&r1=900530&r2=900531&view=diff
==============================================================================
--- activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/Main.java (original)
+++ activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/Main.java Mon Jan 18 20:12:47 2010
@@ -1,6 +1,5 @@
package org.apache.activemq.amqp.generator;
-import javax.xml.bind.JAXBException;
public class Main {
@@ -10,6 +9,7 @@
"C:/dev/fuse/amq6.0/activemq-amqp-generator/specification/1.0-PR2/types.xml", "C:/dev/fuse/amq6.0/activemq-amqp-generator/specification/1.0-PR2/security.xml");
gen.setPackagePrefix("org.apache.activemq.amqp.v1pr2");
gen.setOutputDirectory("C:/dev/fuse/amq6.0/activemq-amqp-generator/src/main/java");
+ gen.setSourceDirectory("C:/dev/fuse/amq6.0/activemq-amqp-generator/src/handcoded");
try {
gen.generate();
} catch (Exception e) {
Modified: activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/TypeRegistry.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/TypeRegistry.java?rev=900531&r1=900530&r2=900531&view=diff
==============================================================================
--- activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/TypeRegistry.java (original)
+++ activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/TypeRegistry.java Mon Jan 18 20:12:47 2010
@@ -9,69 +9,68 @@
private static final HashMap<String, AmqpClass> GENERATED_TYPE_MAP = new HashMap<String, AmqpClass>();
static {
- JAVA_TYPE_MAP.put("boolean", new JavaTypeMapping("boolean", "boolean", "java.lang"));
- JAVA_TYPE_MAP.put("ubyte", new JavaTypeMapping("ubyte", "short", "java.lang"));
- JAVA_TYPE_MAP.put("ushort", new JavaTypeMapping("ushort", "int", "java.lang"));
- JAVA_TYPE_MAP.put("uint", new JavaTypeMapping("uint", "long", "java.lang"));
- JAVA_TYPE_MAP.put("ulong", new JavaTypeMapping("ulong", "BigInteger", "java.math"));
- JAVA_TYPE_MAP.put("byte", new JavaTypeMapping("byte", "byte", "java.lang"));
- JAVA_TYPE_MAP.put("short", new JavaTypeMapping("short", "short", "java.lang"));
- JAVA_TYPE_MAP.put("int", new JavaTypeMapping("int", "int", "java.lang"));
- JAVA_TYPE_MAP.put("long", new JavaTypeMapping("long", "long", "java.lang"));
- JAVA_TYPE_MAP.put("float", new JavaTypeMapping("float", "float", "java.lang"));
- JAVA_TYPE_MAP.put("double", new JavaTypeMapping("double", "double", "java.lang"));
- JAVA_TYPE_MAP.put("char", new JavaTypeMapping("char", "char", "java.lang"));
- JAVA_TYPE_MAP.put("timestamp", new JavaTypeMapping("timestamp", "Date", "java.util"));
- JAVA_TYPE_MAP.put("uuid", new JavaTypeMapping("uuid", "UUID", "java.util"));
- JAVA_TYPE_MAP.put("byte", new JavaTypeMapping("byte", "byte", "java.lang"));
- JAVA_TYPE_MAP.put("binary", new JavaTypeMapping("binary", "byte []", "java.lang"));
- JAVA_TYPE_MAP.put("string", new JavaTypeMapping("string", "String", "java.lang"));
- JAVA_TYPE_MAP.put("symbol", new JavaTypeMapping("symbol", "String", "java.lang"));
- JAVA_TYPE_MAP.put("list", new JavaTypeMapping("list", "List <AmqpType>", "java.util"));
- JAVA_TYPE_MAP.put("map", new JavaTypeMapping("map", "HashMap <AmqpType, AmqpType>", "java.util"));
- JAVA_TYPE_MAP.put("null", new JavaTypeMapping("null", "Object", "java.lang"));
+ JAVA_TYPE_MAP.put("boolean", new JavaTypeMapping("boolean", "java.lang.boolean"));
+ JAVA_TYPE_MAP.put("ubyte", new JavaTypeMapping("ubyte", "java.lang.short"));
+ JAVA_TYPE_MAP.put("ushort", new JavaTypeMapping("ushort", "java.lang.int"));
+ JAVA_TYPE_MAP.put("uint", new JavaTypeMapping("uint", "java.lang.long"));
+ JAVA_TYPE_MAP.put("ulong", new JavaTypeMapping("ulong", "java.math.BigInteger"));
+ JAVA_TYPE_MAP.put("byte", new JavaTypeMapping("byte", "java.lang.byte"));
+ JAVA_TYPE_MAP.put("short", new JavaTypeMapping("short", "java.lang.short"));
+ JAVA_TYPE_MAP.put("int", new JavaTypeMapping("int", "java.lang.int"));
+ JAVA_TYPE_MAP.put("long", new JavaTypeMapping("long", "java.lang.long"));
+ JAVA_TYPE_MAP.put("float", new JavaTypeMapping("float", "java.lang.float"));
+ JAVA_TYPE_MAP.put("double", new JavaTypeMapping("double", "java.lang.double"));
+ JAVA_TYPE_MAP.put("char", new JavaTypeMapping("char", "java.lang.int"));
+ JAVA_TYPE_MAP.put("timestamp", new JavaTypeMapping("timestamp", "java.util.Date"));
+ JAVA_TYPE_MAP.put("uuid", new JavaTypeMapping("uuid", "java.util.UUID"));
+ JAVA_TYPE_MAP.put("binary", new JavaTypeMapping("binary", "java.lang.byte", true, null));
+ JAVA_TYPE_MAP.put("string", new JavaTypeMapping("string", "java.lang.String"));
+ JAVA_TYPE_MAP.put("symbol", new JavaTypeMapping("symbol", "java.lang.String"));
+ JAVA_TYPE_MAP.put("list", new JavaTypeMapping("list", "java.util.List", false, "<AmqpType>"));
+ JAVA_TYPE_MAP.put("map", new JavaTypeMapping("map", "java.util.HashMap", false, "<AmqpType, AmqpType>"));
+ JAVA_TYPE_MAP.put("null", new JavaTypeMapping("null", "java.lang.Object"));
}
static final void init(Generator generator) {
// Add in the wildcard type:
- GENERATED_TYPE_MAP.put("*", new AnyClass("*", "AmqpAny", generator.getPackagePrefix() + ".types"));
- JAVA_TYPE_MAP.put("*", new JavaTypeMapping("*", "byte []", "java.lang"));
-
- // Add in the compound type:
+ AmqpClass any = new AmqpType("*", generator.getPackagePrefix() + ".types.AmqpType");
+ GENERATED_TYPE_MAP.put("*", any);
+ JAVA_TYPE_MAP.put("*", any.typeMapping);
}
- public static String getJavaType(AmqpField field) throws UnknownTypeException {
- return getJavaType(field.getType());
+ public static JavaTypeMapping getJavaTypeMapping(String name) throws UnknownTypeException {
+ JavaTypeMapping mapping = JAVA_TYPE_MAP.get(name);
+ if (mapping == null) {
+ // Try to find a class that defines it:
+ AmqpClass amqpClass = GENERATED_TYPE_MAP.get(name);
+ if (amqpClass != null) {
+ mapping = amqpClass.typeMapping;
+ }
+ if (mapping == null) {
+ throw new UnknownTypeException(name);
+ }
+ }
+ return mapping;
}
- public static String getJavaType(String type) throws UnknownTypeException {
+ public static AmqpClass resolveAmqpClass(AmqpField amqpField) throws UnknownTypeException {
+ return resolveAmqpClass(amqpField.getType());
+ }
+
+ public static AmqpClass resolveAmqpClass(String type) throws UnknownTypeException {
AmqpClass amqpClass = GENERATED_TYPE_MAP.get(type);
if (amqpClass == null) {
throw new UnknownTypeException("Type " + type + " not found");
}
-
- // Replace with restricted type:
- if (amqpClass.isRestricted()) {
- return getJavaType(amqpClass.getRestrictedType());
- }
-
- if (amqpClass.isPrimitive()) {
- JavaTypeMapping mapping = JAVA_TYPE_MAP.get(amqpClass.getName());
- if (mapping == null) {
- throw new UnknownTypeException("Primitive Type " + type + " not found");
- }
- return mapping.javaType;
- }
-
- return amqpClass.getJavaType();
+ return amqpClass;
}
- public static String getJavaPackage(AmqpField field) throws UnknownTypeException {
- return getJavaPackage(field.getType());
+ public static String getJavaType(AmqpField field) throws UnknownTypeException {
+ return getJavaType(field.getType());
}
- public static String getJavaPackage(String type) throws UnknownTypeException {
+ public static String getJavaType(String type) throws UnknownTypeException {
AmqpClass amqpClass = GENERATED_TYPE_MAP.get(type);
if (amqpClass == null) {
throw new UnknownTypeException("Type " + type + " not found");
@@ -79,7 +78,7 @@
// Replace with restricted type:
if (amqpClass.isRestricted()) {
- return getJavaPackage(amqpClass.getRestrictedType());
+ return getJavaType(amqpClass.getRestrictedType());
}
if (amqpClass.isPrimitive()) {
@@ -87,9 +86,10 @@
if (mapping == null) {
throw new UnknownTypeException("Primitive Type " + type + " not found");
}
- return mapping.javaPackage;
+ return mapping.javaType;
}
- return amqpClass.getJavaPackage();
+
+ return amqpClass.getJavaType();
}
public static Collection<AmqpClass> getGeneratedTypes() {
@@ -102,37 +102,108 @@
public static class JavaTypeMapping {
- String name;
+ String amqpType;
+ String shortName;
+ String packageName;
+ String fullName;
String javaType;
- String javaPackage;
- JavaTypeMapping(String name, String javaType, String javaPackage) {
- this.name = name;
+ boolean array;
+ String generic;
+
+ JavaTypeMapping(String amqpType, String fullName, boolean array, String generic) {
+ this(amqpType, fullName);
+ this.array = array;
+ this.generic = generic;
+ if (generic != null) {
+ javaType = javaType + generic;
+ }
+ if (array) {
+ javaType = javaType + " []";
+ }
+ }
+
+ JavaTypeMapping(String amqpType, String fullName) {
+ this.amqpType = amqpType;
+ this.fullName = fullName;
+ this.packageName = fullName.substring(0, fullName.lastIndexOf("."));
+ this.shortName = fullName.substring(fullName.lastIndexOf(".") + 1);
+ this.javaType = shortName;
+ }
+
+ public String getAmqpType() {
+ return amqpType;
+ }
+
+ public void setAmqpType(String amqpType) {
+ this.amqpType = amqpType;
+ }
+
+ public String getShortName() {
+ return shortName;
+ }
+
+ public void setShortName(String shortName) {
+ this.shortName = shortName;
+ }
+
+ public String getPackageName() {
+ return packageName;
+ }
+
+ public void setPackageName(String packageName) {
+ this.packageName = packageName;
+ }
+
+ public String getFullName() {
+ return fullName;
+ }
+
+ public void setFullName(String fullName) {
+ this.fullName = fullName;
+ }
+
+ public String getJavaType() {
+ return javaType;
+ }
+
+ public void setJavaType(String javaType) {
this.javaType = javaType;
- this.javaPackage = javaPackage;
}
- }
- public static class AnyClass extends AmqpClass {
+ public boolean isArray() {
+ return array;
+ }
- AnyClass(String name, String javaType, String javaPackage) {
- super.name = name;
- super.javaType = javaType;
- super.setPrimitive(true);
- super.javaPackage = javaPackage;
- super.handcoded = true;
+ public void setArray(boolean array) {
+ this.array = array;
+ }
+
+ public String getGeneric() {
+ return generic;
+ }
+
+ public void setGeneric(String generic) {
+ this.generic = generic;
+ }
+
+ public String getImport() {
+ if (packageName.startsWith("java.lang")) {
+ return null;
+ } else {
+ return fullName;
+ }
}
}
-
- public static class CompoundType extends AmqpClass {
- CompoundType(String name, String javaType, String javaPackage) {
- super.name = name;
- super.javaType = javaType;
+ public static class AmqpType extends AmqpClass {
+
+ AmqpType(String amqpName, String fullName) {
+ super.typeMapping = new JavaTypeMapping(amqpName, fullName);
+ super.name = amqpName;
super.setPrimitive(true);
- super.javaPackage = javaPackage;
+ super.handcoded = true;
}
}
-
-
+
}
Modified: activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/UnknownTypeException.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/UnknownTypeException.java?rev=900531&r1=900530&r2=900531&view=diff
==============================================================================
--- activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/UnknownTypeException.java (original)
+++ activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/UnknownTypeException.java Mon Jan 18 20:12:47 2010
@@ -2,6 +2,8 @@
public class UnknownTypeException extends Exception {
+ private static final long serialVersionUID = 4106181403332534392L;
+
public UnknownTypeException(String message) {
super(message);
}
Modified: activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/Utils.java
URL: http://svn.apache.org/viewvc/activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/Utils.java?rev=900531&r1=900530&r2=900531&view=diff
==============================================================================
--- activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/Utils.java (original)
+++ activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src/main/java/org/apache/activemq/amqp/generator/Utils.java Mon Jan 18 20:12:47 2010
@@ -1,7 +1,10 @@
package org.apache.activemq.amqp.generator;
import java.io.BufferedWriter;
+import java.io.File;
import java.io.IOException;
+import java.util.LinkedList;
+import java.util.List;
import java.util.StringTokenizer;
public class Utils {
@@ -62,37 +65,25 @@
}
return hex;
}
-
+
public static void writeJavaCopyWrite(BufferedWriter writer) throws IOException {
-
- writeJavaComment(writer, 0,
- "Licensed to the Apache Software Foundation (ASF) under one or more",
- "contributor license agreements. See the NOTICE file distributed with",
- "his 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.");
- }
-
- public static void writeJavaComment(BufferedWriter writer, int indent, String ... commentLines) throws IOException
- {
- if(commentLines == null)
- {
+
+ writeJavaComment(writer, 0, "Licensed to the Apache Software Foundation (ASF) under one or more", "contributor license agreements. See the NOTICE file distributed with",
+ "his 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.");
+ }
+
+ public static void writeJavaComment(BufferedWriter writer, int indent, String... commentLines) throws IOException {
+ if (commentLines == null) {
return;
}
-
+
writer.write(tab(indent) + "/**");
writer.newLine();
- for(String s : commentLines)
- {
+ for (String s : commentLines) {
writer.write(tab(indent) + " * " + s);
writer.newLine();
}
@@ -100,4 +91,55 @@
writer.newLine();
}
+ public static String[] convertToLines(String s, int charsPerLine) {
+ LinkedList<String> rc = new LinkedList<String>();
+ String line = "";
+ StringTokenizer lines = new StringTokenizer(s, "\r\n");
+ while (lines.hasMoreElements()) {
+ StringTokenizer tok = new StringTokenizer(lines.nextToken(), " ");
+ int chars = 0;
+
+ while (tok.hasMoreTokens()) {
+ String word = tok.nextToken();
+ chars += word.length();
+ if (chars > charsPerLine) {
+ if (line.length() == 0) {
+ rc.add(word);
+ } else {
+ rc.add(line);
+ line = word;
+ chars = word.length();
+ continue;
+ }
+ }
+
+ if (line.length() > 0) {
+ line += " ";
+ }
+
+ line += word;
+
+ }
+ if (line.length() > 0) {
+ rc.add(line);
+ }
+ line = "";
+ }
+
+ return rc.toArray(new String[] {});
+ }
+
+ public static final List<File> findFiles(File dir) {
+ LinkedList<File> rc = new LinkedList<File>();
+ for (File file : dir.listFiles()) {
+ if (file.isFile()) {
+ rc.add(file);
+ } else {
+ rc.addAll(findFiles(file));
+ }
+ }
+
+ return rc;
+ }
+
}