diff options
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils.java')
-rw-r--r-- | jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils.java | 662 |
1 files changed, 0 insertions, 662 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils.java deleted file mode 100644 index f97050bfe..000000000 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFUtils.java +++ /dev/null @@ -1,662 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 Oracle Corporation. - * 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: - * Gerry Kessler - initial API and implementation - *******************************************************************************/ - -package org.eclipse.jst.jsf.core.internal.project.facet; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.emf.common.util.EList; -import org.eclipse.jst.j2ee.model.IModelProvider; -import org.eclipse.jst.javaee.web.WebAppVersionType; -import org.eclipse.jst.jsf.core.JSFVersion; -import org.eclipse.jst.jsf.core.internal.JSFCorePlugin; -import org.eclipse.jst.jsf.core.internal.Messages; -import org.eclipse.jst.jsf.core.internal.jsflibraryregistry.ArchiveFile; -import org.eclipse.jst.jsf.core.internal.jsflibraryregistry.JSFLibrary; -import org.eclipse.osgi.util.NLS; -import org.eclipse.wst.common.frameworks.datamodel.IDataModel; - - -/** - * - */ -@SuppressWarnings("deprecation") -public abstract class JSFUtils { - /** - * The default name for the Faces servlet - */ - public static final String JSF_DEFAULT_SERVLET_NAME = "Faces Servlet"; //$NON-NLS-1$ - /** - * The default name of the Faces servlet class - */ - public static final String JSF_SERVLET_CLASS = "javax.faces.webapp.FacesServlet"; //$NON-NLS-1$ - /** - * The name of the context parameter used for JSF configuration files - */ - public static final String JSF_CONFIG_CONTEXT_PARAM = "javax.faces.CONFIG_FILES"; //$NON-NLS-1$ - - /** - * The name of the context parameter used for defining the default JSP file extension - */ - public static final String JSF_DEFAULT_SUFFIX_CONTEXT_PARAM = "javax.faces.DEFAULT_SUFFIX"; //$NON-NLS-1$ - - /** - * The path to the default application configuration file - */ - public static final String JSF_DEFAULT_CONFIG_PATH = "/WEB-INF/faces-config.xml"; //$NON-NLS-1$ - - /** - * Default URL mapping to faces servlet - */ - public static final String JSF_DEFAULT_URL_MAPPING = "/faces/*"; //$NON-NLS-1$ - - /** - * the key for implementation libraries in persistent properties - */ - public static final String PP_JSF_IMPLEMENTATION_LIBRARIES = "jsf.implementation.libraries"; //$NON-NLS-1$ - /** - * the key for component libraries in persistent properties - */ - public static final String PP_JSF_COMPONENT_LIBRARIES = "jsf.component.libraries"; //$NON-NLS-1$ - /** - * the key for implementation type in persistent properties - */ - public static final String PP_JSF_IMPLEMENTATION_TYPE = "jsf.implementation.type"; //$NON-NLS-1$ - - private static final String DEFAULT_DEFAULT_MAPPING_SUFFIX = "jsp"; //$NON-NLS-1$ - - private final JSFVersion _version; - private final IModelProvider _modelProvider; - - /** - * @param version - * @param modelProvider - */ - protected JSFUtils(final JSFVersion version, final IModelProvider modelProvider) - { - _version = version; - _modelProvider = modelProvider; - } - - /** - * @return the jsf version that this instance is for. - */ - public final JSFVersion getVersion() - { - return _version; - } - - /** - * @param config - * @return servlet display name to use from wizard data model - */ - protected final String getDisplayName(IDataModel config) { - String displayName = config.getStringProperty(IJSFFacetInstallDataModelProperties.SERVLET_NAME); - if (displayName == null || displayName.trim().length() == 0) - displayName = JSF_DEFAULT_SERVLET_NAME; - return displayName.trim(); - } - - /** - * @param config - * @return servlet display name to use from wizard data model - */ - protected final String getServletClassname(IDataModel config) { - String className = config.getStringProperty(IJSFFacetInstallDataModelProperties.SERVLET_CLASSNAME); - if (className == null || className.trim().equals("")) //$NON-NLS-1$ - className = JSF_SERVLET_CLASS; - return className.trim(); - } - - /** - * @return IModelProvider - */ - public final IModelProvider getModelProvider() { - Object webAppObj = _modelProvider.getModelObject(); - if (webAppObj == null) - { - return null; - } - return _modelProvider; - } - - /** - * @param configPath - */ - public final void createConfigFile(IPath configPath) - { - FileOutputStream os = null; -// final String QUOTE = new String(new char[] { '"' }); - try { - IPath dirPath = configPath.removeLastSegments(1); - dirPath.toFile().mkdirs(); - File file = configPath.toFile(); - file.createNewFile(); - os = new FileOutputStream(file); - printConfigFile(os); - } catch (FileNotFoundException e) { - JSFCorePlugin.log(IStatus.ERROR, Messages.JSFUtils_ErrorCreatingConfigFile, e); - } catch (IOException e) { - JSFCorePlugin.log(IStatus.ERROR, Messages.JSFUtils_ErrorCreatingConfigFile, e); - } finally { - if (os != null) { - try { - os.close(); - } catch (IOException e) { - JSFCorePlugin.log(IStatus.ERROR, Messages.JSFUtils_ErrorClosingConfigFile, e); - } - } - } - } - - /** - * @param out - */ - protected final void printConfigFile(final OutputStream out) - { - PrintWriter pw = null; - try - { - pw = new PrintWriter(out); - doVersionSpecificConfigFile(pw); - } - finally - { - if (pw != null) - { - pw.close(); - } - } - } - - /** - * @param pw - */ - public abstract void doVersionSpecificConfigFile(final PrintWriter pw); - - - /** - * @param webAppObj - * @return true if this going into a JavaEE (1.5 and later) or a J2EE (1.4 and earlier) - * configured application. - */ - public boolean isJavaEE(final Object webAppObj) - { - if (webAppObj instanceof org.eclipse.jst.javaee.web.WebApp) - { - org.eclipse.jst.javaee.web.WebApp webApp = (org.eclipse.jst.javaee.web.WebApp)webAppObj; - return WebAppVersionType.VALUES.contains(webApp.getVersion()); - } - return false; - } - - /** - * @param config - * @return list of URL patterns from the datamodel - */ - protected final List<String> getServletMappings(final IDataModel config) { - final List<String> mappings = new ArrayList<String>(); - final String[] patterns = (String[])config.getProperty(IJSFFacetInstallDataModelProperties.SERVLET_URL_PATTERNS); - if (patterns != null) - { - for (final String pattern : patterns) - { - mappings.add(pattern); - } - } - return mappings; - } - /** - * Does an update of the web application's config file. - * - * @param webApp must be WebApp of the appropriate type. - * @param config - * @throws ClassCastException if webApp is not the appropriate type. - */ - public abstract void updateWebApp(Object webApp, IDataModel config); - - - /** - * Called on a facet uninstall to remove JSF related changes. - * @param webApp - */ - public abstract void rollbackWebApp(Object webApp); - - /** - * @param fileExtension - * @return true if the file extension is deemed to be for a JSF. - */ - protected boolean isValidKnownExtension(String fileExtension) { - //Bug 313830 - JSFUtils should use content type instead file extension in isValidKnownExtension. - List<String> validKnownExtensions = new ArrayList<String>(); - for (String contentTypeId: new String[]{ - "org.eclipse.jst.jsp.core.jspsource", //$NON-NLS-1$ - "org.eclipse.jst.jsp.core.jspfragmentsource", //$NON-NLS-1$ - "jsf.facelet"}) { //$NON-NLS-1$ - IContentType contentType = Platform.getContentTypeManager().getContentType(contentTypeId); - if (contentType != null) { - String[] contentTypeExts = contentType.getFileSpecs(IContentType.FILE_EXTENSION_SPEC); - if (contentTypeExts != null) { - validKnownExtensions.addAll(Arrays.asList(contentTypeExts)); - } - } - } - if (fileExtension != null) { - return validKnownExtensions.contains(fileExtension); - } - return false; - } - - - /** - * @param resource - * @return true if the resource is deemed to be a JSF page. - */ - protected boolean isJSFPage(IResource resource) { - // currently always return true. - // need to find quick way of determining whether this is a JSF JSP Page - return true; - } - - /** - * @param webApp - * @return the default file extension from the context param. Default is - * "jsp" if no context param. - */ - protected String getDefaultSuffix(Object webApp) { - String contextParam = null; - if(isJavaEE(webApp)) { - contextParam = JEEUtils.getContextParam((org.eclipse.jst.javaee.web.WebApp) webApp, JSF_DEFAULT_SUFFIX_CONTEXT_PARAM); - } - else { - contextParam = J2EEUtils.getContextParam((org.eclipse.jst.j2ee.webapplication.WebApp) webApp, JSF_DEFAULT_SUFFIX_CONTEXT_PARAM); - } - if(contextParam == null) { - return getDefaultDefaultSuffix(); - } - return normalizeSuffix(contextParam); - } - - /** - * @return the default value for the default mapping suffix - */ - protected String getDefaultDefaultSuffix() - { - return DEFAULT_DEFAULT_MAPPING_SUFFIX; - } - - /** - * @param name - * @param value - * @return the - */ - protected final String calculateSuffix(final String name, final String value) - { - if (name != null - && JSF_DEFAULT_SUFFIX_CONTEXT_PARAM.equals(name - .trim())) - { - return normalizeSuffix(value != null ? value.trim() : null); - } - return null; - } - - /** - * @param defSuffix - * @return the suffix value with any leading dot removed - */ - protected final String normalizeSuffix(String defSuffix) - { - if (defSuffix != null && defSuffix.startsWith(".")) //$NON-NLS-1$ - { - defSuffix = defSuffix.substring(1); - } - return defSuffix; - } - - /** - * Holds all the obsolete JSF Library stuff. This will go away post-Helios. - * @author cbateman - * - */ - public static class JSFLibraryHandler - { - /** - * Construct an array that hold paths for all JARs in a JSF library. - * - * @param jsfLib - * @param logMissingJar true to log an error for each invalid JAR. - * @return elements - */ - public final IPath[] getJARPathforJSFLib(JSFLibrary jsfLib, boolean logMissingJar) { - EList archiveFiles = jsfLib.getArchiveFiles(); - int numJars = archiveFiles.size(); - IPath[] elements = new IPath[numJars]; - ArchiveFile ar = null; - for (int i= 0; i < numJars; i++) { - ar = (ArchiveFile)archiveFiles.get(i); - if ( !ar.exists() && logMissingJar ) { - logErroronMissingJAR(jsfLib, ar); - } - elements[i] = new Path(((ArchiveFile)archiveFiles.get(i)).getResolvedSourceLocation()).makeAbsolute(); - } - return elements; - } - - private int numberofValidJar(EList archiveFiles) { - int total = 0; - final Iterator it = archiveFiles.iterator(); - ArchiveFile ar = null; - while(it.hasNext()) { - ar = (ArchiveFile) it.next(); - if (ar.exists()) { - total++; - } - } - return total; - } - - private void logErroronMissingJAR(JSFLibrary jsfLib, ArchiveFile ar) { - String msg = NLS.bind(Messages.JSFUtils_MissingJAR, - ar.getName(), - jsfLib.getLabel()); - JSFCorePlugin.log(IStatus.ERROR, msg); - } - - /** - * Construct an array that hold paths for all JARs in a JSF library. - * However, archive files that no longer exist are filtered out. - * - * @param jsfLib - * @param logMissingJar true to log an error for each invalid JAR. - * @return elements - */ - public final IPath[] getJARPathforJSFLibwFilterMissingJars(JSFLibrary jsfLib, boolean logMissingJar) { - EList archiveFiles = jsfLib.getArchiveFiles(); - int numJars = numberofValidJar(archiveFiles); - IPath[] elements = new IPath[numJars]; - ArchiveFile ar = null; - int idxValidJar = 0; - for (int i= 0; i < archiveFiles.size(); i++) { - ar = (ArchiveFile)archiveFiles.get(i); - if ( !ar.exists() ) { - if (logMissingJar) { - logErroronMissingJAR(jsfLib, ar); - } - } else { - elements[idxValidJar] = new Path(((ArchiveFile)archiveFiles.get(i)).getResolvedSourceLocation()).makeAbsolute(); - idxValidJar++; - } - } - return elements; - } - - } - - /** - * Finds and returns a JSF Servlet definition, or null if servlet is not defined. - * - * @param webApp - * @return Servlet or null - */ - protected Object findJSFServlet(Object webApp) { - if(isJavaEE(webApp)) { - return JEEUtils.findServlet((org.eclipse.jst.javaee.web.WebApp) webApp, JSF_SERVLET_CLASS); - } - return J2EEUtils.findServlet((org.eclipse.jst.j2ee.webapplication.WebApp) webApp, JSF_SERVLET_CLASS); - } - - /** - * Creates servlet reference in WebApp if not present or updates servlet - * name if found using the passed configuration. - * - * @param webApp - * @param config - * @param servlet - * @return Servlet servlet - if passed servlet was null, will return created - * servlet - */ - protected Object createOrUpdateServletRef(final Object webApp, - final IDataModel config, Object servlet) - { - String displayName = getDisplayName(config); - String className = getServletClassname(config); - if(isJavaEE(webApp)) { - return JEEUtils.createOrUpdateServletRef((org.eclipse.jst.javaee.web.WebApp) webApp, displayName, className, (org.eclipse.jst.javaee.web.Servlet) servlet); - } - return J2EEUtils.createOrUpdateServletRef((org.eclipse.jst.j2ee.webapplication.WebApp) webApp, displayName, className, (org.eclipse.jst.j2ee.webapplication.Servlet) servlet); - } - - /** - * 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 - */ - protected void setUpURLMappings(final Object webApp, - final List<String> urlMappingList, final Object servlet) - { - if(isJavaEE(webApp)) { - JEEUtils.setUpURLMappings((org.eclipse.jst.javaee.web.WebApp) webApp, urlMappingList, (org.eclipse.jst.javaee.web.Servlet) servlet); - } - else { - J2EEUtils.setUpURLMappings((org.eclipse.jst.j2ee.webapplication.WebApp) webApp, urlMappingList, (org.eclipse.jst.j2ee.webapplication.Servlet) servlet); - } - } - - /** - * Removes servlet-mappings for servlet using servlet-name for >= 2.5 WebModules. - * @param webApp - * @param servlet - */ - protected void removeURLMappings(final Object webApp, final Object servlet) { - if(isJavaEE(webApp)) { - JEEUtils.removeURLMappings((org.eclipse.jst.javaee.web.WebApp) webApp, (org.eclipse.jst.javaee.web.Servlet) servlet); - } - else { - J2EEUtils.removeURLMappings((org.eclipse.jst.j2ee.webapplication.WebApp) webApp, (org.eclipse.jst.j2ee.webapplication.Servlet) servlet); - } - } - - /** - * Removes servlet definition - * @param webApp - * @param servlet - */ - protected void removeJSFServlet(final Object webApp, final Object servlet) { - if(isJavaEE(webApp)) { - JEEUtils.removeServlet((org.eclipse.jst.javaee.web.WebApp) webApp, (org.eclipse.jst.javaee.web.Servlet) servlet); - } - else { - J2EEUtils.removeServlet((org.eclipse.jst.j2ee.webapplication.WebApp) webApp, (org.eclipse.jst.j2ee.webapplication.Servlet) servlet); - } - } - - /** - * Removes context-param - * @param webApp - */ - protected void removeJSFContextParams(final Object webApp) { - if(isJavaEE(webApp)) { - JEEUtils.removeContextParam((org.eclipse.jst.javaee.web.WebApp) webApp, JSF_CONFIG_CONTEXT_PARAM); - } - else { - J2EEUtils.removeContextParam((org.eclipse.jst.j2ee.webapplication.WebApp) webApp, JSF_CONFIG_CONTEXT_PARAM); - } - } - - /** - * Creates or updates context-params - * @param webApp - * @param config - */ - protected void setupContextParams(final Object webApp, final IDataModel config) { - final String paramValue = config.getStringProperty(IJSFFacetInstallDataModelProperties.CONFIG_PATH); - if (paramValue != null && !paramValue.equals(JSF_DEFAULT_CONFIG_PATH)) { - if(isJavaEE(webApp)) { - JEEUtils.setupContextParam((org.eclipse.jst.javaee.web.WebApp) webApp, JSF_CONFIG_CONTEXT_PARAM, paramValue); - } - else { - J2EEUtils.setupContextParam((org.eclipse.jst.j2ee.webapplication.WebApp) webApp, JSF_CONFIG_CONTEXT_PARAM, paramValue); - } - } - - } - - /** - * @param map - * @param webApp - * @return extension from map. Will return null if file extension not found - * in url patterns. - */ - protected String getFileExtensionFromMap(final Object webApp, final Object map) { - if(isJavaEE(webApp)) { - return JEEUtils.getFileExtensionFromMap((org.eclipse.jst.javaee.web.ServletMapping) map); - } - return J2EEUtils.getFileExtensionFromMap((org.eclipse.jst.j2ee.webapplication.ServletMapping) map); - } - - /** - * @param webApp - * @param map - * @return prefix mapping. may return null. - */ - protected String getPrefixMapping(final Object webApp, final Object map) { - if(isJavaEE(webApp)) { - return JEEUtils.getPrefixMapping((org.eclipse.jst.javaee.web.ServletMapping) map); - } - return J2EEUtils.getPrefixMapping((org.eclipse.jst.j2ee.webapplication.ServletMapping) map); - } - - /** - * @param webAppObj - * @param resource - * @param existingURL - * @return the modified url path for the (possibly) jsf resource. - */ - public IPath getFileUrlPath(Object webAppObj, IResource resource, - IPath existingURL) { - // if not a JSF page, do nothing - if (!isJSFPage(resource)) - { - return null; - } - - Object servlet = findJSFServlet(webAppObj); - if (servlet == null) - {// if no faces servlet, do nothing - return null; - } - - String defaultSuffix = getDefaultSuffix(webAppObj); - // is the resource using default_suffix - String fileExtension = resource.getFileExtension(); - boolean canUseExtensionMapping = fileExtension != null && fileExtension.equalsIgnoreCase(defaultSuffix); - // if not using default extension and is not a known file extension, - // then we will abort - if (!canUseExtensionMapping - && !isValidKnownExtension(resource.getFileExtension())) - return null; - - if(isJavaEE(webAppObj)) { - org.eclipse.jst.javaee.web.WebApp webApp = (org.eclipse.jst.javaee.web.WebApp) webAppObj; - - final String servletName = ((org.eclipse.jst.javaee.web.Servlet) servlet).getServletName(); - - String foundFileExtension = null; - for (final org.eclipse.jst.javaee.web.ServletMapping map : webApp.getServletMappings()) - { - if (map != null && - map.getServletName() != null && - map.getServletName().trim().equals(servletName.trim())) - { - foundFileExtension = getFileExtensionFromMap(webAppObj, map); - if (foundFileExtension != null && canUseExtensionMapping) - { - return existingURL.removeFileExtension() - .addFileExtension(foundFileExtension); - } - - String foundPrefixMapping = getPrefixMapping(webAppObj, map); - if (foundPrefixMapping != null) - { - return new Path(foundPrefixMapping).append(existingURL); - } - } - } - - if (!canUseExtensionMapping && foundFileExtension != null) - { - // we could prompt user that this may not work... - // for now we will return the extension mapping - return existingURL.removeFileExtension().addFileExtension( - foundFileExtension); - } - - // we could, at this point, add a url mapping to the faces servlet, - // or prompt user that it may be a good idea to add one... - - } - else { - Iterator mappings = ((org.eclipse.jst.j2ee.webapplication.Servlet)servlet).getMappings().iterator(); - org.eclipse.jst.j2ee.webapplication.ServletMapping map = null; - String foundFileExtension = null; - String foundPrefixMapping = null; - while (mappings.hasNext()) - { - map = (org.eclipse.jst.j2ee.webapplication.ServletMapping)mappings.next(); - - foundFileExtension = getFileExtensionFromMap(webAppObj, map); - if (foundFileExtension != null && canUseExtensionMapping) - { - return existingURL.removeFileExtension().addFileExtension(foundFileExtension); - } - - if (foundPrefixMapping == null) - { - foundPrefixMapping = getPrefixMapping(webAppObj, map); - } - } - if (foundPrefixMapping != null) - { - return new Path(foundPrefixMapping).append(existingURL); - } - if (! canUseExtensionMapping && foundFileExtension != null){ - //we could prompt user that this may not work... - //for now we will return the extension mapping - return existingURL.removeFileExtension().addFileExtension(foundFileExtension); - } - - // we could, at this point, add a url mapping to the faces servlet, - // or prompt user that it may be a good idea to add one... - - } - return null; - } -} |