001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: /*
043: * MethodParamValiator.java
044: *
045: * Created on February 9, 2005, 10:33 AM
046: */
047:
048: package org.netbeans.modules.visualweb.ejb.util;
049:
050: import org.netbeans.modules.visualweb.ejb.datamodel.MethodInfo;
051: import org.netbeans.modules.visualweb.ejb.datamodel.MethodParam;
052: import org.openide.util.NbBundle;
053:
054: /**
055: * This class is used to make sure the parameter name is valid in Java sense
056: *
057: * @author cao
058: */
059: public class MethodParamValidator {
060:
061: public MethodParamValidator() {
062: }
063:
064: public static void validate(String paramName)
065: throws InvalidParameterNameException {
066: validate(paramName, null, -1);
067: }
068:
069: public static void validate(String paramName, MethodInfo method,
070: int argPos) throws InvalidParameterNameException {
071: // A legal parameter name
072: // - start with a letter
073: // - no space
074: // - not keyword
075:
076: // Make sure it is not one of the keywords
077: if (JavaKeywords.isKeyword(paramName)) {
078: throw new InvalidParameterNameException(NbBundle
079: .getMessage(MethodParamValidator.class,
080: "PARAMETER_NAME_IS_KEYWORD", paramName));
081: }
082:
083: for (int i = 0; i < paramName.length(); i++) {
084: char theChar = paramName.charAt(i);
085:
086: // The first character must be a letter, underscore, or dollar sign
087: if (i == 0) {
088: if (!Character.isJavaIdentifierStart(theChar)) {
089: throw new InvalidParameterNameException(NbBundle
090: .getMessage(MethodParamValidator.class,
091: "INVALID_FIRST_CHAR", paramName));
092: }
093: } else {
094: if (!Character.isJavaIdentifierPart(theChar)) {
095: if (Character.isSpaceChar(theChar))
096: throw new InvalidParameterNameException(
097: NbBundle.getMessage(
098: MethodParamValidator.class,
099: "NO_SPACE_IN_PARAMETER_NAME",
100: paramName));
101: else
102: throw new InvalidParameterNameException(
103: NbBundle.getMessage(
104: MethodParamValidator.class,
105: "INVALID_CHAR", paramName,
106: new Character(theChar)
107: .toString()));
108: }
109: }
110:
111: }
112:
113: if (method != null && argPos >= 0) {
114: java.util.ArrayList parameters = method.getParameters();
115: for (int i = 0; i < parameters.size(); i++) {
116: if (i == argPos)
117: continue;
118:
119: MethodParam param = (MethodParam) parameters.get(i);
120: if (param.getName().equals(paramName)) {
121: throw new InvalidParameterNameException(NbBundle
122: .getMessage(MethodParamValidator.class,
123: "PARAMETER_NAME_IS_DUPLICATE",
124: paramName));
125: }
126: }
127: }
128: }
129: }
|