[jbosstools-commits] JBoss Tools SVN: r30820 - in trunk/maven/plugins: org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui and 1 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Mon Apr 25 15:00:36 EDT 2011


Author: snjeza
Date: 2011-04-25 15:00:35 -0400 (Mon, 25 Apr 2011)
New Revision: 30820

Modified:
   trunk/maven/plugins/org.jboss.tools.maven.jsf/src/org/jboss/tools/maven/jsf/configurators/JSFProjectConfigurator.java
   trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/Activator.java
   trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/Messages.java
   trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/messages.properties
   trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/preferences/ConfiguratorPreferencePage.java
   trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/preferences/ConfiguratorPreferencesInitializer.java
Log:
JBIDE-8687 JSF tooling adds an Faces Servlet declaration with no servlet mappings on project import

Modified: trunk/maven/plugins/org.jboss.tools.maven.jsf/src/org/jboss/tools/maven/jsf/configurators/JSFProjectConfigurator.java
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.jsf/src/org/jboss/tools/maven/jsf/configurators/JSFProjectConfigurator.java	2011-04-25 18:59:58 UTC (rev 30819)
+++ trunk/maven/plugins/org.jboss.tools.maven.jsf/src/org/jboss/tools/maven/jsf/configurators/JSFProjectConfigurator.java	2011-04-25 19:00:35 UTC (rev 30820)
@@ -10,10 +10,18 @@
  ******************************************************************************/
 package org.jboss.tools.maven.jsf.configurators;
 
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.maven.model.Plugin;
 import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.m2e.core.project.IMavenProjectFacade;
 import org.eclipse.m2e.core.project.MavenProjectChangedEvent;
@@ -25,6 +33,9 @@
 import org.eclipse.wst.common.project.facet.core.IProjectFacet;
 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
 import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
+import org.eclipse.wst.sse.core.StructuredModelManager;
+import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
 import org.jboss.tools.maven.core.IJBossMavenConstants;
 import org.jboss.tools.maven.core.internal.project.facet.MavenFacetInstallDataModelProvider;
 import org.jboss.tools.maven.jsf.MavenJSFActivator;
@@ -42,6 +53,9 @@
 	private static final String JSF_API2_GROUP_ID = "com.sun.faces"; //$NON-NLS-1$
 	private static final String JSF_API_ARTIFACT_ID = "jsf-api"; //$NON-NLS-1$
 	
+	private static final String WEB_XML = "WEB-INF/web.xml";
+	private static final String WAR_SOURCE_FOLDER = "/src/main/webapp";
+
 	protected static final IProjectFacet dynamicWebFacet;
 	protected static final IProjectFacetVersion dynamicWebVersion;
 	
@@ -84,7 +98,7 @@
 	    if (jsfVersion != null) {
 	    	final IFacetedProject fproj = ProjectFacetsManager.create(project);
 	    	if (fproj != null && "war".equals(packaging)) { //$NON-NLS-1$
-	    		installWarFacets(fproj, jsfVersion, monitor);
+	    		installWarFacets(fproj, jsfVersion, mavenProject, monitor);
 	    	}
 	    }
 	}
@@ -117,18 +131,22 @@
 	}
 
 	
-	private void installWarFacets(IFacetedProject fproj, String jsfVersion,IProgressMonitor monitor) throws CoreException {
+	private void installWarFacets(IFacetedProject fproj, 
+			String jsfVersion, MavenProject mavenProject,
+			IProgressMonitor monitor) throws CoreException {
 		
 		if (!fproj.hasProjectFacet(dynamicWebFacet)) {
 			Activator.log(Messages.JSFProjectConfigurator_The_project_does_not_contain_the_Web_Module_facet);
 		}
-		installJSFFacet(fproj, jsfVersion, monitor);
+		installJSFFacet(fproj, jsfVersion, mavenProject, monitor);
 		installM2Facet(fproj, monitor);
 		
 	}
 
 
-	private void installJSFFacet(IFacetedProject fproj, String jsfVersionString, IProgressMonitor monitor)
+	private void installJSFFacet(IFacetedProject fproj, 
+			String jsfVersionString, MavenProject mavenProject,
+			IProgressMonitor monitor)
 			throws CoreException {
 		if (!fproj.hasProjectFacet(jsfFacet)) {
 			if (jsfVersionString.startsWith("1.1")) { //$NON-NLS-1$
@@ -140,12 +158,132 @@
 				fproj.installProjectFacet(jsfVersion12, model, monitor);	
 			}
 			if (jsfVersionString.startsWith("2.0")) { //$NON-NLS-1$
+				String webXmlString = null;
+				IFile webXml = null;
+				webXml = getWebXml(fproj, mavenProject);
+				boolean webXmlExists = webXml != null && webXml.exists();
+				if (!configureWebxml() && webXmlExists) {
+					IStructuredModel webXmlModel = null;
+					try {
+						webXmlModel = StructuredModelManager.getModelManager().getModelForRead(webXml);
+						IStructuredDocument doc = webXmlModel.getStructuredDocument();
+						webXmlString = doc.get();
+					} catch (IOException e) {
+						MavenJSFActivator.log(e);
+					} finally {
+						if (webXmlModel != null) {
+							webXmlModel.releaseFromRead();
+						}
+					}
+				}
 				IDataModel model = MavenJSFActivator.getDefault().createJSFDataModel(fproj,jsfVersion20);
-				fproj.installProjectFacet(jsfVersion20, model, monitor);	
+				fproj.installProjectFacet(jsfVersion20, model, monitor);
+				if (!configureWebxml() && webXmlExists && webXmlString != null) {
+					IStructuredModel webXmlModel = null;
+					try {
+						webXmlModel = StructuredModelManager.getModelManager().getModelForEdit(webXml);
+						IStructuredDocument doc = webXmlModel.getStructuredDocument();
+						doc.set(webXmlString);
+						webXmlModel.save();
+					} catch (IOException e) {
+						MavenJSFActivator.log(e);
+					} finally {
+						if (webXmlModel != null) {
+							webXmlModel.releaseFromEdit();
+						}
+					}
+				}
 			}
 		}
 	}
 	
+	private IFile getWebXml(IFacetedProject fproj, MavenProject mavenProject) {
+		IFile webXml;
+		String customWebXml = getCustomWebXml(mavenProject,
+				fproj.getProject());
+		if (customWebXml == null) {
+			webXml = fproj.getProject().getFolder(getWarSourceDirectory(mavenProject,fproj.getProject())).getFile(WEB_XML);
+		} else {
+			webXml = fproj.getProject().getFile(customWebXml);
+		}
+		return webXml;
+	}
+
+	private String getWarSourceDirectory(MavenProject mavenProject,
+			IProject project) {
+		Plugin plugin = mavenProject
+				.getPlugin("org.apache.maven.plugins:maven-war-plugin");
+		if (plugin == null) {
+			return null;
+		}
+		Xpp3Dom config = (Xpp3Dom) plugin.getConfiguration();
+		if (config == null) {
+			return WAR_SOURCE_FOLDER;
+		}
+		Xpp3Dom[] warSourceDirectory = config.getChildren("warSourceDirectory");
+		if (warSourceDirectory != null && warSourceDirectory.length > 0) {
+			String dir = warSourceDirectory[0].getValue();
+			if (project != null) {
+				return tryProjectRelativePath(project, dir).toOSString();
+			}
+			return dir;
+		}
+		return WAR_SOURCE_FOLDER;
+	}
+
+	private IPath tryProjectRelativePath(IProject project,
+			String resourceLocation) {
+		if (resourceLocation == null) {
+			return null;
+		}
+		IPath projectLocation = project.getLocation();
+		IPath directory = Path.fromOSString(resourceLocation);
+		if (projectLocation == null || !projectLocation.isPrefixOf(directory)) {
+			return directory;
+		}
+		return directory.removeFirstSegments(projectLocation.segmentCount())
+				.makeRelative().setDevice(null);
+	}
+	
+
+	public String getCustomWebXml(MavenProject mavenProject, IProject project) {
+		Plugin plugin = mavenProject
+				.getPlugin("org.apache.maven.plugins:maven-war-plugin");
+		if (plugin == null) {
+			return null;
+		}
+		Xpp3Dom config = (Xpp3Dom) plugin.getConfiguration();
+		if (config != null) {
+			Xpp3Dom webXmlDom = config.getChild("webXml");
+			if (webXmlDom != null && webXmlDom.getValue() != null) {
+				String webXmlFile = webXmlDom.getValue().trim();
+				webXmlFile = getRelativePath(project, webXmlFile);
+				return webXmlFile;
+			}
+		}
+		return null;
+	}
+
+	private static String getRelativePath(IProject project, String absolutePath) {
+		File basedir = project.getLocation().toFile();
+		String relative;
+		if (absolutePath.equals(basedir.getAbsolutePath())) {
+			relative = ".";
+		} else if (absolutePath.startsWith(basedir.getAbsolutePath())) {
+			relative = absolutePath.substring(basedir.getAbsolutePath()
+					.length() + 1);
+		} else {
+			relative = absolutePath;
+		}
+		return relative.replace('\\', '/'); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	private boolean configureWebxml() {
+		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
+		return store.getBoolean(Activator.CONFIGURE_WEBXML_JSF20);
+	}
+
+
 	private String getJSFVersion(MavenProject mavenProject) {
 		String version = null;
 		version = Activator.getDefault().getDependencyVersion(mavenProject, JSF_API_GROUP_ID, JSF_API_ARTIFACT_ID);

Modified: trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/Activator.java
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/Activator.java	2011-04-25 18:59:58 UTC (rev 30819)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/Activator.java	2011-04-25 19:00:35 UTC (rev 30820)
@@ -46,6 +46,10 @@
 	public static final String CONFIGURE_JSF = "configureJSF"; //$NON-NLS-1$
 	
 	public static final boolean CONFIGURE_JSF_VALUE = true;
+	
+	public static final String CONFIGURE_WEBXML_JSF20 = "configureWebxmlJSF20"; //$NON-NLS-1$
+	
+	public static final boolean CONFIGURE_WEBXML_JSF20_VALUE = false;
 
 	public static final boolean CONFIGURE_PORTLET_VALUE = true;
 

Modified: trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/Messages.java
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/Messages.java	2011-04-25 18:59:58 UTC (rev 30819)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/Messages.java	2011-04-25 19:00:35 UTC (rev 30820)
@@ -19,6 +19,7 @@
  */
 public class Messages extends NLS {
 	private static final String BUNDLE_NAME = "org.jboss.tools.maven.ui.messages"; //$NON-NLS-1$
+	public static String ConfiguratorPreferencePage_Configure_Webxml_JSF20;
 	public static String AutoResizeTableLayout_Unknown_column_layout_data;
 	public static String MavenFacetInstallPage_Add_M2_capabilities_to_this_Web_Project;
 	public static String MavenFacetInstallPage_Artifact_Id;

Modified: trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/messages.properties
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/messages.properties	2011-04-25 18:59:58 UTC (rev 30819)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/messages.properties	2011-04-25 19:00:35 UTC (rev 30820)
@@ -26,6 +26,7 @@
 ConfiguratorPreferencePage_Configure_JBoss_Portlet_Core_facet=JBoss Portlet Core facet
 ConfiguratorPreferencePage_Configure_JBoss_Seam_Portlet_facet=JBoss Seam Portlet facet
 ConfiguratorPreferencePage_Configure_JSF_facet=JSF facet
+ConfiguratorPreferencePage_Configure_Webxml_JSF20=web.xml for JSF 2.0 facet
 ConfiguratorPreferencePage_Configure_CDI_facet=CDI facet
 ConfiguratorPreferencePage_Configure_Hibernate=Hibernate
 ConfiguratorPreferencePage_Configure_Seam_Artifacts=Seam Artifacts (view folder, model source folder, package ...)

Modified: trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/preferences/ConfiguratorPreferencePage.java
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/preferences/ConfiguratorPreferencePage.java	2011-04-25 18:59:58 UTC (rev 30819)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/preferences/ConfiguratorPreferencePage.java	2011-04-25 19:00:35 UTC (rev 30820)
@@ -46,6 +46,7 @@
 	private Button configureSeamRuntimeButton;
 	private Button configureSeamArtifactsButton;
 	private Button configureJSFButton;
+	private Button configureWebxmlJSF20Button;
 	private Button configurePortletButton;
 	private Button configureJSFPortletButton;
 	private Button configureSeamPortletButton;
@@ -98,6 +99,11 @@
 			configureJSFButton.setText(Messages.ConfiguratorPreferencePage_Configure_JSF_facet);
 			boolean configureJSF = store.getBoolean(Activator.CONFIGURE_JSF);
 			configureJSFButton.setSelection(configureJSF);
+			
+			configureWebxmlJSF20Button = new Button(composite,SWT.CHECK);
+			configureWebxmlJSF20Button.setText(Messages.ConfiguratorPreferencePage_Configure_Webxml_JSF20);
+			boolean configureWebxml = store.getBoolean(Activator.CONFIGURE_WEBXML_JSF20);
+			configureWebxmlJSF20Button.setSelection(configureWebxml);
 		}
 		
 		if (bundleExists(ORG_JBOSS_TOOLS_MAVEN_PORTLET)) { 
@@ -147,6 +153,7 @@
 	protected void performDefaults() {
 		if (bundleExists(ORG_JBOSS_TOOLS_MAVEN_JSF)) { 
 			configureJSFButton.setSelection(Activator.CONFIGURE_JSF_VALUE);
+			configureWebxmlJSF20Button.setSelection(Activator.CONFIGURE_WEBXML_JSF20_VALUE);
 		}
 		if (bundleExists(ORG_JBOSS_TOOLS_MAVEN_SEAM)) { 
 			configureSeamButton.setSelection(Activator.CONFIGURE_SEAM_VALUE);
@@ -204,6 +211,7 @@
 		IPreferenceStore store = Activator.getDefault().getPreferenceStore();
 		if (bundleExists(ORG_JBOSS_TOOLS_MAVEN_JSF)) { 
 			store.setValue(Activator.CONFIGURE_JSF, configureJSFButton.getSelection());
+			store.setValue(Activator.CONFIGURE_WEBXML_JSF20, configureWebxmlJSF20Button.getSelection());
 		}
 		
 		if (bundleExists(ORG_JBOSS_TOOLS_MAVEN_PORTLET)) {

Modified: trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/preferences/ConfiguratorPreferencesInitializer.java
===================================================================
--- trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/preferences/ConfiguratorPreferencesInitializer.java	2011-04-25 18:59:58 UTC (rev 30819)
+++ trunk/maven/plugins/org.jboss.tools.maven.ui/src/org/jboss/tools/maven/ui/preferences/ConfiguratorPreferencesInitializer.java	2011-04-25 19:00:35 UTC (rev 30820)
@@ -40,6 +40,9 @@
 				Activator.CONFIGURE_JSF,
 				Activator.CONFIGURE_JSF_VALUE);
 		node.putBoolean(
+				Activator.CONFIGURE_WEBXML_JSF20,
+				Activator.CONFIGURE_WEBXML_JSF20_VALUE);
+		node.putBoolean(
 				Activator.CONFIGURE_PORTLET,
 				Activator.CONFIGURE_PORTLET_VALUE);
 		node.putBoolean(



More information about the jbosstools-commits mailing list