aboutsummaryrefslogtreecommitdiff
path: root/gnu/testlet/org/omg/PortableInterceptor/Interceptor/ucServerRequestInterceptor.java
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/testlet/org/omg/PortableInterceptor/Interceptor/ucServerRequestInterceptor.java')
-rw-r--r--gnu/testlet/org/omg/PortableInterceptor/Interceptor/ucServerRequestInterceptor.java194
1 files changed, 194 insertions, 0 deletions
diff --git a/gnu/testlet/org/omg/PortableInterceptor/Interceptor/ucServerRequestInterceptor.java b/gnu/testlet/org/omg/PortableInterceptor/Interceptor/ucServerRequestInterceptor.java
new file mode 100644
index 00000000..36c7b661
--- /dev/null
+++ b/gnu/testlet/org/omg/PortableInterceptor/Interceptor/ucServerRequestInterceptor.java
@@ -0,0 +1,194 @@
+// Copyright (C) 2005 Audrius Meskauskas (AudriusA@Bioinformatics.org)
+
+// Mauve is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// Mauve is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Mauve; see the file COPYING. If not, write to
+// the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+// Boston, MA 02110-1301 USA.
+
+
+package gnu.testlet.org.omg.PortableInterceptor.Interceptor;
+
+import org.omg.CORBA.Any;
+import org.omg.CORBA.CompletionStatus;
+import org.omg.CORBA.DATA_CONVERSION;
+import org.omg.CORBA.INV_FLAG;
+import org.omg.CORBA.LocalObject;
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TypeCodePackage.BadKind;
+import org.omg.IOP.ServiceContext;
+import org.omg.PortableInterceptor.ForwardRequest;
+import org.omg.PortableInterceptor.ServerRequestInfo;
+import org.omg.PortableInterceptor.ServerRequestInterceptor;
+
+/**
+ * Our server request interceptor.
+ *
+ * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
+ */
+public class ucServerRequestInterceptor extends LocalObject
+ implements ServerRequestInterceptor
+{
+ StringBuffer callPattern = new StringBuffer();
+ public static boolean destroyed;
+
+ /**
+ * Get class name as name of this test interceptor.
+ */
+ public String name()
+ {
+ return getClass().getName();
+ }
+
+ public void destroy()
+ {
+ destroyed = true;
+ }
+
+ public void receive_request_service_contexts(ServerRequestInfo info)
+ throws ForwardRequest
+ {
+ try
+ {
+ Any s0 = ORB.init().create_any();
+ Any s1 = ORB.init().create_any();
+
+ s0.insert_string("Slot zero");
+ s1.insert_string("Slot one");
+
+ info.set_slot(ucInitialiser.slot_0, s0);
+ info.set_slot(ucInitialiser.slot_1, s1);
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException("Server Slot problem", e);
+ }
+
+ callPattern.setLength(0);
+ callPattern.append("In");
+
+ checkClientCtx(info);
+
+ // Add one context to reply.
+ ServiceContext ce = new ServiceContext();
+ ce.context_id = 6002;
+ ce.context_data = new byte[ 0 ];
+
+ info.add_reply_service_context(ce, true);
+ }
+
+ public void receive_request(ServerRequestInfo info) throws ForwardRequest
+ {
+ callPattern.append("Rq[" + info.operation() + "]");
+
+ // Add one context to reply.
+ ServiceContext ce = new ServiceContext();
+ ce.context_id = 6001;
+ ce.context_data = new byte[ 0 ];
+
+ info.add_reply_service_context(ce, false);
+
+ checkClientCtx(info);
+
+ // Throw an exception on "passCharacters"
+ if (info.operation().equals("passCharacters"))
+ {
+ throw new DATA_CONVERSION(87652, CompletionStatus.COMPLETED_MAYBE);
+ }
+
+ // Forward on the attempt to get the field.
+ // The forwarding target is connected to another ORB without this
+ // interceptor.
+ if (info.operation().equals("_get_theField"))
+ {
+ throw new ForwardRequest(testInterceptors.fior);
+ }
+ }
+
+ private void checkClientCtx(ServerRequestInfo info)
+ {
+ // Check if the two client side service contexts are present.
+ ServiceContext s = info.get_request_service_context(5000);
+
+ ServiceContext se = info.get_request_service_context(5001);
+
+ if (s.context_id != 5000)
+ {
+ throw new RuntimeException("S ERROR Returned context 5000 id mismatch");
+ }
+
+ if (se.context_id != 5001)
+ {
+ throw new RuntimeException("S ERROR Returned context 5001 id mismatch");
+ }
+ }
+
+ public void send_exception(ServerRequestInfo info) throws ForwardRequest
+ {
+ callPattern.append("Ex");
+ addCallPattern(info);
+ try
+ {
+ // Throw another exception, expecting replacement.
+ if (info.sending_exception().type().id().equals("IDL:omg.org/CORBA/DATA_CONVERSION:1.0")
+ )
+ {
+ throw new INV_FLAG(52, CompletionStatus.COMPLETED_MAYBE);
+ }
+ }
+ catch (BadKind e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ public void send_other(ServerRequestInfo info)
+ {
+ callPattern.append("Fw");
+ addCallPattern(info);
+ }
+
+ public void send_reply(ServerRequestInfo info)
+ {
+ callPattern.append("Rp");
+ addCallPattern(info);
+
+ try
+ {
+ Any s0 = info.get_slot(ucInitialiser.slot_0);
+ if (!s0.extract_string().equals("Slot zero"))
+ {
+ throw new RuntimeException("Slot 0 value mismatch");
+ }
+
+ Any s1 = info.get_slot(ucInitialiser.slot_1);
+ if (!s1.extract_string().equals("Slot one"))
+ {
+ throw new RuntimeException("Slot 1 value mismatch");
+ }
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException("Server slot problem", e);
+ }
+ }
+
+ void addCallPattern(ServerRequestInfo info)
+ {
+ // Add one context.
+ ServiceContext c = new ServiceContext();
+ c.context_id = 6000;
+ c.context_data = callPattern.toString().getBytes();
+
+ info.add_reply_service_context(c, false);
+ }
+} \ No newline at end of file