summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael H. Schloming <rhs@apache.org>2007-07-24 19:25:43 +0000
committerRafael H. Schloming <rhs@apache.org>2007-07-24 19:25:43 +0000
commit0dcc71862cb48a79263a05facd4c42453441cbb5 (patch)
treeda1238d9bf770fb6da290d52b9bbd975ffef6a3b
parentd8c02962be928f57812ec780b1a41be85e6bb037 (diff)
downloadqpid-python-0dcc71862cb48a79263a05facd4c42453441cbb5.tar.gz
Switched over to using enums instead of booleans for fields of type bit.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@559167 13f79535-47bb-0310-9956-ffa450edef68
-rwxr-xr-xjava/common/generate72
-rw-r--r--java/common/src/main/java/org/apache/qpidity/Stub.java13
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);
}
/*