view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/ManualPointsSingleState.java @ 4031:e4e345d81a65

issue889/2
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Thu, 04 Oct 2012 14:54:44 +0200
parents 1ff257ab38ca
children fbaba8e1a3a2
line wrap: on
line source
package de.intevation.flys.artifacts.states;

import java.util.List;

import org.apache.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONException;

import de.intevation.artifactdatabase.state.Facet;
import de.intevation.artifacts.CallContext;
import de.intevation.artifacts.CallMeta;
import de.intevation.flys.artifacts.FLYSArtifact;
import de.intevation.flys.artifacts.ManualPointsArtifact;
import de.intevation.flys.artifacts.model.CrossSectionWaterLineFacet;
import de.intevation.flys.artifacts.model.FacetTypes;
import de.intevation.flys.artifacts.model.ManualPointsFacet;
import de.intevation.flys.artifacts.resources.Resources;

/**
 * The only state for an ManualPointArtifact.
 */
public class ManualPointsSingleState
extends      DefaultState
implements   FacetTypes
{
    /** Developer-centric description of facet. */
    public static final String I18N_DESCRIPTION
        = "facet.longitudinal_section.manualpoint";

    /** Part of data key. */
    protected static final String DOT_DATA
        = ".data";

    /** Part of data key. */
    protected static final String DOT_LINES
        = ".lines";

    /** The logger that is used in this state. */
    private static final Logger logger =
        Logger.getLogger(ManualPointsSingleState.class);


    /**
     * Add ManualPointsFacets to list of Facets.
     *
     * @param artifact Ignored.
     * @param hash Ignored.
     * @param meta CallMeta to be used for internationalization.
     * @param facets List to add ManualPointsFacet to.
     *
     * @return null.
     */
    public Object compute(
        FLYSArtifact artifact,
        String       hash,
        CallMeta     meta,
        List<Facet>  facets
    ) {
        logger.debug("ManualPointsSingleState.compute()");
        ManualPointsArtifact points = (ManualPointsArtifact) artifact;

        // Add Facet per Diagram type if data given.
        for (ChartType ct: ChartType.values()) {
            // Handle points.
            String pointData = points.getDataAsString(ct + "." + MANUALPOINTS +
                DOT_DATA);
            if (pointData != null && pointData.length() != 0
                && !pointData.equals("[]")) {
                String fName = ct + "." + MANUALPOINTS;
                ManualPointsFacet facet = new ManualPointsFacet(
                    0,
                    fName,
                    Resources.getMsg(meta, "manualpoints", "Manual Points"));
                facets.add(facet);
                logger.debug("compute(): ManualPointsFacet for " + ct + " created");
            }
            else {
                logger.debug("compute(): No points for " + ct);
            }

            // Handle lines.
            String linesData = points.getDataAsString(ct + "." + MANUALPOINTS +
                DOT_LINES);
            if (linesData != null && linesData.length() != 0
                && !linesData.equals("[]")) {
                try {
                    JSONArray lines = new JSONArray(linesData);
                    for (int i = 0, P = lines.length(); i < P; i++) {
                        JSONArray array = lines.getJSONArray(i);
                        double y    = array.getDouble(0);
                        String name = array.getString(1);
                        String fName = ct + "." + MANUALLINE;
                        logger.debug("have facet: " + y + " / " + name + " -> " + fName);
                        CrossSectionWaterLineFacet facet = new CrossSectionWaterLineFacet(
                            i,
                            fName,
                            name);

                        facets.add(facet);
                    }
                }
                catch(JSONException e){
                    logger.error("Could not decode json.");
                }

            }
            else {
                //logger.debug("No points for " + ct);
            }
        }

        return null;
    }


    /** Call compute. */
    @Override
    public Object computeInit(
        FLYSArtifact artifact,
        String       hash,
        Object       context,
        CallMeta     meta,
        List<Facet>  facets
     ) {
        return compute(artifact, hash, meta, facets);
    }


    /** Call compute. */
    @Override
    public Object computeFeed(
        FLYSArtifact artifact,
        String hash,
        CallContext context,
        List<Facet> facets,
        Object old
    ) {
        return compute(artifact, hash, context.getMeta(), facets);
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org