Frames | No Frames |
1: /* LocalServerRequest.java -- 2: Copyright (C) 2005 Free Software Foundation, Inc. 3: 4: This file is part of GNU Classpath. 5: 6: GNU Classpath is free software; you can redistribute it and/or modify 7: it under the terms of the GNU General Public License as published by 8: the Free Software Foundation; either version 2, or (at your option) 9: any later version. 10: 11: GNU Classpath is distributed in the hope that it will be useful, but 12: WITHOUT ANY WARRANTY; without even the implied warranty of 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14: General Public License for more details. 15: 16: You should have received a copy of the GNU General Public License 17: along with GNU Classpath; see the file COPYING. If not, write to the 18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19: 02110-1301 USA. 20: 21: Linking this library statically or dynamically with other modules is 22: making a combined work based on this library. Thus, the terms and 23: conditions of the GNU General Public License cover the whole 24: combination. 25: 26: As a special exception, the copyright holders of this library give you 27: permission to link this library with independent modules to produce an 28: executable, regardless of the license terms of these independent 29: modules, and to copy and distribute the resulting executable under 30: terms of your choice, provided that you also meet, for each linked 31: independent module, the terms and conditions of the license of that 32: module. An independent module is a module which is not derived from 33: or based on this library. If you modify this library, you may extend 34: this exception to your version of the library, but you are not 35: obligated to do so. If you do not wish to do so, delete this 36: exception statement from your version. */ 37: 38: 39: package gnu.CORBA.Poa; 40: 41: import gnu.CORBA.gnuNamedValue; 42: 43: import org.omg.CORBA.ARG_INOUT; 44: import org.omg.CORBA.ARG_OUT; 45: import org.omg.CORBA.Any; 46: import org.omg.CORBA.BAD_PARAM; 47: import org.omg.CORBA.Bounds; 48: import org.omg.CORBA.Context; 49: import org.omg.CORBA.NVList; 50: import org.omg.CORBA.NamedValue; 51: import org.omg.CORBA.ServerRequest; 52: import org.omg.CORBA.UnknownUserException; 53: 54: /** 55: * Used to make local invocations via LocalRequest. 56: * 57: * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org) 58: */ 59: public class LocalServerRequest 60: extends ServerRequest 61: { 62: /** 63: * The local request, on the base of that this instance is created. 64: */ 65: final LocalRequest request; 66: 67: /** 68: * Create a new instance. 69: */ 70: public LocalServerRequest(LocalRequest _request) 71: { 72: request = _request; 73: } 74: 75: /** 76: * Get the argument list that can be modified. 77: */ 78: public void params(NVList args) 79: { 80: arguments(args); 81: } 82: 83: /** 84: * Get contexts. 85: */ 86: public Context ctx() 87: { 88: return request.ctx(); 89: } 90: 91: /** 92: * Get the operatin being performed. 93: */ 94: public String operation() 95: { 96: return request.operation(); 97: } 98: 99: /** 100: * Get the argument list that can be modified. 101: * The direction depends on the size of the passed list. 102: * The empty list is filled with the request arguments. 103: * The non-empty list is used to set the request arguments. 104: */ 105: public void arguments(NVList args) 106: { 107: NVList l = request.arguments(); 108: NamedValue a; 109: 110: try 111: { 112: if (args.count() == 0) 113: { 114: // Transfer to the passed parameter. 115: for (int i = 0; i < l.count(); i++) 116: { 117: a = l.item(i); 118: args.add_value(a.name(), a.value(), a.flags()); 119: } 120: } 121: else 122: { 123: // Transfer from the passed parameter. 124: if (l.count() != args.count()) 125: throw new BAD_PARAM("Argument number mismatch, current " + 126: l.count() + ", passed " + args.count() 127: ); 128: try 129: { 130: for (int i = 0; i < l.count(); i++) 131: { 132: a = l.item(i); 133: if (a.flags() == ARG_INOUT.value || 134: a.flags() == ARG_OUT.value 135: ) 136: { 137: ((gnuNamedValue) a).setValue(args.item(i).value()); 138: } 139: } 140: } 141: catch (ClassCastException cex) 142: { 143: InternalError ierr = new InternalError(); 144: ierr.initCause(cex); 145: throw ierr; 146: } 147: } 148: } 149: catch (Bounds ex) 150: { 151: InternalError ierr = new InternalError(); 152: ierr.initCause(ex); 153: throw ierr; 154: } 155: } 156: 157: /** 158: * Set the result. 159: */ 160: public void set_result(Any result) 161: { 162: gnuNamedValue g = new gnuNamedValue(); 163: g.setValue(result); 164: g.setFlags(ARG_OUT.value); 165: request.set_result(g); 166: } 167: 168: /** 169: * Get the name of the method being called. 170: */ 171: public String op_name() 172: { 173: return request.operation(); 174: } 175: 176: /** 177: * Set the exception that has been thrown. 178: */ 179: public void set_exception(Any exc) 180: { 181: request.env().exception(new UnknownUserException(exc)); 182: } 183: 184: /** 185: * Set the result. 186: */ 187: public void result(Any r) 188: { 189: set_result(r); 190: } 191: 192: /** 193: * Set the exception. 194: */ 195: public void except(Any exc) 196: { 197: set_exception(exc); 198: } 199: }