[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