You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@onami.apache.org by ra...@apache.org on 2013/03/09 19:17:27 UTC

svn commit: r1454750 - /incubator/onami/trunk/lifecycle/core/main/java/org/apache/onami/lifecycle/core/DefaultStager.java

Author: randgalt
Date: Sat Mar  9 18:17:26 2013
New Revision: 1454750

URL: http://svn.apache.org/r1454750
Log:
1. Use add() instead of offer()
2. Use switch statement in DefaultStager
3. Make DefaultStager constructor protected
4. Better synchronization in stage()

Modified:
    incubator/onami/trunk/lifecycle/core/main/java/org/apache/onami/lifecycle/core/DefaultStager.java

Modified: incubator/onami/trunk/lifecycle/core/main/java/org/apache/onami/lifecycle/core/DefaultStager.java
URL: http://svn.apache.org/viewvc/incubator/onami/trunk/lifecycle/core/main/java/org/apache/onami/lifecycle/core/DefaultStager.java?rev=1454750&r1=1454749&r2=1454750&view=diff
==============================================================================
--- incubator/onami/trunk/lifecycle/core/main/java/org/apache/onami/lifecycle/core/DefaultStager.java (original)
+++ incubator/onami/trunk/lifecycle/core/main/java/org/apache/onami/lifecycle/core/DefaultStager.java Sat Mar  9 18:17:26 2013
@@ -20,8 +20,10 @@ package org.apache.onami.lifecycle.core;
  */
 
 import java.lang.annotation.Annotation;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Queue;
 
 /**
@@ -41,27 +43,51 @@ public class DefaultStager<A extends Ann
      * @param stage the annotation that specifies this stage
      * @param mode  execution order
      */
-    public DefaultStager( Class<A> stage, Order mode )
+    protected DefaultStager( Class<A> stage, Order mode )
     {
         this.stage = stage;
 
         Queue<Stageable> localStageables;
-        if ( mode == Order.FIRST_IN_LAST_OUT )
+        switch ( mode )
         {
-            localStageables = Collections.asLifoQueue( new LinkedList<Stageable>() );
-        }
-        else
-        {
-            localStageables = new LinkedList<Stageable>();
+            case FIRST_IN_FIRST_OUT:
+            {
+                localStageables = new LinkedList<Stageable>();
+                break;
+            }
+
+            case FIRST_IN_LAST_OUT:
+            {
+                localStageables = Collections.asLifoQueue( new LinkedList<Stageable>() );
+                break;
+            }
+
+            default:
+            {
+                throw new IllegalArgumentException( "Unknown mode: " + mode );
+            }
         }
         stageables = localStageables;
     }
 
+    /**
+     * Allocate a new stager
+     *
+     * @param stage the stage annotation
+     * @return stager
+     */
     public static <A extends Annotation> Stager<A> newStager( Class<A> stage )
     {
         return newStager( stage, Order.FIRST_IN_FIRST_OUT );
     }
 
+    /**
+     * Allocate a new stager
+     *
+     * @param stage the stage annotation
+     * @param mode  execution order
+     * @return stager
+     */
     public static <A extends Annotation> Stager<A> newStager( Class<A> stage, Order mode )
     {
         return new DefaultStager<A>( stage, mode );
@@ -72,7 +98,7 @@ public class DefaultStager<A extends Ann
      */
     public synchronized void register( Stageable stageable )
     {
-        stageables.offer( stageable );
+        stageables.add( stageable );
     }
 
     /**
@@ -86,16 +112,23 @@ public class DefaultStager<A extends Ann
     /**
      * {@inheritDoc}
      */
-    public synchronized void stage( StageHandler stageHandler )
+    public void stage( StageHandler stageHandler )
     {
         if ( stageHandler == null )
         {
             stageHandler = new NoOpStageHandler();
         }
 
-        while ( !stageables.isEmpty() )
+        List<Stageable> localStageables;
+        synchronized ( this )
+        {
+            localStageables = new ArrayList<Stageable>(stageables);
+            stageables.clear();
+        }
+
+        for ( Stageable stageable : localStageables )
         {
-            stageables.remove().stage( stageHandler );
+            stageable.stage( stageHandler );
         }
     }