[194919] JSF facet removes existing Faces Servlet mappings
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDelegate.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDelegate.java
index b068f66..99c481e 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDelegate.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDelegate.java
@@ -294,11 +294,11 @@
// create or update servlet ref
Servlet servlet = JSFUtils12.findJSFServlet(webApp);// check to see
// if already
- // present
- if (servlet != null) {
- // remove old mappings
- JSFUtils12.removeURLMappings(webApp, servlet);
- }
+// No longer removing any old mappings on install - see 194919 // present
+// if (servlet != null) {
+// // remove old mappings
+// JSFUtils12.removeURLMappings(webApp, servlet);
+// }
servlet = JSFUtils12
.createOrUpdateServletRef(webApp, config, servlet);
@@ -326,10 +326,12 @@
org.eclipse.jst.j2ee.webapplication.Servlet servlet = JSFUtils11.findJSFServlet(webApp);// check to see
// if already
// present
- if (servlet != null) {
- // remove old mappings
- JSFUtils11.removeURLMappings(webApp, servlet);
- }
+
+// No longer removing any old mappings on install - see 194919
+// if (servlet != null) {
+// // remove old mappings
+// JSFUtils11.removeURLMappings(webApp, servlet);
+// }
servlet = JSFUtils11
.createOrUpdateServletRef(webApp, config, servlet);
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils11.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils11.java
index 3bb373b..4660bc6 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils11.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils11.java
@@ -214,16 +214,38 @@
Iterator it = urlMappingList.iterator();
while (it.hasNext()) {
String pattern = (String) it.next();
- ServletMapping mapping = WebapplicationFactory.eINSTANCE
- .createServletMapping();
- mapping.setServlet(servlet);
- mapping.setName(servlet.getServletName());
- mapping.setUrlPattern(pattern);
- webApp.getServletMappings().add(mapping);
+ if (!(doesServletMappingExist(webApp, servlet, pattern))){
+ ServletMapping mapping = WebapplicationFactory.eINSTANCE
+ .createServletMapping();
+ mapping.setServlet(servlet);
+ mapping.setName(servlet.getServletName());
+ mapping.setUrlPattern(pattern);
+ webApp.getServletMappings().add(mapping);
+ }
}
}
+ private static boolean doesServletMappingExist(final WebApp webApp, final Servlet servlet,
+ final String pattern) {
+
+ List mappings = webApp.getServletMappings();
+ String servletName = servlet.getServletName();
+ if (servletName != null) {
+ for (int i=mappings.size()-1;i>=0;--i){
+ ServletMapping mapping = (ServletMapping)mappings.get(i);
+ if (mapping != null &&
+ mapping.getServlet() != null &&
+ mapping.getServlet().getServletName() != null &&
+ mapping.getServlet().getServletName().equals(servletName) &&
+ mapping.getUrlPattern().equals(pattern)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
/**
* Removes servlet-mappings for servlet using servlet-name.
* @param webApp
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils12.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils12.java
index f288729..192c141 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils12.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils12.java
@@ -175,20 +175,43 @@
Servlet servlet) {
if (urlMappingList.size() > 0) {
- ServletMapping mapping = WebFactory.eINSTANCE.createServletMapping();
- mapping.setServletName(servlet.getServletName());
- webApp.getServletMappings().add(mapping);
+ ServletMapping mapping = findServletMapping(webApp, servlet);
+ if (mapping == null){
+ mapping = WebFactory.eINSTANCE.createServletMapping();
+ mapping.setServletName(servlet.getServletName());
+ webApp.getServletMappings().add(mapping);
+ }
// Add patterns
Iterator it = urlMappingList.iterator();
while (it.hasNext()) {
String pattern = (String) it.next();
- UrlPatternType urlPattern = JavaeeFactory.eINSTANCE.createUrlPatternType();
- urlPattern.setValue(pattern);
- mapping.getUrlPatterns().add(urlPattern);
+ if (!(doesServletMappingPatternExist(webApp, mapping, pattern))){
+ UrlPatternType urlPattern = JavaeeFactory.eINSTANCE.createUrlPatternType();
+ urlPattern.setValue(pattern);
+ mapping.getUrlPatterns().add(urlPattern);
+ }
}
}
}
+ private static ServletMapping findServletMapping(final WebApp webApp, final Servlet servlet) {
+ for (Iterator it=webApp.getServletMappings().iterator();it.hasNext();){
+ ServletMapping mapping = (ServletMapping)it.next();
+ if (mapping.getServletName().equals(servlet.getServletName()))
+ return mapping;
+ }
+ return null;
+ }
+
+ private static boolean doesServletMappingPatternExist(final WebApp webApp, final ServletMapping mapping,
+ final String pattern) {
+ for (Iterator it=mapping.getUrlPatterns().iterator();it.hasNext();){
+ if(pattern.equals(((UrlPatternType)it.next()).getValue()))
+ return true;
+ }
+ return false;
+ }
+
/**
* Removes servlet-mappings for servlet using servlet-name for >= 2.5 WebModules.
* @param webApp