summaryrefslogtreecommitdiff
path: root/java/common/Composite.tpl
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
commitd054b41aaa1466b65c9dc2acf1b22ca98ec3128c (patch)
tree08055eba3020d3dcad5c9a9587d98b15d0b97c89 /java/common/Composite.tpl
parentf375be1908ad22329fe9ed21a8c196475ade7e59 (diff)
downloadqpid-python-d054b41aaa1466b65c9dc2acf1b22ca98ec3128c.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/qpid@648692 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/common/Composite.tpl')
-rw-r--r--java/common/Composite.tpl173
1 files changed, 173 insertions, 0 deletions
diff --git a/java/common/Composite.tpl b/java/common/Composite.tpl
new file mode 100644
index 0000000000..4172ffdefc
--- /dev/null
+++ b/java/common/Composite.tpl
@@ -0,0 +1,173 @@
+package org.apache.qpidity.transport;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpidity.transport.codec.Decoder;
+import org.apache.qpidity.transport.codec.Encodable;
+import org.apache.qpidity.transport.codec.Encoder;
+
+import org.apache.qpidity.transport.network.Frame;
+
+${
+from genutil import *
+
+cls = klass(type)["@name"]
+
+if type.name in ("control", "command"):
+ base = "Method"
+ size = 0
+ pack = 2
+ if type["segments"]:
+ payload = "true"
+ else:
+ payload = "false"
+ if type.name == "control" and cls == "connection":
+ track = "Frame.L1"
+ elif cls == "session" and type["@name"] in ("attach", "attached", "detach", "detached"):
+ track = "Frame.L2"
+ elif type.name == "command":
+ track = "Frame.L4"
+ else:
+ track = "Frame.L3"
+else:
+ base = "Struct"
+ size = type["@size"]
+ pack = type["@pack"]
+ payload = "false"
+ track = "-1"
+
+typecode = code(type)
+}
+
+public class $name extends $base {
+
+ public static final int TYPE = $typecode;
+
+ public final int getStructType() {
+ return TYPE;
+ }
+
+ public final int getSizeWidth() {
+ return $size;
+ }
+
+ public final int getPackWidth() {
+ return $pack;
+ }
+
+ public final boolean hasPayload() {
+ return $payload;
+ }
+
+ public final byte getEncodedTrack() {
+ return $track;
+ }
+
+ private static final List<Field<?,?>> FIELDS = new ArrayList<Field<?,?>>();
+ public List<Field<?,?>> getFields() { return FIELDS; }
+
+${
+fields = get_fields(type)
+params = get_parameters(fields)
+options = get_options(fields)
+
+for f in fields:
+ out(" private boolean has_$(f.name);\n")
+ out(" private $(f.type) $(f.name);\n")
+}
+
+${
+if fields:
+ out(" public $name() {}\n")
+}
+
+ public $name($(", ".join(params))) {
+${
+for f in fields:
+ if f.option: continue
+ out(" $(f.set)($(f.name));\n")
+
+for f in options:
+ out(" boolean _$(f.name) = false;\n")
+
+if options:
+ out("""
+ for (int i=0; i < _options.length; i++) {
+ switch (_options[i]) {
+""")
+
+ for f in options:
+ out(" case $(f.option): _$(f.name) = true; break;\n")
+
+ out(""" case NO_OPTION: break;
+ default: throw new IllegalArgumentException("invalid option: " + _options[i]);
+ }
+ }
+""")
+
+for f in options:
+ out(" $(f.set)(_$(f.name));\n")
+}
+ }
+
+ public <C> void dispatch(C context, MethodDelegate<C> delegate) {
+ delegate.$(dromedary(name))(context, this);
+ }
+
+${
+for f in fields:
+ out("""
+ public final boolean $(f.has)() {
+ return has_$(f.name);
+ }
+
+ public final $name $(f.clear)() {
+ this.has_$(f.name) = false;
+ this.$(f.name) = $(f.default);
+ this.dirty = true;
+ return this;
+ }
+
+ public final $(f.type) $(f.get)() {
+ return $(f.name);
+ }
+
+ public final $name $(f.set)($(f.type) value) {
+ this.$(f.name) = value;
+ this.has_$(f.name) = true;
+ this.dirty = true;
+ return this;
+ }
+
+ public final $name $(f.name)($(f.type) value) {
+ this.$(f.name) = value;
+ this.has_$(f.name) = true;
+ this.dirty = true;
+ return this;
+ }
+
+ static {
+ FIELDS.add(new Field<$name,$(jref(jclass(f.type)))>($name.class, $(jref(jclass(f.type))).class, "$(f.name)", $(f.index)) {
+ public boolean has(Object struct) {
+ return check(struct).has_$(f.name);
+ }
+ public void has(Object struct, boolean value) {
+ check(struct).has_$(f.name) = value;
+ }
+ public $(jref(f.type)) get(Object struct) {
+ return check(struct).$(f.get)();
+ }
+ public void read(Decoder dec, Object struct) {
+ check(struct).$(f.name) = $(f.read);
+ check(struct).dirty = true;
+ }
+ public void write(Encoder enc, Object struct) {
+ $(f.write);
+ }
+ });
+ }
+""")
+}}