package org.jboss.arquillian.portal.warp.jsf;
import org.jboss.arquillian.portal.warp.Phase;
import org.jboss.arquillian.warp.jsf.PhaseLifecycleEvent;
import org.jboss.arquillian.warp.spi.WarpLifecycleEvent;
import javax.portlet.ActionRequest;
import javax.portlet.EventRequest;
import javax.portlet.PortletRequest;
import javax.portlet.RenderRequest;
import javax.portlet.ResourceRequest;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;
/**
* @author <a href="http://community.jboss.org/people/kenfinni">Ken Finnigan</a>
*/
public abstract class PortletPhaseLifecycleEvent extends WarpLifecycleEvent {
private PhaseLifecycleEvent phaseLifecycleEvent;
private Phase portletPhase;
private PortletPhaseLifecycleEvent(PhaseLifecycleEvent event, Phase portletPhase) {
this.phaseLifecycleEvent = event;
this.portletPhase = portletPhase;
}
@Override
public List<Annotation> getQualifiers() {
List<Annotation> qualifiers = new ArrayList<>(phaseLifecycleEvent.getQualifiers());
qualifiers.add(
new PortletPhase() {
@Override
public Class<? extends Annotation> annotationType() {
return PortletPhase.class;
}
@Override
public Phase value() {
return portletPhase;
}
}
);
return qualifiers;
}
public static PortletPhaseLifecycleEvent getInstance(PhaseLifecycleEvent event, PortletRequest request) {
if (request instanceof ActionRequest) {
return new ActionRequestPhaseEvent(event);
} else if (request instanceof EventRequest) {
return new EventRequestPhaseEvent(event);
} else if (request instanceof RenderRequest) {
return new RenderRequestPhaseEvent(event);
} else if (request instanceof ResourceRequest) {
return new ResourceRequestPhaseEvent(event);
}
throw new IllegalStateException("Unsupported PortletRequest: " + request);
}
public static class ActionRequestPhaseEvent extends PortletPhaseLifecycleEvent {
private ActionRequestPhaseEvent(PhaseLifecycleEvent event) {
super(event, Phase.ACTION);
}
}
public static class EventRequestPhaseEvent extends PortletPhaseLifecycleEvent {
private EventRequestPhaseEvent(PhaseLifecycleEvent event) {
super(event, Phase.EVENT);
}
}
public static class RenderRequestPhaseEvent extends PortletPhaseLifecycleEvent {
private RenderRequestPhaseEvent(PhaseLifecycleEvent event) {
super(event, Phase.RENDER);
}
}
public static class ResourceRequestPhaseEvent extends PortletPhaseLifecycleEvent {
private ResourceRequestPhaseEvent(PhaseLifecycleEvent event) {
super(event, Phase.RESOURCE);
}
}
}