diff options
| author | Rafael H. Schloming <rhs@apache.org> | 2007-09-17 21:06:53 +0000 |
|---|---|---|
| committer | Rafael H. Schloming <rhs@apache.org> | 2007-09-17 21:06:53 +0000 |
| commit | d576e8af1b815495901aca7e207cf2076944659e (patch) | |
| tree | f4d509b5315d783a75c051febc39136ace40f857 /java | |
| parent | 24966bd7fbaff11d8a0f1ad282180154c96a7d2f (diff) | |
| download | qpid-python-d576e8af1b815495901aca7e207cf2076944659e.tar.gz | |
* ProtocolEvent.Switch --> ProtocolDelegate
* Delegate --> MethodDelegate
* Added method dispatching as a separate delegation level to the
hierarchy underneath ProtocolDelegate.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@576587 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
14 files changed, 121 insertions, 121 deletions
diff --git a/java/common/generate b/java/common/generate index b2448c6e5d..d6387623d8 100755 --- a/java/common/generate +++ b/java/common/generate @@ -210,7 +210,7 @@ class Struct: out.line(" }") out.line() - out.line(" public <C> void delegate(C context, Delegate<C> delegate) {") + out.line(" public <C> void dispatch(C context, MethodDelegate<C> delegate) {") out.line(" delegate.%s(context, this);" % dromedary(self.name)) out.line(" }") @@ -365,8 +365,8 @@ fct.line(" }") fct.line("}"); fct.write() -dlg = Output(out_dir, out_pkg, "Delegate") -dlg.line("public abstract class Delegate<C> extends AbstractDelegate<C> {") +dlg = Output(out_dir, out_pkg, "MethodDelegate") +dlg.line("public abstract class MethodDelegate<C> {") for s in structs: dlg.line(" public void %s(C context, %s struct) {}" % (dromedary(s.name), s.name)) diff --git a/java/common/src/main/java/org/apache/qpidity/transport/AbstractDelegate.java b/java/common/src/main/java/org/apache/qpidity/transport/AbstractDelegate.java index a8059d669f..e69de29bb2 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/AbstractDelegate.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/AbstractDelegate.java @@ -1,40 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - */ -package org.apache.qpidity.transport; - - -/** - * AbstractDelegate - * - */ - -class AbstractDelegate<C> -{ - - public void init(C context, ProtocolHeader header) {} - - public void error(C context, ProtocolError error) {} - - public void header(C context, Header header) {} - - public void data(C context, Data data) {} - -} diff --git a/java/common/src/main/java/org/apache/qpidity/transport/Channel.java b/java/common/src/main/java/org/apache/qpidity/transport/Channel.java index 426f954c17..8ea2eaf8c4 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/Channel.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/Channel.java @@ -35,12 +35,13 @@ import static org.apache.qpidity.transport.util.Functions.*; * @author Rafael H. Schloming */ -public class Channel extends Invoker implements Receiver<ProtocolEvent> +public class Channel extends Invoker + implements Receiver<ProtocolEvent>, ProtocolDelegate<Void> { final private Connection connection; final private int channel; - final private Delegate<Channel> delegate; + final private MethodDelegate<Channel> delegate; final private SessionDelegate sessionDelegate; // session may be null private Session session; @@ -63,40 +64,51 @@ public class Channel extends Invoker implements Receiver<ProtocolEvent> public void received(ProtocolEvent event) { - switch (event.getEncodedTrack()) + event.delegate(null, this); + } + + public void init(Void v, ProtocolHeader hdr) + { + connection.getConnectionDelegate().init(this, hdr); + } + + public void method(Void v, Method method) + { + switch (method.getEncodedTrack()) { case L1: - event.delegate(this, connection.getConnectionDelegate()); + method.dispatch(this, connection.getConnectionDelegate()); break; case L2: - event.delegate(this, delegate); + method.dispatch(this, delegate); break; case L3: - event.delegate(session, sessionDelegate); + method.delegate(session, sessionDelegate); break; case L4: - // XXX - if (event instanceof Method) - { - Method method = (Method) event; - method.setId(session.nextCommandId()); - method.delegate(session, sessionDelegate); - if (!method.hasPayload()) - { - session.processed(method); - } - } - else - { - event.delegate(session, sessionDelegate); - } + method.delegate(session, sessionDelegate); break; default: throw new IllegalStateException - ("unknown track: " + event.getEncodedTrack()); + ("unknown track: " + method.getEncodedTrack()); } } + public void header(Void v, Header header) + { + header.delegate(session, sessionDelegate); + } + + public void data(Void v, Data data) + { + data.delegate(session, sessionDelegate); + } + + public void error(Void v, ProtocolError error) + { + error.delegate(session, sessionDelegate); + } + public void closed() { System.out.println("channel closed: " + this); diff --git a/java/common/src/main/java/org/apache/qpidity/transport/ChannelDelegate.java b/java/common/src/main/java/org/apache/qpidity/transport/ChannelDelegate.java index 9d28b1a81e..88c8b18e0e 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/ChannelDelegate.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/ChannelDelegate.java @@ -29,7 +29,7 @@ import java.util.UUID; * @author Rafael H. Schloming */ -class ChannelDelegate extends Delegate<Channel> +class ChannelDelegate extends MethodDelegate<Channel> { public @Override void sessionOpen(Channel channel, SessionOpen open) diff --git a/java/common/src/main/java/org/apache/qpidity/transport/ConnectionDelegate.java b/java/common/src/main/java/org/apache/qpidity/transport/ConnectionDelegate.java index d500cc6b81..f3d3a70bff 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/ConnectionDelegate.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/ConnectionDelegate.java @@ -47,7 +47,7 @@ import javax.security.sasl.SaslServer; * * the connectionClose is kind of different for both sides */ -public abstract class ConnectionDelegate extends Delegate<Channel> +public abstract class ConnectionDelegate extends MethodDelegate<Channel> { private String _username = "guest"; private String _password = "guest";; @@ -68,7 +68,7 @@ public abstract class ConnectionDelegate extends Delegate<Channel> _negotiationCompleteLock = negotiationCompleteLock; } - @Override public void init(Channel ch, ProtocolHeader hdr) + public void init(Channel ch, ProtocolHeader hdr) { System.out.println(hdr); // XXX: hardcoded version @@ -87,11 +87,6 @@ public abstract class ConnectionDelegate extends Delegate<Channel> } } - @Override public void error(Channel ch, ProtocolError error) - { - throw new RuntimeException(error.getMessage()); - } - // ---------------------------------------------- // Client side //----------------------------------------------- diff --git a/java/common/src/main/java/org/apache/qpidity/transport/Data.java b/java/common/src/main/java/org/apache/qpidity/transport/Data.java index 55cde84d5e..72029d106e 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/Data.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/Data.java @@ -71,14 +71,9 @@ public class Data implements ProtocolEvent return Frame.L4; } - public <C> void delegate(C context, Delegate<C> delegate) + public <C> void delegate(C context, ProtocolDelegate<C> delegate) { delegate.data(context, this); } - public <C> void delegate(C context, Switch sw) - { - sw.data(context, this); - } - } diff --git a/java/common/src/main/java/org/apache/qpidity/transport/Header.java b/java/common/src/main/java/org/apache/qpidity/transport/Header.java index 632dc137c1..6f3c7819f1 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/Header.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/Header.java @@ -63,14 +63,9 @@ public class Header implements ProtocolEvent { return Frame.L4; } - public <C> void delegate(C context, Delegate<C> delegate) + public <C> void delegate(C context, ProtocolDelegate<C> delegate) { delegate.header(context, this); } - public <C> void delegate(C context, Switch sw) - { - sw.header(context, this); - } - } diff --git a/java/common/src/main/java/org/apache/qpidity/transport/Method.java b/java/common/src/main/java/org/apache/qpidity/transport/Method.java index edd9116a73..7304260333 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/Method.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/Method.java @@ -54,9 +54,11 @@ public abstract class Method extends Struct implements ProtocolEvent public abstract byte getEncodedTrack(); - public <C> void delegate(C context, Switch sw) + public abstract <C> void dispatch(C context, MethodDelegate<C> delegate); + + public <C> void delegate(C context, ProtocolDelegate<C> delegate) { - sw.method(context, this); + delegate.method(context, this); } } diff --git a/java/common/src/main/java/org/apache/qpidity/transport/ProtocolDelegate.java b/java/common/src/main/java/org/apache/qpidity/transport/ProtocolDelegate.java new file mode 100644 index 0000000000..6149c3876a --- /dev/null +++ b/java/common/src/main/java/org/apache/qpidity/transport/ProtocolDelegate.java @@ -0,0 +1,42 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpidity.transport; + + +/** + * ProtocolDelegate + * + */ + +public interface ProtocolDelegate<C> +{ + + void init(C context, ProtocolHeader header); + + void method(C context, Method method); + + void header(C context, Header header); + + void data(C context, Data data); + + void error(C context, ProtocolError error); + +} diff --git a/java/common/src/main/java/org/apache/qpidity/transport/ProtocolError.java b/java/common/src/main/java/org/apache/qpidity/transport/ProtocolError.java index cd9fb3b94a..4d1b83d43e 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/ProtocolError.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/ProtocolError.java @@ -54,9 +54,9 @@ public class ProtocolError implements NetworkEvent, ProtocolEvent return String.format(format, args); } - public <C> void delegate(C context, Switch sw) + public <C> void delegate(C context, ProtocolDelegate<C> delegate) { - sw.error(context, this); + delegate.error(context, this); } public void delegate(NetworkDelegate delegate) @@ -64,9 +64,4 @@ public class ProtocolError implements NetworkEvent, ProtocolEvent delegate.error(this); } - public <C> void delegate(C context, Delegate<C> delegate) - { - delegate.error(context, this); - } - } diff --git a/java/common/src/main/java/org/apache/qpidity/transport/ProtocolEvent.java b/java/common/src/main/java/org/apache/qpidity/transport/ProtocolEvent.java index e2adefba9e..0b38dc6f28 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/ProtocolEvent.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/ProtocolEvent.java @@ -29,21 +29,8 @@ package org.apache.qpidity.transport; public interface ProtocolEvent { - public interface Switch<C> - { - void init(C context, ProtocolHeader header); - void method(C context, Method method); - void header(C context, Header header); - void data(C context, Data data); - void error(C context, ProtocolError error); - } - - // XXX: could do this switching with cascading defaults for the - // specific dispatch methods - <C> void delegate(C context, Switch sw); - - <C> void delegate(C context, Delegate<C> delegate); - byte getEncodedTrack(); + <C> void delegate(C context, ProtocolDelegate<C> delegate); + } diff --git a/java/common/src/main/java/org/apache/qpidity/transport/ProtocolHeader.java b/java/common/src/main/java/org/apache/qpidity/transport/ProtocolHeader.java index 50cae51171..f9cd6f3947 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/ProtocolHeader.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/ProtocolHeader.java @@ -89,9 +89,9 @@ public class ProtocolHeader implements NetworkEvent, ProtocolEvent return buf; } - public <C> void delegate(C context, Switch sw) + public <C> void delegate(C context, ProtocolDelegate<C> delegate) { - sw.init(context, this); + delegate.init(context, this); } public void delegate(NetworkDelegate delegate) @@ -99,11 +99,6 @@ public class ProtocolHeader implements NetworkEvent, ProtocolEvent delegate.init(this); } - public <C> void delegate(C context, Delegate<C> delegate) - { - delegate.init(context, this); - } - public String toString() { return String.format("AMQP.%d %d-%d", instance, major, minor); diff --git a/java/common/src/main/java/org/apache/qpidity/transport/SessionDelegate.java b/java/common/src/main/java/org/apache/qpidity/transport/SessionDelegate.java index 8b3c661075..247e691c78 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/SessionDelegate.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/SessionDelegate.java @@ -20,6 +20,8 @@ */ package org.apache.qpidity.transport; +import org.apache.qpidity.transport.network.Frame; + /** * SessionDelegate @@ -27,10 +29,29 @@ package org.apache.qpidity.transport; * @author Rafael H. Schloming */ -public abstract class SessionDelegate extends Delegate<Session> +public abstract class SessionDelegate + extends MethodDelegate<Session> + implements ProtocolDelegate<Session> { + public void init(Session ssn, ProtocolHeader hdr) { } + + public void method(Session ssn, Method method) { + if (method.getEncodedTrack() == Frame.L4) + { + method.setId(ssn.nextCommandId()); + method.dispatch(ssn, this); + if (!method.hasPayload()) + { + ssn.processed(method); + } + } + } + + public void header(Session ssn, Header header) { } + + public void data(Session ssn, Data data) { } - private static final Struct[] EMPTY_STRUCT_ARRAY = {}; + public void error(Session ssn, ProtocolError error) { } @Override public void executionResult(Session ssn, ExecutionResult result) { diff --git a/java/common/src/main/java/org/apache/qpidity/transport/network/Disassembler.java b/java/common/src/main/java/org/apache/qpidity/transport/network/Disassembler.java index 73be9c3492..6315d00150 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/network/Disassembler.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/network/Disassembler.java @@ -27,9 +27,10 @@ import org.apache.qpidity.transport.ConnectionEvent; import org.apache.qpidity.transport.Data; import org.apache.qpidity.transport.Header; import org.apache.qpidity.transport.Method; -import org.apache.qpidity.transport.ProtocolHeader; +import org.apache.qpidity.transport.ProtocolDelegate; import org.apache.qpidity.transport.ProtocolError; import org.apache.qpidity.transport.ProtocolEvent; +import org.apache.qpidity.transport.ProtocolHeader; import org.apache.qpidity.transport.Sender; import org.apache.qpidity.transport.Struct; @@ -45,8 +46,8 @@ import static java.lang.Math.*; * */ -public class Disassembler - implements Sender<ConnectionEvent>, ProtocolEvent.Switch<ConnectionEvent> +public class Disassembler implements Sender<ConnectionEvent>, + ProtocolDelegate<ConnectionEvent> { private final Sender<NetworkEvent> sender; |
