view 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 source
package de.intevation.flys.artifacts;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.xpath.XPathConstants;

import org.apache.log4j.Logger;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

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.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_RESULT = "/art:result";


    private static final Logger logger =
        Logger.getLogger(CollectionMonitor.class);


    @Override
    public void setup(Node cfg) {
    }


    @Override
    public void execute(Artifact artifact, CallContext context, Document doc) {
        FLYSArtifact flys = (FLYSArtifact) artifact;

        Element result = (Element) XMLUtils.xpath(
            doc,
            XPATH_RESULT,
            XPathConstants.NODE,
            ArtifactNamespaceContext.INSTANCE);

        ElementCreator creator = new ElementCreator(
            doc,
            ArtifactNamespaceContext.NAMESPACE_URI,
            ArtifactNamespaceContext.NAMESPACE_PREFIX);

        Element recommended = creator.create("recommended-artifacts");
        result.appendChild(recommended);

        String[] outs              = extractOutputNames(flys, context);
        Map<String, Object> params = getDataCageParameters(flys, context);

        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();
        }

        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