/******************************************************************************* * Copyright (c) 2001, 2006 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.Collection; import java.util.List; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.util.EObjectContainmentEList; import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.ecore.util.InternalEList; import org.eclipse.jst.j2ee.common.MessageDestination; import org.eclipse.jst.j2ee.common.SecurityRole; import org.eclipse.jst.j2ee.common.internal.impl.J2EEEObjectImpl; import org.eclipse.jst.j2ee.ejb.AssemblyDescriptor; import org.eclipse.jst.j2ee.ejb.EJBJar; import org.eclipse.jst.j2ee.ejb.EjbPackage; import org.eclipse.jst.j2ee.ejb.EnterpriseBean; import org.eclipse.jst.j2ee.ejb.ExcludeList; import org.eclipse.jst.j2ee.ejb.MethodElement; import org.eclipse.jst.j2ee.ejb.MethodPermission; import org.eclipse.jst.j2ee.ejb.MethodTransaction; import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil; /** * The assembly-descriptor element contains application-assembly information. The application-assembly information consists of the following parts: the definition of security roles, the definition of method permissions, and the definition of transaction attributes for enterprise beans with container-managed transaction demarcation. All the parts are optional in the sense that they are omitted if the lists represented by them are empty. Providing an assembly-descriptor in the deployment descriptor is optional for the ejb-jar file producer. * @generated */ public class AssemblyDescriptorImpl extends J2EEEObjectImpl implements AssemblyDescriptor { /** * @generated This field/method will be replaced during code generation. */ /** * @generated This field/method will be replaced during code generation. */ protected EList methodPermissions = null; /** * @generated This field/method will be replaced during code generation. */ protected EList methodTransactions = null; /** * @generated This field/method will be replaced during code generation. */ protected EList securityRoles = null; /** * @generated This field/method will be replaced during code generation. */ protected ExcludeList excludeList = null; /** * The cached value of the '{@link #getMessageDestinations() <em>Message Destinations</em>}' containment reference list. * <!-- begin-user-doc --> * <!-- end-user-doc --> * @see #getMessageDestinations() * @generated * @ordered */ protected EList messageDestinations = null; public AssemblyDescriptorImpl() { super(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override protected EClass eStaticClass() { return EjbPackage.Literals.ASSEMBLY_DESCRIPTOR; } /** * Return the first method permission that contains all the roles in securityRoles and * is the same size */ public MethodPermission getMethodPermission(List securityRolesList) { List permissions = getMethodPermissions(); MethodPermission temp = null; for (int i = 0; i < permissions.size(); i++) { temp = (MethodPermission) permissions.get(i); if (temp.getRoles().containsAll(securityRolesList) && temp.getRoles().size() == securityRolesList.size()) return temp; } return null; } public List getMethodPermissionMethodElements(EnterpriseBean anEJB) { List allMethodElements = new ArrayList(); List permissions = getMethodPermissions(); MethodPermission permission; for (int i = 0; i < permissions.size(); i++){ permission = (MethodPermission) permissions.get(i); allMethodElements.addAll(permission.getMethodElements(anEJB)); } return allMethodElements; } public List getMethodTransactionMethodElements(EnterpriseBean anEJB) { List allMethodElements = new ArrayList(); List transactions = getMethodTransactions(); MethodTransaction transaction; for (int i = 0; i < transactions.size(); i++){ transaction = (MethodTransaction) transactions.get(i); allMethodElements.addAll(transaction.getMethodElements(anEJB)); } return allMethodElements; } public SecurityRole getSecurityRoleNamed(String roleName) { java.util.List tempRoles = getSecurityRoles(); SecurityRole role; for (int i = 0; i < tempRoles.size(); i++) { role = (SecurityRole) tempRoles.get(i); if (role.getRoleName().equals(roleName)) return role; } return null; } /** * @see org.eclipse.jst.j2ee.internal.ejb.AssemblyDescriptor */ public void renameSecurityRole(java.lang.String existingRoleName, java.lang.String newRoleName) { SecurityRole role = getSecurityRoleNamed(existingRoleName); role.setRoleName(newRoleName); } /** * @generated This field/method will be replaced during code generation */ public EList getMethodPermissions() { if (methodPermissions == null) { methodPermissions = new EObjectContainmentWithInverseEList(MethodPermission.class, this, EjbPackage.ASSEMBLY_DESCRIPTOR__METHOD_PERMISSIONS, EjbPackage.METHOD_PERMISSION__ASSEMBLY_DESCRIPTOR); } return methodPermissions; } /** * @generated This field/method will be replaced during code generation * Specifies how the container must manage transaction scopes for the enterprise * bean's method invocations. The element consists of an optional description, a * list of method elements, and a transaction attribute.The transaction attribute * is to be applied to all the specified methods. */ public EList getMethodTransactions() { if (methodTransactions == null) { methodTransactions = new EObjectContainmentWithInverseEList(MethodTransaction.class, this, EjbPackage.ASSEMBLY_DESCRIPTOR__METHOD_TRANSACTIONS, EjbPackage.METHOD_TRANSACTION__ASSEMBLY_DESCRIPTOR); } return methodTransactions; } /** * @generated This field/method will be replaced during code generation */ public EJBJar getEjbJar() { if (eContainerFeatureID != EjbPackage.ASSEMBLY_DESCRIPTOR__EJB_JAR) return null; return (EJBJar)eContainer(); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public NotificationChain basicSetEjbJar(EJBJar newEjbJar, NotificationChain msgs) { msgs = eBasicSetContainer((InternalEObject)newEjbJar, EjbPackage.ASSEMBLY_DESCRIPTOR__EJB_JAR, msgs); return msgs; } /** * @generated This field/method will be replaced during code generation. */ public void setEjbJar(EJBJar newEjbJar) { if (newEjbJar != eInternalContainer() || (eContainerFeatureID != EjbPackage.ASSEMBLY_DESCRIPTOR__EJB_JAR && newEjbJar != null)) { if (EcoreUtil.isAncestor(this, newEjbJar)) throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); //$NON-NLS-1$ NotificationChain msgs = null; if (eInternalContainer() != null) msgs = eBasicRemoveFromContainer(msgs); if (newEjbJar != null) msgs = ((InternalEObject)newEjbJar).eInverseAdd(this, EjbPackage.EJB_JAR__ASSEMBLY_DESCRIPTOR, EJBJar.class, msgs); msgs = basicSetEjbJar(newEjbJar, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, EjbPackage.ASSEMBLY_DESCRIPTOR__EJB_JAR, newEjbJar, newEjbJar)); } /** * @generated This field/method will be replaced during code generation */ public EList getSecurityRoles() { if (securityRoles == null) { securityRoles = new EObjectContainmentEList(SecurityRole.class, this, EjbPackage.ASSEMBLY_DESCRIPTOR__SECURITY_ROLES); } return securityRoles; } /** * @generated This field/method will be replaced during code generation */ public ExcludeList getExcludeList() { return excludeList; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public NotificationChain basicSetExcludeList(ExcludeList newExcludeList, NotificationChain msgs) { ExcludeList oldExcludeList = excludeList; excludeList = newExcludeList; if (eNotificationRequired()) { ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EjbPackage.ASSEMBLY_DESCRIPTOR__EXCLUDE_LIST, oldExcludeList, newExcludeList); if (msgs == null) msgs = notification; else msgs.add(notification); } return msgs; } /** * @generated This field/method will be replaced during code generation. */ public void setExcludeList(ExcludeList newExcludeList) { if (newExcludeList != excludeList) { NotificationChain msgs = null; if (excludeList != null) msgs = ((InternalEObject)excludeList).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EjbPackage.ASSEMBLY_DESCRIPTOR__EXCLUDE_LIST, null, msgs); if (newExcludeList != null) msgs = ((InternalEObject)newExcludeList).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EjbPackage.ASSEMBLY_DESCRIPTOR__EXCLUDE_LIST, null, msgs); msgs = basicSetExcludeList(newExcludeList, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, EjbPackage.ASSEMBLY_DESCRIPTOR__EXCLUDE_LIST, newExcludeList, newExcludeList)); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ public EList getMessageDestinations() { if (messageDestinations == null) { messageDestinations = new EObjectContainmentEList(MessageDestination.class, this, EjbPackage.ASSEMBLY_DESCRIPTOR__MESSAGE_DESTINATIONS); } return messageDestinations; } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case EjbPackage.ASSEMBLY_DESCRIPTOR__METHOD_PERMISSIONS: return ((InternalEList)getMethodPermissions()).basicAdd(otherEnd, msgs); case EjbPackage.ASSEMBLY_DESCRIPTOR__METHOD_TRANSACTIONS: return ((InternalEList)getMethodTransactions()).basicAdd(otherEnd, msgs); case EjbPackage.ASSEMBLY_DESCRIPTOR__EJB_JAR: if (eInternalContainer() != null) msgs = eBasicRemoveFromContainer(msgs); return basicSetEjbJar((EJBJar)otherEnd, msgs); } return super.eInverseAdd(otherEnd, featureID, msgs); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case EjbPackage.ASSEMBLY_DESCRIPTOR__METHOD_PERMISSIONS: return ((InternalEList)getMethodPermissions()).basicRemove(otherEnd, msgs); case EjbPackage.ASSEMBLY_DESCRIPTOR__METHOD_TRANSACTIONS: return ((InternalEList)getMethodTransactions()).basicRemove(otherEnd, msgs); case EjbPackage.ASSEMBLY_DESCRIPTOR__EJB_JAR: return basicSetEjbJar(null, msgs); case EjbPackage.ASSEMBLY_DESCRIPTOR__SECURITY_ROLES: return ((InternalEList)getSecurityRoles()).basicRemove(otherEnd, msgs); case EjbPackage.ASSEMBLY_DESCRIPTOR__EXCLUDE_LIST: return basicSetExcludeList(null, msgs); case EjbPackage.ASSEMBLY_DESCRIPTOR__MESSAGE_DESTINATIONS: return ((InternalEList)getMessageDestinations()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) { switch (eContainerFeatureID) { case EjbPackage.ASSEMBLY_DESCRIPTOR__EJB_JAR: return eInternalContainer().eInverseRemove(this, EjbPackage.EJB_JAR__ASSEMBLY_DESCRIPTOR, EJBJar.class, msgs); } return super.eBasicRemoveFromContainerFeature(msgs); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case EjbPackage.ASSEMBLY_DESCRIPTOR__METHOD_PERMISSIONS: return getMethodPermissions(); case EjbPackage.ASSEMBLY_DESCRIPTOR__METHOD_TRANSACTIONS: return getMethodTransactions(); case EjbPackage.ASSEMBLY_DESCRIPTOR__EJB_JAR: return getEjbJar(); case EjbPackage.ASSEMBLY_DESCRIPTOR__SECURITY_ROLES: return getSecurityRoles(); case EjbPackage.ASSEMBLY_DESCRIPTOR__EXCLUDE_LIST: return getExcludeList(); case EjbPackage.ASSEMBLY_DESCRIPTOR__MESSAGE_DESTINATIONS: return getMessageDestinations(); } return super.eGet(featureID, resolve, coreType); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case EjbPackage.ASSEMBLY_DESCRIPTOR__METHOD_PERMISSIONS: getMethodPermissions().clear(); getMethodPermissions().addAll((Collection)newValue); return; case EjbPackage.ASSEMBLY_DESCRIPTOR__METHOD_TRANSACTIONS: getMethodTransactions().clear(); getMethodTransactions().addAll((Collection)newValue); return; case EjbPackage.ASSEMBLY_DESCRIPTOR__EJB_JAR: setEjbJar((EJBJar)newValue); return; case EjbPackage.ASSEMBLY_DESCRIPTOR__SECURITY_ROLES: getSecurityRoles().clear(); getSecurityRoles().addAll((Collection)newValue); return; case EjbPackage.ASSEMBLY_DESCRIPTOR__EXCLUDE_LIST: setExcludeList((ExcludeList)newValue); return; case EjbPackage.ASSEMBLY_DESCRIPTOR__MESSAGE_DESTINATIONS: getMessageDestinations().clear(); getMessageDestinations().addAll((Collection)newValue); return; } super.eSet(featureID, newValue); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case EjbPackage.ASSEMBLY_DESCRIPTOR__METHOD_PERMISSIONS: getMethodPermissions().clear(); return; case EjbPackage.ASSEMBLY_DESCRIPTOR__METHOD_TRANSACTIONS: getMethodTransactions().clear(); return; case EjbPackage.ASSEMBLY_DESCRIPTOR__EJB_JAR: setEjbJar((EJBJar)null); return; case EjbPackage.ASSEMBLY_DESCRIPTOR__SECURITY_ROLES: getSecurityRoles().clear(); return; case EjbPackage.ASSEMBLY_DESCRIPTOR__EXCLUDE_LIST: setExcludeList((ExcludeList)null); return; case EjbPackage.ASSEMBLY_DESCRIPTOR__MESSAGE_DESTINATIONS: getMessageDestinations().clear(); return; } super.eUnset(featureID); } /** * <!-- begin-user-doc --> * <!-- end-user-doc --> * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case EjbPackage.ASSEMBLY_DESCRIPTOR__METHOD_PERMISSIONS: return methodPermissions != null && !methodPermissions.isEmpty(); case EjbPackage.ASSEMBLY_DESCRIPTOR__METHOD_TRANSACTIONS: return methodTransactions != null && !methodTransactions.isEmpty(); case EjbPackage.ASSEMBLY_DESCRIPTOR__EJB_JAR: return getEjbJar() != null; case EjbPackage.ASSEMBLY_DESCRIPTOR__SECURITY_ROLES: return securityRoles != null && !securityRoles.isEmpty(); case EjbPackage.ASSEMBLY_DESCRIPTOR__EXCLUDE_LIST: return excludeList != null; case EjbPackage.ASSEMBLY_DESCRIPTOR__MESSAGE_DESTINATIONS: return messageDestinations != null && !messageDestinations.isEmpty(); } return super.eIsSet(featureID); } /** * Remove the MethodElements that are referencing @anEJB. */ public void removeData(EnterpriseBean anEJB) { if (anEJB != null) { removeMethodPermissionData(anEJB); removeMethodTransactionData(anEJB); } } /** * Remove the MethodElements that are referencing @anEJB. */ protected void removeMethodPermissionData(EnterpriseBean anEJB) { List mes = getMethodPermissionMethodElements(anEJB); MethodElement me; MethodPermission mp; for (int i = 0; i < mes.size(); i++){ me = (MethodElement) mes.get(i); mp = (MethodPermission)me.eContainer(); if (mp.getMethodElements().size() == 1){ ExtendedEcoreUtil.becomeProxy(mp, mp.eResource()); getMethodPermissions().remove(mp); } else{ ExtendedEcoreUtil.becomeProxy(me, me.eResource()); mp.getMethodElements().remove(me); } } } /** * Remove the MethodElements that are referencing @anEJB. */ protected void removeMethodTransactionData(EnterpriseBean anEJB) { List mes = getMethodTransactionMethodElements(anEJB); MethodElement me; MethodTransaction mt; for (int i = 0; i < mes.size(); i++){ me = (MethodElement) mes.get(i); mt = (MethodTransaction)me.eContainer(); if (mt.getMethodElements().size() == 1){ ExtendedEcoreUtil.becomeProxy(mt, mt.eResource()); getMethodTransactions().remove(mt); } else{ ExtendedEcoreUtil.becomeProxy(me, me.eResource()); mt.getMethodElements().remove(me); } } } }