package org.jacorb.util;
import javax.rmi.CORBA.ValueHandlerMultiFormat;
import org.omg.CORBA.MARSHAL;
/**
* A static wrapper around classes in javax.rmi.
*/
public class ValueHandler
{
public static final byte STREAM_FORMAT_VERSION_1 = (byte)1;
public static final byte STREAM_FORMAT_VERSION_2 = (byte)2;
public static String getRMIRepositoryID(Class clz)
{
return javax.rmi.CORBA.Util.createValueHandler()
.getRMIRepositoryID(clz);
}
public static org.omg.SendingContext.RunTime getRunTimeCodeBase()
{
return javax.rmi.CORBA.Util.createValueHandler().getRunTimeCodeBase();
}
public static java.io.Serializable readValue(
org.omg.CORBA.portable.InputStream in, int offset, Class clz,
String repositoryID, org.omg.SendingContext.RunTime sender)
{
return javax.rmi.CORBA.Util.createValueHandler().readValue(in, offset,
clz, repositoryID, sender);
}
public static void writeValue(org.omg.CORBA.portable.OutputStream out,
java.io.Serializable value)
{
byte version = ValueHandler.getMaximumStreamFormatVersion (out);
javax.rmi.CORBA.ValueHandler vh = javax.rmi.CORBA.Util.createValueHandler();
if (version == ValueHandler.STREAM_FORMAT_VERSION_1)
{
vh.writeValue (out, value);
}
else if (version == ValueHandler.STREAM_FORMAT_VERSION_2)
{
((ValueHandlerMultiFormat)vh).writeValue (out, value, ValueHandler.STREAM_FORMAT_VERSION_2);
}
else
{
throw new MARSHAL ("Unsupported stream format version.");
}
}
public static boolean isCustomMarshaled(Class clz)
{
return javax.rmi.CORBA.Util.createValueHandler().isCustomMarshaled(clz);
}
public static java.io.Serializable writeReplace(java.io.Serializable value)
{
return javax.rmi.CORBA.Util.createValueHandler().writeReplace(value);
}
/**
* From javax.rmi.CORBA.Util.
*/
public static Class loadClass(String className, String remoteCodebase,
ClassLoader loader) throws ClassNotFoundException
{
return javax.rmi.CORBA.Util
.loadClass(className, remoteCodebase, loader);
}
/**
* From javax.rmi.CORBA.Util.
*/
public static String getCodebase(Class clz)
{
return javax.rmi.CORBA.Util.getCodebase(clz);
}
/**
* From javax.rmi.PortableRemoteObject.
*/
public static Object portableRemoteObject_narrow(Object narrowFrom,
Class narrowTo) throws ClassCastException
{
return javax.rmi.PortableRemoteObject.narrow(narrowFrom, narrowTo);
}
public static byte getMaximumStreamFormatVersion (org.omg.CORBA.portable.OutputStream out)
{
javax.rmi.CORBA.ValueHandler vh = javax.rmi.CORBA.Util.createValueHandler();
byte streamFormatVersion = STREAM_FORMAT_VERSION_1;
// Maximum stream format version calculation rules:
// 1. Assume version 1 by default (GIOP v1.2).
// 2. If ValueHandler supports higher version take it as preliminary value.
// 3. If CDROutputStream returns version lower that ValueHandler supports
// then use maximum version that is supported by output stream.
if (vh instanceof ValueHandlerMultiFormat)
{
streamFormatVersion = ((ValueHandlerMultiFormat)vh).getMaximumStreamFormatVersion ();
}
if (out instanceof org.jacorb.orb.CDROutputStream
&& streamFormatVersion > ((org.jacorb.orb.CDROutputStream)out).getMaximumStreamFormatVersion ())
{
streamFormatVersion = ((org.jacorb.orb.CDROutputStream)out).getMaximumStreamFormatVersion ();
}
return streamFormatVersion;
}
}