view flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/BedHeightAccess.java @ 4837:9e25c7523485

Fixed calculation of effective width in MINFO SQ relation. * Get all (including empty datasets) from db. * Filter empty datasets when processing data of the same date. * Added debug outputs.
author Raimund Renkert <rrenkert@intevation.de>
date Wed, 23 Jan 2013 11:14:41 +0100
parents cd44d28d0fbc
children a3dc382bc1ca
line wrap: on
line source
package de.intevation.flys.artifacts.access;

import java.util.List;

import de.intevation.flys.artifacts.FLYSArtifact;
import de.intevation.flys.artifacts.model.minfo.BedHeight;
import de.intevation.flys.artifacts.model.minfo.BedHeightFactory;
import de.intevation.flys.artifacts.states.SoundingsSelect;
import de.intevation.flys.model.BedHeightSingle;
import de.intevation.flys.model.BedHeightSingleValue;

import gnu.trove.TIntArrayList;

import org.apache.log4j.Logger;


public class BedHeightAccess extends Access {

    private static final Logger logger = Logger.getLogger(BedHeightAccess.class);

    private int[] singleIDs;
    private int[] epochIDs;

    private Double lowerKM;
    private Double upperKM;

    private String time;

    public BedHeightAccess(FLYSArtifact artifact) {
        super(artifact);
    }


    public Double getLowerKM() {
        if (lowerKM == null) {
            lowerKM = getDouble("ld_from");
        }

        return lowerKM;
    }


    public Double getUpperKM() {
        if (upperKM == null) {
            upperKM = getDouble("ld_to");
        }

        return upperKM;
    }


    public int[] getBedHeightSingleIDs() {
        if (singleIDs == null) {
            String data = getString("soundings");

            if (data == null) {
                logger.warn("No 'soundings' parameter specified!");
                return null;
            }
            else {
                logger.debug("getBedHeightSingleIDs(): data=" + data);
            }

            String[] parts = data.split(";");

            TIntArrayList ids = new TIntArrayList();

            for (String part: parts) {
                if (part.indexOf(SoundingsSelect.PREFIX_SINGLE) >= 0) {
                    String tmp = part.replace(SoundingsSelect.PREFIX_SINGLE, "");

                    try {
                        int i = Integer.parseInt(tmp);
                        if (!ids.contains(i)) {
                            ids.add(i);
                        }
                    }
                    catch (NumberFormatException nfe) {
                        logger.warn("Cannot parse int from string: '" + tmp + "'");
                    }
                }
            }

            singleIDs = ids.toNativeArray();
        }

        return singleIDs;
    }


    public String getYearEpoch() {
        if (time == null) {
            time =  getString("ye_select");
        }
        return time;
    }


    public int[] getBedHeightEpochIDs() {
        if (epochIDs == null) {
            String data = getString("soundings");

            if (data == null) {
                logger.warn("No 'soundings' parameter specified!");
                return null;
            }

            String[] parts = data.split(";");

            TIntArrayList ids = new TIntArrayList();

            for (String part: parts) {
                if (part.indexOf(SoundingsSelect.PREFIX_EPOCH) >= 0) {
                    String tmp = part.replace(SoundingsSelect.PREFIX_EPOCH, "");

                    try {
                        ids.add(Integer.parseInt(tmp));
                    }
                    catch (NumberFormatException nfe) {
                        logger.warn("Cannot parse int from string: '" + tmp + "'");
                    }
                }
            }

            epochIDs = ids.toNativeArray();
        }

        return epochIDs;
    }

    /**
     * Return the {@link BedHeight} at the height_id and time of the artifact
     * @return {@link BedHeight}
     */
    public BedHeight getHeight() {
        logger.debug("getHeight");
        return BedHeightFactory.getHeight(
            artifact.getDataAsString("type"),
            Integer.parseInt(artifact.getDataAsString("height_id")),
            Integer.parseInt(artifact.getDataAsString("time")));
    }

    /**
     * Return a {@link List} of {@link BedHeightSingleValue}s
     * at the range of the artifact
     * @return List of {@link BedHeightSingleValue}s
     */
    public List<BedHeightSingleValue> getSingleValues() {
        logger.debug("getSingleValues");
        BedHeightSingle single = BedHeightSingle.getBedHeightSingleById(
                artifact.getDataAsInteger("height_id"));
        return BedHeightSingleValue.getBedHeightSingleValues(single,
                artifact.getDataAsDouble("ld_from"),
                artifact.getDataAsDouble("ld_to"));
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org