view flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/Calculation4Access.java @ 5443:3d7e552cc396

Datacage: Index macros with a map. Reduces excessive linear scanning for macros when calling them.
author Sascha L. Teichmann <teichmann@intevation.de>
date Tue, 26 Mar 2013 22:29:55 +0100
parents f2e7f07f608d
children
line wrap: on
line source
package de.intevation.flys.artifacts.access;

import de.intevation.flys.artifacts.FLYSArtifact;

import de.intevation.flys.artifacts.model.Segment;

import java.util.Collections;
import java.util.List;

import org.apache.log4j.Logger;

import de.intevation.flys.utils.DoubleUtil;

public class Calculation4Access
extends      RangeAccess
{
    private static Logger log = Logger.getLogger(Calculation4Access.class);

    protected List<Segment> segments;

    protected double [] fromToStep;

    protected Boolean isQ;

    protected Boolean isRange;


    public Calculation4Access(FLYSArtifact artifact) {
        super(artifact, null);
    }

    public List<Segment> getSegments() {
        if (segments == null) {
            String input = getString("wq_values");
            if (input == null || (input = input.trim()).length() == 0) {
                log.warn("no wq_values given");
                segments = Collections.<Segment>emptyList();
            }
            else {
                segments = Segment.parseSegments(input);
            }
        }
        return segments;
    }

    public boolean isQ() {
        if (isQ == null) {
            Boolean value = getBoolean("wq_isq");
            isQ = value != null && value;
        }
        return isQ;
    }

    public boolean isRange() {
        if (isRange == null) {
            String mode = getString("ld_mode");
            isRange = mode == null || mode.equals("distance");
        }
        return isRange;
    }

    public double [] getFromToStep() {
        if (fromToStep == null) {
            // XXX: Is this really needed in this calculation?
            if (!isRange()) {
                return null;
            }

            // XXX: FLYSArtifact sucks!
            // TODO further use RangeAccess functionality.
            double [] fromTo = getKmRange();

            if (fromTo == null) {
                return null;
            }

            Double dStep = getDouble("ld_step");
            if (dStep == null) {
                return null;
            }

            fromToStep =  new double [] {
                fromTo[0],
                fromTo[1],
                DoubleUtil.round(dStep / 1000d)
            };
        }
        return fromToStep;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org