blob: aa446a876ec2c319dacfca1f1695173190eb2f6e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 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.j2ee.model.internal.validation;
import java.util.List;
import org.eclipse.jst.j2ee.ejb.CommonRelationshipRole;
import org.eclipse.jst.j2ee.internal.EjbModuleExtensionHelper;
/**
* This class is a copy of org.eclipse.jst.j2ee.internal.ejb.codegen.helpers.RoleHelper.
* org.eclipse.jst.j2ee.internal.ejb.codegen.helpers.RoleHelper cannot be used
* directly by the EJB Validator (to calculate role method names) because
* it uses classes which are not used by WebSphere. Until the long-term
* fix can be put in, this class will be used.
*/
public class RoleHelper {
static final String KEY_GETTER_NAME_PATTERN = "get{0}Key";//$NON-NLS-1$
static final String KEY_SETTER_NAME_PATTERN = "privateSet{0}Key";//$NON-NLS-1$
static final String LINK_GETTER_NAME_PATTERN = "get{0}Link";//$NON-NLS-1$
static final String ADD_NAME_PREFIX = "add";//$NON-NLS-1$
static final String GETTER_NAME_PREFIX = "get"; //$NON-NLS-1$
static final String REMOVE_NAME_PREFIX = "remove";//$NON-NLS-1$
static final String SECONDARY_ADD_NAME_PREFIX = "secondaryAdd";//$NON-NLS-1$
static final String SECONDARY_REMOVE_NAME_PREFIX = "secondaryRemove";//$NON-NLS-1$
static final String SECONDARY_SETTER_NAME_PREFIX = "secondarySet";//$NON-NLS-1$
static final String SETTER_NAME_PREFIX = "set"; //$NON-NLS-1$
protected EjbModuleExtensionHelper modHelper;
/**
* RoleHelper constructor comment.
*/
public RoleHelper() {
super();
}
/**
* Collect the names of the methods that were added to the bean class
* for a particular role.
*/
public static void collectRoleMethodNames(CommonRelationshipRole aRole, List aList) {
if (aRole == null || aList == null) return;
aList.add(getLinkGetterName(aRole));
if (aRole.isForward()) {
aList.add(getKeyGetterName(aRole));
aList.add(getKeySetterName(aRole));
}
if (aRole.isNavigable())
aList.add(getGetterName(aRole));
if (!isMany(aRole)) {
try {
if(aRole.getOppositeAsCommonRole() != null) {
if (!aRole.getOppositeAsCommonRole().isKey())
aList.add(getSetterName(aRole));
if (!aRole.isKey()) {
aList.add(getSecondarySetterName(aRole));
}
}
}
catch(NullPointerException exc) {
// If a NullPointerException is caught, assume that the role isn't a key.
// Just continue.
}
} else {
aList.add(getSecondaryAddName(aRole));
aList.add(getSecondaryRemoveName(aRole));
if (aRole.isNavigable()) {
try {
if(aRole.getOppositeAsCommonRole() != null) {
if (!aRole.getOppositeAsCommonRole().isKey()) {
aList.add(getAddName(aRole));
}
}
}
catch(NullPointerException exc) {
// If a NullPointerException is thrown, just assume that the opposite isn't a key.
}
if (aRole.getOppositeAsCommonRole() != null && !aRole.getOppositeAsCommonRole().isRequired())
aList.add(getRemoveName(aRole));
}
}
}
/**
* Return aString where the first character is uppercased.
*/
public static final String firstAsUppercase(String aString) {
if (aString != null && aString.length() >0 && !Character.isUpperCase(aString.charAt(0))) {
char[] chars = aString.toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
return String.valueOf(chars);
}
return aString;
}
protected static String format(String pattern, String[] replacements) {
return java.text.MessageFormat.format(pattern, replacements);
}
/**
* Return the add method name for @aRole.
* It will be in the format "add{aRole name}".
* For example, a role named "department" would return
* addDepartment.
*/
public static String getAddName(CommonRelationshipRole aRole) {
if (aRole == null) return null;
String arg = firstAsUppercase(aRole.getName());
return ADD_NAME_PREFIX + arg;
}
/**
* Return the getter method name for @aRole.
* It will be in the format "get{aRole name}".
* For example, a role named "department" would return
* getDepartment.
*/
public static String getGetterName(CommonRelationshipRole aRole) {
if (aRole == null) return null;
String arg = firstAsUppercase(aRole.getName());
return GETTER_NAME_PREFIX + arg;
}
/**
* Return the key getter method name for @aRole.
* It will be in the format "get{aRole name}Key".
* For example, a role named "department" would return
* getDepartmentKey.
*/
public static String getKeyGetterName(CommonRelationshipRole aRole) {
if (aRole == null) return null;
String arg = firstAsUppercase(aRole.getName());
return format(KEY_GETTER_NAME_PATTERN, new String[]{arg});
}
/**
* Return the key setter method name for @aRole.
* It will be in the format "privateSet{aRole name}Key".
* For example, a role named "department" would return
* privateSetDepartmentKey.
*/
public static String getKeySetterName(CommonRelationshipRole aRole) {
if (aRole == null) return null;
String arg = firstAsUppercase(aRole.getName());
return format(KEY_SETTER_NAME_PATTERN, new String[]{arg});
}
/**
* Return the link getter method name for @aRole.
* It will be in the format "get{aRole name}Link".
* For example, a role named "department" would return
* getDepartmentLink.
*/
public static String getLinkGetterName(CommonRelationshipRole aRole) {
if (aRole == null) return null;
String arg = firstAsUppercase(aRole.getName());
return format(LINK_GETTER_NAME_PATTERN, new String[]{arg});
}
/**
* Return the remove method name for @aRole.
* It will be in the format "remove{aRole name}".
* For example, a role named "department" would return
* removeDepartment.
*/
public static String getRemoveName(CommonRelationshipRole aRole) {
if (aRole == null) return null;
String arg = firstAsUppercase(aRole.getName());
return REMOVE_NAME_PREFIX + arg;
}
/**
* Return the secondary add method name for @aRole.
* It will be in the format "secondaryAdd{aRole name}".
* For example, a role named "department" would return
* secondaryAddDepartment.
*/
public static String getSecondaryAddName(CommonRelationshipRole aRole) {
if (aRole == null) return null;
String arg = firstAsUppercase(aRole.getName());
return SECONDARY_ADD_NAME_PREFIX + arg;
}
/**
* Return the secondary remove method name for @aRole.
* It will be in the format "secondaryRemove{aRole name}".
* For example, a role named "department" would return
* secondaryRemoveDepartment.
*/
public static String getSecondaryRemoveName(CommonRelationshipRole aRole) {
if (aRole == null) return null;
String arg = firstAsUppercase(aRole.getName());
return SECONDARY_REMOVE_NAME_PREFIX + arg;
}
/**
* Return the secondary setter method name for @aRole.
* It will be in the format "secondarySet{aRole name}".
* For example, a role named "department" would return
* secondarySetDepartment.
*/
public static String getSecondarySetterName(CommonRelationshipRole aRole) {
if (aRole == null) return null;
String arg = firstAsUppercase(aRole.getName());
return SECONDARY_SETTER_NAME_PREFIX + arg;
}
/**
* Return the setter method name for @aRole.
* It will be in the format "set{aRole name}".
* For example, a role named "department" would return
* setDepartment.
*/
public static String getSetterName(CommonRelationshipRole aRole) {
if (aRole == null) return null;
String arg = firstAsUppercase(aRole.getName());
return SETTER_NAME_PREFIX + arg;
}
/**
* Return true if the multiplicity is many.
*/
public static boolean isMany(CommonRelationshipRole aRole) {
return aRole != null && aRole.isMany();
}
}