500384: fix support for m-w-p 3.0.0

Change-Id: I4b4d57a06842c313c8b4acf396e54fe9b3bac8d9
Signed-off-by: Fred Bricon <fbricon@gmail.com>
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WarPluginConfiguration.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WarPluginConfiguration.java
index 9e5504b..d143d04 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WarPluginConfiguration.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/WarPluginConfiguration.java
@@ -14,6 +14,8 @@
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.war.Overlay;
 import org.apache.maven.plugin.war.overlay.InvalidOverlayConfigurationException;
@@ -72,11 +74,14 @@
   
   private static final String FAIL_ON_MISSING_WEB_XML = "failOnMissingWebXml";
   
+  
   //Keep backward compat with WTP < Kepler
   private static final IProjectFacetVersion WEB_31 = WebFacetUtils.WEB_FACET.hasVersion(WEB_3_1_TEXT)?
                                                               WebFacetUtils.WEB_FACET.getVersion(WEB_3_1_TEXT)
                                                              :WebFacetUtils.WEB_30;
   
+  private boolean defaultFailOnMissingWebXml = true; 
+  
   private IProject project;
   
   private MavenProject mavenProject;
@@ -86,6 +91,15 @@
     this.mavenProject = mavenProject;
     Plugin plugin = getPlugin();
     if (plugin != null) {
+    	try {
+        	VersionRange war_3_0_0 = VersionRange.createFromVersionSpec("[3.0.0,)"); //$NON-NLS-1$
+        	if(war_3_0_0.containsVersion(new DefaultArtifactVersion(plugin.getVersion()))) {
+        		defaultFailOnMissingWebXml = false;
+        	}
+        } catch(Exception ex) {
+            //Can't happen
+        }
+    	
     	setConfiguration((Xpp3Dom)plugin.getConfiguration());
     }
   }
@@ -409,7 +423,7 @@
   
   public boolean isFailOnMissingWebXml() {
     Xpp3Dom config = getConfiguration();
-    boolean failOnMissingWebXml = true;
+    boolean failOnMissingWebXml = defaultFailOnMissingWebXml;
     String fail = null;
     if (config != null) {
       fail = DomUtils.getChildValue(config, FAIL_ON_MISSING_WEB_XML); //$NON-NLS-1$
diff --git a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/conversion/WebProjectConverter.java b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/conversion/WebProjectConverter.java
index 4378bc1..15f4b83 100644
--- a/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/conversion/WebProjectConverter.java
+++ b/org.eclipse.m2e.wtp/src/org/eclipse/m2e/wtp/internal/conversion/WebProjectConverter.java
@@ -10,6 +10,9 @@
 
 import static org.eclipse.m2e.wtp.internal.conversion.MavenPluginUtils.configure;
 
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Plugin;
@@ -69,15 +72,24 @@
       }
     }
     
-    //Set <failOnMissingWebXml>false</failOnMissingWebXml> for web > 2.4
-    IFacetedProject fProject = ProjectFacetsManager.create(component.getProject());
-    if (fProject != null) {
-      IProjectFacetVersion webVersion = fProject.getProjectFacetVersion(IJ2EEFacetConstants.DYNAMIC_WEB_FACET);
-      if (webVersion != null && webVersion.compareTo(IJ2EEFacetConstants.DYNAMIC_WEB_24) > 0) {
-        configure(warPlugin, FAIL_IF_MISSING_WEBXML_KEY, "false"); //$NON-NLS-1$
-        customized = true;
-      }
-    }
+    try {
+    	VersionRange mwp300 = VersionRange.createFromVersionSpec("[3.0.0,)");
+		if (mwp300.containsVersion(new DefaultArtifactVersion(warPluginVersion))){
+			customized = true;//we simply force adding the latest m-w-p without having to add failOnMissingWebXml
+		} else {
+			//Set <failOnMissingWebXml>false</failOnMissingWebXml> for web > 2.4
+			IFacetedProject fProject = ProjectFacetsManager.create(component.getProject());
+			if (fProject != null) {
+				IProjectFacetVersion webVersion = fProject.getProjectFacetVersion(IJ2EEFacetConstants.DYNAMIC_WEB_FACET);
+				if (webVersion != null && webVersion.compareTo(IJ2EEFacetConstants.DYNAMIC_WEB_24) > 0) {
+					configure(warPlugin, FAIL_IF_MISSING_WEBXML_KEY, "false"); //$NON-NLS-1$
+					customized = true;
+				}
+			}
+		}
+	} catch (InvalidVersionSpecificationException ex) {
+		//not possible
+	}
 
     if (customized) {
       model.setBuild(build);
@@ -99,7 +111,7 @@
 	 if(version != null) {
 	   return version;
 	 }
-	 return MavenPluginUtils.getMostRecentPluginVersion("org.apache.maven.plugins", "maven-war-plugin", "2.6"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	 return MavenPluginUtils.getMostRecentPluginVersion("org.apache.maven.plugins", "maven-war-plugin", "3.0.0"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
   }