Accessing Rational Rose from Java |
This example demonstrates how to access Rational Rose from Java. J-Integra® for COM is a Java interoperability component that bridges Java and Rational Rose. It provides bi-directional access of Java objects and COM components.
/* * This example shows how you can access Rational Rose running under MS Windows from a * pure Java client running on any operating system that supports a standard JVM, by * using the J-Integra® pure Java-COM bridge (see http://j-integra.intrinsyc.com/). * * The program takes as a parameter a Rose model and from this model it creates an * HTML file listing all the classes as an index with reference to their descriptions, * and operations. * * To run this example, create a 'rose' subdirectory, and run J-Integra®'s 'com2java' * tool, specifying the Rose type library (RationalRose.tlb from the Rose installation * directory) as the input type library, 'rose' as the package name, and the rose subdirectory * you created as the output directory. * * This Java client will run on any machine which has a standard JVM, such as a UNIX machine. * */ import rose.*; import java.io.*; public class RoseExample { public static void main(String args[]) throws Exception { // If running this Java client under MS windows then make sure the J-Integra® 'bin' directory // is in your PATH, otherwise run DCOMCNFG on the machine running Rose (Start|Run|DCOMCNFG), // grant a specific user default launch and access permissions, and uncomment the following // line, specifying the appropriate domain/user/password // com.linar.jintegra.AuthInfo.setDefault("NT DOMAIN", "NT USER", "NT PASSWORD"); PrintWriter indexFile = null; if (args.length != 1) { System.err.println("Usage: java RoseExample roseModelFileName"); return; } try { indexFile = new PrintWriter(new FileWriter("index.html")); // If talking to a Windows 95/98 machine, Rose must already be running. Specify remote host // name as a parameter if you want to access Rose remotely. RoseModel roseModel = new RoseModel(); RoseApplication roseApp = new RoseApplication(roseModel.getApplication()); roseApp.openModel(args[0]); IRoseModel myModel = roseApp.getCurrentModel(); IRoseClassCollection allClasses = myModel.getAllClasses(); indexFile.print("<HTML><HEAD><TITLE>All Rose classes" + "</TITLE></HEAD>\n<BODY>\n<H1>Index of classes for " + myModel.getName() + "</H1>\n<UL>\n"); // print index for (short classIndex = 1; classIndex <= allClasses.getCount(); classIndex++) { IRoseClass currentClass = allClasses.getAt(classIndex); String className = currentClass.getName(); indexFile.print("<LI><A HREF=#" + className + ">" + className + " </A > " + "\n "); } indexFile.print("</UL>\n"); // print class descriptions and operations for (short classIndex = 1; classIndex <= allClasses.getCount(); classIndex++) { IRoseClass currentClass = allClasses.getAt(classIndex); String className = currentClass.getName(); indexFile.print("<A NAME =" + className + ">\n"); indexFile.print("<H1>" + className + "</H1>\n"); indexFile.print("<H2>Description</H2>\n"); indexFile.print("<P>" + currentClass.getDocumentation() + "</P>\n"); indexFile.print("<H2>Operations</H2>\n<UL>\n"); IRoseOperationCollection operations = currentClass.getOperations(); for (short opIndex = 1; opIndex <= operations.getCount(); opIndex++) { String opName = operations.getAt(opIndex).getName(); indexFile.print("<LI>" + opName + "\n"); } indexFile.print("</UL>\n"); } indexFile.print("</BODY></HTML>"); roseApp.exit(); indexFile.close(); } finally { // Release any COM object references that have not already been released through // standard garbage collection. com.linar.jintegra.Cleaner.releaseAll(); } } } |