[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