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=908852&r1=908851&r2=908852&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 Thu Feb 11 06:46:23 2010 @@ -236,7 +236,10 @@ writer.newLine(); writer.newLine(); - writeMarshallerImports(writer, false, outputPackage); + TreeSet<String> imports = new TreeSet<String>(); + imports.add(getPackagePrefix() + ".marshaller.AmqpVersion"); + imports.add(getPackagePrefix() + ".marshaller.Encoded"); + writeMarshallerImports(writer, false, imports, outputPackage); writer.newLine(); writer.write("public interface AmqpMarshaller {"); @@ -248,15 +251,11 @@ writer.newLine(); writer.newLine(); - writer.write(tab(1) + "public <T> Encoded<T> encode(AmqpType<T> data) throws AmqpEncodingError;"); - writer.newLine(); - - writer.newLine(); - writer.write(tab(1) + "public AmqpType<?> decodeType(Buffer source) throws AmqpEncodingError;"); + writer.write(tab(1) + "public " + TypeRegistry.any().typeMapping + " decodeType(Buffer source) throws AmqpEncodingError;"); writer.newLine(); writer.newLine(); - writer.write(tab(1) + "public AmqpType<?> unmarshalType(DataInput in) throws IOException, AmqpEncodingError;"); + writer.write(tab(1) + "public " + TypeRegistry.any().typeMapping + " unmarshalType(DataInput in) throws IOException, AmqpEncodingError;"); writer.newLine(); // Generate Handler methods: @@ -272,7 +271,11 @@ writer.newLine(); writer.newLine(); - writer.write(tab(1) + "public " + amqpClass.getJavaType() + " unmarshal" + capFirst(amqpClass.getJavaType()) + "(DataInput in) throws IOException, AmqpEncodingError;"); + writer.write(tab(1) + "public Encoded<" + amqpClass.getValueMapping() + "> decode" + amqpClass.getJavaType() + "(Buffer source, int offset) throws AmqpEncodingError;"); + writer.newLine(); + + writer.newLine(); + writer.write(tab(1) + "public Encoded<" + amqpClass.getValueMapping() + "> unmarshal" + amqpClass.getJavaType() + "(DataInput in) throws IOException, AmqpEncodingError;"); writer.newLine(); } } @@ -293,7 +296,11 @@ writer.newLine(); writer.newLine(); - writeMarshallerImports(writer, false, getMarshallerPackage()); + TreeSet<String> imports = new TreeSet<String>(); + imports.add(getMarshallerPackage() + ".Encoder.*"); + imports.add(getPackagePrefix() + ".marshaller.AmqpVersion"); + imports.add(getPackagePrefix() + ".marshaller.Encoded"); + writeMarshallerImports(writer, false, imports, getMarshallerPackage()); writer.newLine(); writer.write("public class AmqpMarshaller implements " + getPackagePrefix() + ".marshaller.AmqpMarshaller {"); @@ -304,10 +311,6 @@ writer.newLine(); writer.newLine(); - writer.write(tab(1) + "private static final Encoder ENCODER = Encoder.SINGLETON;"); - writer.newLine(); - - writer.newLine(); writer.write(tab(1) + "public static final AmqpVersion VERSION = new AmqpVersion((short)" + DEFINITIONS.get("MAJOR").getValue() + ", (short)" + DEFINITIONS.get("MINOR").getValue() + ", (short)" + DEFINITIONS.get("REVISION").getValue() + ");"); writer.newLine(); @@ -348,33 +351,32 @@ writer.newLine(); // Generate Handler methods: - writer.newLine(); - writer.write(tab(1) + "public final <T> Encoded<T> encode(AmqpType<T> data) throws AmqpEncodingError {"); + writer.write(tab(1) + "public final " + TypeRegistry.any().typeMapping + " unmarshalType(DataInput in) throws IOException, AmqpEncodingError {"); writer.newLine(); - writer.write(tab(2) + "throw new UnsupportedOperationException();"); + writer.write(tab(2) + "return Encoder.unmarshalType(in);"); writer.newLine(); writer.write(tab(1) + "}"); writer.newLine(); writer.newLine(); - writer.write(tab(1) + "public final AmqpType<?> unmarshalType(DataInput in) throws IOException, AmqpEncodingError {"); + writer.write(tab(1) + "public final " + TypeRegistry.any().typeMapping + " decodeType(Buffer source) throws AmqpEncodingError {"); writer.newLine(); - writer.write(tab(2) + "return ENCODER.unmarshalType(in);"); + writer.write(tab(2) + "return Encoder.decode(source);"); writer.newLine(); writer.write(tab(1) + "}"); writer.newLine(); - + writer.newLine(); - writer.write(tab(1) + "public final AmqpType<?> decodeType(Buffer source) throws AmqpEncodingError {"); + writer.write(tab(1) + "final " + TypeRegistry.any().typeMapping + " decodeType(EncodedBuffer encoded) throws AmqpEncodingError {"); writer.newLine(); - writer.write(tab(2) + "return ENCODER.decode(source);"); + writer.write(tab(2) + "if(encoded.isDescribed()) {"); writer.newLine(); - writer.write(tab(1) + "}"); + writer.write(tab(2) + "return decodeType(encoded.asDescribed());"); writer.newLine(); - + writer.write(tab(2) + "}"); writer.newLine(); - writer.write(tab(1) + "final AmqpType<?> decodeType(EncodedBuffer encoded) throws AmqpEncodingError {"); + writer.newLine(); writer.write(tab(2) + "switch(encoded.getEncodingFormatCode()) {"); writer.newLine(); @@ -395,7 +397,7 @@ } writer.write(tab(2) + "{"); writer.newLine(); - writer.write(tab(3) + "return " + amqpClass.getMarshaller() + ".decodeType(encoded);"); + writer.write(tab(3) + "return " + amqpClass.bufferMapping + ".create(" + amqpClass.getMarshaller() + ".createEncoded(encoded));"); writer.newLine(); writer.write(tab(2) + "}"); writer.newLine(); @@ -415,9 +417,9 @@ writer.newLine(); writer.newLine(); - writer.write(tab(1) + "final AmqpType<?> decodeType(DescribedBuffer buffer) throws AmqpEncodingError {"); + writer.write(tab(1) + "final " + TypeRegistry.any().typeMapping + " decodeType(DescribedBuffer buffer) throws AmqpEncodingError {"); writer.newLine(); - writer.write(tab(2) + "AmqpType<?> descriptor = decodeType(buffer.getDescriptor());"); + writer.write(tab(2) + TypeRegistry.any().typeMapping + " descriptor = decodeType(buffer.getDescriptorBuffer());"); writer.newLine(); writer.write(tab(2) + "//TODO might want to revisit whether or not the cast is needed here:"); writer.newLine(); @@ -425,7 +427,7 @@ writer.newLine(); writer.write(tab(2) + "if(descriptor instanceof AmqpUlong) {"); writer.newLine(); - writer.write(tab(3) + "dtm = DESCRIBED_NUMERIC_TYPES.get(((AmqpUlong)descriptor).getValue());"); + writer.write(tab(3) + "dtm = DESCRIBED_NUMERIC_TYPES.get(((AmqpUlong)descriptor).getValue().longValue());"); writer.newLine(); writer.write(tab(2) + "}"); writer.newLine(); @@ -466,9 +468,17 @@ writer.newLine(); writer.newLine(); - writer.write(tab(1) + "public final " + amqpClass.getJavaType() + " unmarshal" + capFirst(amqpClass.getJavaType()) + "(DataInput in) throws IOException, AmqpEncodingError {"); + writer.write(tab(1) + "public Encoded<" + amqpClass.getValueMapping() + "> decode" + amqpClass.getJavaType() + "(Buffer source, int offset) throws AmqpEncodingError {"); + writer.newLine(); + writer.write(tab(2) + "return " + amqpClass.getMarshaller() + ".createEncoded(source, offset);"); + writer.newLine(); + writer.write(tab(1) + "}"); + writer.newLine(); + + writer.newLine(); + writer.write(tab(1) + "public Encoded<" + amqpClass.getValueMapping() + "> unmarshal" + amqpClass.getJavaType() + "(DataInput in) throws IOException, AmqpEncodingError {"); writer.newLine(); - writer.write(tab(2) + "return " + amqpClass.getJavaType() + "Marshaller.unmarshalType(new " + amqpClass.getJavaType() + "(), in);"); + writer.write(tab(2) + "return " + amqpClass.getMarshaller() + ".createEncoded(in);"); writer.newLine(); writer.write(tab(1) + "}"); writer.newLine(); @@ -493,9 +503,9 @@ writer.newLine(); writer.newLine(); - writeMarshallerImports(writer, true, getMarshallerPackage(), getPackagePrefix() + ".types"); - - writer.write("import org.apache.activemq.util.buffer.Buffer;"); + TreeSet<String> imports = new TreeSet<String>(); + imports.add("java.io.DataOutput"); + writeMarshallerImports(writer, true, imports, getMarshallerPackage(), getPackagePrefix() + ".types"); writer.newLine(); writer.newLine(); @@ -561,8 +571,7 @@ writer.close(); } - private void writeMarshallerImports(BufferedWriter writer, boolean primitiveOnly, String... packageFilters) throws IOException, UnknownTypeException { - TreeSet<String> imports = new TreeSet<String>(); + private void writeMarshallerImports(BufferedWriter writer, boolean primitiveOnly, TreeSet<String> imports, String... packageFilters) throws IOException, UnknownTypeException { HashSet<String> filters = new HashSet<String>(); filters.add("java.lang"); for (String filter : packageFilters) { @@ -570,16 +579,11 @@ } imports.add("java.io.DataInput"); - imports.add("java.io.DataOutput"); imports.add("java.io.IOException"); - imports.add(getPackagePrefix() + ".marshaller.AmqpVersion"); - imports.add(getPackagePrefix() + ".marshaller.Encoded"); - imports.add(getPackagePrefix() + ".marshaller.Encoding"); imports.add(getPackagePrefix() + ".marshaller.AmqpEncodingError"); - imports.add(getMarshallerPackage() + ".Encoder.*"); for (AmqpClass amqpClass : TypeRegistry.getGeneratedTypes()) { - if (primitiveOnly && !amqpClass.isPrimitive()) { + if (primitiveOnly && (!amqpClass.isPrimitive() || amqpClass.isList() || amqpClass.isMap())) { continue; } if (amqpClass.needsMarshaller()) {
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=908852&r1=908851&r2=908852&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 Thu Feb 11 06:46:23 2010 @@ -26,13 +26,35 @@ JAVA_TYPE_MAP.put("binary", new JavaTypeMapping("binary", "org.apache.activemq.util.buffer.Buffer")); 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("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) { + + 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.Integer")); + 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.Integer")); + 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.Integer")); + 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", "org.apache.activemq.util.buffer.Buffer")); + 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", generator.getPackagePrefix() + ".types.IAmqpList")); + 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")); + // Add in the wildcard type: AmqpClass any = new AmqpType("*", generator.getPackagePrefix() + ".types.AmqpType"); GENERATED_TYPE_MAP.put("*", any); @@ -54,6 +76,11 @@ return mapping; } + public static AmqpClass any() + { + return GENERATED_TYPE_MAP.get("*"); + } + public static AmqpClass resolveAmqpClass(AmqpField amqpField) throws UnknownTypeException { return resolveAmqpClass(amqpField.getType()); } @@ -205,11 +232,7 @@ } public String getImport() { - if (inner) { - return fullName.substring(0, fullName.lastIndexOf(".")); - } else { - return fullName; - } + return fullName; } public String toString() { @@ -220,7 +243,7 @@ public static class AmqpType extends AmqpClass { AmqpType(String amqpName, String fullName) { - super.typeMapping = new JavaTypeMapping(amqpName, fullName, false, "<?>"); + super.typeMapping = new JavaTypeMapping(amqpName, fullName, false, "<?, ?>"); super.name = amqpName; super.setPrimitive(true); super.handcoded = true;
