blob: 89984c53ef47a9696e3e5829747cc49241148c5f [file] [log] [blame]
package org.eclipse.jst.jsf.facelet.core.internal.facet;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jst.j2ee.common.CommonFactory;
import org.eclipse.jst.j2ee.model.IModelProvider;
import org.eclipse.jst.j2ee.model.ModelProviderManager;
import org.eclipse.jst.javaee.core.JavaeeFactory;
import org.eclipse.jst.jsf.facelet.core.internal.FaceletCorePlugin;
/**
* Insulates caller from the insane J2EE/JavaEE dual model.
*
* @author cbateman
*
*/
public abstract class WebAppConfigurator
{
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",
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;
}
protected final IProject _project;
WebAppConfigurator(final IProject project)
{
_project = project;
}
public abstract void addContextParam(final String paramName,
final String paramValue);
public abstract void addListener(final String listenerClass);
protected void executeChange(final Runnable runnable)
{
final IPath webXMLPath = new Path("WEB-INF").append("web.xml");
final IModelProvider provider = ModelProviderManager
.getModelProvider(_project);
provider.modify(runnable, webXMLPath);
}
@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 Runnable runnable = new Runnable()
{
public void run()
{
final org.eclipse.jst.javaee.web.WebApp webApp = (org.eclipse.jst.javaee.web.WebApp) ModelProviderManager
.getModelProvider(_project).getModelObject();
final org.eclipse.jst.javaee.core.ParamValue newParamValue = JavaeeFactory.eINSTANCE
.createParamValue();
newParamValue.setParamName(paramName);
newParamValue.setParamValue(paramValue);
webApp.getContextParams().add(newParamValue);
}
};
executeChange(runnable);
}
@Override
public void addListener(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(_project).getModelObject();
final org.eclipse.jst.javaee.core.Listener listener = JavaeeFactory.eINSTANCE
.createListener();
listener.setListenerClass(listenerClass);
webApp.getListeners().add(listener);
}
};
executeChange(runnable);
}
}
@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 Runnable runnable = new Runnable()
{
public void run()
{
final org.eclipse.jst.j2ee.webapplication.WebApp webApp = (org.eclipse.jst.j2ee.webapplication.WebApp) ModelProviderManager
.getModelProvider(_project).getModelObject();
final org.eclipse.jst.j2ee.common.ParamValue newParamValue = CommonFactory.eINSTANCE
.createParamValue();
newParamValue.setName(paramName);
newParamValue.setValue(paramValue);
webApp.getContextParams().add(newParamValue);
}
};
executeChange(runnable);
}
@Override
public void addListener(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(_project).getModelObject();
final org.eclipse.jst.j2ee.common.Listener listener = CommonFactory.eINSTANCE
.createListener();
listener.setListenerClassName(listenerClass);
webApp.getListeners().add(listener);
}
};
executeChange(runnable);
}
}
}