2 * 11/19/04 1.0 moved to LGPL.
\r
3 * 12/12/99 Initial version. mdm@techie.com
\r
4 *-----------------------------------------------------------------------
\r
5 * This program is free software; you can redistribute it and/or modify
\r
6 * it under the terms of the GNU Library General Public License as published
\r
7 * by the Free Software Foundation; either version 2 of the License, or
\r
8 * (at your option) any later version.
\r
10 * This program is distributed in the hope that it will be useful,
\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 * GNU Library General Public License for more details.
\r
15 * You should have received a copy of the GNU Library General Public
\r
16 * License along with this program; if not, write to the Free Software
\r
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
\r
18 *----------------------------------------------------------------------
\r
22 //import java.io.IOException;
\r
23 //import java.io.InputStream;
\r
24 //import java.io.InvalidClassException;
\r
25 //import java.io.InvalidObjectException;
\r
26 //import java.io.ObjectInputStream;
\r
27 //import java.io.ObjectOutputStream;
\r
28 //import java.io.OutputStream;
\r
29 //import java.lang.reflect.Array;
\r
32 * The JavaLayerUtils class is not strictly part of the JavaLayer API.
\r
33 * It serves to provide useful methods and system-wide hooks.
\r
37 public class JavaLayerUtils
\r
39 static private JavaLayerHook hook = null;
\r
42 * Deserializes the object contained in the given input stream.
\r
43 * @param in The input stream to deserialize an object from.
\r
44 * @param cls The expected class of the deserialized object.
\r
46 // static public Object deserialize(InputStream in, Class cls)
\r
47 static public Object deserialize(InputStream in)
\r
51 // throw new NullPointerException("cls");
\r
53 // Object obj = deserialize(in, cls);
\r
54 Object obj = deserialize(in);
\r
55 // if (!cls.isInstance(obj))
\r
57 // throw new InvalidObjectException("type of deserialized instance not of required class.");
\r
64 * Deserializes an object from the given <code>InputStream</code>.
\r
65 * The deserialization is delegated to an <code>
\r
66 * ObjectInputStream</code> instance.
\r
68 * @param in The <code>InputStream</code> to deserialize an object
\r
71 * @return The object deserialized from the stream.
\r
72 * @exception IOException is thrown if there was a problem reading
\r
73 * the underlying stream, or an object could not be deserialized
\r
76 * @see java.io.ObjectInputStream
\r
78 static public Object deserialize(InputStream in)
\r
82 throw new NullPointerException("in");
\r
84 //TODO : need to enable after having objectinputstream
\r
86 ObjectInputStream objIn = new ObjectInputStream(in);
\r
92 obj = objIn.readObject();
\r
94 catch (ClassNotFoundException ex)
\r
96 throw new InvalidClassException(ex.toString());
\r
105 * Deserializes an array from a given <code>InputStream</code>.
\r
107 * @param in The <code>InputStream</code> to
\r
108 * deserialize an object from.
\r
110 * @param elemType The class denoting the type of the array
\r
112 * @param length The expected length of the array, or -1 if
\r
113 * any length is expected.
\r
115 static public Object deserializeArray(InputStream in, int length)
\r
119 throw new IllegalArgumentException("length");
\r
121 Object obj = deserialize(in);
\r
125 // static public Object deserializeArray(InputStream in, Class elemType, int length)
\r
126 // throws IOException
\r
128 // if (elemType==null)
\r
129 // throw new NullPointerException("elemType");
\r
132 // throw new IllegalArgumentException("length");
\r
134 // Object obj = deserialize(in);
\r
136 // //SSJava will never throw exceptions as it is so this code is meaningless
\r
138 // Class cls = obj.getClass();
\r
140 // if (!cls.isArray())
\r
141 // throw new InvalidObjectException("object is not an array");
\r
143 // Class arrayElemType = cls.getComponentType();
\r
144 // if (arrayElemType!=elemType)
\r
145 // throw new InvalidObjectException("unexpected array component type");
\r
147 // if (length != -1)
\r
149 // int arrayLength = Array.getLength(obj);
\r
150 // if (arrayLength!=length)
\r
151 // throw new InvalidObjectException("array length mismatch");
\r
157 // static public Object deserializeArrayResource(String name, Class elemType, int length)
\r
158 static public Object deserializeArrayResource(String name, int length)
\r
161 InputStream str = getResourceAsStream(name);
\r
163 throw new IOException("unable to load resource '"+name+"'");
\r
165 // Object obj = deserializeArray(str, elemType, length);
\r
166 Object obj = deserializeArray(str, length);
\r
171 static public void serialize(OutputStream out, Object obj)
\r
174 //TODO : need to enable after having objectinputstream
\r
176 // throw new NullPointerException("out");
\r
179 // throw new NullPointerException("obj");
\r
181 // ObjectOutputStream objOut = new ObjectOutputStream(out);
\r
182 // objOut.writeObject(obj);
\r
187 * Sets the system-wide JavaLayer hook.
\r
189 static synchronized public void setHook(JavaLayerHook hook0)
\r
194 static synchronized public JavaLayerHook getHook()
\r
200 * Retrieves an InputStream for a named resource.
\r
202 * @param name The name of the resource. This must be a simple
\r
203 * name, and not a qualified package name.
\r
205 * @return The InputStream for the named resource, or null if
\r
206 * the resource has not been found. If a hook has been
\r
207 * provided, its getResourceAsStream() method is called
\r
208 * to retrieve the resource.
\r
210 static synchronized public InputStream getResourceAsStream(String name)
\r
212 InputStream is = null;
\r
216 is = hook.getResourceAsStream(name);
\r
218 //TODO java reflection
\r
221 // Class cls = JavaLayerUtils.class;
\r
222 // is = cls.getResourceAsStream(name);
\r