BUG-1074: add javadoc for QueueKeeper
[openflowplugin.git] / openflowplugin / src / main / java / org / opendaylight / openflowplugin / openflow / md / queue / QueueKeeper.java
index 627dc555fe393765adc24dac27a5d2601bb43829..c22a81a2203249651294556b449075acbc148b4c 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.openflowplugin.openflow.md.queue;
 
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 
 import org.opendaylight.openflowplugin.openflow.md.core.ConnectionConductor;
@@ -15,33 +16,49 @@ import org.opendaylight.openflowplugin.openflow.md.core.IMDMessageTranslator;
 import org.opendaylight.openflowplugin.openflow.md.core.TranslatorKey;
 
 /**
- * @author mirehak
+ * This processing mechanism based on queue. Processing consists of 2 steps: translate and publish. 
+ * Proposed workflow (might slightly deviate in implementations):
+ * <ol>
+ * <li>messages of input type are pushed in (via {@link QueueKeeper#push(Object, ConnectionConductor)} and similar)</li>
+ * <li>ticket (executable task) is build upon each pushed message and enqueued</li>
+ * <li>ticket is translated using appropriate translator</li>
+ * <li>ticket is dequeued and result is published by appropriate popListener</li>
+ * </ol>
+ * Message order might be not important, e.g. when speed is of the essence
  * @param <IN> source type
  * @param <OUT> result type
  */
 public interface QueueKeeper<IN, OUT> {
     
+    /** type of message enqueue */
+    public enum QueueType {
+        /** ordered processing */
+        DEFAULT,
+        /** unordered processing - bypass fair processing */
+        UNORDERED}
+
     /**
-     * @param listener
+     * @param translatorMapping translators for message processing
      */
-    void addPopListener(PopListener<OUT> listener);
-    
+    void setTranslatorMapping(Map<TranslatorKey, Collection<IMDMessageTranslator<IN, List<OUT>>>> translatorMapping);
+
     /**
-     * @param listener
-     * @return removed listener
+     * enqueue message for processing using {@link QueueType#DEFAULT}
+     * @param message
+     * @param conductor source of message
      */
-    boolean removePopListener(PopListener<OUT> listener);
+    void push(IN message, ConnectionConductor conductor);
     
     /**
-     * @param translatorMapping
+     * enqueue message for processing
+     * @param message
+     * @param conductor source of message
+     * @param queueType - {@link QueueType#DEFAULT} if message order matters, {@link QueueType#UNORDERED} otherwise
      */
-    void setTranslatorMapping(Map<TranslatorKey, Collection<IMDMessageTranslator<IN, OUT>>> translatorMapping);
+    void push(IN message, ConnectionConductor conductor, QueueType queueType);
 
     /**
-     * @param registeredMessageClazz registered message type
-     * @param message
-     * @param conductor
+     * @param popListenersMapping listeners invoked when processing done
      */
-    void push(Class<? extends IN> registeredMessageClazz, IN message, 
-            ConnectionConductor conductor);
+    void setPopListenersMapping(Map<Class<? extends OUT>, Collection<PopListener<OUT>>> popListenersMapping);
 }