Merge from mainline.
[official-gcc.git] / libjava / classpath / org / omg / CORBA / LocalObject.java
blob7c06e18249d9417a3a30cf0c69de6b6fd2170200
1 /* LocalObject.java --
2 Copyright (C) 2005 Free Software Foundation, Inc.
4 This file is part of GNU Classpath.
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.
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.
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.
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.
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. */
39 package org.omg.CORBA;
41 import org.omg.CORBA.BAD_PARAM;
42 import org.omg.CORBA.Context;
43 import org.omg.CORBA.ContextList;
44 import org.omg.CORBA.DomainManager;
45 import org.omg.CORBA.ExceptionList;
46 import org.omg.CORBA.NO_IMPLEMENT;
47 import org.omg.CORBA.NVList;
48 import org.omg.CORBA.NamedValue;
49 import org.omg.CORBA.Policy;
50 import org.omg.CORBA.Request;
51 import org.omg.CORBA.SetOverrideType;
52 import org.omg.CORBA.portable.ApplicationException;
53 import org.omg.CORBA.portable.InputStream;
54 import org.omg.CORBA.portable.OutputStream;
55 import org.omg.CORBA.portable.RemarshalException;
56 import org.omg.CORBA.portable.ServantObject;
58 import javax.rmi.CORBA.Util;
60 /**
61 * An object, formally implementing the CORBA {@link Object}, but actually
62 * handling all invocations locally.
63 * Various calls to the remote object specific methods throw the
64 * {@link NO_IMPLEMENT}. The explaining message for this exception is
65 * specified in java API as <code>"This is a locally constrained object."</code>.
66 * It is not possible to get a stringified reference of the local object, or
67 * invoke a method using DII (by name via {@link Request} class).
69 * However narrowing and widening methods will work with local objects.
71 * @since 1.4
73 * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
75 public class LocalObject
76 implements org.omg.CORBA.Object
78 /**
79 * The explaining message for the exception, thrown in response to call
80 * the method, not appropriate for the local object.
82 private static final String INAPPROPRIATE =
83 "This is a locally constrained object.";
85 /**
86 * This method is not appropriate for the local objects and just
87 * throws an exception.
89 * @throws NO_IMPLEMENT, always.
91 public Request _create_request(Context context, String operation,
92 NVList parameters, NamedValue returns
95 throw new NO_IMPLEMENT(INAPPROPRIATE);
98 /**
99 * This method is not appropriate for the local objects and just
100 * throws an exception.
102 * @throws NO_IMPLEMENT, always.
104 public Request _create_request(Context context, String operation,
105 NVList parameters, NamedValue returns,
106 ExceptionList exceptions, ContextList ctx_list
109 throw new NO_IMPLEMENT(INAPPROPRIATE);
113 * This method is not appropriate for the local objects and just
114 * throws an exception.
116 * @throws NO_IMPLEMENT, always.
118 public org.omg.CORBA.Object _duplicate()
120 throw new NO_IMPLEMENT(INAPPROPRIATE);
124 * This method is not appropriate for the local objects and just
125 * throws an exception.
127 * @throws NO_IMPLEMENT, always.
129 public DomainManager[] _get_domain_managers()
131 throw new NO_IMPLEMENT(INAPPROPRIATE);
135 * This method is not appropriate for the local objects and just
136 * throws an exception.
138 * @throws NO_IMPLEMENT, always.
140 public org.omg.CORBA.Object _get_interface_def()
142 throw new NO_IMPLEMENT(INAPPROPRIATE);
146 * This method is not appropriate for the local objects and just
147 * throws an exception.
149 * @throws NO_IMPLEMENT, always.
151 public org.omg.CORBA.Object _get_interface()
153 throw new NO_IMPLEMENT(INAPPROPRIATE);
157 * This method is not appropriate for the local objects and just
158 * throws an exception.
160 * @throws NO_IMPLEMENT, always.
162 public Policy _get_policy(int a_policy_type)
163 throws BAD_PARAM
165 throw new NO_IMPLEMENT(INAPPROPRIATE);
169 * {@inheritDoc}
171 public int _hash(int maximum)
173 return Math.abs(hashCode()) % maximum;
177 * This method is not appropriate for the local objects and just
178 * throws an exception.
180 * @throws NO_IMPLEMENT, always.
182 public boolean _is_a(String repositoryIdentifer)
184 throw new NO_IMPLEMENT(INAPPROPRIATE);
188 * Determines if the object is equal to another object, so far as it is
189 * possible to determine easily.
191 * @param other the other object.
193 * @return true if the pased object is not null and
194 * java.lang.Object.equals(other) returns true. False otherwise.
196 public boolean _is_equivalent(org.omg.CORBA.Object other)
198 if (other != null)
199 if (other.equals(this))
200 return true;
202 return false;
206 * Always returs false.
208 * @return false, always.
210 public boolean _non_existent()
212 return false;
216 * This method is not appropriate for the local objects and just
217 * throws an exception.
219 * @throws NO_IMPLEMENT, always.
221 public void _release()
223 throw new NO_IMPLEMENT(INAPPROPRIATE);
227 * This method is not appropriate for the local objects and just
228 * throws an exception.
230 * @specnote it is possible to implement a local handling of the _request(),
231 * but the API clearly states that NO_IMPLEMENT
232 * must be thrown instead.
234 * @throws NO_IMPLEMENT, always.
236 public Request _request(String operation)
238 throw new NO_IMPLEMENT(INAPPROPRIATE);
242 * This method is not appropriate for the local objects and just
243 * throws an exception.
245 * @throws NO_IMPLEMENT, always.
247 public org.omg.CORBA.Object _set_policy_override(Policy[] policies,
248 SetOverrideType how
251 throw new NO_IMPLEMENT(INAPPROPRIATE);
255 * This method is called from <code>rmic</code> generated stubs if the
256 * {@link Util#isLocal()}, called passing <code>this</code> as parameter,
257 * returns true. If the method returns null, the requested method is then
258 * invoked on <code>this</code>. Else it is invoked on the returned object,
259 * casting it into the interface that the local object implements. In this
260 * case, the generated stub also later calls
261 * {@link _servant_postinvoke(ServantObject)}, passing that returned target
262 * as parameter.
264 * @param operation the name of the method being invoked.
265 * @param expectedType the interface that the returned servant
266 * object must implement.
268 * @throws NO_IMPLEMENT always. If used, the method must be overridden.
270 public ServantObject _servant_preinvoke(String operation, Class expectedType)
272 throw new NO_IMPLEMENT(INAPPROPRIATE);
277 * This method is called from <code>rmic</code> generated stubs if the
278 * {@link Util#isLocal()}, called passing <code>this</code> as parameter,
279 * returns true, and the {@link #_servant_preinvoke} return non-null object.
280 * The stub then invokes the requrested method on that returned object and
281 * later calls _servant_postinvoke, passing that returned target as parameter.
283 * @param servant the object that has served as the invocation target for the
284 * current operation.
286 public void _servant_postinvoke(ServantObject servant)
291 * Invokes the operation. This method takes the OutputStream that was previously
292 * returned by a {@link _request()} and returns an InputStream which
293 * contains the reply. Up till jdk 1.5 inclusive this method is marked as
294 * unimplemented.
296 * @throws NO_IMPLEMENT always.
298 public InputStream _invoke(OutputStream output)
299 throws ApplicationException, RemarshalException
301 throw new NO_IMPLEMENT(INAPPROPRIATE);
305 * While it may look that this should return true, the jdk 1.5 API states
306 * that it must throw NO_IMPLEMENT instead. The rmi stubs do not call this
307 * method to check if the object is local; they call {@link Util#isLocal()}
308 * instead (passing <code>this</code> as parameter).
310 * @return never.
312 * @throws NO_IMPLEMENT always.
314 public boolean _is_local()
316 throw new NO_IMPLEMENT(INAPPROPRIATE);
321 * This method is not appropriate for the local objects and just
322 * throws an exception.
324 * @throws NO_IMPLEMENT, always.
326 public ORB _orb()
328 throw new NO_IMPLEMENT(INAPPROPRIATE);
332 * This method is not appropriate for the local objects and just
333 * throws an exception.
335 * @throws NO_IMPLEMENT, always.
337 public void _releaseReply(InputStream input)
339 throw new NO_IMPLEMENT(INAPPROPRIATE);
343 * This method is not appropriate for the local objects and just
344 * throws an exception.
346 * @throws NO_IMPLEMENT, always.
348 public OutputStream _request(String operation, boolean responseExpected)
350 throw new NO_IMPLEMENT(INAPPROPRIATE);
354 * This method is not appropriate for the local objects and just
355 * throws an exception.
357 * @throws NO_IMPLEMENT, always.
359 public boolean validate_connection()
361 throw new NO_IMPLEMENT(INAPPROPRIATE);