diff options
-rwxr-xr-x | java/common/generate | 72 | ||||
-rw-r--r-- | java/common/src/main/java/org/apache/qpidity/Stub.java | 13 |
2 files changed, 72 insertions, 13 deletions
diff --git a/java/common/generate b/java/common/generate index 698c9b6a0b..52f4551ab5 100755 --- a/java/common/generate +++ b/java/common/generate @@ -71,6 +71,9 @@ def camel(offset, *args): def dromedary(s): return s[0].lower() + s[1:] +def scream(*args): + return "_".join([a.replace("-", "_").upper() for a in args]) + DOMAINS = {} for d in spec.query["amqp/domain"]: @@ -82,6 +85,8 @@ def resolve(type): else: return type +OPTIONS = {} + class Struct: def __init__(self, type, name): @@ -123,8 +128,26 @@ class Struct: out.line() out.line(" %s%s(%s) {" % (self.name, isfx, self.parameters())) + opts = False for type, name in self.fields: - out.line(" this.%s = %s;" % (name, name)) + if not OPTIONS.has_key(name): + out.line(" this.%s = %s;" % (name, name)) + else: + opts = True + if opts: + for type, name in self.fields: + if OPTIONS.has_key(name): + out.line(" boolean _%s = false;" % name) + out.line(" for (int i=0; i < _options.length; i++) {") + out.line(" switch (_options[i]) {") + for type, name in self.fields: + if OPTIONS.has_key(name): + out.line(" case %s: _%s=true; break;" % (OPTIONS[name], name)) + out.line(" }") + out.line(" }") + for type, name in self.fields: + if OPTIONS.has_key(name): + out.line(" this.%s = _%s;" % (name, name)) out.line(" }") out.line() @@ -148,23 +171,54 @@ class Struct: def parameters(self): - return ", ".join(["%s %s" % (TYPES[type], name) for type, name in self.fields]) + params = [] + var = False + for type, name in self.fields: + if OPTIONS.has_key(name): + var = True + else: + params.append("%s %s" % (TYPES[type], name)) + if var: + params.append("Option ... _options") + return ", ".join(params) def arguments(self): - return ", ".join([name for (type, name) in self.fields]) + args = [] + var = False + for type, name in self.fields: + if OPTIONS.has_key(name): + var = True + else: + args.append(name) + if var: + args.append("_options") + return ", ".join(args) +opts = Output(out_dir, out_pkg, "Option") +opts.line("public enum Option {") structs = [] for m in spec.query["amqp/class/method"]: struct = Struct(int(m.parent["@index"])*256 + int(m["@index"]), camel(0, m.parent["@name"], m["@name"])) for f in m.query["field"]: - struct.field(resolve(f["@domain"]), camel(1, f["@name"])) + type = resolve(f["@domain"]) + name = camel(1, f["@name"]) + struct.field(type, name) + if type == "bit": + opt_name = scream(f["@name"]) + if not OPTIONS.has_key(name): + OPTIONS[name] = opt_name + opts.line(" %s," % opt_name) structs.append(struct) - out = Output(out_dir, out_pkg, struct.name) - struct.interface(out) +opts.line("}") +opts.write() + +for s in structs: + out = Output(out_dir, out_pkg, s.name) + s.interface(out) out.write() - iout = Output(out_dir, out_pkg, struct.name + isfx) - struct.impl(iout) + iout = Output(out_dir, out_pkg, s.name + isfx) + s.impl(iout) iout.write() fct = Output(out_dir, out_pkg, "StructFactory") @@ -181,7 +235,7 @@ ifct_name = "StructFactory%s" % isfx ifct = Output(out_dir, out_pkg, ifct_name) ifct.line("class %s implements StructFactory {" % ifct_name) ifct.line(" public Struct create(int type, Decoder dec) {") -ifct.line(" switch(type) {") +ifct.line(" switch (type) {") for s in structs: ifct.line(" case %s.TYPE:" % s.name) ifct.line(" return new %s%s(dec);" % (s.name, isfx)) diff --git a/java/common/src/main/java/org/apache/qpidity/Stub.java b/java/common/src/main/java/org/apache/qpidity/Stub.java index d8de56f8b1..25700e43ca 100644 --- a/java/common/src/main/java/org/apache/qpidity/Stub.java +++ b/java/common/src/main/java/org/apache/qpidity/Stub.java @@ -4,6 +4,8 @@ import java.nio.ByteBuffer; import java.util.*; import java.lang.annotation.*; +import static org.apache.qpidity.Option.*; + public class Stub { private static Connection conn = new Connection(); @@ -26,9 +28,11 @@ public class Stub { public static final void main(String[] args) { StructFactory f = new StructFactory_v0_10(); frame(Frame.L2, Frame.METHOD, true, true, f.newSessionOpen(0)); - frame(Frame.L4, Frame.METHOD, true, false, f.newQueueDeclare((short) 0, "asdf", "alternate", false, false, false, false, false, null)); + frame(Frame.L4, Frame.METHOD, true, false, + f.newQueueDeclare((short) 0, "asdf", "alternate", null, DURABLE)); frame(Frame.L4, Frame.METHOD, false, false); - frame(Frame.L3, Frame.METHOD, true, true, f.newExchangeDeclare((short) 0, "exchange", "type", "alternate", false, false, false, null)); + frame(Frame.L3, Frame.METHOD, true, true, + f.newExchangeDeclare((short) 0, "exchange", "type", "alternate", null)); frame(Frame.L4, Frame.METHOD, false, true); frame(Frame.L4, Frame.HEADER, true, false); frame(Frame.L4, Frame.HEADER, false, false); @@ -36,7 +40,8 @@ public class Stub { frame(Frame.L4, Frame.BODY, true, false); frame(Frame.L4, Frame.BODY, false, false); frame(Frame.L4, Frame.BODY, false, false); - frame(Frame.L1, Frame.METHOD, true, true, f.newExchangeDeclare((short) 0, "exchange", "type", "alternate", false, false, false, null)); + frame(Frame.L1, Frame.METHOD, true, true, + f.newExchangeDeclare((short) 0, "exchange", "type", "alternate", null)); frame(Frame.L4, Frame.BODY, false, false); frame(Frame.L4, Frame.BODY, false, true); } @@ -63,7 +68,7 @@ class SessionDelegate extends Delegate<Session> { public @Override void exchangeDeclare(Session session, ExchangeDeclare ed) { System.out.println("got an exchange declare: " + ed.getExchange() + ", " + ed.getType()); - session.queueDeclare((short) 0, "asdf", "alternate", false, false, false, false, false, null); + session.queueDeclare((short) 0, "asdf", "alternate", null); } /* |