/******************************************************************************* * Copyright (c) 2001, 2005 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.ejb.internal.impl; import java.util.ArrayList; import java.util.List; import org.eclipse.jst.j2ee.ejb.CMPAttribute; import org.eclipse.jst.j2ee.ejb.CommonRelationshipRole; import org.eclipse.jst.j2ee.ejb.ContainerManagedEntity; import org.eclipse.jst.j2ee.ejb.IRoleShapeStrategy; /** * Insert the type's description here. * Creation date: (11/6/2000 11:41:33 AM) * @author: Administrator */ public abstract class RoleShapeStrategy implements IRoleShapeStrategy { protected boolean busy = false; protected CommonRelationshipRole role; protected ArrayList visitedKeyTypes = new ArrayList(5); /** * FlattenedRoleShapeStrategy constructor comment. */ public RoleShapeStrategy(CommonRelationshipRole aRole) { super(); setRole(aRole); } protected String appendName(String fullName, String additionalName) { return fullName + ATTRIBUTE_NAME_JOINER + additionalName; } protected boolean canContinue() { return !busy && role.isForward() && role.getName() != null; } protected boolean canComputeNames() { //return getRole().getOpposite() != null; return true; } /** * Insert the method's description here. * Creation date: (11/16/00 9:19:27 PM) * @return CommonRelationshipRole */ public CommonRelationshipRole getRole() { return role; } /** * Insert the method's description here. * Creation date: (11/16/00 9:19:27 PM) * @return CommonRelationshipRole */ public boolean isFlat () { return false; } public boolean isRound () { return false; } /** * Creates an appended name while uppercasing the first letter of the secondName. */ public static String makeJavaName(String firstName, String secondName) { StringBuffer nameBuffer = new StringBuffer(firstName); nameBuffer.append(Character.toUpperCase(secondName.charAt(0))); for (int i = 1; i < secondName.length(); i++) nameBuffer.append(secondName.charAt(i)); return nameBuffer.toString(); } public void reconcileAttributes(List roleAttributes) { if (canContinue()) { busy = true; String attributeName = getRole().getName(); List computedNames = new ArrayList(); if (canComputeNames()){ visitedKeyTypes.clear(); reconcileAttributes(getRole(), attributeName, roleAttributes, computedNames); } removeExtraAttributes(computedNames); busy = false; } } /** * getFields method comment. */ protected abstract void reconcileAttributes(CommonRelationshipRole aRole, String attributeName, List aList, List computedNames); /** * Remove attributes from our role whose name is not contained in the list of * @computedNames. Also, remove from the role's source EJB. */ protected void removeExtraAttributes(List computedNames) { if (!getRole().getAttributes().isEmpty()) { java.util.Iterator it = getRole().getAttributes().iterator(); ContainerManagedEntity cmp = getRole().getSourceEntity(); CMPAttribute attribute; while (it.hasNext()) { attribute = (CMPAttribute) it.next(); if (computedNames.contains(attribute.getName())) continue; it.remove(); cmp.getKeyAttributes().remove(attribute); cmp.getPersistentAttributes().remove(attribute); } } } /** * Insert the method's description here. * Creation date: (11/16/00 9:19:27 PM) * @param newRole com.ibm.ejs.models.base.extensions.ejbext.EjbRelationshipRole */ public void setRole(CommonRelationshipRole newRole) { role = newRole; } }