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)