All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.exolab.javasource.JNaming Maven / Gradle / Ivy

Go to download

Code generator of Castor XML: takes a set of XML schemas and generates Java source code based on the content definitions

There is a newer version: 1.4.1
Show newest version
/**
 * Redistribution and use of this software and associated documentation
 * ("Software"), with or without modification, are permitted provided
 * that the following conditions are met:
 *
 * 1. Redistributions of source code must retain copyright
 *    statements and notices.  Redistributions must also contain a
 *    copy of this document.
 *
 * 2. Redistributions in binary form must reproduce the
 *    above copyright notice, this list of conditions and the
 *    following disclaimer in the documentation and/or other
 *    materials provided with the distribution.
 *
 * 3. The name "Exolab" must not be used to endorse or promote
 *    products derived from this Software without prior written
 *    permission of Intalio, Inc.  For written permission,
 *    please contact [email protected].
 *
 * 4. Products derived from this Software may not be called "Exolab"
 *    nor may "Exolab" appear in their names without prior written
 *    permission of Intalio, Inc. Exolab is a registered
 *    trademark of Intalio, Inc.
 *
 * 5. Due credit should be given to the Exolab Project
 *    (http://www.exolab.org/).
 *
 * THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
 * INTALIO, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * Copyright 1999-2000 (C) Intalio, Inc. All Rights Reserved.
 */
package org.exolab.javasource;

/**
 * A utility class used to validate identifiers and class names.
 *
 * @author Keith Visco
 * @version $Revision$ $Date: 2003-03-03 00:05:44 -0700 (Mon, 03 Mar 2003) $
 */
public final class JNaming {
    //--------------------------------------------------------------------------

    /**
     * Reserved keywords in Java as of Java 5.
     */
    private static final String[] KEYWORDS = {
        "abstract",
        "boolean",
        "break",
        "byte",
        "case",
        "catch",
        "char",
        "class",
        "const",
        "continue",
        "default",
        "do",
        "double",
        "else",
        "enum",
        "extends",
        "false",
        "final",
        "finally",
        "float",
        "for",
        "goto",
        "if",
        "implements",
        "import",
        "instanceof",
        "int",
        "interface",
        "long",
        "native",
        "new",
        "null",
        "package",
        "private",
        "protected",
        "public",
        "return",
        "short",
        "static",
        "super",
        "switch",
        "synchronized",
        "this",
        "throw",
        "throws",
        "transient",
        "true",
        "try",
        "void",
        "volatile",
        "while"
    };

    /**
     * Collection classes in Java as of Java 5.
     */
    private static final String[] COLLECTIONS = {
        "ArrayList",
        "List",
        "Set",
        "Collection",
        "Vector",
        "Hashtable",
        "Map",
        "HashMap",
        "HashSet",
        "TreeSet",
        "Enumeration",
        "Iterator",
        "ListIterator",
        "SortedSet",
        "SortedMap",
        "Queue",
        "EnumSet",
        "EnumMap",
        "IdentityHashMap",
        "LinkedHashMap",
        "LinkedHashSet",
        "LinkedList",
        "Stack",
        "TreeMap",
        "WeakHashMap"
    };

    /**
     * Classes in java.lang.* as of Java 5.
     */
    private static final String[] JAVA_LANG = {
        // Interfaces in java.lang.*
        "Appendable",
        "CharSequence",
        "Cloneable",
        "Comparable",
        "Iterable",
        "Readable",
        "Runnable",
        // Classes in java.lang.*
        "Boolean",
        "Byte",
        "Character",
        "Class",
        "ClassLoader",
        "Compiler",
        "Double",
        "Enum",
        "Float",
        "InheritableThreadLocal",
        "Integer",
        "Long",
        "Math",
        "Number",
        "Object",
        "Package",
        "Process",
        "ProcessBuilder",
        "Runtime",
        "RuntimePermission",
        "SecurityManager",
        "Short",
        "StackTraceElement",
        "StrictMath",
        "String",
        "StringBuffer",
        "StringBuilder",
        "System",
        "Thread",
        "ThreadGroup",
        "ThreadLocal",
        "Throwable",
        "Void",
        // Exceptions in java.lang.*
        "ArithmeticException",
        "ArrayIndexOutOfBoundsException",
        "ArrayStoreException",
        "ClassCastException",
        "ClassNotFoundException",
        "CloneNotSupportedException",
        "EnumConstantNotPresentException",
        "Exception",
        "IllegalAccessException",
        "IllegalArgumentException",
        "IllegalMonitorStateException",
        "IllegalStateException",
        "IllegalThreadStateException",
        "IndexOutOfBoundsException",
        "InstantiationException",
        "InterruptedException",
        "NegativeArraySizeException",
        "NoSuchFieldException",
        "NoSuchMethodException",
        "NullPointerException",
        "NumberFormatException",
        "RuntimeException",
        "SecurityException",
        "StringIndexOutOfBoundsException",
        "TypeNotPresentException",
        "UnsupportedOperationException",
        // Errors in java.lang.*
        "AbstractMethodError",
        "AssertionError",
        "ClassCircularityError",
        "ClassFormatError",
        "Error",
        "ExceptionInInitializerError",
        "IllegalAccessError",
        "IncompatibleClassChangeError",
        "InstantiationError",
        "InternalError",
        "LinkageError",
        "NoClassDefFoundError",
        "NoSuchFieldError",
        "NoSuchMethodError",
        "OutOfMemoryError",
        "StackOverflowError",
        "ThreadDeath",
        "UnknownError",
        "UnsatisfiedLinkError",
        "UnsupportedClassVersionError",
        "VerifyError",
        "VirtualMachineError",
        // Annotation types in java.lang.*
        "Deprecated",
        "Override",
        "SuppressWarnings"
    };

    /**
     * Field names used within Castor that prevent a user from using the same
     * name as an element without using a mapping file. Some fields that Castor
     * uses depend on the contents of the schema, so we only warn.
     * 
* Reserved: *
     * _items -- might be fetched using getXXXXItems where XXX == class name
     * _content
     * _choiceValue
     * _anyObject
     * 
*/ private static final String[] CASTOR_RESERVED = { "Content", "MenuItem", }; /** * Special reserved names within Windows that prevent a user from using the * same name as an element without using a mapping file. Windows will not * allow the use of any of these names with any case with any extension. * At least, not without contortions. * @see * The MSDN web page on file naming */ private static final String[] WINDOWS_RESERVED = { "CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9", }; //-------------------------------------------------------------------------- /** * As we're a static utility class, our constructor is private. */ private JNaming() { super(); } //-------------------------------------------------------------------------- /** * Returns true if the given String is a Java keyword which will cause a * problem when used as a variable name. * * @param name The String to check against the list of keywords. * @return True if the given String is a Java keyword which will cause a * problem when used as a variable name. */ public static boolean isKeyword(final String name) { if (name == null) { return false; } for (int i = 0; i < KEYWORDS.length; i++) { if (KEYWORDS[i].equals(name)) { return true; } } return false; } /** * Returns true if the given String is a parameterized Java collection. * object keyword which will cause a problem when used as a variable name * * @param name The String to check as a parameterized Java collection. * @return True if the given String is a parameterized Java collection * object keyword which will cause a problem when used as a variable * name. */ public static boolean isParameterizedCollectionsObject(final String name) { if (name == null) { return false; } for (int i = 0; i < COLLECTIONS.length; i++) { if (name.indexOf(COLLECTIONS[i]) != -1) { return true; } } return false; } /** * Returns true if the given String is a Java class in java.lang.* which * will cause a problem when used as a variable name. * * @param name The String to check against the list of keywords. * @return True if the given String is a Java class in java.lang.* which * will cause a problem when used as a variable name. */ public static boolean isInJavaLang(final String name) { if (name == null) { return false; } for (int i = 0; i < JAVA_LANG.length; i++) { if (JAVA_LANG[i].equals(name)) { return true; } } return false; } /** * Returns true if the given String is a reserved name by Castor which may * cause a problem when used as a variable name. Some fields that Castor * uses depend on the contents of the schema, so we only warn. * * @param name The String to check against the list of keywords. * @return True if the given String is a reserved name by Castor which may * cause a problem when used as a variable name. */ public static boolean isReservedByCastor(final String name) { if (name == null) { return false; } for (int i = 0; i < CASTOR_RESERVED.length; i++) { if (CASTOR_RESERVED[i].equals(name)) { return true; } } return false; } /** * Returns true if the given String is a reserved name by the Windows * filesystem which will cause a problem when used as a class name under * Windows. * * @param name The String to check against the list of keywords. * @return True if the given String is a reserved name by Castor which may * cause a problem when used as a variable name. */ public static boolean isReservedByWindows(final String name) { if (name == null) { return false; } for (int i = 0; i < WINDOWS_RESERVED.length; i++) { if (WINDOWS_RESERVED[i].equalsIgnoreCase(name)) { return true; } } return false; } /** * Returns true if the given String matches the production of a valid Java * identifier. * * @param string The String to check the production of. * @return True if the given String matches the production of a valid Java * name, otherwise false. */ public static boolean isValidJavaIdentifier(final String string) { if ((string == null) || (string.length() == 0)) { return false; } char[] chars = string.toCharArray(); if (isParameterizedCollectionsObject(string)) { return true; } //-- make sure starting character is valid if (!Character.isJavaIdentifierStart(chars[0])) { return false; } for (int i = 1; i < chars.length; i++) { if (!Character.isJavaIdentifierPart(chars[i])) { return false; } } if (isKeyword(string)) { return false; } return true; } /** * Returns the package name from the given class name. * * @param className An arbitrary class name, optionally including a package. * @return The package name from the given class name. */ public static String getPackageFromClassName(final String className) { if (className == null) { return null; } int idx = className.lastIndexOf('.'); if (idx > 0) { return className.substring(0, idx); } return null; } /** * Returns the local class name from the given fully qualified class name. * * @param className An arbitrary class name, optionally including a package. * @return The local name from the given class name. */ public static String getLocalNameFromClassName(final String className) { if (className == null) { return null; } int idx = className.lastIndexOf('.'); if (idx > 0) { return className.substring(idx + 1); } return className; } //-------------------------------------------------------------------------- }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy