view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/GaugeRange.java @ 3141:3582e87e9171

FixA: Made GaugeRange a top level class. flys-artifacts/trunk@4749 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 21 Jun 2012 15:39:34 +0000
parents
children 05a7298c4f20
line wrap: on
line source
package de.intevation.flys.artifacts.model;

import java.io.Serializable;

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

import org.apache.log4j.Logger;

public class GaugeRange
extends      Range
{
    private static Logger log = Logger.getLogger(GaugeRange.class);

    private static final class Sector implements Serializable {

        int    sector;
        double value;

        Sector(int sector, double value) {
            this.sector = sector;
            this.value  = value;
        }
    } // class Sector

    protected int gaugeId;

    protected Map<String, Double> mainValues;
    protected List<Sector> sectors;

    public GaugeRange() {
    }

    public GaugeRange(double start, double end, int gaugeId) {
        super(start, end);
        this.gaugeId = gaugeId;
        mainValues = new HashMap<String, Double>();
        sectors = new ArrayList<Sector>(3);
    }

    public void addMainValue(String label, Double value) {
        int idx = label.indexOf('(');
        if (idx >= 0) {
            label = label.substring(0, idx);
        }
        mainValues.put(label, value);
    }

    protected Double getMainValue(String label) {
        Double v = mainValues.get(label);
        if (v == null) {
            log.warn("Missing main value '"
                + label + "' for gauge " + gaugeId);
        }
        return v;
    }

    public void buildClasses() {
        Double mnq = getMainValue("MNQ");
        Double mq  = getMainValue("MQ");
        Double mhq = getMainValue("MHQ");
        Double hq5 = getMainValue("HQ5");

        Double [][] pairs = {
            { mnq,  mq },
            {  mq, mhq },
            { hq5, hq5 } };

        for (int c = 0; c < pairs.length; ++c) {
            Double [] pair = pairs[c];
            if (pair[0] != null && pair[1] != null) {
                double value = 0.5*(pair[0] + pair[1]);
                sectors.add(new Sector(c, value));
            }
        }
    }

    public int classify(double value) {
        for (Sector sector: sectors) {
            if (value < sector.value) {
                return sector.sector;
            }
        }
        return sectors.size();
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org