summaryrefslogtreecommitdiff
path: root/qpid/gentools/templ.java
diff options
context:
space:
mode:
authorKim van der Riet <kpvdr@apache.org>2006-12-22 17:43:09 +0000
committerKim van der Riet <kpvdr@apache.org>2006-12-22 17:43:09 +0000
commit78ff340f476f700e3cc3fcfc305cae37db0f42dd (patch)
treed9f369b185329fbc9e17ae7367ce784d09c09711 /qpid/gentools/templ.java
parent32d79a6e99ad773e8a7b49efa12e06c028e7d2f4 (diff)
downloadqpid-python-78ff340f476f700e3cc3fcfc305cae37db0f42dd.tar.gz
Additional changes to support new Java AMQP version code, some C++ tidy-up as well.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@489704 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/gentools/templ.java')
-rw-r--r--qpid/gentools/templ.java/MethodBodyClass.tmpl2
-rw-r--r--qpid/gentools/templ.java/MethodRegistryClass.tmpl45
-rw-r--r--qpid/gentools/templ.java/PropertyContentHeaderClass.tmpl4
3 files changed, 47 insertions, 4 deletions
diff --git a/qpid/gentools/templ.java/MethodBodyClass.tmpl b/qpid/gentools/templ.java/MethodBodyClass.tmpl
index 8ac6c4e00a..ad1ce36006 100644
--- a/qpid/gentools/templ.java/MethodBodyClass.tmpl
+++ b/qpid/gentools/templ.java/MethodBodyClass.tmpl
@@ -54,6 +54,8 @@ ${METHOD_ID_INIT}
public int getClazz() { return classIdMap.get(major + "-" + minor); }
public int getMethod() { return methodIdMap.get(major + "-" + minor); }
+ public static int getClazz(byte major, byte minor) { return classIdMap.get(major + "-" + minor); }
+ public static int getMethod(byte major, byte minor) { return methodIdMap.get(major + "-" + minor); }
// Field methods
%{FLIST} ${mb_field_get_method}
diff --git a/qpid/gentools/templ.java/MethodRegistryClass.tmpl b/qpid/gentools/templ.java/MethodRegistryClass.tmpl
index 4fb40055a5..0f15918f90 100644
--- a/qpid/gentools/templ.java/MethodRegistryClass.tmpl
+++ b/qpid/gentools/templ.java/MethodRegistryClass.tmpl
@@ -28,12 +28,53 @@
package org.apache.qpid.framing;
-import java.util.Map;
+import java.util.HashMap;
+import java.lang.reflect.Constructor;
+import org.apache.log4j.Logger;
class MainRegistry
{
- static void register(Map map, byte major, byte minor)
+ private static final Logger _log = Logger.getLogger(MainRegistry.class);
+ private static HashMap<Long, Class> classIDMethodIDVersionBodyMap = new HashMap<Long, Class>();
+
+ static
{
%{CLIST} ${reg_map_put_method}
}
+
+ public static AMQMethodBody get(short classID, short methodID, byte major, byte minor)
+ throws AMQFrameDecodingException
+ {
+ Class bodyClass = classIDMethodIDVersionBodyMap.get(
+ createMapKey(classID, methodID, major, minor));
+ if (bodyClass == null)
+ {
+ throw new AMQFrameDecodingException(_log,
+ "Unable to find a suitable decoder for class " + classID + " and method " +
+ methodID + " in AMQP version " + major + "-" + minor + ".");
+ }
+ try
+ {
+ Constructor initFn = bodyClass.getConstructor(byte.class, byte.class);
+ return (AMQMethodBody) initFn.newInstance(major, minor);
+ }
+ catch (Exception e)
+ {
+ throw new AMQFrameDecodingException(_log,
+ "Unable to instantiate body class for class " + classID + " and method " +
+ methodID + " in AMQP version " + major + "-" + minor + " : " + e, e);
+ }
+ }
+
+ private static Long createMapKey(short classID, short methodID, byte major, byte minor)
+ {
+ /**
+ * Mapping of 4 components into a guaranteed unique key:
+ * MSB LSB
+ * +----+----+----+----+----+----+-----+-----+
+ * | 0 | classID |methodID |major|minor|
+ * +----+----+----+----+----+----+-----+-----+
+ */
+ return new Long(((long)classID << 32) + ((long)methodID << 16) + ((long)major << 8) + minor);
+ }
}
diff --git a/qpid/gentools/templ.java/PropertyContentHeaderClass.tmpl b/qpid/gentools/templ.java/PropertyContentHeaderClass.tmpl
index 6cc2e55a33..3c147cf6b6 100644
--- a/qpid/gentools/templ.java/PropertyContentHeaderClass.tmpl
+++ b/qpid/gentools/templ.java/PropertyContentHeaderClass.tmpl
@@ -1,4 +1,4 @@
-&{${CLASS}PropertyContentHeader.java}
+&{${CLASS}ContentHeaderProperties.java}
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -31,7 +31,7 @@ package org.apache.qpid.framing;
import org.apache.log4j.Logger;
import org.apache.mina.common.ByteBuffer;
-class ${CLASS}ContentHeaderProperties implements ContentHeaderProperties
+public class ${CLASS}ContentHeaderProperties implements ContentHeaderProperties
{
private static final Logger logger = Logger.getLogger(BasicContentHeaderProperties.class);