diff artifact-database/src/main/java/de/intevation/artifactdatabase/AbstractCallContext.java @ 353:33d7a6da1a05

Extended CallContext to also act as a blackboard/service broker. artifacts/trunk@3331 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Wed, 30 Nov 2011 08:24:55 +0000
parents a8a06bbe306c
children 1d11a0531242
line wrap: on
line diff
--- a/artifact-database/src/main/java/de/intevation/artifactdatabase/AbstractCallContext.java	Wed Nov 30 08:20:15 2011 +0000
+++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/AbstractCallContext.java	Wed Nov 30 08:24:55 2011 +0000
@@ -7,11 +7,14 @@
  */
 package de.intevation.artifactdatabase;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.HashMap;
 
 import de.intevation.artifacts.ArtifactDatabase;
 import de.intevation.artifacts.CallContext;
 import de.intevation.artifacts.CallMeta;
+import de.intevation.artifacts.DataProvider;
 
 
 /**
@@ -42,6 +45,11 @@
      */
     protected HashMap customValues;
 
+    /**
+     * Map to act like a clipboard when nesting calls like a proxy artifact.
+     */
+    protected HashMap<Object, List<DataProvider>> dataProviders;
+
 
     /**
      * The default constructor of this abstract CallContext.
@@ -101,5 +109,36 @@
         }
         return customValues.put(key, value);
     }
+
+    /**
+     * Get list of DataProviders that registered for given key.
+     * @return list (empty list if none found, never null).
+     */
+    public List<DataProvider> getDataProvider(Object key) {
+        return dataProviders != null
+            ? dataProviders.get(key)
+            : null;//java.util.Collections.emptyList();
+    }
+
+    /**
+     * Let a DataProvider register itself with given key.
+     * Multiple DataProvider can register under the same key.
+     */
+    public Object registerDataProvider(Object key, DataProvider value) {
+        List<DataProvider> providers = null;
+        if (dataProviders == null) {
+            dataProviders = new HashMap();
+            providers = new ArrayList<DataProvider>();
+            providers.add(value);
+            return dataProviders.put(key, providers);
+        }
+        providers = dataProviders.get(key);
+
+        if (providers == null) {
+            providers = new ArrayList<DataProvider>();
+        }
+        providers.add(value);
+        return dataProviders.put(key, providers);
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org