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/05/20 18:13:58 UTC

svn commit: r946684 [2/2] - in /activemq/sandbox/activemq-apollo-actor/activemq-amqp-generator/src: handcoded/org/apache/activemq/amqp/generator/handcoded/marshaller/v1_0_0/ main/java/org/apache/activemq/amqp/generator/

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=946684&r1=946683&r2=946684&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 May 20 16:13:58 2010
@@ -269,15 +269,15 @@ public class Generator {
                 }
 
                 writer.newLine();
-                writer.write(tab(1) + "public Encoded<" + amqpClass.getValueMapping() + "> encode(" + amqpClass.getJavaType() + " data) throws AmqpEncodingError;");
+                writer.write(tab(1) + "public " + amqpClass.getTypeMapping().getGeneric(" ") + "Encoded<" + amqpClass.getValueMapping().parameterized() + "> encode(" + amqpClass.typeMapping.parameterized() + " data) throws AmqpEncodingError;");
                 writer.newLine();
 
                 writer.newLine();
-                writer.write(tab(1) + "public Encoded<" + amqpClass.getValueMapping() + "> decode" + amqpClass.getJavaType() + "(Buffer source, int offset) throws AmqpEncodingError;");
+                writer.write(tab(1) + "public " + amqpClass.getTypeMapping().getGeneric(" ") + "Encoded<" + amqpClass.getValueMapping().parameterized() + "> 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.write(tab(1) + "public " + amqpClass.getTypeMapping().getGeneric(" ") + "Encoded<" + amqpClass.getValueMapping().parameterized() + "> unmarshal" + amqpClass.getJavaType() + "(DataInput in) throws IOException, AmqpEncodingError;");
                 writer.newLine();
             }
         }
@@ -401,7 +401,7 @@ public class Generator {
                 }
                 writer.write(tab(2) + "{");
                 writer.newLine();
-                writer.write(tab(3) + "return " + amqpClass.bufferMapping + ".create(" + amqpClass.getMarshaller() + ".createEncoded(encoded));");
+                writer.write(tab(3) + "return " + amqpClass.bufferMapping.getClassName() + ".create(" + amqpClass.getMarshaller() + ".createEncoded(encoded));");
                 writer.newLine();
                 writer.write(tab(2) + "}");
                 writer.newLine();
@@ -464,7 +464,7 @@ public class Generator {
                     continue;
                 }
                 writer.newLine();
-                writer.write(tab(1) + "public final Encoded<" + amqpClass.getValueMapping() + "> encode(" + amqpClass.getJavaType() + " data) throws AmqpEncodingError {");
+                writer.write(tab(1) + "public final " + amqpClass.getTypeMapping().getGeneric(" ") + "Encoded<" + amqpClass.getValueMapping().parameterized() + "> encode(" + amqpClass.getTypeMapping().parameterized()+ " data) throws AmqpEncodingError {");
                 writer.newLine();
                 writer.write(tab(2) + "return " + amqpClass.getJavaType() + "Marshaller.encode(data);");
                 writer.newLine();
@@ -472,7 +472,7 @@ public class Generator {
                 writer.newLine();
 
                 writer.newLine();
-                writer.write(tab(1) + "public Encoded<" + amqpClass.getValueMapping() + "> decode" + amqpClass.getJavaType() + "(Buffer source, int offset) throws AmqpEncodingError {");
+                writer.write(tab(1) + "public final " + amqpClass.getTypeMapping().getGeneric(" ") + "Encoded<" + amqpClass.getValueMapping().parameterized() + "> decode" + amqpClass.getTypeMapping().shortName().nonGeneric() + "(Buffer source, int offset) throws AmqpEncodingError {");
                 writer.newLine();
                 writer.write(tab(2) + "return " + amqpClass.getMarshaller() + ".createEncoded(source, offset);");
                 writer.newLine();
@@ -480,7 +480,7 @@ public class Generator {
                 writer.newLine();
 
                 writer.newLine();
-                writer.write(tab(1) + "public Encoded<" + amqpClass.getValueMapping() + "> unmarshal" + amqpClass.getJavaType() + "(DataInput in) throws IOException, AmqpEncodingError {");
+                writer.write(tab(1) + "public final " + amqpClass.getTypeMapping().getGeneric(" ") + "Encoded<" + amqpClass.getValueMapping().parameterized() + "> unmarshal" + amqpClass.getTypeMapping().shortName().nonGeneric() + "(DataInput in) throws IOException, AmqpEncodingError {");
                 writer.newLine();
                 writer.write(tab(2) + "return " + amqpClass.getMarshaller() + ".createEncoded(in);");
                 writer.newLine();
@@ -604,19 +604,19 @@ public class Generator {
             if (ac.isDescribed()) {
                 writer.newLine();
                 writeJavaComment(writer, 1, "Creates a " + ac.getTypeMapping());
-                writer.write(tab(1) + "public static final " + ac.getTypeMapping() + " create" + ac.getTypeMapping() + "() {");
+                writer.write(tab(1) + "public static final " + ac.getTypeMapping().getGeneric(" ") + ac.getTypeMapping().parameterized() + " create" + ac.getTypeMapping().getClassName() + "() {");
                 writer.newLine();
-                writer.write(tab(2) + "return new " + ac.getBeanMapping() + "();");
+                writer.write(tab(2) + "return new " + ac.getBeanMapping().parameterized() + "();");
                 writer.newLine();
                 writer.write(tab(1) + "};");
                 writer.newLine();
             } else {
-                AmqpClass bt = ac.resolveBaseType();
+                AmqpClass bt = ac.getBaseType();
                 writer.newLine();
                 writeJavaComment(writer, 1, "Creates a " + ac.getTypeMapping());
-                writer.write(tab(1) + "public static final " + ac.getTypeMapping() + " create" + ac.getTypeMapping() + "(" + bt.getValueMapping() + " val) {");
+                writer.write(tab(1) + "public static final " + ac.getTypeMapping().getGeneric(" ") + ac.getTypeMapping().parameterized() + " create" + ac.getTypeMapping().getClassName() + "(" + ac.getValueMapping().parameterized() + " val) {");
                 writer.newLine();
-                writer.write(tab(2) + "return new " + ac.getBeanMapping() + "(val);");
+                writer.write(tab(2) + "return new " + ac.getBeanMapping().parameterized() + "(val);");
                 writer.newLine();
                 writer.write(tab(1) + "}");
                 writer.newLine();
@@ -624,9 +624,9 @@ public class Generator {
                 if(bt.getValueMapping().hasPrimitiveType())
                 {
                     writeJavaComment(writer, 1, "Creates a " + ac.getTypeMapping());
-                    writer.write(tab(1) + "public static final " + ac.getTypeMapping() + " create" + ac.getTypeMapping() + "(" + bt.getValueMapping().getPrimitiveType() + " val) {");
+                    writer.write(tab(1) + "public static final " + ac.getTypeMapping().getGeneric(" ") + ac.getTypeMapping().parameterized() + " create" + ac.getTypeMapping().getClassName() + "(" + bt.getValueMapping().getPrimitiveType() + " val) {");
                     writer.newLine();
-                    writer.write(tab(2) + "return new " + ac.getBeanMapping() + "(val);");
+                    writer.write(tab(2) + "return new " + ac.getBeanMapping().parameterized() + "(val);");
                     writer.newLine();
                     writer.write(tab(1) + "}");
                     writer.newLine();
@@ -635,9 +635,9 @@ public class Generator {
                 if(bt.isMutable())
                 {
                     writeJavaComment(writer, 1, "Creates an empty " + ac.getTypeMapping());
-                    writer.write(tab(1) + "public static final " + ac.getTypeMapping() + " create" + ac.getTypeMapping() + "() {");
+                    writer.write(tab(1) + "public static final " + ac.getTypeMapping().getGeneric(" ") + ac.getTypeMapping().parameterized() + " create" + ac.getTypeMapping().getClassName() + "() {");
                     writer.newLine();
-                    writer.write(tab(2) + "return new " + ac.getBeanMapping() + "();");
+                    writer.write(tab(2) + "return new " + ac.getBeanMapping().parameterized() + "();");
                     writer.newLine();
                     writer.write(tab(1) + "}");
                     writer.newLine();

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=946684&r1=946683&r2=946684&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 May 20 16:13:58 2010
@@ -2,6 +2,7 @@ package org.apache.activemq.amqp.generat
 
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.StringTokenizer;
 
 public class TypeRegistry {
 
@@ -16,26 +17,30 @@ public class TypeRegistry {
         JAVA_TYPE_MAP.put("*", any.typeMapping);
 
         //
-        JAVA_TYPE_MAP.put("boolean", new JavaTypeMapping("boolean", "java.lang.Boolean", "boolean"));
-        JAVA_TYPE_MAP.put("ubyte", new JavaTypeMapping("ubyte", "java.lang.Short", "short"));
-        JAVA_TYPE_MAP.put("ushort", new JavaTypeMapping("ushort", "java.lang.Integer", "int"));
-        JAVA_TYPE_MAP.put("uint", new JavaTypeMapping("uint", "java.lang.Long", "long"));
-        JAVA_TYPE_MAP.put("ulong", new JavaTypeMapping("ulong", "java.math.BigInteger"));
-        JAVA_TYPE_MAP.put("byte", new JavaTypeMapping("byte", "java.lang.Byte", "byte"));
-        JAVA_TYPE_MAP.put("short", new JavaTypeMapping("short", "java.lang.Short", "short"));
-        JAVA_TYPE_MAP.put("int", new JavaTypeMapping("int", "java.lang.Integer", "int"));
-        JAVA_TYPE_MAP.put("long", new JavaTypeMapping("long", "java.lang.Long", "long"));
-        JAVA_TYPE_MAP.put("float", new JavaTypeMapping("float", "java.lang.Float", "float"));
-        JAVA_TYPE_MAP.put("double", new JavaTypeMapping("double", "java.lang.Double", "double"));
-        JAVA_TYPE_MAP.put("char", new JavaTypeMapping("char", "java.lang.Integer", "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", "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", false, "<" + any.getJavaType() + ">"));
-        JAVA_TYPE_MAP.put("map", new JavaTypeMapping("map", generator.getPackagePrefix() + ".types.IAmqpMap", false, "<" + any.getJavaType() + ", " + any.getJavaType() + ">"));
-        JAVA_TYPE_MAP.put("null", new JavaTypeMapping("null", "java.lang.Object"));
+        JAVA_TYPE_MAP.put("boolean", new JavaTypeMapping("boolean", "java.lang", "Boolean", "boolean"));
+        JAVA_TYPE_MAP.put("ubyte", new JavaTypeMapping("ubyte", "java.lang", "Short", "short"));
+        JAVA_TYPE_MAP.put("ushort", new JavaTypeMapping("ushort", "java.lang", "Integer", "int"));
+        JAVA_TYPE_MAP.put("uint", new JavaTypeMapping("uint", "java.lang", "Long", "long"));
+        JAVA_TYPE_MAP.put("ulong", new JavaTypeMapping("ulong", "java.math", "BigInteger"));
+        JAVA_TYPE_MAP.put("byte", new JavaTypeMapping("byte", "java.lang", "Byte", "byte"));
+        JAVA_TYPE_MAP.put("short", new JavaTypeMapping("short", "java.lang", "Short", "short"));
+        JAVA_TYPE_MAP.put("int", new JavaTypeMapping("int", "java.lang", "Integer", "int"));
+        JAVA_TYPE_MAP.put("long", new JavaTypeMapping("long", "java.lang", "Long", "long"));
+        JAVA_TYPE_MAP.put("float", new JavaTypeMapping("float", "java.lang", "Float", "float"));
+        JAVA_TYPE_MAP.put("double", new JavaTypeMapping("double", "java.lang", "Double", "double"));
+        JAVA_TYPE_MAP.put("char", new JavaTypeMapping("char", "java.lang", "Integer", "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", "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"));
+        JavaTypeMapping list = new JavaTypeMapping("list", generator.getPackagePrefix() + ".types", "IAmqpList");
+        list.setGenerics("E extends " + any.getJavaType());
+        JAVA_TYPE_MAP.put("list", list);
+        JavaTypeMapping map = new JavaTypeMapping("map", generator.getPackagePrefix() + ".types", "IAmqpMap");
+        map.setGenerics("K extends " + any.getJavaType(), "V extends " + any.getJavaType());
+        JAVA_TYPE_MAP.put("map", map);
+        JAVA_TYPE_MAP.put("null", new JavaTypeMapping("null", "java.lang", "Object"));
 
     }
 
@@ -90,7 +95,7 @@ public class TypeRegistry {
             if (mapping == null) {
                 throw new UnknownTypeException("Primitive Type " + type + " not found");
             }
-            return mapping.javaType;
+            return mapping.className;
         }
 
         return amqpClass.getJavaType();
@@ -107,50 +112,43 @@ public class TypeRegistry {
     public static class JavaTypeMapping {
 
         private String amqpType;
-        private String shortName;
         private String packageName;
         private String fullName;
-        private String javaType;
+        private String className;
         private String primitiveType;
+        private String javaType;
+        private boolean array;
+        private String[] generics;
 
-        boolean array;
-        String generic;
-
-        JavaTypeMapping(String amqpType, String fullName, boolean array, String generic) {
-            this(amqpType, fullName);
-            this.array = array;
-            setGeneric(generic);
-            if (array) {
-                javaType = javaType + " []";
+        JavaTypeMapping(JavaTypeMapping other) {
+            this.amqpType = other.amqpType;
+            this.packageName = other.packageName;
+            this.fullName = other.fullName;
+            this.className = other.className;
+            this.primitiveType = other.primitiveType;
+            this.array = other.array;
+            this.javaType = other.javaType;
+            if (other.generics != null) {
+                this.generics = new String[other.generics.length];
+                System.arraycopy(other.generics, 0, generics, 0, generics.length);
             }
         }
 
-        JavaTypeMapping(String amqpType, String fullName, String primitiveType) {
-            this.amqpType = amqpType;
-            this.fullName = fullName;
-            this.primitiveType = primitiveType;
-            this.packageName = fullName.substring(0, fullName.lastIndexOf("."));
-            this.shortName = fullName.substring(fullName.lastIndexOf(".") + 1);
-            this.javaType = shortName;
+        public JavaTypeMapping(String amqpType, String fullName) {
+            this(amqpType, fullName.substring(0, fullName.lastIndexOf(".")), fullName.substring(fullName.lastIndexOf(".") + 1), null);
         }
 
-        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 JavaTypeMapping(String amqpType, String packageName, String className) {
+            this(amqpType, packageName, className, null);
         }
 
-        JavaTypeMapping(String amqpType, String packageName, String className, boolean inner) {
+        JavaTypeMapping(String amqpType, String packageName, String className, String primitiveType) {
             this.amqpType = amqpType;
             this.fullName = packageName + "." + className;
             this.packageName = packageName;
+            this.className = className;
             this.javaType = className;
-            if (inner) {
-                this.javaType = className;
-                this.shortName = className.substring(className.lastIndexOf(".") + 1);
-            }
+            this.primitiveType = primitiveType;
         }
 
         public boolean hasPrimitiveType() {
@@ -159,7 +157,7 @@ public class TypeRegistry {
 
         public String getPrimitiveType() {
             if (primitiveType == null) {
-                return javaType;
+                return className;
             }
             return primitiveType;
         }
@@ -173,15 +171,7 @@ public class TypeRegistry {
         }
 
         public String getClassName() {
-            return shortName;
-        }
-
-        public String getShortName() {
-            return shortName;
-        }
-
-        public void setShortName(String shortName) {
-            this.shortName = shortName;
+            return className;
         }
 
         public String getPackageName() {
@@ -201,33 +191,60 @@ public class TypeRegistry {
         }
 
         public String getJavaType() {
-            return javaType;
+            return className;
         }
 
-        private String parameratize(String str, String... generics) {
-            if (generic != null) {
-                if (generics != null && generics.length > 0) {
-                    boolean first = true;
-                    for (String g : generics) {
-                        if (!first) {
-                            str += ", " + g;
-                        } else {
-                            first = false;
-                            str += "<" + g;
-                        }
-                    }
-                    return str + ">";
+        public JavaTypeMapping shortName() {
+            if (javaType.indexOf(".") > 0) {
+                JavaTypeMapping rc = new JavaTypeMapping(this);
+                rc.javaType = javaType.substring(javaType.indexOf(".") + 1);
+                return rc;
+            } else {
+                return this;
+            }
+        }
 
-                } else {
-                    return javaType + generic;
-                }
+        public JavaTypeMapping nonGeneric() {
+            if (generics != null) {
+                JavaTypeMapping rc = new JavaTypeMapping(this);
+                rc.javaType = javaType.substring(javaType.indexOf(".") + 1);
+                rc.generics = null;
+                return rc;
+            } else {
+                return this;
+            }
+        }
 
+        public JavaTypeMapping parameterized() {
+            if (generics != null) {
+                JavaTypeMapping rc = new JavaTypeMapping(this);
+                for (int i = 0; i < generics.length; i++) {
+                    if (rc.generics[i].indexOf("extends") > 0) {
+                        rc.generics[i] = rc.generics[i].substring(0, rc.generics[i].indexOf("extends")).trim();
+                    }
+                }
+                return rc;
+            } else {
+                return this;
+            }
+        }
+        
+        public JavaTypeMapping wildcard() {
+            if (generics != null) {
+                JavaTypeMapping rc = new JavaTypeMapping(this);
+                for (int i = 0; i < generics.length; i++) {
+                    rc.generics[i] = "?";
+                }
+                return rc;
+            } else {
+                return this;
             }
-            return str;
         }
 
-        public void setJavaType(String javaType) {
-            this.javaType = javaType;
+        public JavaTypeMapping parameterized(String... generics) {
+            JavaTypeMapping rc = new JavaTypeMapping(this);
+            rc.generics = generics;
+            return rc;
         }
 
         public boolean isArray() {
@@ -238,17 +255,20 @@ public class TypeRegistry {
             this.array = array;
         }
 
-        public String getGeneric() {
-            return generic;
+        public boolean isGeneric() {
+            return generics != null;
         }
 
-        public void setGeneric(String generic) {
-            this.generic = generic;
-            javaType = shortName + generic;
+        public String[] getGenerics() {
+            return generics;
+        }
+        
+        public void setGenerics(String... generics) {
+            this.generics = generics;
         }
 
         public String getFullVersionMarshallerName(Generator generator) {
-            return generator.getMarshallerPackage() + "." + shortName + "Marshaller";
+            return generator.getMarshallerPackage() + "." + className + "Marshaller";
         }
 
         public String getImport() {
@@ -256,14 +276,32 @@ public class TypeRegistry {
         }
 
         public String toString() {
-            return getJavaType();
+            return javaType + getGeneric("");
+        }
+
+        public String getGeneric(String suffix) {
+            if (generics != null && generics.length > 0) {
+                String rc = "<";
+                boolean first = true;
+                for (String g : generics) {
+                    if (!first) {
+                        rc += ", ";
+                    } else {
+                        first = false;
+                    }
+                    rc += g;
+                }
+                return rc + ">" + (suffix != null ? suffix : "");
+            }
+            return "";
         }
     }
 
     public static class AmqpType extends AmqpClass {
 
         AmqpType(String amqpName, String fullName) {
-            super.typeMapping = new JavaTypeMapping(amqpName, fullName, false, "<?, ?>");
+            super.typeMapping = new JavaTypeMapping(amqpName, fullName);
+            typeMapping.setGenerics("?", "?");
             super.name = amqpName;
             super.setPrimitive(true);
             super.handcoded = true;