summaryrefslogtreecommitdiff
path: root/qpid/java/common/codegen
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2008-04-16 13:32:13 +0000
committerRafael H. Schloming <rhs@apache.org>2008-04-16 13:32:13 +0000
commitbbe30c7875f67547ea9394d4e99b420ac22ef152 (patch)
tree3bd76d813efccb16ba86f49982e3f24725659174 /qpid/java/common/codegen
parent857ba162eba08e8c210492a0ea265a6bd4439467 (diff)
downloadqpid-python-bbe30c7875f67547ea9394d4e99b420ac22ef152.tar.gz
QPID-901: updates to the java client to use the 0-10 final spec instead of the 0-10 preview spec; this includes improvements to the codegen process as well as some modifications to the shared code path in the client to not lose per message state when consumers are closed.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@648692 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/common/codegen')
-rwxr-xr-xqpid/java/common/codegen63
1 files changed, 63 insertions, 0 deletions
diff --git a/qpid/java/common/codegen b/qpid/java/common/codegen
new file mode 100755
index 0000000000..f5d1577774
--- /dev/null
+++ b/qpid/java/common/codegen
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+
+import os, sys, mllib
+from templating import Parser
+from genutil import *
+
+out_dir = sys.argv[1]
+spec_file = sys.argv[2]
+pkg_dir = os.path.join(out_dir, "org/apache/qpidity/transport")
+
+if not os.path.exists(pkg_dir):
+ os.makedirs(pkg_dir)
+
+spec = mllib.xml_parse(spec_file)
+
+def excludes(nd):
+ if (nd.parent is not None and
+ nd.parent.name == "class" and
+ nd.parent["@name"] in ("file", "stream")):
+ return False
+ else:
+ return True
+
+def execute(output, template, **kwargs):
+ f = open(template)
+ input = f.read()
+ f.close()
+ p = Parser(**kwargs)
+ p.parse(input)
+ fname = os.path.join(pkg_dir, output)
+ f = open(fname, "w")
+ f.write(p.output)
+ f.close()
+
+execute("Type.java", "Type.tpl", spec = spec)
+execute("Constant.java", "Constant.tpl", spec = spec)
+
+structs = spec.query["amqp/struct"] + \
+ spec.query["amqp/class/struct", excludes] + \
+ spec.query["amqp/class/command/result/struct", excludes]
+controls = spec.query["amqp/class/control", excludes]
+commands = spec.query["amqp/class/command", excludes]
+
+composites = structs + controls + commands
+
+for c in composites:
+ name = cname(c)
+ execute("%s.java" % name, "Composite.tpl", type = c, name = name)
+
+execute("MethodDelegate.java", "MethodDelegate.tpl", composites = composites)
+execute("Option.java", "Option.tpl", composites = composites)
+execute("Invoker.java", "Invoker.tpl", composites = controls + commands)
+execute("StructFactory.java", "StructFactory.tpl", composites = composites)
+
+def is_enum(nd):
+ return nd["enum"] is not None
+
+enums = spec.query["amqp/domain", is_enum] + \
+ spec.query["amqp/class/domain", is_enum]
+
+for e in enums:
+ name = cname(e)
+ execute("%s.java" % name, "Enum.tpl", name = name, type = e)