[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; + } + +}