[104008]commited for NA
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/AddModulestoEARPropertiesPage.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/AddModulestoEARPropertiesPage.java
index af6f91c..5b619fb 100644
--- a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/AddModulestoEARPropertiesPage.java
+++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/AddModulestoEARPropertiesPage.java
@@ -10,6 +10,7 @@
 import java.util.Collections;
 import java.util.List;
 
+import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IWorkspaceRoot;
@@ -30,6 +31,7 @@
 import org.eclipse.jst.common.jdt.internal.integration.IJavaProjectMigrationDataModelProperties;
 import org.eclipse.jst.common.jdt.internal.integration.JavaProjectMigrationDataModelProvider;
 import org.eclipse.jst.j2ee.application.internal.operations.AddComponentToEnterpriseApplicationDataModelProvider;
+import org.eclipse.jst.j2ee.application.internal.operations.RemoveComponentFromEnterpriseApplicationOperation;
 import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil;
 import org.eclipse.jst.j2ee.internal.plugin.J2EEUIMessages;
 import org.eclipse.swt.SWT;
@@ -49,6 +51,7 @@
 import org.eclipse.wst.common.componentcore.ComponentCore;
 import org.eclipse.wst.common.componentcore.datamodel.properties.ICreateReferenceComponentsDataModelProperties;
 import org.eclipse.wst.common.componentcore.internal.operation.CreateReferenceComponentsDataModelProvider;
+import org.eclipse.wst.common.componentcore.internal.operation.RemoveReferenceComponentsDataModelProvider;
 import org.eclipse.wst.common.componentcore.internal.resources.VirtualArchiveComponent;
 import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
 import org.eclipse.wst.common.componentcore.resources.ComponentHandle;
@@ -164,28 +167,38 @@
 	public boolean performOk() {
 		NullProgressMonitor monitor = new NullProgressMonitor();
 		IStatus stat = addModulesToEAR(monitor);
-		if (stat == OK_STATUS)
-			return true;
-		return false;
+		IStatus stat1 = removeModulesFromEAR(monitor);
+		return true;
 	}
 
+	private List newJ2EEModulesToAdd(){
+		List newComps = new ArrayList();
+		if (j2eeComponentList != null && !j2eeComponentList.isEmpty()){
+			for (int i = 0; i < j2eeComponentList.size(); i++){
+				ComponentHandle handle = (ComponentHandle)j2eeComponentList.get(i);
+				if( !inEARAlready(handle))
+					newComps.add(handle);
+			}
+		}
+		return newComps;
+	}
+	
 	private IStatus addModulesToEAR(IProgressMonitor monitor) {
 		IStatus stat = OK_STATUS;
 		try {
 			if( earComponent != null ){
-				IDataModel dm = DataModelFactory.createDataModel(new AddComponentToEnterpriseApplicationDataModelProvider());
-	
-				dm.setProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT_HANDLE, earComponent.getComponentHandle());
-	
-	
-				if (j2eeComponentList != null && !j2eeComponentList.isEmpty()) {
-					dm.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_HANDLE_LIST, j2eeComponentList);
+				List list = newJ2EEModulesToAdd();				
+				if (list != null && !list.isEmpty()) {
+					IDataModel dm = DataModelFactory.createDataModel(new AddComponentToEnterpriseApplicationDataModelProvider());
+					
+					dm.setProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT_HANDLE, earComponent.getComponentHandle());					
+					dm.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_HANDLE_LIST, list);
 					stat = dm.validateProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_HANDLE_LIST);
 					if (stat != OK_STATUS)
 						return stat;
 					dm.getDefaultOperation().execute(monitor, null);
 				}
-	
+				
 				if (!javaProjectsList.isEmpty()) {
 	
 					for (int i = 0; i < javaProjectsList.size(); i++) {
@@ -213,7 +226,49 @@
 		}
 		return OK_STATUS;
 	}
-
+	
+	private IStatus removeModulesFromEAR(IProgressMonitor monitor) {
+		IStatus stat = OK_STATUS;
+		if( earComponent != null && j2eeComponentList != null){
+			List list = getComponentsToRemove();
+			if( !list.isEmpty()){
+				try {
+					RemoveComponentFromEnterpriseApplicationOperation op = removeComponentFromEAROperation(earComponent.getComponentHandle(), list);
+					op.execute(null, null);
+				} catch (ExecutionException e) {
+					Logger.getLogger().log(e);
+				}
+			}
+		}
+		return stat;
+	}		
+	
+	protected  RemoveComponentFromEnterpriseApplicationOperation removeComponentFromEAROperation(ComponentHandle sourceComponentHandle, List targetComponentsHandles) {
+		IDataModel model = DataModelFactory.createDataModel(new RemoveReferenceComponentsDataModelProvider());
+		model.setProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT_HANDLE, sourceComponentHandle);
+		List modHandlesList = (List) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_HANDLE_LIST);
+		modHandlesList.addAll(targetComponentsHandles);
+		model.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_HANDLE_LIST, modHandlesList);
+		return new RemoveComponentFromEnterpriseApplicationOperation(model);
+	}
+	
+	protected List getComponentsToRemove(){
+		j2eeComponentList = getCheckedJ2EEElementsAsList();
+		List list = new ArrayList();
+		if( earComponent != null && list != null ){
+			IVirtualReference[] oldrefs = earComponent.getReferences();
+			for (int j = 0; j < oldrefs.length; j++) {
+				IVirtualReference ref = (IVirtualReference) oldrefs[j];
+				ComponentHandle handle = ref.getReferencedComponent().getComponentHandle();
+				if( !j2eeComponentList.contains(handle)){
+					list.add(handle);
+				}
+			}
+		}
+		return list;		
+	}
+	
+	
 	public void handleEvent(Event event) {
 		if (event.widget == selectAllButton)
 			handleSelectAllButtonPressed();
@@ -264,6 +319,7 @@
 					refs[j] = tmpref;
 				}				
 				earComponent.setReferences(refs);
+				j2eeComponentList.add(archive.getComponentHandle());
 			}
 			refresh();
 		}
@@ -304,6 +360,7 @@
 						refs[j] = tmpref;
 					}				
 					earComponent.setReferences(refs);
+					j2eeComponentList.add(archive.getComponentHandle());
 				}else{
 					//display error
 				}
@@ -437,9 +494,7 @@
 			for (int i = 0; i < elements.length; i++) {
 				if (elements[i] instanceof ComponentHandle) {
 					ComponentHandle handle = (ComponentHandle) elements[i];
-					//to prevent the component from being added again
-					if( !inEARAlready( handle ) ) 
-						list.add(elements[i]);
+					list.add(elements[i]);
 				}
 			}
 		}
diff --git a/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/RemoveComponentFromEnterpriseApplicationOperation.java b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/RemoveComponentFromEnterpriseApplicationOperation.java
new file mode 100644
index 0000000..2770848
--- /dev/null
+++ b/plugins/org.eclipse.jst.j2ee/earproject/org/eclipse/jst/j2ee/application/internal/operations/RemoveComponentFromEnterpriseApplicationOperation.java
@@ -0,0 +1,91 @@
+package org.eclipse.jst.j2ee.application.internal.operations;
+
+import java.util.List;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jem.util.logger.proxy.Logger;
+import org.eclipse.jst.j2ee.application.Application;
+import org.eclipse.jst.j2ee.application.Module;
+import org.eclipse.jst.j2ee.componentcore.util.EARArtifactEdit;
+import org.eclipse.wst.common.componentcore.ComponentCore;
+import org.eclipse.wst.common.componentcore.datamodel.properties.ICreateReferenceComponentsDataModelProperties;
+import org.eclipse.wst.common.componentcore.internal.operation.RemoveReferenceComponentOperation;
+import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
+import org.eclipse.wst.common.componentcore.resources.ComponentHandle;
+import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
+
+public class RemoveComponentFromEnterpriseApplicationOperation extends RemoveReferenceComponentOperation {
+
+
+	public RemoveComponentFromEnterpriseApplicationOperation(IDataModel model) {
+		super(model);
+	}
+
+	public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		super.execute(monitor, info);
+		updateEARDD(monitor);
+		return OK_STATUS;
+	}
+
+
+	protected void updateEARDD(IProgressMonitor monitor) {
+
+		EARArtifactEdit earEdit = null;
+		try {
+			ComponentHandle handle = (ComponentHandle) model.getProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT_HANDLE);
+			earEdit = EARArtifactEdit.getEARArtifactEditForWrite(handle);
+			if (earEdit != null) {
+				Application application = earEdit.getApplication();
+				List list = (List) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENTS_HANDLE_LIST);
+				if (list != null && list.size() > 0) {
+					for (int i = 0; i < list.size(); i++) {
+						ComponentHandle comphandle = (ComponentHandle) list.get(i);
+						IVirtualComponent wc = ComponentCore.createComponent(comphandle.getProject(), comphandle.getName());
+						removeModule(application, wc);
+					}
+				}
+			}
+			earEdit.saveIfNecessary(monitor);
+		} catch (Exception e) {
+			Logger.getLogger().logError(e);
+		} finally {
+			if (earEdit != null)
+				earEdit.dispose();
+		}
+	}
+
+	protected void removeModule(Application application, IVirtualComponent wc) {
+		Application dd = application;
+
+		String name = wc.getName();
+		String type = wc.getComponentTypeId();
+
+		if (type.equals(IModuleConstants.JST_WEB_MODULE)) {
+			name += ".war"; //$NON-NLS-1$
+		} else if (type.equals(IModuleConstants.JST_EJB_MODULE)) {
+			name += ".jar"; //$NON-NLS-1$
+		} else if (type.equals(IModuleConstants.JST_APPCLIENT_MODULE)) {
+			name += ".jar"; //$NON-NLS-1$
+		} else if (type.equals(IModuleConstants.JST_CONNECTOR_MODULE)) {
+			name += ".rar"; //$NON-NLS-1$
+		}
+		Module existingModule = dd.getFirstModule(name);
+		dd.getModules().remove(existingModule);
+
+	}
+
+	public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+}