001: /*
002: * JacORB - a free Java ORB
003: *
004: * Copyright (C) 1999-2004 Gerald Brose
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Library General Public
008: * License as published by the Free Software Foundation; either
009: * version 2 of the License, or (at your option) any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Library General Public License for more details.
015: *
016: * You should have received a copy of the GNU Library General Public
017: * License along with this library; if not, write to the Free
018: * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
019: *
020: */
021:
022: package org.jacorb.orb.portableInterceptor;
023:
024: import org.jacorb.util.ObjectUtil;
025: import org.omg.IOP.*;
026: import org.omg.CORBA.*;
027: import org.omg.PortableInterceptor.*;
028: import org.omg.Dynamic.Parameter;
029: import java.util.*;
030:
031: /**
032: * This is the abstract base class of the two
033: * Info classes, namely ClientRequestInfo and
034: * ServerRequestInfo. <br>
035: * See PI Spec p. 5-41ff
036: *
037: * @author Nicolas Noffke
038: * @version $Id: RequestInfoImpl.java,v 1.11 2006/07/07 10:55:57 alphonse.bendt Exp $
039: */
040:
041: public abstract class RequestInfoImpl extends org.omg.CORBA.LocalObject
042: implements RequestInfo {
043: protected int request_id;
044: protected String operation;
045:
046: protected Parameter[] arguments = null;
047: protected TypeCode[] exceptions = null;
048: protected Any result = null;
049: protected boolean response_expected;
050: protected org.omg.CORBA.Object forward_reference = null;
051: protected short reply_status;
052: protected org.omg.PortableInterceptor.Current current = null;
053:
054: protected final Hashtable request_ctx;
055: protected final Hashtable reply_ctx;
056:
057: protected short caller_op = -1;
058:
059: public RequestInfoImpl() {
060: super ();
061:
062: request_ctx = new Hashtable();
063: reply_ctx = new Hashtable();
064: }
065:
066: /**
067: * Make the existing request ServiceContexts available to
068: * the interceptors. Only one ServiceContext per id
069: * is allowed.
070: */
071: public void setRequestServiceContexts(ServiceContext[] ctx) {
072: for (int _i = 0; _i < ctx.length; _i++) {
073: request_ctx.put(ObjectUtil.newInteger(ctx[_i].context_id),
074: ctx[_i]);
075: }
076: }
077:
078: /**
079: * Make the existing reply ServiceContexts available to
080: * the interceptors. Only one ServiceContext per id
081: * is allowed.
082: */
083: public void setReplyServiceContexts(ServiceContext[] ctx) {
084: for (int _i = 0; _i < ctx.length; _i++) {
085: reply_ctx.put(ObjectUtil.newInteger(ctx[_i].context_id),
086: ctx[_i]);
087: }
088: }
089:
090: public void setArguments(Parameter[] args) {
091: this .arguments = args;
092: }
093:
094: public void setResult(Any result) {
095: this .result = result;
096: }
097:
098: public org.omg.PortableInterceptor.Current current() {
099: return current;
100: }
101:
102: public void setCurrent(org.omg.PortableInterceptor.Current current) {
103: this .current = current;
104: }
105:
106: public void setReplyStatus(short reply_status) {
107: this .reply_status = reply_status;
108: }
109:
110: public void setForwardReference(
111: org.omg.CORBA.Object forward_reference) {
112: this .forward_reference = forward_reference;
113: }
114:
115: // implementation of org.omg.PortableInterceptor.RequestInfoOperations interface
116: public Parameter[] arguments() {
117: return arguments;
118: }
119:
120: public String[] contexts() {
121: throw new NO_RESOURCES(
122: "JacORB does not support operation contexts", 1,
123: CompletionStatus.COMPLETED_MAYBE);
124: }
125:
126: public TypeCode[] exceptions() {
127: return exceptions;
128: }
129:
130: public org.omg.CORBA.Object forward_reference() {
131: return forward_reference;
132: }
133:
134: public ServiceContext get_reply_service_context(int id) {
135: Integer _id = ObjectUtil.newInteger(id);
136: if (!reply_ctx.containsKey(_id)) {
137: throw new BAD_PARAM("No ServiceContext with id " + id, 23,
138: CompletionStatus.COMPLETED_MAYBE);
139: }
140:
141: return (ServiceContext) reply_ctx.get(_id);
142: }
143:
144: public ServiceContext get_request_service_context(int id) {
145: Integer _id = ObjectUtil.newInteger(id);
146: if (!request_ctx.containsKey(_id)) {
147: throw new BAD_PARAM("No ServiceContext with id " + id, 23,
148: CompletionStatus.COMPLETED_MAYBE);
149: }
150:
151: return (ServiceContext) request_ctx.get(_id);
152: }
153:
154: public Any get_slot(int id) throws InvalidSlot {
155: return current.get_slot(id);
156: }
157:
158: public String operation() {
159: return operation;
160: }
161:
162: public String[] operation_context() {
163: throw new NO_RESOURCES(
164: "JacORB does not support operation contexts", 1,
165: CompletionStatus.COMPLETED_MAYBE);
166: }
167:
168: public short reply_status() {
169: return reply_status;
170: }
171:
172: public int request_id() {
173: return request_id;
174: }
175:
176: public boolean response_expected() {
177: return response_expected;
178: }
179:
180: public Any result() {
181: if (result == null) {
182: throw new NO_RESOURCES(
183: "Stream-based skeletons/stubs do not support this op",
184: 1, CompletionStatus.COMPLETED_MAYBE);
185: }
186:
187: return result;
188: }
189:
190: public short sync_scope() {
191: return org.omg.Messaging.SYNC_WITH_TRANSPORT.value;
192: }
193: }
|