summaryrefslogtreecommitdiff
path: root/src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Arguments.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Arguments.java')
-rw-r--r--src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Arguments.java342
1 files changed, 342 insertions, 0 deletions
diff --git a/src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Arguments.java b/src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Arguments.java
new file mode 100644
index 0000000..6620608
--- /dev/null
+++ b/src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Arguments.java
@@ -0,0 +1,342 @@
+/*
+ * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/*
+ * COMPONENT_NAME: idl.toJava
+ *
+ * ORIGINS: 27
+ *
+ * Licensed Materials - Property of IBM
+ * 5639-D57 (C) COPYRIGHT International Business Machines Corp. 1997, 1999
+ * RMI-IIOP v1.0
+ *
+ */
+
+package com.sun.tools.corba.se.idl.toJavaPortable;
+
+// NOTES:
+// -09/23/98 <klr> Ported -td option to change output directory
+// -09/23/98 <klr> Ported -m option to generate make dependencies
+// -F46082.51<daz> Transferred -m, -mmin, mall, -mdepend options to com.sun.tools.corba.se.idl.toJava
+// since these are IBM-specific (see f46838); cleaned-out dead code.
+// -D57482 <klr> Added method setDefaultEmitter so could be overridden.
+// -F60858.1<daz> Set corba level to 2.3.
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Properties;
+import java.util.Vector;
+import java.io.File;
+
+import com.sun.tools.corba.se.idl.InvalidArgument;
+
+/**
+ *
+ **/
+public class Arguments extends com.sun.tools.corba.se.idl.Arguments
+{
+ /**
+ * Public, zero-argument constructor.
+ **/
+ public Arguments ()
+ {
+ super ();
+ corbaLevel = 2.4f;
+ } // ctor
+
+ /**
+ *
+ **/
+ protected void parseOtherArgs (String[] args,
+ Properties properties) throws InvalidArgument
+ {
+ String skeletonPattern = null ;
+ String tiePattern = null ;
+
+ // Get package prefixes from user's properties file.
+ packages.put ("CORBA", "org.omg"); // klr - always needed
+ packageFromProps (properties);
+
+ // Now get package prefixes from command line (along with other args).
+ // This order has the effect of making command line packages
+ // supercede any idl.config file packages.
+ try
+ {
+ Vector unknownArgs = new Vector ();
+
+ // Process command line parameters
+ for (int i = 0; i < args.length; ++i)
+ {
+ String lcArg = args[i].toLowerCase ();
+
+ if (lcArg.charAt (0) != '-' && lcArg.charAt (0) != '/')
+ throw new InvalidArgument (args[i]);
+ if (lcArg.charAt (0) == '-' ) {
+ lcArg = lcArg.substring (1);
+ }
+
+ // Proxy options; default is -fclient.
+ if (lcArg.startsWith ("f"))
+ {
+ // If the command line had '-f client', make it '-fclient'
+ if (lcArg.equals ("f"))
+ lcArg = 'f' + args[++i].toLowerCase ();
+
+ // Determine whether to emit bindings for client, server or both; and
+ // whether to emit delegate-style (TIE) rather than derived-style
+ // skeletons, which are the default.
+
+ if (lcArg.equals ("fclient"))
+ {
+ emit = ((emit == Server || emit == All) ? All : Client);
+ }
+ else if (lcArg.equals ("fserver"))
+ {
+ emit = ((emit == Client || emit == All) ? All : Server);
+ TIEServer = false;
+ }
+ else if (lcArg.equals ("fall"))
+ {
+ emit = All;
+ TIEServer = false;
+ //Should be removed and incorporated in the clause below
+ // POAServer = true;
+ }
+ else if (lcArg.equals ("fservertie"))
+ {
+ emit = ((emit == Client || emit == All) ? All : Server);
+ TIEServer = true;
+ }
+ else if (lcArg.equals ("falltie"))
+ {
+ emit = All;
+ TIEServer = true;
+ }
+ else
+ i = collectUnknownArg (args, i, unknownArgs);
+ }
+ else if (lcArg.equals ("pkgtranslate"))
+ {
+ if (i + 2 >= args.length)
+ throw new InvalidArgument( args[i] ) ;
+
+ String orig = args[++i] ;
+ String trans = args[++i] ;
+ checkPackageNameValid( orig ) ;
+ checkPackageNameValid( trans ) ;
+ if (orig.equals( "org" ) || orig.startsWith( "org.omg" ))
+ throw new InvalidArgument( args[i] ) ;
+ orig = orig.replace( '.', '/' ) ;
+ trans = trans.replace( '.', '/' ) ;
+ packageTranslation.put( orig, trans ) ;
+ }
+ // Package prefix
+ else if (lcArg.equals ("pkgprefix"))
+ {
+ if (i + 2 >= args.length)
+ throw new InvalidArgument (args[i]);
+
+ String type = args[++i];
+ String pkg = args[++i];
+ checkPackageNameValid( type ) ;
+ checkPackageNameValid( pkg ) ;
+ packages.put (type, pkg);
+ }
+ // Target directory
+ else if (lcArg.equals ("td")) // <f46838.4>
+ {
+ if (i + 1 >= args.length)
+ throw new InvalidArgument (args[i]);
+ String trgtDir = args[++i];
+ if (trgtDir.charAt (0) == '-')
+ throw new InvalidArgument (args[i - 1]);
+ else
+ {
+ targetDir = trgtDir.replace ('/', File.separatorChar);
+ if (targetDir.charAt (targetDir.length () - 1) != File.separatorChar)
+ targetDir = targetDir + File.separatorChar;
+ }
+ }
+ // Separator
+ else if (lcArg.equals ("sep"))
+ {
+ if (i + 1 >= args.length)
+ throw new InvalidArgument (args[i]);
+ separator = args[++i];
+ }
+ // POA flag ?
+ else if (lcArg.equals ("oldimplbase")){
+ POAServer = false;
+ }
+ else if (lcArg.equals("skeletonname")){
+ if (i + 1 >= args.length)
+ throw new InvalidArgument (args[i]);
+ skeletonPattern = args[++i];
+ }
+ else if (lcArg.equals("tiename")){
+ if (i + 1 >= args.length)
+ throw new InvalidArgument (args[i]);
+ tiePattern = args[++i];
+ }
+ else if (lcArg.equals("localoptimization")) {
+ LocalOptimization = true;
+ }
+ else i = collectUnknownArg (args, i, unknownArgs);
+ }
+
+ // Encountered unknown arguments?
+ if (unknownArgs.size () > 0)
+ {
+ String [] otherArgs = new String [unknownArgs.size ()];
+ unknownArgs.copyInto (otherArgs);
+ // Throws InvalidArgument by default
+ super.parseOtherArgs (otherArgs, properties);
+ }
+
+ setDefaultEmitter(); // d57482 <klr>
+ setNameModifiers( skeletonPattern, tiePattern ) ;
+ }
+ catch (ArrayIndexOutOfBoundsException e)
+ {
+ // If there is any array indexing problem, it is probably
+ // because the qualifier on the last argument is missing.
+ // Report that this last argument is invalid.
+ throw new InvalidArgument (args[args.length - 1]);
+ }
+ } // parseOtherArgs
+
+ /**
+ *
+ **/
+ protected int collectUnknownArg (String[] args, int i, Vector unknownArgs)
+ {
+ unknownArgs.addElement (args [i]);
+ ++i;
+ while (i < args.length && args[i].charAt (0) != '-' && args[i].charAt (0) != '/')
+ unknownArgs.addElement (args[i++]);
+ return --i;
+ } // collectUnknownArg
+
+ /**
+ *
+ **/
+ // XXX Either generalize this facility or remove it completely.
+ protected void packageFromProps (Properties props) throws InvalidArgument
+ {
+ Enumeration propsEnum = props.propertyNames ();
+ while (propsEnum.hasMoreElements ())
+ {
+ String prop = (String)propsEnum.nextElement ();
+ if (prop.startsWith ("PkgPrefix."))
+ {
+ String type = prop.substring (10);
+ String pkg = props.getProperty (prop);
+ checkPackageNameValid( pkg ) ;
+ checkPackageNameValid( type ) ;
+ packages.put (type, pkg);
+ }
+ }
+ } // packageFromProps
+
+ /**
+ * d57482 (klr) method added so default emitter check could be overriden.
+ **/
+ protected void setDefaultEmitter () {
+ // If the flag -fclient was not found, assume it.
+ if (emit == None) emit = Client;
+ }
+
+ protected void setNameModifiers( String skeletonPattern,
+ String tiePattern ) {
+ if (emit>Client) {
+ String tp ;
+ String sp ;
+
+ if (skeletonPattern != null)
+ sp = skeletonPattern ;
+ else if (POAServer)
+ sp = "%POA" ;
+ else
+ sp = "_%ImplBase" ;
+
+ if (tiePattern != null)
+ tp = tiePattern ;
+ else if (POAServer)
+ tp = "%POATie" ;
+ else
+ tp = "%_Tie" ;
+
+ skeletonNameModifier = new NameModifierImpl( sp ) ;
+ tieNameModifier = new NameModifierImpl( tp ) ;
+ }
+ }
+
+ /**
+ *
+ **/
+ private void checkPackageNameValid (String name) throws InvalidArgument
+ {
+ if (name.charAt (0) == '.')
+ throw new InvalidArgument (name);
+ for (int i = 0; i < name.length ();++i)
+ if (name.charAt (i) == '.')
+ {
+ if (i == name.length () - 1 || !Character.isJavaIdentifierStart (name.charAt (++i)))
+ throw new InvalidArgument (name);
+ }
+ else if (!Character.isJavaIdentifierPart (name.charAt (i)))
+ throw new InvalidArgument (name);
+ } // validatePackageName
+
+ // <46082.03><46838> Modified access restrictions from protected to public.
+
+ // This is a hash table whose keys are top-level typenames and
+ // whose values are the package prefixes to those types.
+ // For instance, <"CORBA", "org.omg"> is a possible entry.
+ public Hashtable packages = new Hashtable ();
+
+ public String separator = null;
+
+ public static final int
+ None = 0,
+ Client = 1,
+ Server = 2,
+ All = 3;
+ public int emit = None;
+ public boolean TIEServer = false;
+ public boolean POAServer = true;
+ // By default we do not generate Locally Optimized stub because of an
+ // unresolved PI problem. We will generate only if -localOptimization flag
+ // is passed
+ public boolean LocalOptimization = false;
+ public NameModifier skeletonNameModifier = null ;
+ public NameModifier tieNameModifier = null ;
+
+ // Key is original package name; value is translated package name.
+ // Note that this translation happens AFTER prefixes are added in the
+ // packages table.
+ public Hashtable packageTranslation = new Hashtable() ;
+
+ public String targetDir = ""; // <f46838.4>
+} // class Arguments