diff options
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDelegate.java')
-rw-r--r-- | jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDelegate.java | 398 |
1 files changed, 0 insertions, 398 deletions
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 deleted file mode 100644 index b23a0e601..000000000 --- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/core/internal/project/facet/JSFFacetInstallDelegate.java +++ /dev/null @@ -1,398 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 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 - * Debajit Adhikary - Fixes for bug 255097 ("Request to remove input fields - * from facet install page") - * - MyFaces and SunRI-specific configuration - *******************************************************************************/ - -package org.eclipse.jst.jsf.core.internal.project.facet; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRunnable; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.jst.common.project.facet.core.libprov.LibraryInstallDelegate; -import org.eclipse.jst.common.project.facet.core.libprov.LibraryProviderOperationConfig; -import org.eclipse.jst.common.project.facet.core.libprov.user.UserLibraryProviderInstallOperationConfig; -import org.eclipse.jst.j2ee.model.IModelProvider; -import org.eclipse.jst.j2ee.model.ModelProviderManager; -import org.eclipse.jst.javaee.web.WebApp; -import org.eclipse.jst.jsf.common.facet.libraryprovider.jsf.JsfLibraryUtil; -import org.eclipse.jst.jsf.common.webxml.WebXmlUpdater; -import org.eclipse.jst.jsf.core.internal.JSFCorePlugin; -import org.eclipse.jst.jsf.core.internal.Messages; -import org.eclipse.osgi.util.NLS; -import org.eclipse.wst.common.componentcore.ComponentCore; -import org.eclipse.wst.common.frameworks.datamodel.IDataModel; -import org.eclipse.wst.common.project.facet.core.IDelegate; -import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion; - -/** - * JSF Facet Install Delegate for WTP faceted web projects. Deals with 2.3, 2.4 and 2.5 web app models. - * - * Uses <code>com.eclispe.jst.jsf.core.internal.project.facet.JSFFacetInstallDataModelProvider<code> for model - * <li> creates JSF configuration file if not already present. It will not attempt to upgrade or downgrade the version if there is a mismatch. - * <li> updates web.xml for: servlet, servlet-mapping and context-param - * <li> adds implementation jars to WEB-INF/lib if user requests - * - * @see org.eclipse.jst.jsf.core.internal.project.facet.JSFFacetInstallDataModelProvider - * @since 1.0 - */ -public final class JSFFacetInstallDelegate implements IDelegate { - - private final boolean jsfFacetConfigurationEnabled = JsfFacetConfigurationUtil.isJsfFacetConfigurationEnabled(); - - - /* (non-Javadoc) - * @see org.eclipse.wst.common.project.facet.core.IDelegate#execute(org.eclipse.core.resources.IProject, org.eclipse.wst.common.project.facet.core.IProjectFacetVersion, java.lang.Object, org.eclipse.core.runtime.IProgressMonitor) - */ - public void execute(final IProject project, final IProjectFacetVersion fv, - final Object cfg, final IProgressMonitor monitor) - throws CoreException - - { - - if (monitor != null) { - monitor.beginTask("", 1); //$NON-NLS-1$ - } - - try { - IDataModel config = null; - - if (cfg != null) { - config = (IDataModel) cfg; - } else { - throw new JSFFacetException( - Messages.JSFFacetInstallDelegate_InternalErr); - } - - final JSFUtils jsfUtil = new JSFUtilFactory().create(fv, ModelProviderManager.getModelProvider(project)); - if (jsfUtil == null) - { - throw new JSFFacetException(NLS.bind( - Messages.Could_Not_GetJSFVersion, fv.toString())); - } - - if (jsfFacetConfigurationEnabled) - { - // Before we do any configuration, verify that web.xml is // available for update - final IModelProvider provider = jsfUtil - .getModelProvider(); - if (provider == null) - { - throw new JSFFacetException(NLS.bind( - Messages.JSFFacetInstallDelegate_ConfigErr, - project.getName())); - } - else if (!(provider.validateEdit(null, null).isOK())) - { - if (!(provider.validateEdit(null, null).isOK())) - {// checks for web.xml file being read-only and allows - // user to set writeable - throw new JSFFacetException( - NLS.bind( - Messages.JSFFacetInstallDelegate_NonUpdateableWebXML, - project.getName())); - } - } - } - -// // Create JSF Libs as classpath containers and set WTP dependencies -// // as required -// createClasspathEntries(project, fv, config, monitor); - - //Configure libraries - ( (LibraryInstallDelegate) config.getProperty( IJSFFacetInstallDataModelProperties.LIBRARY_PROVIDER_DELEGATE ) ).execute( new NullProgressMonitor() ); - - final LibraryInstallDelegate libDelegate = (LibraryInstallDelegate) (config.getProperty( IJSFFacetInstallDataModelProperties.LIBRARY_PROVIDER_DELEGATE)); - final LibraryProviderOperationConfig libConfig = libDelegate.getLibraryProviderOperationConfig(); - - if (jsfFacetConfigurationEnabled) - { - // Create config file - createConfigFile(project, fv, config, monitor, jsfUtil); - - // Update web model - createServletAndModifyWebXML(project, config, monitor, jsfUtil); - updateWebXmlByJsfVendor(libConfig, project, monitor); - } - - if (monitor != null) { - monitor.worked(1); - } - - } finally { - if (monitor != null) { - monitor.done(); - } - } - } - - - /** - * Configures web.xml for MyFaces or Sun-RI when a user-library is used. - * Does no special configuration when a third party library provider is used - * (e.g. WebLogic shared library) - * - * @param libConfig - * Library install delegate - * @param project - * IProject to update - * @param monitor - * IProgressMonitor - */ - private void updateWebXmlByJsfVendor (final LibraryProviderOperationConfig libConfig, - final IProject project, - final IProgressMonitor monitor) - { - final UserLibraryProviderInstallOperationConfig userLibConfig = getUserLibConfig(libConfig); - if (userLibConfig == null) // Not a user lib provider (e.g. shared lib provider) - return; // Any special configuration will be done by third party lib provider. - - - switch (JsfLibraryUtil.getJsfLibraryVendorType(userLibConfig)) - { - case MYFACES: - updateWebXmlForMyfaces(project, monitor); - break; - case SUN_RI: - updateWebXmlForSunRi(project, monitor); - break; - case UNKNOWN: - break; - } - } - - - /** - * (Refactored into a protected method for JUnit testing) - * - * @param libConfig LibraryProviderOperationConfig object - * - * @return WtpUserLibraryProviderInstallOperationConfig object if the - * argument object has the same runtime type. Returns null - * otherwise e.g. if the libConfig is of the runtime type - * SharedLibraryProviderInstallOperationConfig. - */ - public static UserLibraryProviderInstallOperationConfig getUserLibConfig (final LibraryProviderOperationConfig libConfig) - { - if (!(libConfig instanceof UserLibraryProviderInstallOperationConfig)) // Third-party shared library providers etc. - return null; - - return (UserLibraryProviderInstallOperationConfig) libConfig; - } - - - /** - * Updates web.xml for the given project with MyFaces-specific parameters. - * (This method is public static so that it may be called by other third - * party library providers for consistent MyFaces configuration across - * different JSF library providers) - * - * @param project - * IProject whose web.xml is to be updated. - * - * @param monitor - * IProgressMonitor - */ - public static void updateWebXmlForMyfaces (final IProject project, - final IProgressMonitor monitor) - { - final WebXmlUpdater updater = new WebXmlUpdater(project, monitor); - - updater.addContextParam("javax.servlet.jsp.jstl.fmt.localizationContext", "resources.application", null); //$NON-NLS-1$//$NON-NLS-2$ - updater.addContextParam("javax.faces.STATE_SAVING_METHOD", "client", Messages.JSFFacetInstallDelegate_StateSavingMethod); //$NON-NLS-1$ //$NON-NLS-2$ - updater.addContextParam("org.apache.myfaces.ALLOW_JAVASCRIPT", "true", Messages.JSFFacetInstallDelegate_AllowJavascriptDescription); //$NON-NLS-1$ //$NON-NLS-2$ - updater.addContextParam("org.apache.myfaces.PRETTY_HTML", "true", Messages.JSFFacetInstallDelegate_PrettyHtmlDescription); //$NON-NLS-1$ //$NON-NLS-2$ - updater.addContextParam("org.apache.myfaces.DETECT_JAVASCRIPT", "false", null); //$NON-NLS-1$//$NON-NLS-2$ - updater.addContextParam("org.apache.myfaces.AUTO_SCROLL", "true", Messages.JSFFacetInstallDelegate_AutoScrollDescription); //$NON-NLS-1$ //$NON-NLS-2$ - - updater.addServlet("faces", "org.apache.myfaces.webapp.MyFacesServlet", "1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - updater.addServletMapping("faces", "org.apache.myfaces.webapp.MyFacesServlet", "*.jsf"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ - updater.addServletMapping("faces", "org.apache.myfaces.webapp.MyFacesServlet", "*.faces"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ - - updater.addListener("org.apache.myfaces.webapp.StartupServletContextListener"); //$NON-NLS-1$ - -// // Additional, more complex updates -// if (updater.isJavaEEWebapp()) -// { -// updater.getProvider().modify(new UpdateWebXmlForMyfacesJavaEE(project, monitor), WebXmlUtils.WEB_XML_PATH); -// } -// else if (updater.isJ2EEWebapp()) -// { -// updater.getProvider().modify(new UpdateWebXmlForMyfacesJ2EE(project, monitor), WebXmlUtils.WEB_XML_PATH); -// } - } - - - /** - * Updates web.xml for the given project with SunRI-specific parameters. - * (This method is public static so that it may be called by other third - * party library providers for consistent Sun-RI configuration across - * different JSF library providers) - * - * @param project - * IProject whose web.xml is to be updated. - * - * @param monitor - * IProgressMonitor - */ - public static void updateWebXmlForSunRi (final IProject project, - final IProgressMonitor monitor) - { - final WebXmlUpdater updater = new WebXmlUpdater(project, monitor); - - updater.addContextParam("javax.faces.STATE_SAVING_METHOD", "client", Messages.JSFFacetInstallDelegate_StateSavingMethod); //$NON-NLS-1$//$NON-NLS-2$ - updater.addContextParam("javax.servlet.jsp.jstl.fmt.localizationContext", "resources.application", null); //$NON-NLS-1$ //$NON-NLS-2$ - updater.addListener("com.sun.faces.config.ConfigureListener"); //$NON-NLS-1$ - - updater.addServlet("Faces Servlet", "javax.faces.webapp.FacesServlet", "1"); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ - updater.addServletMapping("Faces Servlet", "javax.faces.webapp.FacesServlet", "*.jsf"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ - updater.addServletMapping("Faces Servlet", "javax.faces.webapp.FacesServlet", "*.faces"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ - } - - -// /** -// * @param path -// * @param lib -// * @return creates new IClasspathEntry with WTP dependency attribute set, if required -// */ -// private IClasspathEntry getNewCPEntry(final IPath path, final JSFLibraryInternalReference lib) { -// -// IClasspathEntry entry = null; -// if (lib.isCheckedToBeDeployed()){ -// IClasspathAttribute depAttrib = JavaCore.newClasspathAttribute(IClasspathDependencyConstants.CLASSPATH_COMPONENT_DEPENDENCY, -// ClasspathDependencyUtil.getDefaultRuntimePath(true).toString()); -// entry = JavaCore.newContainerEntry(path,null, new IClasspathAttribute[]{depAttrib}, true); -// } -// else { -// entry = JavaCore.newContainerEntry(path); -// } -// -// return entry; -// } - - - /** - * @param project - * @param jsfConfigPath - * @return absolute IPath to jsfConfig - */ - private IPath resolveConfigPath(final IProject project, final String jsfConfigPath) { - return ComponentCore.createComponent(project).getRootFolder() - .getUnderlyingFolder().getRawLocation().append( - new Path(jsfConfigPath)); - - } - - /** - * Create the faces configuration file. If the file already exist, then the file is left alone. - * @param project - * @param fv - * @param config - * @param monitor - */ - private void createConfigFile(final IProject project, - final IProjectFacetVersion fv, final IDataModel config, - final IProgressMonitor monitor, final JSFUtils jsfUtil) { - - - final IPath configPath = resolveConfigPath(project, config.getStringProperty(IJSFFacetInstallDataModelProperties.CONFIG_PATH)); - try { - // do not overwrite if the file exists - if (!configPath.toFile().exists()) { - final IWorkspaceRunnable op = new IWorkspaceRunnable(){ - public void run(final IProgressMonitor monitor_inner) throws CoreException{ - jsfUtil.createConfigFile(configPath); - project.refreshLocal(IResource.DEPTH_INFINITE, monitor_inner); - } - }; - op.run(monitor); - } - } catch (final CoreException e) { - JSFCorePlugin.log(e, "Exception occured while creating faces-config.xml");//$NON-NLS-1$ - } - - } - - /** - * Create servlet and URL mappings and update the webapp - * - * @param project - * @param config - * @param monitor - */ - private void createServletAndModifyWebXML(final IProject project, - final IDataModel config, final IProgressMonitor monitor, - final JSFUtils jsfUtil) - { - - final IModelProvider provider = jsfUtil.getModelProvider(); - final IPath webXMLPath = new Path("WEB-INF").append("web.xml"); //$NON-NLS-1$ //$NON-NLS-2$ - if (jsfUtil.isJavaEE(provider.getModelObject())) - { - provider.modify(new UpdateWebXMLForJavaEE(project, config, jsfUtil), - doesDDFileExist(project, webXMLPath) ? webXMLPath - : IModelProvider.FORCESAVE); - } else - {// must be 2.3 or 2.4 - provider.modify(new UpdateWebXMLForJ2EE(project, config, jsfUtil), - webXMLPath); - } - // TODO: is the MyFaces check a todo? - // Check if runtime is MyFaces or Sun-RI - } - - private boolean doesDDFileExist(final IProject project, final IPath webXMLPath) { - return project.getProjectRelativePath().append(webXMLPath).toFile().exists(); - } - - private class UpdateWebXMLForJavaEE implements Runnable { - private final IProject project; - private final IDataModel config; - private final JSFUtils jsfUtil; - - UpdateWebXMLForJavaEE(final IProject project, final IDataModel config, final JSFUtils jsfUtil){ - this.project = project; - this.config = config; - this.jsfUtil = jsfUtil; - } - - public void run() { - final WebApp webApp = (WebApp) ModelProviderManager.getModelProvider(project).getModelObject(); - jsfUtil.updateWebApp(webApp, config); - } - } - - private class UpdateWebXMLForJ2EE implements Runnable { - private final IProject project; - private final IDataModel config; - private final JSFUtils jsfUtil; - - UpdateWebXMLForJ2EE(final IProject project, final IDataModel config, final JSFUtils jsfUtil){ - this.project = project ; - this.config = config; - this.jsfUtil = jsfUtil; - } - - public void run() { - final org.eclipse.jst.j2ee.webapplication.WebApp webApp = (org.eclipse.jst.j2ee.webapplication.WebApp)ModelProviderManager.getModelProvider(project).getModelObject(); - jsfUtil.updateWebApp(webApp, config); - } - - } - - - -} |