| /******************************************************************************* |
| * Copyright (c) 2010 Oracle Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Oracle Corporation - initial API and implementation and/or initial documentation |
| *******************************************************************************/ |
| |
| package org.eclipse.jst.jsf.core.internal.project.facet; |
| |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.jst.javaee.core.JavaeeFactory; |
| import org.eclipse.jst.javaee.core.ParamValue; |
| import org.eclipse.jst.javaee.core.UrlPatternType; |
| import org.eclipse.jst.javaee.web.Servlet; |
| import org.eclipse.jst.javaee.web.ServletMapping; |
| import org.eclipse.jst.javaee.web.WebApp; |
| import org.eclipse.jst.javaee.web.WebFactory; |
| |
| /** |
| * Web.xml access for JEE applications (web version 2.5 and above) |
| */ |
| public class JEEUtils { |
| /** |
| * Finds and returns a Servlet definition, or null if servlet is not defined. |
| * |
| * @param webApp |
| * @param servletName |
| * @return Servlet or null |
| */ |
| public static Servlet findServlet(final WebApp webApp, String servletName) |
| { |
| if (webApp == null) |
| { |
| return null; |
| } |
| |
| for (final Servlet servlet : webApp.getServlets()) |
| { |
| if (servlet != null && |
| servlet.getServletClass() != null |
| && servlet.getServletClass().trim().equals(servletName)) |
| { |
| return servlet; |
| } |
| } |
| |
| // if we get to here then we have finished the loop |
| // without finding the servlet we're looking for |
| return null; |
| } |
| |
| /** |
| * Creates servlet reference in WebApp if not present or updates servlet name if found |
| * using the passed configuration. |
| * |
| * @param webApp |
| * @param displayName |
| * @param className |
| * @param servlet |
| * @return Servlet servlet - if passed servlet was null, will return created servlet |
| */ |
| public static Servlet createOrUpdateServletRef(final WebApp webApp, |
| String displayName, String className, Servlet servlet) { |
| |
| if (servlet == null){ |
| // Create the servlet instance and set up the parameters from data |
| // model |
| servlet = WebFactory.eINSTANCE.createServlet(); |
| servlet.setServletName(displayName); |
| servlet.setServletClass(className); |
| servlet.setLoadOnStartup(Integer.valueOf(1)); |
| // Add the servlet to the web application model |
| webApp.getServlets().add(servlet); |
| |
| } else { |
| updateServletMappings(webApp, servlet, displayName); |
| servlet.setServletName(displayName); |
| servlet.setLoadOnStartup(Integer.valueOf(1)); |
| } |
| return servlet; |
| } |
| |
| /** |
| * Updates servlet mapping |
| * |
| * @param webApp |
| * @param servlet |
| * @param displayName |
| */ |
| public static void updateServletMappings(final WebApp webApp, |
| final Servlet servlet, final String displayName) |
| { |
| // update mappings for new name |
| ServletMapping mapping = findServletMapping(webApp, servlet); |
| if (mapping != null) |
| { |
| mapping.setServletName(displayName); |
| } |
| } |
| |
| /** |
| * Finds mapping for given servlet |
| * |
| * @param webApp |
| * @param servlet |
| * @return List of mappings |
| */ |
| public 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() != null && |
| servlet.getServletName() != null && |
| mapping.getServletName().trim().equals(servlet.getServletName().trim())) |
| return mapping; |
| } |
| return null; |
| } |
| |
| /** |
| * Creates servlet-mappings for the servlet for 2.5 WebModules or greated |
| * |
| * @param webApp |
| * @param urlMappingList |
| * - list of string values to be used in url-pattern for |
| * servlet-mapping |
| * @param servlet |
| */ |
| public static void setUpURLMappings(final WebApp webApp, |
| final List<String> urlMappingList, final Servlet servlet) |
| { |
| |
| if (urlMappingList.size() > 0) |
| { |
| ServletMapping mapping = findServletMapping(webApp, servlet); |
| if (mapping == null) |
| { |
| mapping = WebFactory.eINSTANCE |
| .createServletMapping(); |
| mapping.setServletName(servlet.getServletName()); |
| webApp.getServletMappings().add(mapping); |
| } |
| // Add patterns |
| for (final String pattern : urlMappingList) |
| { |
| if (!(doesServletMappingPatternExist(webApp, servlet, pattern))) |
| { |
| UrlPatternType urlPattern = JavaeeFactory.eINSTANCE |
| .createUrlPatternType(); |
| urlPattern.setValue(pattern); |
| mapping.getUrlPatterns().add(urlPattern); |
| } |
| } |
| } |
| } |
| |
| /** |
| * Checks whether given mapping exists for the given servlet |
| * @param webApp |
| * @param servlet |
| * @param pattern |
| * @return true or false |
| */ |
| public static boolean doesServletMappingPatternExist(final WebApp webApp, |
| final Servlet servlet, final String pattern) |
| { |
| List<ServletMapping> mappings = webApp.getServletMappings(); |
| String servletName = servlet.getServletName(); |
| if (servletName != null) |
| { |
| servletName = servletName.trim(); |
| for (final ServletMapping mapping : mappings) |
| { |
| if (mapping != null && |
| mapping.getServletName() != null && |
| servletName.equals(mapping.getServletName().trim())) |
| { |
| for (final UrlPatternType urlPattern : mapping.getUrlPatterns()) |
| { |
| String patternTypeValue = urlPattern.getValue(); |
| if (patternTypeValue != null |
| && pattern.equals(patternTypeValue.trim())) |
| return true; |
| } |
| } |
| } |
| } |
| return false; |
| } |
| |
| /** |
| * Removes servlet-mappings for servlet using servlet-name for >= 2.5 WebModules. |
| * @param webApp |
| * @param servlet |
| */ |
| public static void removeURLMappings(final WebApp webApp, final Servlet servlet) { |
| List mappings = webApp.getServletMappings(); |
| String servletName = servlet.getServletName(); |
| if (servletName != null) { |
| servletName = servletName.trim(); |
| for (int i=mappings.size()-1;i>=0;--i){ |
| ServletMapping mapping = (ServletMapping)mappings.get(i); |
| if (mapping != null && |
| mapping.getServletName() != null && |
| mapping.getServletName().trim() |
| .equals(servletName)) { |
| mappings.remove(mapping); |
| } |
| } |
| } |
| } |
| |
| /** |
| * Removes servlet definition |
| * @param webApp |
| * @param servlet |
| */ |
| public static void removeServlet(final WebApp webApp, final Servlet servlet) { |
| webApp.getServlets().remove(servlet); |
| } |
| |
| /** |
| * Removes context-param |
| * @param webApp |
| * @param paramName |
| */ |
| public static void removeContextParam(final WebApp webApp, String paramName) { |
| Iterator it = webApp.getContextParams().iterator(); |
| while (it.hasNext()) { |
| ParamValue cp = (ParamValue) it.next(); |
| if (cp.getParamName().equals(paramName)) { |
| webApp.getContextParams().remove(cp); |
| break; |
| } |
| } |
| } |
| |
| /** |
| * Creates or updates context-param |
| * @param webApp |
| * @param paramName |
| * @param paramValue |
| */ |
| public static void setupContextParam(final WebApp webApp, String paramName, String paramValue) { |
| // if not default name and location, then add context param |
| ParamValue foundCP = null; |
| ParamValue cp = null; |
| boolean found = false; |
| // check to see if present |
| Iterator it = webApp.getContextParams().iterator(); |
| while (it.hasNext()) { |
| cp = (org.eclipse.jst.javaee.core.ParamValue) it.next(); |
| if (cp != null && |
| cp.getParamName()!= null && |
| cp.getParamName().trim().equals(paramName)) { |
| foundCP = cp; |
| found = true; |
| } |
| } |
| if (!found) { |
| ParamValue pv = JavaeeFactory.eINSTANCE.createParamValue(); |
| pv.setParamName(paramName); |
| pv.setParamValue(paramValue); |
| webApp.getContextParams().add(pv); |
| } else { |
| cp = foundCP; |
| if (cp.getParamValue().indexOf(paramValue) < 0) { |
| String curVal = cp.getParamValue(); |
| String val = paramValue; |
| if (curVal != null && !"".equals(curVal.trim())) { //$NON-NLS-1$ |
| val = curVal + ",\n" + val; //$NON-NLS-1$ |
| } |
| cp.setParamValue(val); |
| } |
| } |
| } |
| |
| /** |
| * @param webApp |
| * @param paramName |
| * @return context-param value or null if context-param is not found |
| */ |
| public static String getContextParam(final WebApp webApp, String paramName) |
| { |
| for (Iterator it = webApp.getContextParams().iterator(); it.hasNext();) |
| { |
| ParamValue cp = (ParamValue) it.next(); |
| if (cp != null && |
| cp.getParamName()!= null && |
| cp.getParamName().trim().equals(paramName)) { |
| return cp.getParamValue(); |
| } |
| } |
| return null; |
| } |
| |
| /** |
| * @param map |
| * @return extension from map. Will return null if file extension not found in url patterns. |
| */ |
| public static String getFileExtensionFromMap(final ServletMapping map) { |
| List urls = map.getUrlPatterns(); |
| for (Iterator it=urls.iterator();it.hasNext();){ |
| IPath extPath = new Path(((UrlPatternType)it.next()).getValue()); |
| if (extPath != null){ |
| String ext = extPath.getFileExtension(); |
| if (ext != null && !ext.equals("")) //$NON-NLS-1$ |
| return ext; |
| } |
| } |
| return null; |
| } |
| |
| /** |
| * @param map |
| * @return prefix mapping |
| */ |
| public static String getPrefixMapping(final ServletMapping map) { |
| List urls = map.getUrlPatterns(); |
| for (Iterator it=urls.iterator();it.hasNext();){ |
| IPath extPath = new Path(((UrlPatternType)it.next()).getValue()); |
| if (extPath != null){ |
| String ext = extPath.getFileExtension(); |
| if (ext == null){ |
| String lastSeg = extPath.lastSegment(); |
| if (lastSeg.equals("*")) //$NON-NLS-1$ |
| { |
| return extPath.removeLastSegments(1).toString(); |
| } |
| |
| return extPath.toString(); |
| } |
| } |
| } |
| return null; |
| } |
| } |