| /******************************************************************************* |
| * Copyright (c) 2000, 2004 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.jst.ws.internal.consumption.codegen.javamofvisitoractions; |
| |
| import java.util.Vector; |
| |
| import org.eclipse.jem.java.Method; |
| import org.eclipse.jst.ws.internal.consumption.codegen.javamofvisitors.JavaMofParameterVisitor; |
| import org.eclipse.wst.command.internal.provisional.env.core.common.SimpleStatus; |
| import org.eclipse.wst.command.internal.provisional.env.core.common.Status; |
| |
| |
| /** |
| * Objects of this class represent a JavaMofBeanVisitorAction. |
| * This VisitorAction will create a BeanElement using the |
| * JavaClass and the BeanModelElementsFactory |
| * It will also automatically walk the methods in the JavaClass |
| * */ |
| public class DetectNonJavaCharsMethodVisitorAction extends VisitorActionImpl |
| { |
| private static char UNDERSCORE = '_'; |
| private boolean serviceBean = false; |
| |
| public DetectNonJavaCharsMethodVisitorAction ( Vector messages, Vector beans) |
| { |
| super (messages, beans); |
| if ( beans.size() == 1) |
| serviceBean = true; |
| } |
| |
| /** |
| * Create a method element from the method |
| * @param Method the class to be used to create the method |
| **/ |
| public Status visit (Object imethod) |
| { |
| |
| Method method = (Method)imethod; |
| String className = method.getContainingJavaClass().getName(); |
| String name = method.getName(); |
| |
| if ( serviceBean && !method.isConstructor() ) |
| checkUpperCase(name, className); |
| |
| // for service bean or any referenced bean property accessors |
| if ( serviceBean || name.startsWith("get") || name.startsWith("set") || name.startsWith("is")) |
| { |
| checkUnderScore(name, className); |
| checkNumericDigits(name, className); |
| checkBooleanProperties(method, className); |
| |
| DetectNonJavaCharsParameterVisitorAction parameterVisitorAction = new DetectNonJavaCharsParameterVisitorAction(getMessages(), getBeansVisited()); |
| // rsk Passing in null for the environment. DetectNonJavaCharsParameterVisitorAction always returns an OK status. |
| JavaMofParameterVisitor parameterVisitor = new JavaMofParameterVisitor(null); |
| parameterVisitor.run(method, parameterVisitorAction); |
| } |
| |
| return new SimpleStatus(""); |
| } |
| |
| private void checkUpperCase(String name, String className) |
| { |
| // in a service bean check if any method starts with upper case letter |
| if ( Character.isUpperCase(name.charAt(0))) |
| addMessage("MSG_WARN_JAVA_METHOD_START_WITH_UPPER_CASE", new String[]{name, className}); |
| |
| } |
| |
| private void checkUnderScore(String name, String className) |
| { |
| //check if the name has an underscore, then next letter should be upper case |
| int underScoreIndex = name.indexOf(UNDERSCORE); |
| String tempName = name; |
| while(underScoreIndex !=-1) { |
| tempName = tempName.substring(underScoreIndex+1); |
| if ( Character.isLowerCase(tempName.charAt(0))) { |
| addMessage("MSG_WARN_METHOD_NAME_INVALID", new String[]{name, className}); |
| break; |
| } |
| else |
| underScoreIndex = tempName.indexOf(UNDERSCORE); |
| } |
| } |
| |
| private void checkNumericDigits(String name, String className) |
| { |
| //check if the name has a numeric, then next letter should be upper case |
| for ( int i = 0; i < name.length(); i++) |
| { |
| if ( Character.isDigit(name.charAt(i))) |
| { |
| if (Character.isLowerCase(name.charAt(i+1))) { |
| addMessage("MSG_WARN_METHOD_NAME_INVALID", new String[]{name, className}); |
| break; |
| } |
| } |
| } |
| } |
| private void checkBooleanProperties(Method method, String className) |
| { |
| if (!serviceBean && method.getName().startsWith("get") && |
| (method.getReturnType().getName().equals("boolean") || |
| method.getReturnType().getName().equals("java.lang.Boolean"))) |
| addMessage("MSG_WARN_BOOLEAN_PROPERTY_ACCESSORS", new String[]{method.getName(), className}); |
| } |
| |
| } |