/*
 *  SystemExceptionHelper.java v0.10 24-JAN-2000
 *  Copyright (c) TKK/TLM/Calypso
 *  Author: Alexey Mednonogov
 */

package codec.build;

import java.io.*;
import java.util.*;

import codec.*;
import codec.adapt.*;
import codec.convert.*;
import codec.debug.*;
import codec.dyntree.*;
import codec.export.*;
import codec.orb.*;
import codec.pco.*;
import codec.server.*;
import codec.client.*;
import codec.visit.*;
import codec.build.*;

/** Helper class for body of "SystemException". Introduced in order to adapt
 *  system exceptions to representation identical to user exceptions. System
 *  exceptions are viewed as a special case of user exceptions. */
final public class SystemExceptionHelper {

    public static org.omg.CORBA.TypeCode type() {

		org.omg.CORBA.TypeCode typeCode = null;

        org.omg.CORBA.ORB orb =
		    CorbaServer.getCodecObject().getOrbGeneric().getORB();

        org.omg.CORBA.StructMember[] members =
	  		new org.omg.CORBA.StructMember[2];

        members[0] = new org.omg.CORBA.StructMember();
        members[0].name = "minor";
        members[0].type = orb.get_primitive_tc(
			org.omg.CORBA.TCKind.tk_ulong);

        members[1] = new org.omg.CORBA.StructMember();
        members[1].name = "completed";
        members[1].type = CompletionStatusHelper.type();

        typeCode = orb.create_exception_tc(id(),
			"SystemException", members);

        return typeCode;
    }

    public static org.omg.CORBA.TypeCode type(String id_, String name_) {

		org.omg.CORBA.TypeCode typeCode = null;

        org.omg.CORBA.ORB orb =
		    CorbaServer.getCodecObject().getOrbGeneric().getORB();

        org.omg.CORBA.StructMember[] members =
	  		new org.omg.CORBA.StructMember[2];

        members[0] = new org.omg.CORBA.StructMember();
        members[0].name = "minor";
        members[0].type = orb.get_primitive_tc(
			org.omg.CORBA.TCKind.tk_ulong);

        members[1] = new org.omg.CORBA.StructMember();
        members[1].name = "completed";
        members[1].type = CompletionStatusHelper.type();

        typeCode = orb.create_exception_tc(id_, name_, members);

        return typeCode;
    }

    public static String id() {
        return "IDL:CodecTypes/SystemException:1.0";
    }

	public static org.omg.CORBA.Any except(org.omg.CORBA.SystemException ex) {

		org.omg.CORBA.ORB orb =
		    CorbaServer.getCodecObject().getOrbGeneric().getORB();

        org.omg.CORBA.Any any = orb.create_any();
        org.omg.CORBA.portable.OutputStream out = any.create_output_stream();

		out.write_string(id());
        out.write_ulong(ex.minor);
		out.write_ulong(ex.completed.value());

        any.read_value(out.create_input_stream(), type());
		return any;
	}

    public static org.omg.CORBA.Any except(
		int minor_, int completed_, String id_, String name_) {

		org.omg.CORBA.ORB orb =
		    CorbaServer.getCodecObject().getOrbGeneric().getORB();

        org.omg.CORBA.Any any = orb.create_any();
        org.omg.CORBA.portable.OutputStream out = any.create_output_stream();

		out.write_string(id_);
        out.write_ulong(minor_);
		out.write_ulong(completed_);

        any.read_value(out.create_input_stream(), type(id_, name_));
		return any;
	}
}
