408858 : preserve existing folders in Deployment Assembly
Change-Id: I60888d73ef83571b894300a0620c7ac0a38c626d
Signed-off-by: Fred Bricon <fbricon@gmail.com>
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WTPProjectsUtil.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WTPProjectsUtil.java
index 0196177..dc03cc4 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WTPProjectsUtil.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WTPProjectsUtil.java
@@ -599,24 +599,11 @@
* Sets the default deployment descriptor folder for Eclipse > Indigo
*/
public static void setDefaultDeploymentDescriptorFolder(IVirtualFolder folder, IPath aProjectRelativeLocation, IProgressMonitor monitor) {
- try {
- Method getDefaultDeploymentDescriptorFolder = J2EEModuleVirtualComponent.class.getMethod("getDefaultDeploymentDescriptorFolder", //$NON-NLS-1$
- IVirtualFolder.class);
- IPath currentDefaultLocation =(IPath) getDefaultDeploymentDescriptorFolder.invoke(null, folder);
+ IPath currentDefaultLocation = J2EEModuleVirtualComponent.getDefaultDeploymentDescriptorFolder(folder);
if (aProjectRelativeLocation.equals(currentDefaultLocation)) {
return;
}
- Method setDefaultDeploymentDescriptorFolder = J2EEModuleVirtualComponent.class.getMethod("setDefaultDeploymentDescriptorFolder", //$NON-NLS-1$
- IVirtualFolder.class,
- IPath.class,
- IProgressMonitor.class);
- setDefaultDeploymentDescriptorFolder.invoke(null, folder, aProjectRelativeLocation, monitor);
- } catch (NoSuchMethodException nsme) {
- //Not available in this WTP version, let's ignore it
- } catch(Exception ex) {
- //The exception shouldn't halt the configuration process.
- ex.printStackTrace();
- }
+ J2EEModuleVirtualComponent.setDefaultDeploymentDescriptorFolder(folder, aProjectRelativeLocation, monitor);
}
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WebProjectConfiguratorDelegate.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WebProjectConfiguratorDelegate.java
index ec84819..77c1a2e 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WebProjectConfiguratorDelegate.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WebProjectConfiguratorDelegate.java
@@ -10,8 +10,6 @@
import static org.eclipse.m2e.wtp.WTPProjectsUtil.removeConflictingFacets;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
@@ -35,6 +33,7 @@
import org.eclipse.jdt.core.IClasspathAttribute;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jst.j2ee.classpathdep.IClasspathDependencyConstants;
+import org.eclipse.jst.j2ee.componentcore.J2EEModuleVirtualComponent;
import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
import org.eclipse.jst.j2ee.project.facet.IJ2EEModuleFacetInstallDataModelProperties;
import org.eclipse.jst.j2ee.web.project.facet.IWebFacetInstallDataModelProperties;
@@ -53,6 +52,7 @@
import org.eclipse.wst.common.componentcore.ComponentCore;
import org.eclipse.wst.common.componentcore.ModuleCoreNature;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.componentcore.resources.IVirtualFolder;
import org.eclipse.wst.common.componentcore.resources.IVirtualReference;
import org.eclipse.wst.common.componentcore.resources.IVirtualResource;
import org.eclipse.wst.common.frameworks.datamodel.DataModelFactory;
@@ -61,8 +61,6 @@
import org.eclipse.wst.common.project.facet.core.IFacetedProject.Action;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
@@ -75,26 +73,13 @@
@SuppressWarnings("restriction")
class WebProjectConfiguratorDelegate extends AbstractProjectConfiguratorDelegate {
- private static final Logger LOG = LoggerFactory.getLogger(WebProjectConfiguratorDelegate.class);
+ //private static final Logger LOG = LoggerFactory.getLogger(WebProjectConfiguratorDelegate.class);
/**
* See http://wiki.eclipse.org/ClasspathEntriesPublishExportSupport
*/
static final IClasspathAttribute DEPENDENCY_ATTRIBUTE = JavaCore.newClasspathAttribute(
IClasspathDependencyConstants.CLASSPATH_COMPONENT_DEPENDENCY, "/WEB-INF/lib"); //$NON-NLS-1$
- private static final String CLASSPATH_ARCHIVENAME_ATTRIBUTE;
-
- static {
- String archiveNameAttribute = null;
- try {
- Field classpathArchiveNameField = IClasspathDependencyConstants.class.getField("CLASSPATH_ARCHIVENAME_ATTRIBUTE"); //$NON-NLS-1$
- archiveNameAttribute = (String)classpathArchiveNameField.get(null);
- } catch (Exception e) {
- LOG.warn(Messages.WebProjectConfiguratorDelegate_Renamed_Dependencies_Will_Be_Copied);
- }
- CLASSPATH_ARCHIVENAME_ATTRIBUTE = archiveNameAttribute;
- }
-
/**
* Name of maven property that overrides WTP context root.
*/
@@ -172,12 +157,16 @@
component = ComponentCore.createComponent(project, true);
if(component != null) {
+ IVirtualFolder rootFolder = component.getRootFolder();
IPath warPath = new Path("/").append(contentFolder.getProjectRelativePath()); //$NON-NLS-1$
- List<IPath> sourcePaths = new ArrayList<IPath>();
- sourcePaths.add(warPath);
- if (!WTPProjectsUtil.hasLink(project, ROOT_PATH, warPath, monitor)) {
+ boolean warPathExists = WTPProjectsUtil.hasLink(project, ROOT_PATH, warPath, monitor);
+ if (!warPathExists) {
component.getRootFolder().createLink(warPath, IVirtualResource.NONE, monitor);
}
+ IPath currentDefaultLocation = J2EEModuleVirtualComponent.getDefaultDeploymentDescriptorFolder(rootFolder);
+ if (currentDefaultLocation == null) {
+ WTPProjectsUtil.setDefaultDeploymentDescriptorFolder(rootFolder , warPath, monitor);
+ }
//MECLIPSEWTP-22 support web filtered resources. Filtered resources directory must be declared BEFORE
//the regular web source directory. First resources discovered take precedence on deployment
IPath filteredFolder = new Path("/").append(WebResourceFilteringConfiguration.getTargetFolder(mavenProject, project)); //$NON-NLS-1$
@@ -193,18 +182,14 @@
mavenMarkerManager.addMarker(project, MavenWtpConstants.WTP_MARKER_CONFIGURATION_ERROR_ID,
Messages.markers_mavenarchiver_output_settings_ignored_warning, -1, IMarker.SEVERITY_WARNING);
}
- sourcePaths.add(filteredFolder);
- WTPProjectsUtil.insertLinkBefore(project, filteredFolder, warPath, new Path("/"), monitor); //$NON-NLS-1$
+ if (!WTPProjectsUtil.hasLink(project, ROOT_PATH, filteredFolder, monitor)) {
+ WTPProjectsUtil.insertLinkBefore(project, filteredFolder, warPath, ROOT_PATH, monitor);
+ }
} else {
component.getRootFolder().removeLink(filteredFolder,IVirtualResource.NONE, monitor);
}
- WTPProjectsUtil.deleteLinks(project, ROOT_PATH, sourcePaths, monitor);
-
- WTPProjectsUtil.setDefaultDeploymentDescriptorFolder(component.getRootFolder(), warPath, monitor);
-
addComponentExclusionPatterns(component, config);
-
}
WTPProjectsUtil.removeWTPClasspathContainer(project);
@@ -358,7 +343,7 @@
descriptor.setClasspathAttribute(NONDEPENDENCY_ATTRIBUTE.getName(), NONDEPENDENCY_ATTRIBUTE.getValue());
continue;
}
- descriptor.getClasspathAttributes().put(CLASSPATH_ARCHIVENAME_ATTRIBUTE, deployedName);
+ descriptor.getClasspathAttributes().put(IClasspathDependencyConstants.CLASSPATH_ARCHIVENAME_ATTRIBUTE, deployedName);
}
}