view flys-artifacts/src/main/java/de/intevation/flys/artifacts/CollectionMonitor.java @ 4187:21f4e4b79121

Refactor GaugeDischargeCurveFacet to be able to set a facet name For adding another output of the GaugeDischargeCurveArtifact it is necessary to provide to facet instances with different names. Therefore the GaugeDischargeCurveFacet is extended to set the facet name in the constructor.
author Björn Ricks <bjoern.ricks@intevation.de>
date Fri, 19 Oct 2012 13:25:49 +0200
parents 58bdf95df5e4
children 06c10ad39280
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.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.datacage.Recommendations;

public class CollectionMonitor implements Hook {

    public static final String XPATH_RESULT = "/art:result";

    @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 = getNoneUserSpecificParameters(flys, context);

        Recommendations rec = Recommendations.getInstance();

        // TODO For newer official-lines recommendations we actually
        // need user-id (null here).
        rec.recommend(flys, null, outs, params, recommended);
    }


    /**
     * Get outputnames from current state (only the ones for which
     * facets exist).
     */
    public static String[] extractOutputNames(
        FLYSArtifact flys,
        CallContext  context)
    {
        if (flys instanceof ChartArtifact) {
            return new String[0];
        }

        List<Output>  outs = flys.getCurrentOutputs(context);

        int num = outs == null ? 0 : outs.size();

        String[] names = new String[num];

        for (int i = 0; i < num; i++) {
            names[i] = outs.get(i).getName();
        }

        return names;
    }


    protected Map<String, Object> getNoneUserSpecificParameters(
        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