package org.jboss.test.faces;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.EventListener;
import javax.faces.FacesException;
import javax.faces.application.Application;
import javax.faces.lifecycle.Lifecycle;
import javax.servlet.Filter;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import org.jboss.test.faces.FacesEnvironment.FacesRequest;
import org.junit.rules.MethodRule;
import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.Statement;
/**
*
*/
/**
* @author asmirnov
*
*/
public class FacesRule implements MethodRule,ServletRequestListener {
private final FacesEnvironment environment;
/**
*
*/
protected FacesRule(FacesEnvironment environment){
this.environment = environment;
this.environment.getServer().addWebListener(this);
}
public static FacesRule create() {
return new FacesRule(new FacesEnvironment());
}
public static FacesRule create(ApplicationServer server) {
return new FacesRule(new FacesEnvironment(server));
}
public final Statement apply(final Statement base,
FrameworkMethod method, Object target) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
before();
try {
base.evaluate();
} finally {
after();
}
}
};
}
protected void before() throws Throwable {
environment.start();
}
protected void after() {
environment.release();
}
public ApplicationServer getServer() {
return environment.getServer();
}
public FacesRule withFilter(String name, Filter filter) {
environment.withFilter(name, filter);
return this;
}
public FacesRule withWebRoot(File root) {
environment.withWebRoot(root);
return this;
}
public FacesRule withWebRoot(URL root) {
environment.withWebRoot(root);
return this;
}
public FacesRule withWebRoot(String root) {
environment.withWebRoot(root);
return this;
}
public FacesRule withInitParameter(String name, String value) {
environment.withInitParameter(name, value);
return this;
}
public FacesRule withResource(String path, String resource) {
environment.withResource(path, resource);
return this;
}
public FacesRule withResource(String path, URL resource) {
environment.withResource(path, resource);
return this;
}
public FacesRule withContent(String path, String pageContent) {
environment.withContent(path, pageContent);
return this;
}
public FacesRule withListener(EventListener listener) {
environment.getServer().addWebListener(listener);
return this;
}
public void setSessionAttribute(String name,Object value) {
environment.getServer().getSession().setAttribute(name, value);
}
public void setContextAttribute(String name,Object value) {
environment.getServer().getContext().setAttribute(name, value);
}
public Lifecycle getLifecycle() {
return environment.getLifecycle();
}
public Application getApplication() {
return environment.getApplication();
}
public FacesRequest createFacesRequest() throws Exception {
return environment.createFacesRequest();
}
public FacesRequest createFacesRequest(String url)
throws MalformedURLException, FacesException {
return environment.createFacesRequest(url);
}
public void requestDestroyed(ServletRequestEvent sre) {
}
public void requestInitialized(ServletRequestEvent sre) {
}
}