| package org.eclipse.jst.jsf.facelet.core.internal.facet; |
| |
| import java.util.Iterator; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.Path; |
| import org.eclipse.jst.j2ee.model.IModelProvider; |
| import org.eclipse.jst.j2ee.model.ModelProviderManager; |
| import org.eclipse.jst.jsf.facelet.core.internal.FaceletCorePlugin; |
| |
| /** |
| * Insulates caller from the insane J2EE/JavaEE dual model. |
| * |
| * @author cbateman |
| * |
| */ |
| public abstract class WebAppConfigurator |
| { |
| /** |
| * @param project |
| * @return the configurator for project or null if none |
| */ |
| public static WebAppConfigurator getConfigurator(final IProject project) |
| { |
| final IModelProvider provider = ModelProviderManager |
| .getModelProvider(project); |
| final Object webAppObj = provider.getModelObject(); |
| if (webAppObj == null) |
| { |
| FaceletCorePlugin.log("Error getting web app configurator", //$NON-NLS-1$ |
| new Throwable()); |
| return null; |
| } |
| |
| if (webAppObj instanceof org.eclipse.jst.javaee.web.WebApp) |
| { |
| return new JavaEEWebAppConfigurator(project); |
| } |
| else if (webAppObj instanceof org.eclipse.jst.j2ee.webapplication.WebApp) |
| { |
| return new J2EEWebAppConfigurator(project); |
| } |
| |
| return null; |
| } |
| |
| private final IProject _project; |
| |
| WebAppConfigurator(final IProject project) |
| { |
| _project = project; |
| } |
| |
| /** |
| * @param paramName |
| * @param paramValue |
| * @param addEvenIfPresent |
| */ |
| public abstract void addContextParam(final String paramName, |
| final String paramValue, final boolean addEvenIfPresent); |
| |
| /** |
| * @param paramName |
| * @param paramValue |
| */ |
| public abstract void removeContextParam(final String paramName, |
| final String paramValue); |
| |
| /** |
| * Adds the listenerClass to the webapp config. If addEventIfPresent is |
| * false, then it will not add it if it finds it already. If true, it will |
| * forcibly add. |
| * |
| * @param listenerClass |
| * @param addEvenIfPresent |
| */ |
| public abstract void addListener(final String listenerClass, |
| final boolean addEvenIfPresent); |
| |
| /** |
| * @param listenerClass |
| */ |
| public abstract void removeListener(final String listenerClass); |
| |
| /** |
| * @param runnable |
| */ |
| protected void executeChange(final Runnable runnable) |
| { |
| final IPath webXMLPath = new Path("WEB-INF").append("web.xml"); //$NON-NLS-1$ //$NON-NLS-2$ |
| final IModelProvider provider = ModelProviderManager |
| .getModelProvider(getProject()); |
| provider.modify(runnable, webXMLPath); |
| } |
| |
| /** |
| * @return the project |
| */ |
| protected IProject getProject() |
| { |
| return _project; |
| } |
| |
| @SuppressWarnings("unchecked") |
| private static class JavaEEWebAppConfigurator extends WebAppConfigurator |
| { |
| public JavaEEWebAppConfigurator(final IProject project) |
| { |
| super(project); |
| } |
| |
| @Override |
| public void addContextParam(final String paramName, |
| final String paramValue, final boolean addEvenIfPresent) |
| { |
| final Runnable runnable = new Runnable() |
| { |
| public void run() |
| { |
| final org.eclipse.jst.javaee.web.WebApp webApp = (org.eclipse.jst.javaee.web.WebApp) ModelProviderManager |
| .getModelProvider(getProject()).getModelObject(); |
| if (addEvenIfPresent |
| || !isContextParamPresent(webApp, paramName)) |
| { |
| final org.eclipse.jst.javaee.core.ParamValue newParamValue = org.eclipse.jst.javaee.core.JavaeeFactory.eINSTANCE |
| .createParamValue(); |
| newParamValue.setParamName(paramName); |
| newParamValue.setParamValue(paramValue); |
| webApp.getContextParams().add(newParamValue); |
| } |
| } |
| }; |
| executeChange(runnable); |
| } |
| |
| @Override |
| public void removeContextParam(final String paramName, |
| final String paramVal) |
| { |
| final Runnable runnable = new Runnable() |
| { |
| public void run() |
| { |
| final org.eclipse.jst.javaee.web.WebApp webApp = (org.eclipse.jst.javaee.web.WebApp) ModelProviderManager |
| .getModelProvider(getProject()).getModelObject(); |
| for (final Iterator<?> it = webApp.getContextParams() |
| .iterator(); it.hasNext();) |
| { |
| final org.eclipse.jst.javaee.core.ParamValue paramValue = (org.eclipse.jst.javaee.core.ParamValue) it |
| .next(); |
| if (paramName.equals(paramValue.getParamName().trim()) |
| && paramVal.equals(paramValue.getParamValue() |
| .trim())) |
| { |
| it.remove(); |
| } |
| } |
| } |
| }; |
| executeChange(runnable); |
| } |
| |
| private boolean isContextParamPresent( |
| final org.eclipse.jst.javaee.web.WebApp webApp, |
| final String paramName) |
| { |
| for (final Iterator<?> it = webApp.getContextParams().iterator(); it |
| .hasNext();) |
| { |
| final org.eclipse.jst.javaee.core.ParamValue paramValue = (org.eclipse.jst.javaee.core.ParamValue) it |
| .next(); |
| if (paramName.equals(paramValue.getParamName().trim())) |
| { |
| return true; |
| } |
| } |
| return false; |
| } |
| |
| @Override |
| public void addListener(final String listenerClass, |
| final boolean addEvenIfPresent) |
| { |
| final Runnable runnable = new Runnable() |
| { |
| public void run() |
| { |
| final org.eclipse.jst.javaee.web.WebApp webApp = (org.eclipse.jst.javaee.web.WebApp) ModelProviderManager |
| .getModelProvider(getProject()).getModelObject(); |
| |
| if (addEvenIfPresent |
| || !isListenerPresent(webApp, listenerClass)) |
| { |
| final org.eclipse.jst.javaee.core.Listener listener = org.eclipse.jst.javaee.core.JavaeeFactory.eINSTANCE |
| .createListener(); |
| listener.setListenerClass(listenerClass); |
| webApp.getListeners().add(listener); |
| } |
| } |
| }; |
| executeChange(runnable); |
| } |
| |
| @Override |
| public void removeListener(final String listenerClass) |
| { |
| final Runnable runnable = new Runnable() |
| { |
| public void run() |
| { |
| final org.eclipse.jst.javaee.web.WebApp webApp = (org.eclipse.jst.javaee.web.WebApp) ModelProviderManager |
| .getModelProvider(getProject()).getModelObject(); |
| for (final Iterator listenerIt = webApp.getListeners() |
| .iterator(); listenerIt.hasNext();) |
| { |
| final org.eclipse.jst.javaee.core.Listener listener = (org.eclipse.jst.javaee.core.Listener) listenerIt |
| .next(); |
| if (listenerClass.equals(listener.getListenerClass() |
| .trim())) |
| { |
| listenerIt.remove(); |
| } |
| } |
| } |
| }; |
| executeChange(runnable); |
| } |
| |
| private boolean isListenerPresent( |
| final org.eclipse.jst.javaee.web.WebApp webApp, |
| final String listenerClass) |
| { |
| for (final Iterator listenerIt = webApp.getListeners().iterator(); listenerIt |
| .hasNext();) |
| { |
| final org.eclipse.jst.javaee.core.Listener listener = (org.eclipse.jst.javaee.core.Listener) listenerIt |
| .next(); |
| if (listenerClass.equals(listener.getListenerClass().trim())) |
| { |
| return true; |
| } |
| } |
| return false; |
| } |
| } |
| |
| @SuppressWarnings("unchecked") |
| private static class J2EEWebAppConfigurator extends WebAppConfigurator |
| { |
| public J2EEWebAppConfigurator(final IProject project) |
| { |
| super(project); |
| } |
| |
| @Override |
| public void addContextParam(final String paramName, |
| final String paramValue, final boolean addEvenIfPresent) |
| { |
| final Runnable runnable = new Runnable() |
| { |
| public void run() |
| { |
| final org.eclipse.jst.j2ee.webapplication.WebApp webApp = (org.eclipse.jst.j2ee.webapplication.WebApp) ModelProviderManager |
| .getModelProvider(getProject()).getModelObject(); |
| |
| if (addEvenIfPresent |
| || !isContextParamPresent(webApp, paramName)) |
| { |
| final org.eclipse.jst.j2ee.common.ParamValue newParamValue = org.eclipse.jst.j2ee.common.CommonFactory.eINSTANCE |
| .createParamValue(); |
| newParamValue.setName(paramName); |
| newParamValue.setValue(paramValue); |
| webApp.getContextParams().add(newParamValue); |
| } |
| } |
| }; |
| executeChange(runnable); |
| } |
| |
| @Override |
| public void removeContextParam(final String paramName, |
| final String paramVal) |
| { |
| final Runnable runnable = new Runnable() |
| { |
| public void run() |
| { |
| final org.eclipse.jst.j2ee.webapplication.WebApp webApp = (org.eclipse.jst.j2ee.webapplication.WebApp) ModelProviderManager |
| .getModelProvider(getProject()).getModelObject(); |
| for (final Iterator it = webApp.getContextParams() |
| .iterator(); it.hasNext();) |
| { |
| final org.eclipse.jst.j2ee.common.ParamValue paramValue = (org.eclipse.jst.j2ee.common.ParamValue) it |
| .next(); |
| if (paramName.equals(paramValue.getName().trim()) |
| && paramVal |
| .equals(paramValue.getValue().trim())) |
| { |
| it.remove(); |
| } |
| } |
| } |
| }; |
| executeChange(runnable); |
| } |
| |
| private boolean isContextParamPresent( |
| final org.eclipse.jst.j2ee.webapplication.WebApp webApp, |
| final String paramName) |
| { |
| for (final Iterator it = webApp.getContextParams().iterator(); it |
| .hasNext();) |
| { |
| final org.eclipse.jst.j2ee.common.ParamValue paramValue = (org.eclipse.jst.j2ee.common.ParamValue) it |
| .next(); |
| if (paramName.equals(paramValue.getName().trim())) |
| { |
| return true; |
| } |
| } |
| return false; |
| } |
| |
| @Override |
| public void addListener(final String listenerClass, |
| final boolean addEvenIfPresent) |
| { |
| final Runnable runnable = new Runnable() |
| { |
| public void run() |
| { |
| final org.eclipse.jst.j2ee.webapplication.WebApp webApp = (org.eclipse.jst.j2ee.webapplication.WebApp) ModelProviderManager |
| .getModelProvider(getProject()).getModelObject(); |
| |
| if (addEvenIfPresent |
| || !isListenerPresent(webApp, listenerClass)) |
| { |
| final org.eclipse.jst.j2ee.common.Listener listener = org.eclipse.jst.j2ee.common.CommonFactory.eINSTANCE |
| .createListener(); |
| listener.setListenerClassName(listenerClass); |
| webApp.getListeners().add(listener); |
| } |
| } |
| }; |
| executeChange(runnable); |
| } |
| |
| @Override |
| public void removeListener(final String listenerClass) |
| { |
| final Runnable runnable = new Runnable() |
| { |
| public void run() |
| { |
| final org.eclipse.jst.j2ee.webapplication.WebApp webApp = (org.eclipse.jst.j2ee.webapplication.WebApp) ModelProviderManager |
| .getModelProvider(getProject()).getModelObject(); |
| |
| for (final Iterator listenerIt = webApp.getListeners() |
| .iterator(); listenerIt.hasNext();) |
| { |
| final org.eclipse.jst.j2ee.common.Listener listener = (org.eclipse.jst.j2ee.common.Listener) listenerIt |
| .next(); |
| if (listenerClass.equals(listener |
| .getListenerClassName().trim())) |
| { |
| listenerIt.remove(); |
| } |
| } |
| } |
| }; |
| executeChange(runnable); |
| } |
| |
| private boolean isListenerPresent( |
| final org.eclipse.jst.j2ee.webapplication.WebApp webApp, |
| final String listenerClass) |
| { |
| for (final Iterator listenerIt = webApp.getListeners().iterator(); listenerIt |
| .hasNext();) |
| { |
| final org.eclipse.jst.j2ee.common.Listener listener = (org.eclipse.jst.j2ee.common.Listener) listenerIt |
| .next(); |
| if (listenerClass |
| .equals(listener.getListenerClassName().trim())) |
| { |
| return true; |
| } |
| } |
| return false; |
| } |
| } |
| |
| } |