package org.jacorb.demo.dynany;
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import org.omg.CORBA.Any;
import org.omg.CORBA.TCKind;
import org.omg.DynamicAny.DynAnyFactory;
import org.omg.DynamicAny.DynAnyFactoryHelper;
import org.omg.DynamicAny.DynArray;
import org.omg.DynamicAny.DynEnum;
import org.omg.DynamicAny.DynSequence;
import org.omg.DynamicAny.DynStruct;
import org.omg.DynamicAny.DynUnion;
public class Server
extends AnyServerPOA
{
public static org.omg.CORBA.ORB orb;
private boolean shutdown;
DynAnyFactory factory;
public Server()
{
try
{
factory = DynAnyFactoryHelper.narrow( orb.resolve_initial_references("DynAnyFactory"));
}
catch( Exception e )
{
e.printStackTrace();
}
}
public java.lang.String generic(Any a)
{
printAny(a);
return "done.";
}
public void shutdown ()
{
shutdown = true;
}
public boolean getShutdown ()
{
return shutdown;
}
private void printAny(Any a)
{
try
{
switch( a.type().kind().value() )
{
case TCKind._tk_char:
System.out.println("[Server]: char: " + a.extract_char());
break;
case TCKind._tk_short:
System.out.println("[Server]: Short: " + a.extract_short());
break;
case TCKind._tk_long:
System.out.println("[Server]: Long: " + a.extract_long());
break;
case TCKind._tk_double:
System.out.println("[Server]: Double: " + a.extract_double());
break;
case TCKind._tk_float:
System.out.println("[Server]: Float: " + a.extract_float());
break;
case TCKind._tk_string:
System.out.println("[Server]: String: " + a.extract_string());
break;
case TCKind._tk_enum:
DynEnum dynEnum = (DynEnum)factory.create_dyn_any(a);
System.out.println("[Server]: ** Enum **");
System.out.println( dynEnum.get_as_string());
break;
case TCKind._tk_struct:
DynStruct dynstruct = (DynStruct)factory.create_dyn_any( a );
org.omg.DynamicAny.NameValuePair[] members = dynstruct.get_members();
System.out.println("[Server]: ** Struct **");
for( int i = 0; i < members.length; i++ )
{
System.out.println("[Server]: name: " + members[i].id + " value: " );
printAny( members[i].value);
}
break;
case TCKind._tk_union:
System.out.println("[Server]: ** Union **");
DynUnion dynunion = (DynUnion)factory.create_dyn_any( a );
System.out.println("[Server]: member name " + dynunion.member_name());
printAny(dynunion.member().to_any());
break;
case TCKind._tk_sequence:
DynSequence dynseq = (DynSequence)factory.create_dyn_any( a );
Any[] contents = dynseq.get_elements();
System.out.println("[Server]: ** Sequence of length " + contents.length + " **");
for( int i = 0; i < contents.length; i++)
printAny( contents[i]);
break;
case TCKind._tk_array:
DynArray dynarray = (DynArray)factory.create_dyn_any( a );
Any[] array_contents = dynarray.get_elements();
System.out.println("[Server]: ** Array **");
for( int i = 0; i < array_contents.length; i++)
printAny( array_contents[i]);
break;
default:
System.out.println("[Server]: Unknown, kind " + a.type().kind().value());
}
}
catch ( Exception e )
{
e.printStackTrace();
}
}
public static void main( String[] args ) throws Exception
{
orb = org.omg.CORBA.ORB.init(args, null);
org.omg.PortableServer.POA poa =
org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
poa.the_POAManager().activate();
Server s = new Server();
org.omg.CORBA.Object o = poa.servant_to_reference(s);
PrintWriter ps = new PrintWriter(new FileOutputStream(new File( args[0] )));
ps.println( orb.object_to_string( o ) );
ps.close();
while ( args.length == 2 || ! s.getShutdown ())
{
Thread.sleep(1000);
}
orb.shutdown(true);
}
}