Updated Branches: refs/heads/master e49b9d387 -> 951a3b6c0
DELTASPIKE-431 @JsfPhaseListener#ordinal Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/951a3b6c Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/951a3b6c Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/951a3b6c Branch: refs/heads/master Commit: 951a3b6c0320b65d1c16ae5c204bd225cdab6861 Parents: e49b9d3 Author: gpetracek <gpetra...@apache.org> Authored: Sun Oct 27 21:21:02 2013 +0100 Committer: gpetracek <gpetra...@apache.org> Committed: Sun Oct 27 21:23:13 2013 +0100 ---------------------------------------------------------------------- .../jsf/api/listener/phase/JsfPhaseListener.java | 6 ++++-- .../phase/JsfRequestLifecycleBroadcaster.java | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/deltaspike/blob/951a3b6c/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/listener/phase/JsfPhaseListener.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/listener/phase/JsfPhaseListener.java b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/listener/phase/JsfPhaseListener.java index b0e533d..446a41c 100644 --- a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/listener/phase/JsfPhaseListener.java +++ b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/api/listener/phase/JsfPhaseListener.java @@ -31,8 +31,6 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; * Annotation for implementations of {@link javax.faces.event.PhaseListener}. */ -//TODO CODI supports @InvocationOrder - re-visit the discussion - @Target(TYPE) @Retention(RUNTIME) @Inherited @@ -41,4 +39,8 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; @Stereotype public @interface JsfPhaseListener { + /** + * @return ordinal for invocation-order - higher ordinals first + */ + int ordinal() default 1000; //aligned with value in BaseConfigSource } http://git-wip-us.apache.org/repos/asf/deltaspike/blob/951a3b6c/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/phase/JsfRequestLifecycleBroadcaster.java ---------------------------------------------------------------------- diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/phase/JsfRequestLifecycleBroadcaster.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/phase/JsfRequestLifecycleBroadcaster.java index a6866d2..dfef069 100644 --- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/phase/JsfRequestLifecycleBroadcaster.java +++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/listener/phase/JsfRequestLifecycleBroadcaster.java @@ -32,6 +32,8 @@ import javax.faces.event.PhaseListener; import javax.inject.Inject; import java.lang.annotation.Annotation; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.ListIterator; @@ -68,6 +70,22 @@ public class JsfRequestLifecycleBroadcaster this.phaseListeners.add(currentPhaseListener); } } + + //higher ordinals first + sortDescending(this.phaseListeners); + } + + private static void sortDescending(List<PhaseListener> phaseListeners) + { + Collections.sort(phaseListeners, new Comparator<PhaseListener>() + { + @Override + public int compare(PhaseListener phaseListener1, PhaseListener phaseListener2) + { + return (phaseListener1.getClass().getAnnotation(JsfPhaseListener.class).ordinal() > + phaseListener2.getClass().getAnnotation(JsfPhaseListener.class).ordinal()) ? -1 : 1; + } + }); } protected void broadcastBeforeEvent(PhaseEvent phaseEvent)