diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/CollectionMonitor.java @ 964:ff6ce301c472

Modified the CollectionMonitor (for recommended artifacts) to use the DataCage. flys-artifacts/trunk@2384 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 21 Jul 2011 10:45:52 +0000
parents f4439e015278
children 79251b1d47da
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/CollectionMonitor.java	Wed Jul 20 22:03:50 2011 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/CollectionMonitor.java	Thu Jul 21 10:45:52 2011 +0000
@@ -1,7 +1,5 @@
 package de.intevation.flys.artifacts;
 
-import java.io.File;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -13,72 +11,31 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
 
 import de.intevation.artifacts.Artifact;
 import de.intevation.artifacts.ArtifactNamespaceContext;
 import de.intevation.artifacts.CallContext;
 import de.intevation.artifacts.Hook;
 
-import de.intevation.artifacts.common.utils.Config;
 import de.intevation.artifacts.common.utils.XMLUtils;
 import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator;
 
+import de.intevation.artifactdatabase.state.Output;
+
+import de.intevation.flys.artifacts.services.meta.DataCage;
+
 
 public class CollectionMonitor implements Hook {
 
-    public static final String XPATH_STATES = "output-defaults/state";
     public static final String XPATH_RESULT = "/art:result";
 
 
-    protected Map<String, List<String>> states;
-
-
     private static final Logger logger =
         Logger.getLogger(CollectionMonitor.class);
 
 
     @Override
     public void setup(Node cfg) {
-        Element config = (Element) cfg;
-        String  xlink  = config.getAttribute("xlink:href");
-        xlink          = Config.replaceConfigDir(xlink);
-
-        File file = new File(xlink);
-
-        if (file == null || !file.exists()) {
-            logger.error("The config file '" + xlink + "' does not exist.");
-            return;
-        }
-
-        Document outputDefaults = XMLUtils.parseDocument(file);
-
-        NodeList states = (NodeList) XMLUtils.xpath(
-            outputDefaults,
-            XPATH_STATES,
-            XPathConstants.NODESET);
-
-        int len = states != null ? states.getLength() : 0;
-
-        this.states = new HashMap<String, List<String>>(len);
-
-        for (int i = 0; i < len; i++) {
-            Element state = (Element) states.item(i);
-
-            String stateId = state.getAttribute("id");
-            String factory = state.getAttribute("artifact-factory");
-
-            if (stateId != null && factory != null) {
-                List<String> factories = this.states.get(stateId);
-
-                if (factories == null) {
-                    factories = new ArrayList<String>();
-                    this.states.put(stateId, factories);
-                }
-
-                factories.add(factory);
-            }
-        }
     }
 
 
@@ -86,21 +43,6 @@
     public void execute(Artifact artifact, CallContext context, Document doc) {
         FLYSArtifact flys = (FLYSArtifact) artifact;
 
-        String stateId = flys.getCurrentStateId();
-
-        List<String> factories = states.get(stateId);
-
-        if (factories == null || factories.isEmpty()) {
-            return;
-        }
-
-        logger.info("Found " + factories.size() + " recommended artifacts.");
-
-        appendRecommendations(doc, factories);
-    }
-
-
-    protected void appendRecommendations(Document doc, List<String> factories) {
         Element result = (Element) XMLUtils.xpath(
             doc,
             XPATH_RESULT,
@@ -113,15 +55,39 @@
             ArtifactNamespaceContext.NAMESPACE_PREFIX);
 
         Element recommended = creator.create("recommended-artifacts");
+        result.appendChild(recommended);
 
-        for (String factory: factories) {
-            Element fac = creator.create("artifact-factory");
-            creator.addAttr(fac, "name", factory);
+        String[] outs              = extractOutputNames(flys, context);
+        Map<String, Object> params = getDataCageParameters(flys, context);
 
-            recommended.appendChild(fac);
+        DataCage dc = DataCage.getInstance();
+        dc.recommend(flys, outs, params, recommended);
+    }
+
+
+    public static String[] extractOutputNames(
+        FLYSArtifact flys,
+        CallContext  context)
+    {
+        List<Output> outs = flys.getOutputs(context);
+        String[]    names = new String[outs.size()];
+
+        for (int i = 0, num = outs != null ? outs.size() : 0; i < num; i++) {
+            names[i] = outs.get(i).getName();
         }
 
-        result.appendChild(recommended);
+        return names;
+    }
+
+
+    protected Map<String, Object> getDataCageParameters(
+        FLYSArtifact flys,
+        CallContext  context)
+    {
+        Map<String, Object> params = new HashMap<String, Object>(1);
+        params.put("recommended", "true");
+
+        return params;
     }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org