You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2013/10/27 21:28:20 UTC
git commit: DELTASPIKE-431 @JsfPhaseListener#ordinal
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 <gp...@apache.org>
Authored: Sun Oct 27 21:21:02 2013 +0100
Committer: gpetracek <gp...@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)