view flys-artifacts/src/main/java/de/intevation/flys/artifacts/CollectionMonitor.java @ 5622:b28a6d05e969

Add a new mechanism in mapfish print call to add arbitary data maps Data properties are identified by starting with mapfish-data and they are then split in info value pairs where info can be the description of the information and value the value of the information to be transported in the data map.
author Andre Heinecke <aheinecke@intevation.de>
date Tue, 09 Apr 2013 19:04:32 +0200
parents a929d9a9fa1e
children
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;

/** Monitors collection changes. */
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;
    }


    /**
     * Creates Map from Strings "recommended" to "true".
     */
    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