[223435] Manifest cleared when removing Modules from EAR
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 448a9f7..070d40a 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
@@ -15,14 +15,12 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.IWorkspaceRunnable; @@ -35,7 +33,6 @@ import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.ui.wizards.BuildPathDialogAccess; -import org.eclipse.jem.util.logger.proxy.Logger; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.CheckStateChangedEvent; @@ -46,10 +43,7 @@ import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jst.j2ee.application.internal.operations.AddComponentToEnterpriseApplicationDataModelProvider; import org.eclipse.jst.j2ee.application.internal.operations.RemoveComponentFromEnterpriseApplicationDataModelProvider; -import org.eclipse.jst.j2ee.application.internal.operations.UpdateManifestDataModelProperties; -import org.eclipse.jst.j2ee.application.internal.operations.UpdateManifestDataModelProvider; import org.eclipse.jst.j2ee.classpathdep.ClasspathDependencyUtil; -import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveManifest; import org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualArchiveComponent; import org.eclipse.jst.j2ee.internal.common.J2EEVersionUtil; import org.eclipse.jst.j2ee.internal.common.classpath.J2EEComponentClasspathUpdater; @@ -93,9 +87,7 @@ import org.eclipse.ui.PlatformUI; import org.eclipse.wst.common.componentcore.ComponentCore; import org.eclipse.wst.common.componentcore.datamodel.properties.ICreateReferenceComponentsDataModelProperties; -import org.eclipse.wst.common.componentcore.internal.builder.DependencyGraphManager; 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.resources.IVirtualComponent; import org.eclipse.wst.common.componentcore.resources.IVirtualFile; @@ -159,7 +151,7 @@ } } } catch (CoreException e) { - Logger.getLogger().log(e); + J2EEUIPlugin.logError(e); } if(hasEE5Facet){ @@ -295,7 +287,7 @@ try { op.execute(monitor, null); } catch (ExecutionException e) { - Logger.getLogger().log(e); + J2EEUIPlugin.logError(e); } } } @@ -326,7 +318,7 @@ try { dm.getDefaultOperation().execute(monitor, null); } catch (ExecutionException e) { - Logger.getLogger().log(e); + J2EEUIPlugin.logError(e); } } @@ -360,7 +352,7 @@ refdm.getDefaultOperation().execute(monitor, null); j2eeCompList.add(targetcomponent); } catch (ExecutionException e) { - Logger.getLogger().log(e); + J2EEUIPlugin.logError(e); } } EarFacetRuntimeHandler.updateModuleProjectRuntime(earComponent.getProject(), moduleProjects, new NullProgressMonitor()); @@ -395,11 +387,11 @@ } } } catch (Exception e) { - Logger.getLogger().log(e); + J2EEUIPlugin.logError(e); } //[Bug 238264] clear out the cache because they should all either be added as references now - // or no longer checked and therefor not wanted by the user + // or no longer checked and therefore not wanted by the user this.addedJARComponents.clear(); return OK_STATUS; @@ -408,16 +400,13 @@ private void remComps(List list, String path) { if( !list.isEmpty()){ try { - // retrieve all dependencies on these components within the scope of the EAR - Map dependentComps = getEARModuleDependencies(earComponent, list); // remove the components from the EAR IDataModelOperation op = removeComponentFromEAROperation(earComponent, list, path); op.execute(null, null); // if that succeeded, remove all EAR-scope J2EE dependencies on these components J2EEComponentClasspathUpdater.getInstance().queueUpdateEAR(earComponent.getProject()); - removeEARComponentDependencies(dependentComps); } catch (ExecutionException e) { - Logger.getLogger().log(e); + J2EEUIPlugin.logError(e); } } } @@ -440,100 +429,6 @@ return stat; } - private Map getEARModuleDependencies(final IVirtualComponent earComponent, final List components) { - final Map dependentComps = new HashMap(); - // get all current references to project within the scope of this EAR - for (int i = 0; i < components.size(); i++) { - - final List compsForProject = new ArrayList(); - final IVirtualComponent comp = (IVirtualComponent) components.get(i); - final IProject[] dependentProjects = DependencyGraphManager.getInstance().getDependencyGraph().getReferencingComponents(comp.getProject()); - for (int j = 0; j < dependentProjects.length; j++) { - final IProject project = dependentProjects[j]; - // if this is an EAR, can skip - if (J2EEProjectUtilities.isEARProject(project)) { - continue; - } - final IVirtualComponent dependentComp = ComponentCore.createComponent(project); - // ensure that the project's share an EAR - final IProject[] refEARs = J2EEProjectUtilities.getReferencingEARProjects(project); - boolean sameEAR = false; - for (int k = 0; k < refEARs.length; k++) { - if (refEARs[k].equals(earComponent.getProject())) { - sameEAR = true; - break; - } - } - if (!sameEAR) { - continue; - } - // if the dependency is a web lib dependency, can skip - if (J2EEProjectUtilities.isDynamicWebProject(project)) { - IVirtualReference ref = dependentComp.getReference(comp.getName()); - if (ref != null && ref.getRuntimePath().equals(new Path("/WEB-INF/lib"))) { //$NON-NLS-1$ - continue; - } - } - compsForProject.add(dependentComp); - } - dependentComps.put(comp, compsForProject); - } - return dependentComps; - } - - private void removeEARComponentDependencies(final Map dependentComps) throws ExecutionException { - final Iterator targets = dependentComps.keySet().iterator(); - while (targets.hasNext()) { - final IVirtualComponent target = (IVirtualComponent) targets.next(); - final List sources = (List) dependentComps.get(target); - for (int i = 0; i < sources.size(); i++) { - final IVirtualComponent source = (IVirtualComponent) sources.get(i); - final IDataModel model = DataModelFactory.createDataModel(new RemoveReferenceComponentsDataModelProvider()); - model.setProperty(ICreateReferenceComponentsDataModelProperties.SOURCE_COMPONENT, source); - final List modHandlesList = (List) model.getProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST); - modHandlesList.add(target); - model.setProperty(ICreateReferenceComponentsDataModelProperties.TARGET_COMPONENT_LIST, modHandlesList); - model.getDefaultOperation().execute(null, null); - // update the manifest - removeManifestDependency(source, target); - } - } - } - - private void removeManifestDependency(final IVirtualComponent source, final IVirtualComponent target) - throws ExecutionException { - final String sourceProjName = source.getProject().getName(); - String targetProjName; - if (target instanceof J2EEModuleVirtualArchiveComponent) { - targetProjName = ((J2EEModuleVirtualArchiveComponent)target).getName(); - String[] pathSegments = targetProjName.split(PATH_SEPARATOR); - targetProjName = pathSegments[pathSegments.length - 1]; - } else { - targetProjName = target.getProject().getName(); - } - final IProgressMonitor monitor = new NullProgressMonitor(); - final IFile manifestmf = J2EEProjectUtilities.getManifestFile(source.getProject()); - final ArchiveManifest mf = J2EEProjectUtilities.readManifest(source.getProject()); - if (mf == null) - return; - final IDataModel updateManifestDataModel = DataModelFactory.createDataModel(new UpdateManifestDataModelProvider()); - updateManifestDataModel.setProperty(UpdateManifestDataModelProperties.PROJECT_NAME, sourceProjName); - updateManifestDataModel.setBooleanProperty(UpdateManifestDataModelProperties.MERGE, false); - updateManifestDataModel.setProperty(UpdateManifestDataModelProperties.MANIFEST_FILE, manifestmf); - String[] cp = mf.getClassPathTokenized(); - List cpList = new ArrayList(); - String cpToRemove = (targetProjName.endsWith(".jar")) ? - targetProjName : - targetProjName + ".jar";//$NON-NLS-1$ - for (int i = 0; i < cp.length; i++) { - if (!cp[i].equals(cpToRemove)) { - cpList.add(cp[i]); - } - } - updateManifestDataModel.setProperty(UpdateManifestDataModelProperties.JAR_LIST, cpList); - updateManifestDataModel.getDefaultOperation().execute(monitor, null ); - } - protected IDataModelOperation generateEARDDOperation() { IDataModel model = DataModelFactory.createDataModel(new EarCreateDeploymentFilesDataModelProvider()); model.setProperty(ICreateDeploymentFilesDataModelProperties.GENERATE_DD, earComponent); @@ -1241,7 +1136,7 @@ } return false; } catch (CoreException ce) { - Logger.getLogger().log(ce); + J2EEUIPlugin.logError(ce); } return false; }
diff --git a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/plugin/J2EEUIPlugin.java b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/plugin/J2EEUIPlugin.java index 1531249..d6394d8 100644 --- a/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/plugin/J2EEUIPlugin.java +++ b/plugins/org.eclipse.jst.j2ee.ui/j2ee_ui/org/eclipse/jst/j2ee/internal/plugin/J2EEUIPlugin.java
@@ -33,6 +33,9 @@ import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.eclipse.core.runtime.Platform; +import java.lang.Throwable; +import org.eclipse.core.runtime.CoreException; /** @@ -339,5 +342,21 @@ return createStatus(IStatus.ERROR, aCode, aMessage, exception); } + public static IStatus createStatus(int severity, String message, Throwable exception) { + return new Status(severity, PLUGIN_ID, message, exception); + } + + public static IStatus createStatus(int severity, String message) { + return createStatus(severity, message, null); + } + + public static void logError(Throwable exception) { + Platform.getLog(Platform.getBundle(PLUGIN_ID)).log( createStatus(IStatus.ERROR, exception.getMessage(), exception)); + } + + public static void logError(CoreException exception) { + Platform.getLog(Platform.getBundle(PLUGIN_ID)).log( exception.getStatus() ); + } + }