| /******************************************************************************* |
| * Copyright (c) 2008 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: |
| * Cameron Bateman - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jst.jsf.facelet.core.internal.facet; |
| |
| import java.util.Iterator; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.emf.common.util.EList; |
| import org.eclipse.jst.jsf.designtime.DesignTimeApplicationManager; |
| import org.eclipse.jst.jsf.facelet.core.internal.FaceletCoreTraceOptions; |
| import org.eclipse.jst.jsf.facesconfig.emf.ApplicationType; |
| import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigType; |
| import org.eclipse.jst.jsf.facesconfig.emf.ViewHandlerType; |
| import org.eclipse.jst.jsf.facesconfig.util.FacesConfigArtifactEdit; |
| import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion; |
| |
| /** |
| * The facet removal delegate for Facelets. |
| * |
| * @author cbateman |
| * |
| */ |
| public class FaceletUninstallDelegate extends FaceletChangeDelegate |
| { |
| |
| @Override |
| public void execute(final IProject project, final IProjectFacetVersion fv, |
| final Object config, final IProgressMonitor monitor) |
| throws CoreException |
| { |
| final FacetChangeModel model = (FacetChangeModel) config; |
| if (FaceletCoreTraceOptions.TRACE_FACETUNINSTALLDELEGATE) |
| { |
| FaceletCoreTraceOptions.log("Uninstalling facet on project: " //$NON-NLS-1$ |
| + project.getName()); |
| |
| FaceletCoreTraceOptions.log(String.format( |
| "FaceletUninstallDelegate: Remove default selection %b", //$NON-NLS-1$ |
| Boolean.valueOf(model.isChgDefaultSuffix()))); |
| FaceletCoreTraceOptions |
| .log(String |
| .format( |
| "FaceletUninstallDelegate: Remove view handler %b", Boolean.valueOf(model //$NON-NLS-1$ |
| .isChgViewHandler()))); |
| FaceletCoreTraceOptions.log(String.format( |
| "FaceletUninstallDelegate: Remove configure listener %b", //$NON-NLS-1$ |
| Boolean.valueOf(model.isChgConfigureListener()))); |
| FaceletCoreTraceOptions |
| .log(String |
| .format( |
| "FaceletUninstallDelegate: Remove web app lifecycle listener %b", //$NON-NLS-1$ |
| Boolean.valueOf(model |
| .isChgWebAppLifecycleListener()))); |
| } |
| |
| try |
| { |
| if (monitor != null) |
| { |
| monitor.beginTask("Uninstalling facelet facet", 1); //$NON-NLS-1$ |
| } |
| |
| super.execute(project, fv, config, monitor); |
| } |
| finally |
| { |
| if (monitor != null) |
| { |
| monitor.done(); |
| } |
| } |
| } |
| |
| /** |
| * Install the facelet view handler in the WEB-INF/faces-config file if not |
| * already present. |
| * |
| * @param project |
| * @param monitor |
| */ |
| @SuppressWarnings("unchecked") |
| @Override |
| protected void maybeChangeFaceletViewHandler(final IProject project, |
| final IProgressMonitor monitor) |
| { |
| if (FaceletCoreTraceOptions.TRACE_FACETUNINSTALLDELEGATE) |
| { |
| FaceletCoreTraceOptions |
| .log("FaceletInstallDelegate: Uninstalling facelet view handler"); //$NON-NLS-1$ |
| } |
| |
| final FacesConfigArtifactEdit edit = FacesConfigArtifactEdit |
| .getFacesConfigArtifactEditForWrite(project, |
| "WEB-INF/faces-config.xml"); //$NON-NLS-1$ |
| if (edit != null) |
| { |
| try |
| { |
| final FacesConfigType root = edit.getFacesConfig(); |
| if (isViewHandlerPresent(root)) |
| { |
| if (FaceletCoreTraceOptions.TRACE_FACETUNINSTALLDELEGATE) |
| { |
| FaceletCoreTraceOptions |
| .log("FaceletInstallDelegate: View Handler not already found in faces-config"); //$NON-NLS-1$ |
| } |
| final EList applications = root.getApplication(); |
| |
| for (final Iterator<?> appIt = applications.iterator(); appIt |
| .hasNext();) |
| { |
| final ApplicationType application = (ApplicationType) appIt |
| .next(); |
| for (final Iterator viewHandlerIt = application |
| .getViewHandler().iterator(); viewHandlerIt |
| .hasNext();) |
| { |
| final ViewHandlerType viewHandlerType = (ViewHandlerType) viewHandlerIt |
| .next(); |
| if (viewHandlerType != null && viewHandlerType |
| .getTextContent() != null |
| && RUNTIME_VIEWHANDLER_CLASS_NAME |
| .equals(viewHandlerType |
| .getTextContent().trim())) |
| { |
| viewHandlerIt.remove(); |
| |
| if (FaceletCoreTraceOptions.TRACE_FACETUNINSTALLDELEGATE) |
| { |
| FaceletCoreTraceOptions |
| .log("FaceletUninstallDelegate: Removed runtime view handler"); //$NON-NLS-1$ |
| } |
| } |
| } |
| } |
| |
| edit.save(monitor); |
| |
| if (FaceletCoreTraceOptions.TRACE_FACETUNINSTALLDELEGATE) |
| { |
| FaceletCoreTraceOptions |
| .log("FaceletUninstallDelegate: Saved changes for facelet view handler"); //$NON-NLS-1$ |
| } |
| } |
| else |
| { |
| if (FaceletCoreTraceOptions.TRACE_FACETUNINSTALLDELEGATE) |
| { |
| FaceletCoreTraceOptions |
| .log("FaceletInstallDelegate: View Handler NOT already found in faces-config; not adding"); //$NON-NLS-1$ |
| } |
| } |
| } |
| finally |
| { |
| edit.dispose(); |
| } |
| } |
| } |
| |
| @Override |
| protected void handleDesignTimeViewHandler(final IProject project) |
| { |
| final DesignTimeApplicationManager manager = DesignTimeApplicationManager |
| .getInstance(project); |
| |
| // TODO: need this API |
| //manager.clearViewHandlerId(); |
| manager.setViewHandlerId("org.eclipse.jst.jsf.designtime.view.jspviewhandler"); //$NON-NLS-1$ |
| } |
| |
| @Override |
| protected String getDisplayName() |
| { |
| return Messages.FaceletUninstallDelegate_FACET_INSTALLER_DELEGATE_DISPLAY_NAME; |
| } |
| |
| @Override |
| protected void maybeChangeDefaultSuffix(final FacetChangeModel model, |
| final WebAppConfigurator configurator) |
| { |
| if (model.isChgDefaultSuffix()) |
| { |
| if (FaceletCoreTraceOptions.TRACE_FACETUNINSTALLDELEGATE) |
| { |
| FaceletCoreTraceOptions |
| .log("FaceletUninstallDelegate: Removing DEFAULT_SUFFIX"); //$NON-NLS-1$ |
| } |
| configurator |
| .removeContextParam( |
| FaceletFacet.JAVAX_FACES_DEFAULT_SUFFIX, |
| FaceletFacet.XHTML); |
| } |
| } |
| |
| @Override |
| protected void maybeChangeConfigureListener(final FacetChangeModel model, |
| final WebAppConfigurator configurator) |
| { |
| if (model.isChgConfigureListener()) |
| { |
| if (FaceletCoreTraceOptions.TRACE_FACETUNINSTALLDELEGATE) |
| { |
| FaceletCoreTraceOptions |
| .log("FaceletUninstallDelegate: Remove Configure Listener"); //$NON-NLS-1$ |
| } |
| configurator |
| .removeListener(FaceletFacet.COM_SUN_FACES_CONFIG_CONFIGURE_LISTENER); |
| } |
| } |
| |
| @Override |
| protected void maybeChangeWebLifecycleListener( |
| final FacetChangeModel model, final WebAppConfigurator configurator) |
| { |
| if (model.isChgWebAppLifecycleListener()) |
| { |
| if (FaceletCoreTraceOptions.TRACE_FACETUNINSTALLDELEGATE) |
| { |
| FaceletCoreTraceOptions |
| .log("FaceletUninstallDelegate: Remove WebappLifecycleListener"); //$NON-NLS-1$ |
| } |
| configurator |
| .removeListener(FaceletFacet.COM_SUN_FACES_APPLICATION_WEBAPP_LIFECYCLE_LISTENER); |
| } |
| } |
| } |