home *** CD-ROM | disk | FTP | other *** search
Java Source | 1998-05-08 | 10.7 KB | 296 lines |
- /*
- * Copyright (c) 1997-1998 Borland International, Inc. All Rights Reserved.
- *
- * This SOURCE CODE FILE, which has been provided by Borland as part
- * of a Borland product for use ONLY by licensed users of the product,
- * includes CONFIDENTIAL and PROPRIETARY information of Borland.
- *
- * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS
- * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH
- * THE PRODUCT.
- *
- * IN PARTICULAR, YOU WILL INDEMNIFY AND HOLD BORLAND, ITS RELATED
- * COMPANIES AND ITS SUPPLIERS, HARMLESS FROM AND AGAINST ANY CLAIMS
- * OR LIABILITIES ARISING OUT OF THE USE, REPRODUCTION, OR DISTRIBUTION
- * OF YOUR PROGRAMS, INCLUDING ANY CLAIMS OR LIABILITIES ARISING OUT OF
- * OR RESULTING FROM THE USE, MODIFICATION, OR DISTRIBUTION OF PROGRAMS
- * OR FILES CREATED FROM, BASED ON, AND/OR DERIVED FROM THIS SOURCE
- * CODE FILE.
- */
- package visibroker.samples.ir;
-
- import java.io.PrintStream;
- import java.util.Vector;
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
-
- public class PrintIR extends Thread {
-
- private PrintStream _out = System.out;
- private int _indent;
-
- private org.omg.CORBA.ORB _orb;
-
- public PrintIR(org.omg.CORBA.ORB orb) {
- _orb = orb;
- }
-
- private void println(Object o) {
- for(int i = 0; i < _indent; i++) {
- _out.print(" ");
- }
- _out.println(o);
- }
-
- private String toIdl(org.omg.CORBA.IDLType idlType) {
- org.omg.CORBA.Contained contained = org.omg.CORBA.ContainedHelper.narrow(idlType);
- return contained == null ?
- idlType.type().toString() :
- contained.absolute_name();
- }
-
- private void print(org.omg.CORBA.Container container) throws org.omg.CORBA.UserException {
- org.omg.CORBA.Contained[] contained =
- container.contents(org.omg.CORBA.DefinitionKind.dk_all, true);
- for(int i = 0; i < contained.length; i++) {
- {
- org.omg.CORBA.ContainedPackage.Description description = contained[i].describe();
- org.omg.CORBA.portable.OutputStream output = _orb.create_output_stream();
- org.omg.CORBA.ContainedPackage.DescriptionHelper.write(output, description);
- org.omg.CORBA.portable.InputStream input = output.create_input_stream();
- org.omg.CORBA.ContainedPackage.Description description2 =
- org.omg.CORBA.ContainedPackage.DescriptionHelper.read(input);
- org.omg.CORBA.Any any1 = _orb.create_any();
- org.omg.CORBA.ContainedPackage.DescriptionHelper.insert(any1, description);
- org.omg.CORBA.Any any2 = _orb.create_any();
- org.omg.CORBA.ContainedPackage.DescriptionHelper.insert(any2, description2);
- if(!any1.equals(any1) ||
- !any1.equals(any2) ||
- !any2.equals(any2) ||
- !any2.equals(any1)) {
- System.out.println("\n*** The desriptions were not equal (1) *** \n");
- }
- org.omg.CORBA.ContainedPackage.Description description3 =
- org.omg.CORBA.ContainedPackage.DescriptionHelper.extract(any2);
- if(description.kind != description2.kind ||
- !description.value.equals(description3.value)) {
- System.out.println("\n*** The desriptions were not equal (2) *** \n");
- }
- }
- switch(contained[i].def_kind().value()) {
- case org.omg.CORBA.DefinitionKind._dk_Attribute:
- printAttribute(org.omg.CORBA.AttributeDefHelper.narrow(contained[i]));
- break;
- case org.omg.CORBA.DefinitionKind._dk_Constant:
- printConstant(org.omg.CORBA.ConstantDefHelper.narrow(contained[i]));
- break;
- case org.omg.CORBA.DefinitionKind._dk_Exception:
- printException(org.omg.CORBA.ExceptionDefHelper.narrow(contained[i]));
- break;
- case org.omg.CORBA.DefinitionKind._dk_Interface:
- printInterface(org.omg.CORBA.InterfaceDefHelper.narrow(contained[i]));
- break;
- case org.omg.CORBA.DefinitionKind._dk_Module:
- printModule(org.omg.CORBA.ModuleDefHelper.narrow(contained[i]));
- break;
- case org.omg.CORBA.DefinitionKind._dk_Operation:
- printOperation(org.omg.CORBA.OperationDefHelper.narrow(contained[i]));
- break;
- case org.omg.CORBA.DefinitionKind._dk_Alias:
- printAlias(org.omg.CORBA.AliasDefHelper.narrow(contained[i]));
- break;
- case org.omg.CORBA.DefinitionKind._dk_Struct:
- printStruct(org.omg.CORBA.StructDefHelper.narrow(contained[i]));
- break;
- case org.omg.CORBA.DefinitionKind._dk_Union:
- printUnion(org.omg.CORBA.UnionDefHelper.narrow(contained[i]));
- break;
- case org.omg.CORBA.DefinitionKind._dk_Enum:
- printEnum(org.omg.CORBA.EnumDefHelper.narrow(contained[i]));
- break;
- case org.omg.CORBA.DefinitionKind._dk_none:
- case org.omg.CORBA.DefinitionKind._dk_all:
- case org.omg.CORBA.DefinitionKind._dk_Typedef:
- case org.omg.CORBA.DefinitionKind._dk_Primitive:
- case org.omg.CORBA.DefinitionKind._dk_String:
- case org.omg.CORBA.DefinitionKind._dk_Sequence:
- case org.omg.CORBA.DefinitionKind._dk_Array:
- default:
- break;
- }
- }
- }
-
- private void printConstant(org.omg.CORBA.ConstantDef def) throws org.omg.CORBA.UserException {
- println("const " + toIdl(def.type_def()) + " " + def.name() + " = " + def.value() + ";");
- }
-
- private void printStruct(org.omg.CORBA.StructDef def) throws org.omg.CORBA.UserException {
- println("struct " + def.name() + " {");
- _indent++;
- org.omg.CORBA.StructMember[] members = def.members();
- for(int j = 0; j < members.length; j++) {
- println(toIdl(members[j].type_def) + " " + members[j].name + ";");
- }
- _indent--;
- println("};");
- }
-
- private void printUnion(org.omg.CORBA.UnionDef def) throws org.omg.CORBA.UserException {
- println("union " + def.name() + " switch(" + toIdl(def.discriminator_type_def()) + ") {");
- org.omg.CORBA.UnionMember[] members = def.members();
- int default_index = def.type().default_index();
- _indent++;
- for(int j = 0; j < members.length; j++) {
- if(j == default_index) {
- println("default:");
- }
- else {
- println("case " + members[j].label + ":");
- }
- _indent++;
- println(toIdl(members[j].type_def) + " " + members[j].name + ";");
- _indent--;
- }
- _indent--;
- println("};");
- }
-
- private void printException(org.omg.CORBA.ExceptionDef def) throws org.omg.CORBA.UserException {
- println("exception " + def.name() + " {");
- _indent++;
- org.omg.CORBA.StructMember[] members = def.members();
- for(int j = 0; j < members.length; j++) {
- println(toIdl(members[j].type_def) + " " + members[j].name + ";");
- }
- _indent--;
- println("};");
- }
-
- private void printEnum(org.omg.CORBA.EnumDef def) throws org.omg.CORBA.UserException {
- org.omg.CORBA.TypeCode type = def.type();
- println("enum " + type.name() + " {");
- _indent++;
- int count = type.member_count();
- for(int j = 0; j < count; j++) {
- println(type.member_name(j) + ((j == count - 1) ? "" : ","));
- }
- _indent--;
- println("};");
- }
-
- private void printAlias(org.omg.CORBA.AliasDef def) throws org.omg.CORBA.UserException {
- org.omg.CORBA.IDLType idlType = def.original_type_def();
- String arrayBounds = "";
- while(true) {
- // This is a little strange, since the syntax of typedef'ed
- // arrays is stupid.
- org.omg.CORBA.ArrayDef arrayDef = org.omg.CORBA.ArrayDefHelper.narrow(idlType);
- if(arrayDef == null) {
- break;
- }
- arrayBounds += "[" + arrayDef.length() + "]";
- idlType = arrayDef.element_type_def();
- }
- println("typedef " + toIdl(idlType) + " " + def.name() + arrayBounds + ";");
- }
-
- private void printAttribute(org.omg.CORBA.AttributeDef def) throws org.omg.CORBA.UserException {
- String readonly = def.mode() == org.omg.CORBA.AttributeMode.ATTR_READONLY ?
- "readonly " : "";
- println(readonly + "attribute " + toIdl(def.type_def()) + " " + def.name() + ";");
- }
-
- private void printOperation(org.omg.CORBA.OperationDef def) throws org.omg.CORBA.UserException {
- String oneway = def.mode() == org.omg.CORBA.OperationMode.OP_ONEWAY ?
- "oneway " : "";
- println(oneway + toIdl(def.result_def()) + " " + def.name() + "(");
- _indent++;
- org.omg.CORBA.ParameterDescription[] parameters = def.params();
- for(int k = 0; k < parameters.length; k++) {
- String[] mode = { "in", "out", "inout" };
- String comma = k == parameters.length - 1 ? "" : ",";
- println(mode[parameters[k].mode.value()] + " " + toIdl(parameters[k].type_def) + " " +
- parameters[k].name + comma);
- }
- _indent--;
- org.omg.CORBA.ExceptionDef[] exceptions = def.exceptions();
- if(exceptions.length > 0) {
- println(") raises (");
- _indent++;
- for(int k = 0; k < exceptions.length; k++) {
- String comma = k == exceptions.length - 1 ? "" : ",";
- println(exceptions[k].absolute_name() + comma);
- }
- _indent--;
- }
- println(");");
- }
-
- private void printInterface(org.omg.CORBA.InterfaceDef idef) throws org.omg.CORBA.UserException {
- String superList = "";
- {
- org.omg.CORBA.InterfaceDef[] base_interfaces = idef.base_interfaces();
- if(base_interfaces.length > 0) {
- superList += " :";
- for(int j = 0; j < base_interfaces.length; j++) {
- String comma = j == base_interfaces.length - 1 ? "" : ",";
- superList += " " + base_interfaces[j].absolute_name() + comma;
- }
- }
- }
- println("interface " + idef.name() + superList + " {");
- _indent++;
- print(idef);
- _indent--;
- println("};");
- }
-
- private void printModule(org.omg.CORBA.ModuleDef def) throws org.omg.CORBA.UserException {
- println("module " + def.name() + " {");
- _indent++;
- print(def);
- _indent--;
- println("};");
- }
-
- public static void main(String[] args) {
- try {
- org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);
- org.omg.CORBA.Repository rep;
- if(args.length == 1) {
- rep = org.omg.CORBA.RepositoryHelper.bind(orb, args[0]);
- }
- else {
- rep = org.omg.CORBA.RepositoryHelper.bind(orb);
- }
- BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
- while(true) {
- try {
- System.out.print("-> ");
- System.out.flush();
- String line = in.readLine();
- if(line.startsWith("p")) {
- new PrintIR(orb).print(rep);
- continue;
- }
- else if(line.startsWith("q")) {
- System.out.println("Quitting...");
- break;
- }
- System.out.println("Commands: p [p]rint\n" +
- " q [q]uit\n");
- }
- catch(org.omg.CORBA.UserException e) {
- System.err.println(e);
- e.printStackTrace(System.err);
- }
- }
- }
- catch(Exception e) {
- System.err.println(e);
- e.printStackTrace(System.err);
- }
- }
- }
-