diff -r 000000000000 -r 55540e827aef src/share/classes/sun/rmi/rmic/iiop/Util.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/rmi/rmic/iiop/Util.java Sat Dec 01 00:00:00 2007 +0000 @@ -0,0 +1,174 @@ +/* + * Portions Copyright 1999-2007 Sun Microsystems, Inc. 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. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * Licensed Materials - Property of IBM + * RMI-IIOP v1.0 + * Copyright IBM Corp. 1998 1999 All Rights Reserved + * + */ + +package sun.rmi.rmic.iiop; + +import java.io.File; +import sun.tools.java.Identifier; + +import com.sun.corba.se.impl.util.PackagePrefixChecker; + +/** + * Util provides static utility methods used by other rmic classes. + * @author Bryan Atsatt + */ + +public final class Util implements sun.rmi.rmic.Constants { + + + public static String packagePrefix(){ return PackagePrefixChecker.packagePrefix();} + + + /** + * Return the directory that should be used for output for a given + * class. + * @param theClass The fully qualified name of the class. + * @param rootDir The directory to use as the root of the + * package heirarchy. May be null, in which case the current + * working directory is used as the root. + */ + private static File getOutputDirectoryFor(Identifier theClass, + File rootDir, + BatchEnvironment env, + boolean idl ) { + File outputDir = null; + String className = theClass.getFlatName().toString().replace('.', SIGC_INNERCLASS); + String qualifiedClassName = className; + String packagePath = null; + String packageName = theClass.getQualifier().toString(); + //Shift package names for stubs generated for interfaces. + /*if(type.isInterface())*/ + packageName = correctPackageName(packageName, idl, env.getStandardPackage()); + //Done. + if (packageName.length() > 0) { + qualifiedClassName = packageName + "." + className; + packagePath = packageName.replace('.', File.separatorChar); + } + + // Do we have a root directory? + + if (rootDir != null) { + + // Yes, do we have a package name? + + if (packagePath != null) { + + // Yes, so use it as the root. Open the directory... + + outputDir = new File(rootDir, packagePath); + + // Make sure the directory exists... + + ensureDirectory(outputDir,env); + + } else { + + // Default package, so use root as output dir... + + outputDir = rootDir; + } + } else { + + // No root directory. Get the current working directory... + + String workingDirPath = System.getProperty("user.dir"); + File workingDir = new File(workingDirPath); + + // Do we have a package name? + + if (packagePath == null) { + + // No, so use working directory... + + outputDir = workingDir; + + } else { + + // Yes, so use working directory as the root... + + outputDir = new File(workingDir, packagePath); + + // Make sure the directory exists... + + ensureDirectory(outputDir,env); + } + } + + // Finally, return the directory... + + return outputDir; + } + + public static File getOutputDirectoryForIDL(Identifier theClass, + File rootDir, + BatchEnvironment env) { + return getOutputDirectoryFor(theClass, rootDir, env, true); + } + + public static File getOutputDirectoryForStub(Identifier theClass, + File rootDir, + BatchEnvironment env) { + return getOutputDirectoryFor(theClass, rootDir, env, false); + } + + private static void ensureDirectory (File dir, BatchEnvironment env) { + if (!dir.exists()) { + dir.mkdirs(); + if (!dir.exists()) { + env.error(0,"rmic.cannot.create.dir",dir.getAbsolutePath()); + throw new InternalError(); + } + } + } + + public static String correctPackageName( + String p, boolean idl, boolean standardPackage){ + if (idl){ + return p; + } else { + if (standardPackage) { + return p; + } else { + return PackagePrefixChecker.correctPackageName(p); + } + } + } + + public static boolean isOffendingPackage(String p){ + return PackagePrefixChecker.isOffendingPackage(p); + } + + public static boolean hasOffendingPrefix(String p){ + return PackagePrefixChecker.hasOffendingPrefix(p); + } + +}