Skip to content

Commit

Permalink
Prototype of Faces #1443 and #1276
Browse files Browse the repository at this point in the history
  • Loading branch information
tandraschko committed Jun 11, 2024
1 parent 3689580 commit 63a3fe8
Show file tree
Hide file tree
Showing 5 changed files with 149 additions and 57 deletions.
38 changes: 38 additions & 0 deletions api/src/main/java/jakarta/faces/event/AfterPhase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package jakarta.faces.event;

import jakarta.enterprise.util.AnnotationLiteral;
import jakarta.inject.Qualifier;

import java.lang.annotation.*;

@Target({ ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Qualifier
public @interface AfterPhase
{
PhaseId value();

public final static class Literal extends AnnotationLiteral<AfterPhase> implements AfterPhase
{
private static final long serialVersionUID = 1L;

private final PhaseId value;

public static Literal of(PhaseId value)
{
return new Literal(value);
}

private Literal(PhaseId value)
{
this.value = value;
}

@Override
public PhaseId value()
{
return value;
}
}
}
38 changes: 38 additions & 0 deletions api/src/main/java/jakarta/faces/event/BeforePhase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package jakarta.faces.event;

import jakarta.enterprise.util.AnnotationLiteral;
import jakarta.inject.Qualifier;

import java.lang.annotation.*;

@Target({ ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Qualifier
public @interface BeforePhase
{
PhaseId value();

public final static class Literal extends AnnotationLiteral<BeforePhase> implements BeforePhase
{
private static final long serialVersionUID = 1L;

private final PhaseId value;

public static Literal of(PhaseId value)
{
return new Literal(value);
}

private Literal(PhaseId value)
{
this.value = value;
}

@Override
public PhaseId value()
{
return value;
}
}
}
77 changes: 21 additions & 56 deletions api/src/main/java/jakarta/faces/event/PhaseId.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,88 +18,53 @@
*/
package jakarta.faces.event;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import jakarta.faces.FacesException;
import org.apache.myfaces.core.api.shared.lang.Assert;

import java.util.List;

/**
* see Javadoc of <a href="http://java.sun.com/javaee/javaserverfaces/1.2/docs/api/index.html">Faces Specification</a>
*/
public class PhaseId implements Comparable
public enum PhaseId
{
// FIELDS
public static final PhaseId ANY_PHASE;
public static final PhaseId APPLY_REQUEST_VALUES;
public static final PhaseId INVOKE_APPLICATION;
public static final PhaseId PROCESS_VALIDATIONS;
public static final PhaseId RENDER_RESPONSE;
public static final PhaseId RESTORE_VIEW;
public static final PhaseId UPDATE_MODEL_VALUES;
ANY_PHASE,
APPLY_REQUEST_VALUES,
INVOKE_APPLICATION,
PROCESS_VALIDATIONS,
RENDER_RESPONSE,
RESTORE_VIEW,
UPDATE_MODEL_VALUES;

public static final List<PhaseId> VALUES;

static
{
int i = 0;
ArrayList<PhaseId> list = new ArrayList<PhaseId>(6);

ANY_PHASE = new PhaseId("ANY_PHASE", i++);
list.add(ANY_PHASE);
RESTORE_VIEW = new PhaseId("RESTORE_VIEW", i++);
list.add(RESTORE_VIEW);
APPLY_REQUEST_VALUES = new PhaseId("APPLY_REQUEST_VALUES", i++);
list.add(APPLY_REQUEST_VALUES);
PROCESS_VALIDATIONS = new PhaseId("PROCESS_VALIDATIONS", i++);
list.add(PROCESS_VALIDATIONS);
UPDATE_MODEL_VALUES = new PhaseId("UPDATE_MODEL_VALUES", i++);
list.add(UPDATE_MODEL_VALUES);
INVOKE_APPLICATION = new PhaseId("INVOKE_APPLICATION", i++);
list.add(INVOKE_APPLICATION);
RENDER_RESPONSE = new PhaseId("RENDER_RESPONSE", i++);
list.add(RENDER_RESPONSE);
VALUES = Collections.unmodifiableList(list);
}

private final String _name;
private final int _ordinal;

// CONSTRUCTORS
private PhaseId(String name, int ordinal)
{
this._name = name;
this._ordinal = ordinal;
}

// METHODS
public int compareTo(Object other)
{
return _ordinal - ((PhaseId) other)._ordinal;
VALUES = List.of(PhaseId.values());
}

public int getOrdinal()
{
return _ordinal;
return ordinal();
}

@Override
public String toString()
{
return _name + '(' + _ordinal + ')';
}

/*
* @since 2.2
*/
public String getName()
{
return this._name;
return name();
}

@Override
public String toString()
{
return getName() + '(' + getOrdinal() + ')';
}

public static PhaseId phaseIdValueOf(String phase)
{
Assert.notNull(phase, "phase");

for (int i = 0; i < VALUES.size(); i++)
{
PhaseId phaseId = VALUES.get(i);
Expand All @@ -108,6 +73,6 @@ public static PhaseId phaseIdValueOf(String phase)
return phaseId;
}
}
throw new FacesException("Phase "+phase+" is invalid");
throw new FacesException("Phase " + phase + " is invalid");
}
}
6 changes: 5 additions & 1 deletion impl/src/main/conf/META-INF/standard-faces-config-base.xml
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,11 @@
<tag-handler-delegate-factory>org.apache.myfaces.view.facelets.tag.faces.TagHandlerDelegateFactoryImpl</tag-handler-delegate-factory>
<client-window-factory>org.apache.myfaces.lifecycle.clientwindow.ClientWindowFactoryImpl</client-window-factory>
</factory>


<lifecycle>
<phase-listener>org.apache.myfaces.cdi.PhaseBroadcaster</phase-listener>
</lifecycle>

<!-- behaviors by id -->
<behavior>
<behavior-id>jakarta.faces.behavior.Ajax</behavior-id>
Expand Down
47 changes: 47 additions & 0 deletions impl/src/main/java/org/apache/myfaces/cdi/PhaseBroadcaster.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package org.apache.myfaces.cdi;

import jakarta.enterprise.event.Event;
import jakarta.enterprise.inject.spi.BeanManager;
import jakarta.faces.event.*;
import org.apache.myfaces.cdi.util.CDIUtils;

public class PhaseBroadcaster implements PhaseListener
{
@Override
public void beforePhase(PhaseEvent phaseEvent)
{
BeanManager beanManager = CDIUtils.getBeanManager(phaseEvent.getFacesContext());
if (beanManager == null)
{
return;
}

Event<Object> event = beanManager.getEvent();

event.select(BeforePhase.Literal.of(phaseEvent.getPhaseId())).fire(event);

event.select(BeforePhase.Literal.of(PhaseId.ANY_PHASE)).fire(event);
}

@Override
public void afterPhase(PhaseEvent phaseEvent)
{
BeanManager beanManager = CDIUtils.getBeanManager(phaseEvent.getFacesContext());
if (beanManager == null)
{
return;
}

Event<Object> event = beanManager.getEvent();

event.select(AfterPhase.Literal.of(phaseEvent.getPhaseId())).fire(event);

event.select(AfterPhase.Literal.of(PhaseId.ANY_PHASE)).fire(event);
}

@Override
public PhaseId getPhaseId()
{
return PhaseId.ANY_PHASE;
}
}

0 comments on commit 63a3fe8

Please sign in to comment.