package ch.dueni.jsf12.lifecycle;
import java.util.Iterator;
import javax.faces.lifecycle.Lifecycle;
import javax.faces.lifecycle.LifecycleFactory;
import javax.faces.webapp.FacesServlet;
/**
* <code>CustomLifecycleFactory</code> enhances the standard JSF <code>LifecycleFactory</code> with
* additional Lifecyle implementations that
* can be activated with the <code>FacesServlet</code> init-param
* {@value FacesServlet#LIFECYCLE_ID_ATTR}.
* <p>
* You can activate s specific Lifecycle implementation by configuring this lifecycle id to be used
* by FacesServlet:
* </p>
* <ul>
* <li>{@value #INTERCEPTING_LIFECYCLE_ID}</li>
* </ul>
*
*/
public class CustomLifecycleFactory extends LifecycleFactory {
/**
* The id of the intercepting lifecycle.
*/
public static final String INTERCEPTING_LIFECYCLE_ID = "InterceptingLifecycle";
/**
* LifecycleFactory delegate.
*/
private LifecycleFactory delegate;
/**
* Delegate injecting constructor.
*
* @param defaultFactory
* the injected delegate LifecycleFactory.
*/
public CustomLifecycleFactory(LifecycleFactory defaultFactory) {
delegate = defaultFactory;
// 1. get default lifecycle to be wrapped by our lifecycle
Lifecycle defaultLifecycle = delegate.getLifecycle(LifecycleFactory.DEFAULT_LIFECYCLE);
// 2. register intercepting lifecycle implementation.
addLifecycle(INTERCEPTING_LIFECYCLE_ID, new InterceptingLifecycle(defaultLifecycle));
}
@Override
public void addLifecycle(String lifecycleId, Lifecycle lifecycle) {
delegate.addLifecycle(lifecycleId, lifecycle);
}
@Override
public Lifecycle getLifecycle(String lifecycleId) {
return delegate.getLifecycle(lifecycleId);
}
@Override
public Iterator<String> getLifecycleIds() {
return delegate.getLifecycleIds();
}
}