home *** CD-ROM | disk | FTP | other *** search
/ Java 1.2 How-To / JavaHowTo.iso / 3rdParty / jbuilder / TRIAL / JBUILDER / JVISBRKR.Z / PrintIR.java < prev    next >
Encoding:
Java Source  |  1998-05-08  |  10.7 KB  |  296 lines

  1. /*
  2.  * Copyright (c) 1997-1998 Borland International, Inc. All Rights Reserved.
  3.  * 
  4.  * This SOURCE CODE FILE, which has been provided by Borland as part
  5.  * of a Borland product for use ONLY by licensed users of the product,
  6.  * includes CONFIDENTIAL and PROPRIETARY information of Borland.  
  7.  *
  8.  * USE OF THIS SOFTWARE IS GOVERNED BY THE TERMS AND CONDITIONS 
  9.  * OF THE LICENSE STATEMENT AND LIMITED WARRANTY FURNISHED WITH
  10.  * THE PRODUCT.
  11.  *
  12.  * IN PARTICULAR, YOU WILL INDEMNIFY AND HOLD BORLAND, ITS RELATED
  13.  * COMPANIES AND ITS SUPPLIERS, HARMLESS FROM AND AGAINST ANY CLAIMS
  14.  * OR LIABILITIES ARISING OUT OF THE USE, REPRODUCTION, OR DISTRIBUTION
  15.  * OF YOUR PROGRAMS, INCLUDING ANY CLAIMS OR LIABILITIES ARISING OUT OF
  16.  * OR RESULTING FROM THE USE, MODIFICATION, OR DISTRIBUTION OF PROGRAMS
  17.  * OR FILES CREATED FROM, BASED ON, AND/OR DERIVED FROM THIS SOURCE
  18.  * CODE FILE.
  19.  */
  20. package visibroker.samples.ir;
  21.  
  22. import java.io.PrintStream;
  23. import java.util.Vector;
  24. import java.io.BufferedReader;
  25. import java.io.InputStreamReader;
  26.  
  27. public class PrintIR extends Thread {
  28.  
  29.   private PrintStream _out = System.out;
  30.   private int _indent;
  31.     
  32.   private org.omg.CORBA.ORB _orb;
  33.   
  34.   public PrintIR(org.omg.CORBA.ORB orb) {
  35.     _orb = orb;
  36.   }
  37.  
  38.   private void println(Object o) {
  39.     for(int i = 0; i < _indent; i++) {
  40.       _out.print("  ");
  41.     }
  42.     _out.println(o);
  43.   }    
  44.  
  45.   private String toIdl(org.omg.CORBA.IDLType idlType) {
  46.     org.omg.CORBA.Contained contained = org.omg.CORBA.ContainedHelper.narrow(idlType);
  47.     return contained == null ? 
  48.       idlType.type().toString() :
  49.       contained.absolute_name();
  50.   }
  51.  
  52.   private void print(org.omg.CORBA.Container container) throws org.omg.CORBA.UserException {
  53.     org.omg.CORBA.Contained[] contained = 
  54.       container.contents(org.omg.CORBA.DefinitionKind.dk_all, true);
  55.     for(int i = 0; i < contained.length; i++) {
  56.       {
  57.     org.omg.CORBA.ContainedPackage.Description description = contained[i].describe();
  58.     org.omg.CORBA.portable.OutputStream output = _orb.create_output_stream();
  59.     org.omg.CORBA.ContainedPackage.DescriptionHelper.write(output, description);
  60.     org.omg.CORBA.portable.InputStream input = output.create_input_stream();
  61.     org.omg.CORBA.ContainedPackage.Description description2 = 
  62.       org.omg.CORBA.ContainedPackage.DescriptionHelper.read(input);
  63.     org.omg.CORBA.Any any1 = _orb.create_any();
  64.     org.omg.CORBA.ContainedPackage.DescriptionHelper.insert(any1, description);
  65.     org.omg.CORBA.Any any2 = _orb.create_any();
  66.     org.omg.CORBA.ContainedPackage.DescriptionHelper.insert(any2, description2);    
  67.     if(!any1.equals(any1) ||
  68.        !any1.equals(any2) ||
  69.        !any2.equals(any2) ||
  70.        !any2.equals(any1)) {
  71.       System.out.println("\n*** The desriptions were not equal (1) *** \n");
  72.     }
  73.     org.omg.CORBA.ContainedPackage.Description description3 = 
  74.       org.omg.CORBA.ContainedPackage.DescriptionHelper.extract(any2);
  75.     if(description.kind != description2.kind ||
  76.        !description.value.equals(description3.value)) {
  77.       System.out.println("\n*** The desriptions were not equal (2) *** \n");
  78.     }
  79.       }
  80.       switch(contained[i].def_kind().value()) {
  81.       case org.omg.CORBA.DefinitionKind._dk_Attribute:
  82.     printAttribute(org.omg.CORBA.AttributeDefHelper.narrow(contained[i]));
  83.     break;
  84.       case org.omg.CORBA.DefinitionKind._dk_Constant:
  85.     printConstant(org.omg.CORBA.ConstantDefHelper.narrow(contained[i]));
  86.     break;
  87.       case org.omg.CORBA.DefinitionKind._dk_Exception:
  88.     printException(org.omg.CORBA.ExceptionDefHelper.narrow(contained[i]));
  89.     break;
  90.       case org.omg.CORBA.DefinitionKind._dk_Interface:
  91.     printInterface(org.omg.CORBA.InterfaceDefHelper.narrow(contained[i]));
  92.     break;
  93.       case org.omg.CORBA.DefinitionKind._dk_Module:
  94.     printModule(org.omg.CORBA.ModuleDefHelper.narrow(contained[i]));
  95.     break;
  96.       case org.omg.CORBA.DefinitionKind._dk_Operation:
  97.     printOperation(org.omg.CORBA.OperationDefHelper.narrow(contained[i]));
  98.     break;
  99.       case org.omg.CORBA.DefinitionKind._dk_Alias:
  100.     printAlias(org.omg.CORBA.AliasDefHelper.narrow(contained[i]));
  101.     break;
  102.       case org.omg.CORBA.DefinitionKind._dk_Struct:
  103.     printStruct(org.omg.CORBA.StructDefHelper.narrow(contained[i]));
  104.     break;
  105.       case org.omg.CORBA.DefinitionKind._dk_Union:
  106.     printUnion(org.omg.CORBA.UnionDefHelper.narrow(contained[i]));
  107.     break;
  108.       case org.omg.CORBA.DefinitionKind._dk_Enum:
  109.     printEnum(org.omg.CORBA.EnumDefHelper.narrow(contained[i]));
  110.     break;
  111.       case org.omg.CORBA.DefinitionKind._dk_none:
  112.       case org.omg.CORBA.DefinitionKind._dk_all:
  113.       case org.omg.CORBA.DefinitionKind._dk_Typedef:
  114.       case org.omg.CORBA.DefinitionKind._dk_Primitive:
  115.       case org.omg.CORBA.DefinitionKind._dk_String:
  116.       case org.omg.CORBA.DefinitionKind._dk_Sequence:
  117.       case org.omg.CORBA.DefinitionKind._dk_Array:
  118.       default:
  119.     break;
  120.       }
  121.     }
  122.   }
  123.   
  124.   private void printConstant(org.omg.CORBA.ConstantDef def) throws org.omg.CORBA.UserException {
  125.     println("const " + toIdl(def.type_def()) + " " + def.name() + " = " + def.value() + ";");
  126.   }
  127.  
  128.   private void printStruct(org.omg.CORBA.StructDef def) throws org.omg.CORBA.UserException {
  129.     println("struct " + def.name() + " {");
  130.     _indent++;
  131.     org.omg.CORBA.StructMember[] members = def.members();
  132.     for(int j = 0; j < members.length; j++) {
  133.       println(toIdl(members[j].type_def) + " " + members[j].name + ";");
  134.     }
  135.     _indent--;
  136.     println("};");    
  137.   }
  138.  
  139.   private void printUnion(org.omg.CORBA.UnionDef def) throws org.omg.CORBA.UserException {
  140.     println("union " + def.name() + " switch(" + toIdl(def.discriminator_type_def()) + ") {");
  141.     org.omg.CORBA.UnionMember[] members = def.members();
  142.     int default_index = def.type().default_index();
  143.     _indent++;
  144.     for(int j = 0; j < members.length; j++) {
  145.       if(j == default_index) {
  146.     println("default:");
  147.       }
  148.       else {
  149.     println("case " + members[j].label + ":");
  150.       }
  151.       _indent++;
  152.       println(toIdl(members[j].type_def) + " " + members[j].name + ";");
  153.       _indent--;      
  154.     }
  155.     _indent--;
  156.     println("};");
  157.   }
  158.  
  159.   private void printException(org.omg.CORBA.ExceptionDef def) throws org.omg.CORBA.UserException {
  160.     println("exception " + def.name() + " {");
  161.     _indent++;
  162.     org.omg.CORBA.StructMember[] members = def.members();
  163.     for(int j = 0; j < members.length; j++) {
  164.       println(toIdl(members[j].type_def) + " " + members[j].name + ";");
  165.     }
  166.     _indent--;
  167.     println("};");
  168.   }
  169.  
  170.   private void printEnum(org.omg.CORBA.EnumDef def) throws org.omg.CORBA.UserException {
  171.     org.omg.CORBA.TypeCode type = def.type();
  172.     println("enum " + type.name() + " {");
  173.     _indent++;
  174.     int count = type.member_count();
  175.     for(int j = 0; j < count; j++) {
  176.       println(type.member_name(j) + ((j == count - 1) ? "" : ","));
  177.     }
  178.     _indent--;
  179.     println("};");
  180.   }
  181.  
  182.   private void printAlias(org.omg.CORBA.AliasDef def) throws org.omg.CORBA.UserException {
  183.     org.omg.CORBA.IDLType idlType = def.original_type_def();
  184.     String arrayBounds = "";
  185.     while(true) {
  186.       // This is a little strange, since the syntax of typedef'ed 
  187.       // arrays is stupid.
  188.       org.omg.CORBA.ArrayDef arrayDef = org.omg.CORBA.ArrayDefHelper.narrow(idlType);
  189.       if(arrayDef == null) {
  190.     break;
  191.       }
  192.       arrayBounds += "[" + arrayDef.length() + "]";
  193.       idlType = arrayDef.element_type_def();
  194.     }
  195.     println("typedef " + toIdl(idlType) + " " + def.name() + arrayBounds + ";");
  196.   }
  197.  
  198.   private void printAttribute(org.omg.CORBA.AttributeDef def) throws org.omg.CORBA.UserException {
  199.     String readonly = def.mode() == org.omg.CORBA.AttributeMode.ATTR_READONLY ? 
  200.       "readonly " : "";
  201.     println(readonly + "attribute " + toIdl(def.type_def()) + " " + def.name() + ";");  
  202.   }
  203.   
  204.   private void printOperation(org.omg.CORBA.OperationDef def) throws org.omg.CORBA.UserException {
  205.     String oneway = def.mode() == org.omg.CORBA.OperationMode.OP_ONEWAY ? 
  206.       "oneway " : "";
  207.     println(oneway + toIdl(def.result_def()) + " " + def.name() + "(");
  208.     _indent++;
  209.     org.omg.CORBA.ParameterDescription[] parameters = def.params();
  210.     for(int k = 0; k < parameters.length; k++) {
  211.       String[] mode = { "in", "out", "inout" };
  212.       String comma = k == parameters.length - 1 ? "" : ",";
  213.       println(mode[parameters[k].mode.value()] + " " + toIdl(parameters[k].type_def) + " " + 
  214.           parameters[k].name + comma);
  215.     }
  216.     _indent--;
  217.     org.omg.CORBA.ExceptionDef[] exceptions = def.exceptions();
  218.     if(exceptions.length > 0) {
  219.       println(") raises (");
  220.       _indent++;
  221.       for(int k = 0; k < exceptions.length; k++) {
  222.     String comma = k == exceptions.length - 1 ? "" : ",";
  223.     println(exceptions[k].absolute_name() + comma);
  224.       }
  225.       _indent--;
  226.     }
  227.     println(");");
  228.   }
  229.  
  230.   private void printInterface(org.omg.CORBA.InterfaceDef idef) throws org.omg.CORBA.UserException {
  231.     String superList = "";
  232.     {
  233.       org.omg.CORBA.InterfaceDef[] base_interfaces = idef.base_interfaces();
  234.       if(base_interfaces.length > 0) {
  235.     superList += " :";
  236.     for(int j = 0; j < base_interfaces.length; j++) {
  237.       String comma = j == base_interfaces.length - 1 ? "" : ",";
  238.       superList += " " + base_interfaces[j].absolute_name() + comma;
  239.     }
  240.       }
  241.     }
  242.     println("interface " + idef.name() + superList + " {");
  243.     _indent++;
  244.     print(idef);
  245.     _indent--;
  246.     println("};");
  247.   }
  248.  
  249.   private void printModule(org.omg.CORBA.ModuleDef def) throws org.omg.CORBA.UserException {
  250.     println("module " + def.name() + " {");
  251.     _indent++;
  252.     print(def);
  253.     _indent--;
  254.     println("};");
  255.   }
  256.  
  257.   public static void main(String[] args) {
  258.     try {
  259.       org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);
  260.       org.omg.CORBA.Repository rep;
  261.       if(args.length == 1) {
  262.     rep = org.omg.CORBA.RepositoryHelper.bind(orb, args[0]);
  263.       }
  264.       else {
  265.     rep = org.omg.CORBA.RepositoryHelper.bind(orb);
  266.       }
  267.       BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  268.       while(true) {
  269.         try {
  270.           System.out.print("-> ");
  271.           System.out.flush();
  272.           String line = in.readLine();
  273.           if(line.startsWith("p")) {
  274.         new PrintIR(orb).print(rep);
  275.             continue;
  276.           }
  277.           else if(line.startsWith("q")) {
  278.             System.out.println("Quitting...");
  279.             break;
  280.           }
  281.           System.out.println("Commands: p  [p]rint\n" +
  282.                              "          q  [q]uit\n");
  283.         }
  284.         catch(org.omg.CORBA.UserException e) {
  285.       System.err.println(e);
  286.       e.printStackTrace(System.err);
  287.         }
  288.       }
  289.     }
  290.     catch(Exception e) {
  291.       System.err.println(e);
  292.       e.printStackTrace(System.err);
  293.     }
  294.   }
  295. }
  296.