Mercurial > dive4elements > river
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 :