blob: f5de1e9de474dd155c7f29ec87e2c7421d937fa7 [file] [log] [blame]
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;
}
}
}