changeset 8191:0a70cf74e58d

merged
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 04 Sep 2014 15:48:48 +0200
parents fcc1ffbc2ea6 (diff) 096a7a710500 (current diff)
children adbf980004c0
files
diffstat 15 files changed, 0 insertions(+), 2238 deletions(-) [+]
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/WMSLineArtifact.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.artifacts;
-
-import java.util.List;
-
-import org.apache.log4j.Logger;
-
-import com.vividsolutions.jts.geom.Envelope;
-
-import org.dive4elements.artifactdatabase.state.DefaultOutput;
-import org.dive4elements.artifactdatabase.state.Facet;
-import org.dive4elements.artifactdatabase.state.State;
-
-import org.dive4elements.river.model.River;
-import org.dive4elements.river.model.HWSLine;
-
-import org.dive4elements.river.artifacts.model.FacetTypes;
-import org.dive4elements.river.artifacts.model.RiverFactory;
-import org.dive4elements.river.utils.RiverUtils;
-import org.dive4elements.river.utils.GeometryUtils;
-
-
-public class WMSLineArtifact extends WMSDBArtifact {
-
-    public static final String NAME = "lines";
-
-
-    private static final Logger logger =
-        Logger.getLogger(WMSLineArtifact.class);
-
-
-    @Override
-    public String getName() {
-        return NAME;
-    }
-
-
-    @Override
-    public State getCurrentState(Object cc) {
-        State s = new LineState(this);
-
-        List<Facet> fs = getFacets(getCurrentStateId());
-
-        DefaultOutput o = new DefaultOutput(
-            "floodmap",
-            "floodmap",
-            "image/png",
-            fs,
-            "map");
-
-        s.getOutputs().add(o);
-
-        return s;
-    }
-
-
-    public static class LineState extends WMSDBState implements FacetTypes
-    {
-        private static final Logger logger =
-            Logger.getLogger(LineState.class);
-
-        protected int riverId;
-
-        public LineState(WMSDBArtifact artifact) {
-            super(artifact);
-            riverId = 0;
-        }
-
-        public int getRiverId() {
-            if (riverId == 0) {
-                String   ids   = artifact.getDataAsString("ids");
-                String[] parts = ids.split(";");
-
-                try {
-                    riverId = Integer.parseInt(parts[0]);
-                }
-                catch (NumberFormatException nfe) {
-                    logger.error("Cannot parse river id from '" + parts[0] + "'");
-                }
-            }
-
-            return riverId;
-        }
-
-        @Override
-        protected String getFacetType() {
-            return FLOODMAP_LINES;
-        }
-
-        @Override
-        protected String getUrl() {
-            return RiverUtils.getUserWMSUrl(artifact.identifier());
-        }
-
-        @Override
-        protected String getSrid() {
-            River river = RiverFactory.getRiver(getRiverId());
-            return RiverUtils.getRiverSrid(river.getName());
-        }
-
-        @Override
-        protected Envelope getExtent(boolean reproject) {
-            List<HWSLine> lines = HWSLine.getLines(getRiverId(), getName());
-
-            Envelope max = null;
-
-            for (HWSLine l: lines) {
-                Envelope env = l.getGeom().getEnvelopeInternal();
-
-                if (max == null) {
-                    max = env;
-                    continue;
-                }
-
-                max.expandToInclude(env);
-            }
-
-            return max != null && reproject
-                ? GeometryUtils.transform(max, getSrid())
-                : max;
-        }
-
-        @Override
-        protected String getFilter() {
-            return "river_id=" + String.valueOf(getRiverId()) +
-                " AND name='" + getName() + "'";
-        }
-
-        @Override
-        protected String getDataString() {
-            String srid = getSrid();
-
-            if (RiverUtils.isUsingOracle()) {
-                return "geom FROM lines USING SRID " + srid;
-            }
-            else {
-                return "geom FROM lines USING UNIQUE id USING SRID " + srid;
-            }
-        }
-
-        @Override
-        protected String getGeometryType() {
-            return "LINE";
-        }
-    } // end of WMSKmState
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/access/GaugeAccess.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.artifacts.access;
-
-import org.apache.log4j.Logger;
-
-import org.dive4elements.river.artifacts.D4EArtifact;
-import org.dive4elements.river.utils.RiverUtils;
-
-/** For the moment, light-weight wrapper around RiverUtils. */
-// TODO employ 'Caching' like other Accesses, remove usage of RiverUtils.
-public class GaugeAccess
-extends RangeAccess
-{
-    private static Logger logger = Logger.getLogger(GaugeAccess.class);
-
-    public GaugeAccess(D4EArtifact artifact) {
-        super(artifact);
-    }
-
-
-    public String getGaugeName() {
-        return RiverUtils.getGaugename(this.getArtifact());
-    }
-
-    // TODO there is also getGauges in RiverUtils...
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/charts/TimeseriesStepChart.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,227 +0,0 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.artifacts.charts;
-
-import java.awt.Dimension;
-import java.util.Date;
-import java.util.GregorianCalendar;
-
-import org.jfree.chart.ChartFactory;
-import org.jfree.chart.ChartPanel;
-import org.jfree.chart.JFreeChart;
-import org.jfree.ui.ApplicationFrame;
-
-import org.jfree.data.time.SimpleTimePeriod;
-import org.jfree.data.time.Second;
-import org.jfree.data.time.TimeSeries;
-import org.jfree.data.time.TimeSeriesCollection;
-import org.jfree.data.time.TimePeriodValues;
-import org.jfree.data.time.TimePeriodValuesCollection;
-
-import org.apache.log4j.Logger;
-import org.apache.log4j.PropertyConfigurator;
-
-
-public class TimeseriesStepChart extends ApplicationFrame {
-
-    private static final Logger logger =
-        Logger.getLogger(TimeseriesStepChart.class);
-
-
-    public static final String LOG4J_PROPERTIES = "FLYS_CLIENT_LOG4J_PROPERIES";
-
-    public static final int USER_CHART_TYPE =
-        Integer.getInteger("chart.type", -1);
-
-    public static final int CHART_TYPE_TIMEPERIOD = 1;
-    public static final int CHART_TYPE_TIMESERIES = 2;
-
-
-    public static void main(String[] args) {
-        configureLogging();
-
-        logger.info("Start TimeseriesStepChart demo.");
-
-        if (USER_CHART_TYPE <= 0) {
-            logger.error("Unknown chart type: " + USER_CHART_TYPE);
-        }
-
-        logger.debug("Create Chart from type: " + USER_CHART_TYPE);
-
-        TimeseriesStepChart tsc = new TimeseriesStepChart();
-        tsc.build(USER_CHART_TYPE);
-
-        logger.info("End of TimeseriesStepChart demo.");
-    }
-
-
-    /** Setup the log4j logging (read LOG4J_PROPERIES envvar). */
-    public static void configureLogging() {
-        String log4jProperties = System.getenv(LOG4J_PROPERTIES);
-
-        if (log4jProperties != null && log4jProperties.length() > 0) {
-            PropertyConfigurator.configure(log4jProperties);
-            logger.info("Log4J logging initialized.");
-        }
-        else {
-            System.out.println("Error while setting up Log4J configuration.");
-        }
-
-        System.out.println("LoggingConfigurator.init finished");
-    }
-
-
-    public TimeseriesStepChart() {
-        super("TimeseriesStepChart");
-    }
-
-
-    public void build(int type) {
-        ChartPanel chartPanel = createChartPanel(type);
-        chartPanel.setPreferredSize(new Dimension(500, 300));
-
-        setContentPane(chartPanel);
-
-        pack();
-        setVisible(true);
-    }
-
-
-    protected ChartPanel createChartPanel(int type) {
-        JFreeChart chart = createJFreeChart(type);
-        ChartPanel panel = new ChartPanel(chart);
-        return panel;
-    }
-
-
-    protected JFreeChart createJFreeChart(int type) {
-        if (type == CHART_TYPE_TIMEPERIOD) {
-            return createTimePeriodValuesChart();
-        }
-        else if (type == CHART_TYPE_TIMESERIES) {
-            return createTimeSeriesChart();
-        }
-
-        logger.error("Unknown chart type: " + type);
-
-        return null;
-    }
-
-
-    public static Date createDate(int year, int month, int day) {
-        GregorianCalendar cal = new GregorianCalendar(year, month, day);
-        return cal.getTime();
-    }
-
-
-
-    //
-    // XXX FOLLOWING METHODS ARE USED FOR "TimePeriodValues" CHART TYPE
-    //
-    protected JFreeChart createTimePeriodValuesChart() {
-        return ChartFactory.createTimeSeriesChart(
-            "TimePeriodValues Chart",
-            "Time Axis",
-            "Y Axis",
-            createTimePeriodValuesDataset(),
-            true,
-            false,
-            false);
-    }
-
-
-    protected TimePeriodValuesCollection createTimePeriodValuesDataset() {
-        TimePeriodValuesCollection dataset = new TimePeriodValuesCollection();
-        TimePeriodValues series = createTimePeriodValues();
-
-        dataset.addSeries(series);
-
-        return dataset;
-    }
-
-
-    protected TimePeriodValues createTimePeriodValues() {
-        TimePeriodValues series1 = new TimePeriodValues("Series 1");
-
-        Date start1 = createDate(2000, 0, 1);
-        Date end1   = createDate(2000, 11, 31);
-
-        logger.debug("START DATE 1 = " + start1);
-        logger.debug("END   DATE 1 = " + end1);
-
-        SimpleTimePeriod period1 = new SimpleTimePeriod(start1, end1);
-
-        Date start2 = createDate(2001, 0, 1);
-        Date end2   = createDate(2001, 11, 31);
-        SimpleTimePeriod period2 = new SimpleTimePeriod(start2, end2);
-
-        Date start3 = createDate(2002, 0, 1);
-        Date end3   = createDate(2002, 11, 31);
-        SimpleTimePeriod period3 = new SimpleTimePeriod(start3, end3);
-
-        series1.add(period1, 100);
-        series1.add(period2, 200);
-        series1.add(period3, 150);
-
-        return series1;
-    }
-
-
-    //
-    // XXX FOLLOWING METHODS ARE USED FOR "TimePeriodValues" CHART TYPE
-    //
-    protected JFreeChart createTimeSeriesChart() {
-        return ChartFactory.createTimeSeriesChart(
-            "TimeSeriesCollection Chart",
-            "Time Axis",
-            "Y Axis",
-            createTimeSeriesCollectionDataset(),
-            true,
-            false,
-            false);
-    }
-
-
-    protected TimeSeriesCollection createTimeSeriesCollectionDataset() {
-        TimeSeriesCollection dataset = new TimeSeriesCollection();
-        TimeSeries[]         series  = createTimeSeries();
-
-        for (TimeSeries tmp: series) {
-            dataset.addSeries(tmp);
-        }
-
-        return dataset;
-    }
-
-
-    protected TimeSeries[] createTimeSeries() {
-        TimeSeries series1 = new TimeSeries("Series 1");
-        series1.add(new Second(0, 0, 0, 1, 1, 2000), 100);
-        series1.add(new Second(59, 59, 23, 31, 12, 2000), 100);
-
-        series1.add(new Second(0, 0, 0, 1, 1, 2001), 200);
-        series1.add(new Second(59, 59, 23, 31, 12, 2001), 200);
-
-        series1.add(new Second(0, 0, 0, 1, 1, 2002), 150);
-        series1.add(new Second(59, 59, 23, 31, 12, 2002), 150);
-
-        TimeSeries series2 = new TimeSeries("Series 2");
-        series2.add(new Second(0, 0, 0, 1, 1, 2000), 10);
-        series2.add(new Second(59, 59, 23, 31, 12, 2000), 10);
-
-        series2.add(new Second(0, 0, 0, 1, 1, 2001), 20);
-        series2.add(new Second(59, 59, 23, 31, 12, 2001), 20);
-
-        series2.add(new Second(0, 0, 0, 1, 1, 2002), 15);
-        series2.add(new Second(59, 59, 23, 31, 12, 2002), 15);
-
-        return new TimeSeries[] { series1, series2 };
-    }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/map/PrintMap.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,139 +0,0 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.artifacts.map;
-
-import java.awt.Color;
-import java.awt.Rectangle;
-
-import java.io.File;
-import java.io.IOException;
-
-import java.awt.Graphics2D;
-import java.awt.image.BufferedImage;
-
-import java.util.List;
-
-import java.net.URL;
-import java.net.MalformedURLException;
-
-import javax.imageio.ImageIO;
-
-
-import org.geotools.data.ows.Layer;
-import org.geotools.data.ows.WMSCapabilities;
-import org.geotools.data.wms.WebMapServer;
-import org.geotools.geometry.jts.ReferencedEnvelope;
-import org.geotools.map.MapContext;
-import org.geotools.map.WMSMapLayer;
-import org.geotools.ows.ServiceException;
-import org.geotools.renderer.lite.StreamingRenderer;
-import org.geotools.renderer.GTRenderer;
-
-
-public class PrintMap {
-
-    public static final String DEFAULT_WMS = "http://map1.naturschutz.rlp.de/service_lanis/mod_wms/wms_getmap.php?mapfile=group_gdide&REQUEST=GetCapabilities&SERVICE=WMS";
-    public static final String DEFAULT_OUTFILE = "~/map.jpeg";
-
-    public static final String MAPSERVER = System.getProperty("wms", DEFAULT_WMS);
-    public static final String MAP_IMAGE = System.getProperty("outfile", DEFAULT_OUTFILE);
-
-
-    public static void main(String[] args) {
-        System.out.println("-> start PrintMap");
-        System.out.println("  -> Print layers of WMS: " + MAPSERVER);
-
-        try {
-            WebMapServer    server = getMapserver();
-            WMSMapLayer[] wmsLayer = getWMSLayers(server);
-
-            MapContext mapcontent = new MapContext( wmsLayer );
-            mapcontent.setTitle(" NEW MAP CONTENT TITLE ");
-
-            printMap(mapcontent);
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        System.out.println("-> finished PrintMap");
-    }
-
-
-    public static void printMap(MapContext map) throws Exception {
-        int imageWidth = 600;
-
-        GTRenderer renderer = new StreamingRenderer();
-        renderer.setContext(map);
-
-        Rectangle imageBounds = null;
-        ReferencedEnvelope mapBounds = null;
-
-        try {
-            mapBounds = map.getLayerBounds();
-            double heightToWidth = mapBounds.getSpan(1) / mapBounds.getSpan(0);
-            imageBounds = new Rectangle(
-                0, 0,
-                imageWidth,
-                (int) Math.round(imageWidth * heightToWidth));
-
-        }
-        catch (Exception e) {
-            // failed to access map layers
-            throw new RuntimeException(e);
-        }
-
-        BufferedImage image = new BufferedImage(imageBounds.width, imageBounds.height, BufferedImage.TYPE_INT_RGB);
-        Graphics2D gr = image.createGraphics();
-        gr.setPaint(Color.WHITE);
-        gr.fill(imageBounds);
-
-        try {
-            renderer.paint(gr, imageBounds, mapBounds);
-            File fileToSave = new File(MAP_IMAGE);
-            ImageIO.write(image, "jpeg", fileToSave);
-        }
-        catch (IOException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-
-    public static WebMapServer getMapserver() throws MalformedURLException, IOException, ServiceException {
-        return new WebMapServer(getServerUrl());
-    }
-
-
-    public static URL getServerUrl() throws MalformedURLException {
-        return new URL(MAPSERVER);
-    }
-
-
-    public static WMSMapLayer[] getWMSLayers(WebMapServer server) {
-        if (server == null) {
-            System.out.println("WebMapServer == null");
-            throw new RuntimeException("WebMapServer == null");
-        }
-
-        WMSCapabilities capabilities = server.getCapabilities();
-
-        List<Layer> layers = capabilities.getLayerList();
-        WMSMapLayer[] wmslayers = new WMSMapLayer[layers.size()];
-
-        for (int i = 0, L = layers.size(); i < L; i++) {
-            Layer l = layers.get(i);
-
-            System.out.println("   -> add layer: " + l);
-            wmslayers[i] = new WMSMapLayer(server, l);
-        }
-
-        return wmslayers;
-    }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/math/FilterFunction.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.artifacts.math;
-
-public class FilterFunction implements Function {
-
-    protected Function parent;
-
-    public FilterFunction(Function parent) {
-        this.parent = parent;
-    }
-
-    @Override
-    public double value(double x) {
-        return parent.value(x);
-    }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/math/LinearFilterFunction.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.artifacts.math;
-
-public class LinearFilterFunction
-extends      FilterFunction
-{
-    protected double m;
-    protected double b;
-
-    public LinearFilterFunction(double m, double b) {
-        this(Identity.IDENTITY, m, b);
-    }
-
-    public LinearFilterFunction(Function parent, double m, double b) {
-        super(parent);
-        this.m = m;
-        this.b = b;
-    }
-
-    @Override
-    public double value(double x) {
-        return super.value(x)*m + b;
-    }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/math/LinearFunction.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.artifacts.math;
-
-public class LinearFunction
-implements   Function
-{
-    protected double m;
-    protected double b;
-
-    public LinearFunction(double m, double b) {
-        this.m = m;
-        this.b = b;
-    }
-
-    @Override
-    public double value(double x) {
-        return x*m + b;
-    }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/LinearInterpolated.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,228 +0,0 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.artifacts.model;
-
-import gnu.trove.TDoubleArrayList;
-
-import java.io.Serializable;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-import org.apache.commons.math.stat.descriptive.moment.StandardDeviation;
-
-import org.dive4elements.river.artifacts.math.Linear;
-
-import org.dive4elements.river.backend.utils.EpsilonComparator;
-
-public class LinearInterpolated
-implements   Serializable
-{
-    public static final double EPSILON = 1e-5;
-    public static final double MULTIPLE_STD_DEV = 4d;
-
-    public static final EpsilonComparator CMP = new EpsilonComparator(EPSILON);
-
-    private TDoubleArrayList xs;
-    private TDoubleArrayList ys;
-
-    private List<Range> gaps;
-
-    public interface Operator {
-        double evaluate(double y1, double y2);
-    } // interface Operator
-
-    public static final Operator SUB = new Operator() {
-        @Override
-        public double evaluate(double y1, double y2) {
-            return y1 - y2;
-        }
-    };
-
-    public static final Operator MAX = new Operator() {
-        @Override
-        public double evaluate(double y1, double y2) {
-            return Math.max(y1, y2);
-        }
-    };
-
-    public LinearInterpolated() {
-        xs = new TDoubleArrayList();
-        ys = new TDoubleArrayList();
-    }
-
-    public LinearInterpolated(int capacity) {
-        xs = new TDoubleArrayList(capacity);
-        ys = new TDoubleArrayList(capacity);
-    }
-
-    public void add(double x, double y) {
-        xs.add(x);
-        ys.add(y);
-    }
-
-    public int size() {
-        return xs.size();
-    }
-
-    public void pointsInRange(double from, double to, Set<Double> points) {
-        if (from > to) {
-            double t = from;
-            from = to;
-            to = t;
-        }
-        for (int i = 0, S = size(); i < S; ++i) {
-            double x = xs.getQuick(i);
-            if (x >= from && x <= to) {
-                points.add(x);
-            }
-        }
-    }
-
-    public boolean inGap(double x) {
-        if (gaps != null) {
-            for (Range gap: gaps) {
-                if (gap.inside(x)) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    public void detectGaps(double threshold) {
-        List<Range> gabs = new ArrayList<Range>();
-        for (int i = 1, S = size(); i < S; ++i) {
-            double x0 = xs.getQuick(i-1);
-            double x1 = xs.getQuick(i);
-            double minX, maxX;
-            if (x0 < x1) { minX = x0; maxX = x1; }
-            else         { minX = x1; maxX = x0; }
-            double diff = maxX - minX - 2d*EPSILON;
-            if (diff > threshold) {
-                gaps.add(new Range(minX+EPSILON, maxX-EPSILON));
-            }
-        }
-        this.gaps = gaps.isEmpty() ? null : gabs;
-    }
-
-    public void resetGaps() {
-        gaps = null;
-    }
-
-    public double guessGapThreshold() {
-        return guessGapThreshold(MULTIPLE_STD_DEV);
-    }
-
-    public double guessGapThreshold(double scale) {
-        int S = size();
-        if (S < 5) { // Too less points.
-            return Double.MAX_VALUE;
-        }
-
-        StandardDeviation s = new StandardDeviation();
-
-        for (int i = 1; i < S; ++i) {
-            double diff = Math.abs(xs.getQuick(i-1) - xs.getQuick(i));
-            s.increment(diff);
-        }
-
-        return scale*s.getResult();
-    }
-
-    public double value(double x) {
-        for (int i = 0, S = size(); i < S; ++i) {
-            double x1 = xs.getQuick(i);
-            if (Math.abs(x1 - x) < EPSILON) {
-                return ys.getQuick(i);
-            }
-            if (i > 0) {
-                double x0 = xs.getQuick(i-1);
-                double minX, maxX;
-                if (x0 < x1) { minX = x0; maxX = x1; }
-                else         { minX = x1; maxX = x0; }
-                if (x > minX && x < maxX) {
-                    return Linear.linear(
-                        x,
-                        x0, x1,
-                        ys.getQuick(i-1), ys.getQuick(i));
-                }
-            }
-        }
-        return Double.NaN;
-    }
-
-    public LinearInterpolated sub(
-        LinearInterpolated other,
-        double             from,
-        double             to
-    ) {
-        return apply(SUB, other, from, to);
-    }
-
-    public LinearInterpolated max(
-        LinearInterpolated other,
-        double             from,
-        double             to
-    ) {
-        return apply(MAX, other, from, to);
-    }
-
-    public boolean intersect(LinearInterpolated other) {
-        if (xs.isEmpty() || other.xs.isEmpty()) {
-            return false;
-        }
-
-        double tMax = xs.max();
-        double oMin = other.xs.min();
-        if (tMax < oMin) {
-            return false;
-        }
-
-        double tMin = xs.min();
-        double oMax = other.xs.max();
-        return !(tMin > oMax);
-    }
-
-    public LinearInterpolated apply(
-        Operator           operator,
-        LinearInterpolated other,
-        double             from,
-        double             to
-    ) {
-        LinearInterpolated result = new LinearInterpolated();
-        if (!intersect(other)) {
-            return result;
-        }
-
-        Set<Double> points = new TreeSet<Double>(CMP);
-        points.add(from);
-        points.add(to);
-
-        this .pointsInRange(from, to, points);
-        other.pointsInRange(from, to, points);
-
-
-        for (double x: points) {
-            if (!inGap(x) && !other.inGap(x)) {
-                double y1 = this .value(x);
-                double y2 = other.value(x);
-                double y  = operator.evaluate(y1, y2);
-                if (!Double.isNaN(y)) {
-                    result.add(x, y);
-                }
-            }
-        }
-
-        return result;
-    }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/QKmsImpl.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.artifacts.model;
-
-import gnu.trove.TDoubleArrayList;
-
-import org.dive4elements.river.utils.DoubleUtil;
-
-public class QKmsImpl
-extends      NamedObjectImpl
-implements   QKms
-{
-    protected TDoubleArrayList kms;
-    protected TDoubleArrayList qs;
-
-    public QKmsImpl() {
-        super("");
-        kms = new TDoubleArrayList();
-        qs  = new TDoubleArrayList();
-    }
-
-    public QKmsImpl(String name) {
-        super(name);
-        kms = new TDoubleArrayList();
-        qs  = new TDoubleArrayList();
-    }
-
-
-    public QKmsImpl(int capacity) {
-        super("");
-        kms = new TDoubleArrayList(capacity);
-        qs  = new TDoubleArrayList(capacity);
-    }
-
-
-    public QKmsImpl(TDoubleArrayList kms, TDoubleArrayList qs) {
-        this(kms, qs, "");
-    }
-
-    public QKmsImpl(
-        TDoubleArrayList kms,
-        TDoubleArrayList qs,
-        String           name
-    ) {
-        super(name);
-        this.kms = kms;
-        this.qs  = qs;
-    }
-
-    public void add(double km, double q) {
-        kms.add(km);
-        qs .add(q);
-    }
-
-    @Override
-    public double getQ(int index) {
-        return qs.getQuick(index);
-    }
-
-
-    @Override
-    public double getKm(int index) {
-        return kms.getQuick(index);
-    }
-
-    @Override
-    public int size() {
-        return kms.size();
-    }
-
-    @Override
-    public TDoubleArrayList allKms() {
-        return kms;
-    }
-
-    @Override
-    public TDoubleArrayList allQs() {
-        return qs;
-    }
-
-    public void removeNaNs() {
-        DoubleUtil.removeNaNs(new TDoubleArrayList [] { kms, qs });
-    }
-}
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/StaticSedimentLoadCacheKey.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.artifacts.model;
-
-import org.apache.commons.lang.builder.HashCodeBuilder;
-
-
-public class StaticSedimentLoadCacheKey
-{
-    public static final String CACHE_NAME = "sedimentload-value-table-static";
-
-    private String river;
-    private double startKm;
-    private double endKm;
-    private int sYear;
-    private int eYear;
-
-    public StaticSedimentLoadCacheKey(
-        String river,
-        double startKm,
-        double endKm,
-        int sYear,
-        int eYear
-    ) {
-        this.river = river;
-        this.startKm = startKm;
-        this.endKm = endKm;
-        this.sYear = sYear;
-        this.eYear = eYear;
-    }
-
-    @Override
-    public int hashCode() {
-        HashCodeBuilder builder = new HashCodeBuilder();
-        builder.append(river);
-        builder.append(startKm);
-        builder.append(endKm);
-        builder.append(sYear);
-        builder.append(eYear);
-        return builder.toHashCode();
-    }
-
-    @Override
-    public boolean equals(Object other) {
-        if (!(other instanceof StaticSedimentLoadCacheKey)) {
-            return false;
-        }
-        StaticSedimentLoadCacheKey o = (StaticSedimentLoadCacheKey) other;
-        return this.river == o.river &&
-            this.startKm == o.startKm &&
-            this.endKm == o.endKm &&
-            this.sYear == o.sYear &&
-            this.eYear == o.eYear;
-    }
-}
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadFactory.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,940 +0,0 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.artifacts.model.minfo;
-
-import gnu.trove.TDoubleArrayList;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.TreeMap;
-
-import net.sf.ehcache.Cache;
-import net.sf.ehcache.Element;
-
-import org.apache.log4j.Logger;
-import org.dive4elements.river.artifacts.cache.CacheFactory;
-import org.dive4elements.river.artifacts.model.Range;
-import org.dive4elements.river.artifacts.model.RiverFactory;
-import org.dive4elements.river.artifacts.model.StaticSedimentLoadCacheKey;
-import org.dive4elements.river.backend.SessionHolder;
-import org.dive4elements.river.model.MeasurementStation;
-import org.hibernate.SQLQuery;
-import org.hibernate.Session;
-import org.hibernate.type.StandardBasicTypes;
-
-
-/** Pull Sediment Loads out of db. */
-public class SedimentLoadFactory
-{
-    /** Private logger to use here. */
-    private static Logger log = Logger.getLogger(SedimentLoadFactory.class);
-
-    // Cache name/keys
-    public static final String LOADS_CACHE_NAME = "sedimentloads";
-    public static final String LOAD_DATA_CACHE_NAME = "sedimentload-data";
-
-    /** Query to get description and start year of single type
-     * sediment_load_lss. */
-    public static final String SQL_SELECT_SINGLES =
-        "SELECT DISTINCT " +
-        "       sy.description AS description, " +
-        "       ti.start_time AS year " +
-        "   FROM     sediment_load_ls sy " +
-        "       JOIN rivers r ON sy.river_id = r.id " +
-        "       JOIN sediment_load_ls_values syv ON sy.id = syv.sediment_load_ls_id " +
-        "       JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
-        "   WHERE   r.name = :name " +
-        "       AND ti.stop_time IS NULL " +
-        "       AND syv.station BETWEEN :startKm AND :endKm";
-
-    /** Query to get fraction name of single sediment_load_ls. */
-    public static final String SQL_SELECT_SINGLE_TIMES_BY_ID =
-        "SELECT DISTINCT " +
-        "       ti.start_time AS starttime, " +
-        "       ti.stop_time  AS stoptime " +
-        "   FROM    sediment_load_ls sy " +
-        "   JOIN    time_intervals ti ON ti.id = sy.time_interval_id " +
-        "   WHERE   sy.id = :id ";
-
-    /** Query to get fraction name of single sediment_load_ls. */
-    public static final String SQL_SELECT_SINGLE_FRACTION_BY_ID =
-        "SELECT DISTINCT " +
-        "       gf.name AS fraction " +
-        "   FROM    sediment_load_ls sy " +
-        "   JOIN    grain_fraction gf ON gf.id = grain_fraction_id " +
-        "   WHERE   sy.id = :id ";
-
-    /** Query to get unit name of single sediment_load_ls. */
-    public static final String SQL_SELECT_SINGLE_UNIT_BY_ID =
-        "SELECT DISTINCT " +
-        "       u.name AS unit " +
-        "   FROM    sediment_load_ls sy " +
-        "   JOIN    units u ON u.id = unit_id " +
-        "   WHERE   sy.id = :id ";
-
-    /** Query to get description of single sediment_load_ls. */
-    public static final String SQL_SELECT_SINGLE_BY_ID =
-        "SELECT DISTINCT " +
-        "       sy.description AS description " +
-        "   FROM    sediment_load_ls sy " +
-        "   WHERE   sy.id = :id ";
-
-    /** Query to get description, name and time range for official
-     * epoch-type sediment yields. */
-    public static final String SQL_SELECT_OFFEPOCHS =
-        "SELECT DISTINCT " +
-        "       ti.start_time AS startYear, " +
-        "       ti.stop_time AS end " +
-        "   FROM     sediment_load_ls sy " +
-        "       JOIN rivers r ON sy.river_id = r.id " +
-        "       JOIN sediment_load_ls_values syv ON sy.id = syv.sediment_load_ls_id " +
-        "       JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
-        "   WHERE   r.name = :name " +
-        "       AND ti.stop_time IS NOT NULL " +
-        "       AND syv.station BETWEEN :startKm AND :endKm " +
-        "       AND sy.kind = 1";
-
-    /** Query to get description, name and time range for epoch-type
-     * sediment yields. */
-    public static final String SQL_SELECT_EPOCHS =
-        "SELECT DISTINCT " +
-        "       sy.description AS description, " +
-        "       ti.start_time AS startYear, " +
-        "       ti.stop_time AS end, " +
-        "       u.name AS unit" +
-        "   FROM     sediment_load_ls sy " +
-        "       JOIN rivers r ON sy.river_id = r.id " +
-        "       JOIN sediment_load_ls_values syv ON sy.id = syv.sediment_load_ls_id " +
-        "       JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
-        "       JOIN units u ON u.id = sy.unit_id " +
-        "   WHERE   r.name = :name " +
-        "       AND ti.stop_time IS NOT NULL " +
-        "       AND sy.kind = 0" +
-        "       AND syv.station BETWEEN :startKm AND :endKm";
-
-    public static final String SQL_SELECT_SINGLES_DATA_BY_ID =
-        "SELECT" +
-        "       sy.description AS description, " +
-        "       syv.value AS load, " +
-        "       syv.station AS km, " +
-        "       u.name AS unit, " +
-        "       gf.name AS fraction " +
-        "   FROM     sediment_load_ls sy " +
-        "       JOIN sediment_load_ls_values syv ON sy.id = syv.sediment_load_ls_id " +
-        "       JOIN units u ON u.id = sy.unit_id" +
-        "       JOIN grain_fraction gf ON sy.grain_fraction_id = gf.id " +
-        "   WHERE   sy.id = :id" +
-        "   ORDER BY syv.station";
-
-    public static final String SQL_SELECT_SINGLES_DATA =
-        "SELECT" +
-        "       sy.description AS description, " +
-        "       ti.start_time AS year, " +
-        "       syv.value AS load, " +
-        "       syv.station AS km, " +
-        "       u.name AS unit " +
-        "   FROM     sediment_load_ls sy " +
-        "       JOIN rivers r ON sy.river_id = r.id " +
-        "       JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
-        "       JOIN sediment_load_ls_values syv ON sy.id = syv.sediment_load_ls_id " +
-        "       JOIN grain_fraction gf ON sy.grain_fraction_id = gf.id " +
-        "       JOIN units u ON u.id = sy.unit_id" +
-        "   WHERE   r.name = :name " +
-        "       AND ti.start_time BETWEEN :begin AND :end " +
-        "       AND ti.stop_time IS NULL " +
-        "       AND gf.name = :grain " +
-        "       AND syv.station BETWEEN :startKm AND :endKm " +
-        "   ORDER BY syv.station";
-
-    public static final String SQL_SELECT_UNKNOWN_DATA =
-        "SELECT" +
-        "       sy.description AS description, " +
-        "       ti.start_time AS startYear, " +
-        "       ti.stop_time AS end, " +
-        "       syv.value AS load, " +
-        "       syv.station AS km, " +
-        "       u.name AS unit " +
-        "   FROM     sediment_load_ls sy " +
-        "       JOIN rivers r ON sy.river_id = r.id " +
-        "       JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
-        "       JOIN sediment_load_ls_values syv ON sy.id = syv.sediment_load_ls_id " +
-        "       JOIN grain_fraction gf ON sy.grain_fraction_id = gf.id " +
-        "       JOIN units u ON u.id = sy.unit_id" +
-        "   WHERE   r.name = :name " +
-        "       AND sy.description = :descr " +
-        "       AND gf.name = 'unknown' " +
-        "       AND sy.kind = :type" +
-        "   ORDER BY syv.station";
-
-    public static final String SQL_SELECT_UNKNOWN =
-        "SELECT DISTINCT " +
-        "    sy.description AS description, " +
-        "    ti.start_time AS startYear, " +
-        "    ti.stop_time AS end " +
-        "FROM sediment_load_ls sy " +
-        "    JOIN rivers r ON sy.river_id = r.id " +
-        "    JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
-        "    JOIN grain_fraction gf ON sy.grain_fraction_id = gf.id " +
-        "    JOIN units u ON sy.unit_id = u.id " +
-        "WHERE r.name = :river " +
-        "    AND gf.name = 'unknown' " +
-        "    AND sy.kind = :type " +
-        "    AND u.name = :unit";
-
-    public static final String SQL_SELECT_EPOCHS_DATA =
-        "SELECT" +
-        "       sy.description AS description, " +
-        "       ti.start_time AS startYear, " +
-        "       syv.value AS load, " +
-        "       syv.station AS km," +
-        "       ti.stop_time AS endYear, " +
-        "       u.name AS unit" +
-        "   FROM     sediment_load_ls sy " +
-        "       JOIN rivers r ON sy.river_id = r.id " +
-        "       JOIN time_intervals ti ON sy.time_interval_id = ti.id " +
-        "       JOIN sediment_load_ls_values syv ON sy.id = syv.sediment_load_ls_id " +
-        "       JOIN grain_fraction gf ON sy.grain_fraction_id = gf.id " +
-        "       JOIN units u ON u.id = sy.unit_id " +
-        "   WHERE   r.name = :name " +
-        "       AND ti.start_time BETWEEN :sbegin AND :send " +
-        "       AND ti.stop_time BETWEEN :ebegin AND :eend " +
-        "       AND gf.name = :grain " +
-        "       AND syv.station BETWEEN :startKm AND :endKm " +
-        "   ORDER BY syv.station";
-
-    private SedimentLoadFactory() {
-    }
-
-    /**
-     * @param river name of river.
-     * @param type
-     */
-    public static SedimentLoadLSData[] getLoads(
-        String river,
-        String type,
-        double startKm,
-        double endKm
-    ) {
-        log.debug("SedimentLoadFactory.getLoads");
-        Cache cache = CacheFactory.getCache(LOADS_CACHE_NAME);
-
-        if (cache == null) {
-            log.debug("Cache not configured.");
-            return getSedimentLoadsUncached(river, type, startKm, endKm);
-        }
-
-        StaticSedimentLoadCacheKey key =
-            new StaticSedimentLoadCacheKey(river, startKm, endKm, 0, 0);
-
-        Element element = cache.get(key);
-
-        if (element != null) {
-            log.debug("SedimentLoad found in cache");
-            return (SedimentLoadLSData[])element.getValue();
-        }
-
-        SedimentLoadLSData[] values =
-            getSedimentLoadsUncached(river, type, startKm, endKm);
-
-        if (values != null) {
-            log.debug("Store static sediment load values in cache.");
-            element = new Element(key, values);
-            cache.put(element);
-        }
-        return values;
-    }
-
-    /**
-     * Get a sedimentLoad filled with data from db (or cache).
-     * @param type "epoch", "off_epoch" or "single"
-     * @return A Sedimentload filled with values from db or cache.
-     */
-    public static SedimentLoadLSData getLoadWithData(
-        String river,
-        String type,
-        double startKm,
-        double endKm,
-        int syear,
-        int eyear
-    ) {
-        log.debug("SedimentLoadFactory.getLoadWithData");
-        Cache cache = CacheFactory.getCache(LOAD_DATA_CACHE_NAME);
-
-        if (cache == null) {
-            log.debug("Cache not configured.");
-            return getSedimentLoadWithDataUncached(
-                river,
-                type,
-                startKm,
-                endKm,
-                syear,
-                eyear);
-        }
-
-        StaticSedimentLoadCacheKey key =
-            new StaticSedimentLoadCacheKey(river, startKm, endKm, syear, eyear);
-
-        Element element = cache.get(key);
-
-        if (element != null) {
-            log.debug("SedimentLoad found in cache");
-            return (SedimentLoadLSData)element.getValue();
-        }
-
-        SedimentLoadLSData values = getSedimentLoadWithDataUncached(
-            river,
-            type,
-            startKm,
-            endKm,
-            syear,
-            eyear);
-
-        if (values != null) {
-            log.debug("Store sediment loads in cache.");
-            element = new Element(key, values);
-            cache.put(element);
-        }
-        return values;
-    }
-
-    /**
-     * Get sediment yields time definition.
-     * @param id the sediment yield by id.
-     * @return sediment yields fraction name.
-     */
-    public static Date[] getSedimentYieldTimes(int id) {
-        log.debug("SedimentLoadFactory.getSedimentYieldTimes");
-
-        Session session = SessionHolder.HOLDER.get();
-        SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLE_TIMES_BY_ID)
-                .addScalar("starttime", StandardBasicTypes.DATE)
-                .addScalar("stoptime", StandardBasicTypes.DATE);
-        sqlQuery.setInteger("id", id);
-
-        List<Object[]> results = sqlQuery.list();
-        Object[] row = results.get(0);
-
-        return new Date[] {(Date)row[0], (Date) row[1]};
-    }
-
-    /**
-     * Get sediment load unit name.
-     * @param id the sediment yield by id.
-     * @return sediment yields unit name.
-     */
-    public static String getSedimentYieldUnitName(int id) {
-        log.debug("SedimentLoadFactory.getSedimentYieldUnitName");
-
-        Session session = SessionHolder.HOLDER.get();
-        SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLE_UNIT_BY_ID)
-                .addScalar("unit", StandardBasicTypes.STRING);
-        sqlQuery.setDouble("id", id);
-
-        List<Object> results = sqlQuery.list();
-
-        return (String) results.get(0);
-    }
-
-    /**
-     * Get sediment load fraction name.
-     * @param id the sediment yield by id.
-     * @return sediment yields fraction name.
-     */
-    public static String getSedimentYieldFractionName(int id) {
-        log.debug("SedimentLoadFactory.getSedimentYieldFractionName");
-
-        Session session = SessionHolder.HOLDER.get();
-        SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLE_FRACTION_BY_ID)
-                .addScalar("fraction", StandardBasicTypes.STRING);
-        sqlQuery.setDouble("id", id);
-
-        List<Object> results = sqlQuery.list();
-
-        return (String) results.get(0);
-    }
-
-
-    /**
-     * Get sediment load description.
-     * @param id the sediment yield by id.
-     * @return sediment yields description
-     */
-    public static String getSedimentYieldDescription(int id) {
-        log.debug("SedimentLoadFactory.getSedimentYieldDescription");
-
-        Session session = SessionHolder.HOLDER.get();
-        SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLE_BY_ID)
-                .addScalar("description", StandardBasicTypes.STRING);
-        sqlQuery.setDouble("id", id);
-
-        List<Object> results = sqlQuery.list();
-
-        return (String) results.get(0);
-    }
-
-
-    /**
-     * Get sediment loads from db.
-     * @param river the river
-     * @param type the sediment load type (year or epoch)
-     * @return according sediment loads.
-     */
-    public static SedimentLoadLSData[] getSedimentLoadsUncached(
-        String river,
-        String type,
-        double startKm,
-        double endKm
-    ) {
-        log.debug("SedimentLoadFactory.getSedimentLoadsUncached");
-
-        Session session = SessionHolder.HOLDER.get();
-        SQLQuery sqlQuery = null;
-
-        if (type.equals("single")) {
-            sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLES)
-                .addScalar("description", StandardBasicTypes.STRING)
-                .addScalar("year", StandardBasicTypes.DATE);
-            sqlQuery.setString("name", river);
-            sqlQuery.setDouble("startKm", startKm);
-            sqlQuery.setDouble("endKm", endKm);
-            List<Object []> results = sqlQuery.list();
-            SedimentLoadLSData[] loads = new SedimentLoadLSData[results.size()];
-            for (int i = 0, R = results.size(); i < R; i++) {
-                Object[] row = results.get(i);
-                loads[i] = new SedimentLoadLSData(
-                    (String) row[0],
-                    (Date) row[1],
-                    null,
-                    false,
-                    "");
-            }
-            return loads;
-        }
-        else if (type.equals("epoch")) {
-            sqlQuery = session.createSQLQuery(SQL_SELECT_EPOCHS)
-                .addScalar("description", StandardBasicTypes.STRING)
-                .addScalar("startYear", StandardBasicTypes.DATE)
-                .addScalar("end", StandardBasicTypes.DATE);
-            sqlQuery.setString("name", river);
-            sqlQuery.setDouble("startKm", startKm);
-            sqlQuery.setDouble("endKm", endKm);
-            List<Object []> results = sqlQuery.list();
-
-            SedimentLoadLSData[] loads = new SedimentLoadLSData[results.size()];
-            for (int i = 0, R = results.size(); i < R; i++) {
-                Object[] row = results.get(i);
-                loads[i] = new SedimentLoadLSData(
-                    (String) row[0],
-                    (Date) row[1],
-                    (Date) row[2],
-                    true,
-                    "");
-            }
-            return loads;
-        }
-        else if (type.equals("off_epoch")) {
-            sqlQuery = session.createSQLQuery(SQL_SELECT_OFFEPOCHS)
-                .addScalar("startYear", StandardBasicTypes.DATE)
-                .addScalar("end", StandardBasicTypes.DATE);
-            sqlQuery.setString("name", river);
-            sqlQuery.setDouble("startKm", startKm);
-            sqlQuery.setDouble("endKm", endKm);
-            List<Object []> results = sqlQuery.list();
-
-            SedimentLoadLSData[] loads = new SedimentLoadLSData[results.size()];
-            for (int i = 0, R = results.size(); i < R; i++) {
-                Object[] row = results.get(i);
-                loads[i] = new SedimentLoadLSData(
-                    ((Date) row[0]).toString() + (Date) row[1],
-                    (Date) row[0],
-                    (Date) row[1],
-                    true,
-                    "");
-            }
-            return loads;
-        }
-        else {
-             log.warn("getSedimentLoadsUncached does not understand type " + type);
-        }
-        return new SedimentLoadLSData[0];
-    }
-
-    /**
-     * Get a specific sediment load from db.
-     *
-     * @param id the sediment yields id.
-     *
-     * @return according sediment load.
-     */
-    public static SedimentLoadLSData getSedimentLoadWithDataUncached(
-        String id,
-        String river
-    ) {
-        log.debug("SedimentLoadFactory.getSedimentLoadWithDataUncached / id " + id);
-        Session session = SessionHolder.HOLDER.get();
-        SQLQuery sqlQuery = null;
-
-        // Measurement stations: all, for float-stuff, for suspended stuff.
-        // Because they need fast sorted access, use TreeMaps.
-        // They map the starting validity range km to the station itself.
-        List<MeasurementStation> allStations =
-            RiverFactory.getRiver(river).getMeasurementStations();
-        TreeMap<Double,MeasurementStation> floatStations =
-            new TreeMap<Double, MeasurementStation>();
-        TreeMap<Double,MeasurementStation> suspStations =
-            new TreeMap<Double, MeasurementStation>();
-
-        // From all stations, sort into the two kinds, skip undefined ones.
-        for (MeasurementStation measurementStation: allStations) {
-            if (measurementStation.getMeasurementType() == null ||
-                measurementStation.getRange() == null) {
-                continue;
-            }
-            if (measurementStation.getMeasurementType().equals("Schwebstoff")) {
-                suspStations.put(
-                    measurementStation.getRange().getA().doubleValue(),
-                    measurementStation);
-            }
-            else if (measurementStation.getMeasurementType().equals("Geschiebe")) {
-                floatStations.put(
-                    measurementStation.getRange().getA().doubleValue(),
-                    measurementStation);
-            }
-        }
-
-        sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLES_DATA_BY_ID)
-            .addScalar("description", StandardBasicTypes.STRING)
-            .addScalar("load", StandardBasicTypes.DOUBLE)
-            .addScalar("km", StandardBasicTypes.DOUBLE)
-            .addScalar("fraction", StandardBasicTypes.STRING)
-            .addScalar("unit", StandardBasicTypes.STRING);
-        sqlQuery.setInteger("id", Integer.valueOf(id));
-
-        List<Object []> results = sqlQuery.list();
-        SedimentLoadLSData load = new SedimentLoadLSData();
-        if (results.isEmpty()) {
-            log.warn("Empty result for year calculation.");
-        }
-        else {
-            Object[] row = results.get(0);
-            load = new SedimentLoadLSData(
-                    (String) row[0], //description
-                    null,//(Date) row[1], //start
-                    null,  //end
-                    false, //isEpoch
-                    (String) row[4]); //unit
-
-            String fraction = (String) row[3];
-
-            TreeMap<Double,MeasurementStation> relevantStations =
-                fraction.equals("suspended_sediment") /* || TODO clarify: fraction.equals("susp_sand") */
-                ? suspStations
-                : floatStations;
-
-            for (int i = 0, R = results.size(); i < R; i++) {
-                row = results.get(i);
-                double km = (Double) row[2];
-                Range range = findMeasurementStationRange(relevantStations, km);
-                if (range == null) {
-                    log.warn("No measurement station for " + fraction + " km " + km);
-                    continue;
-                }
-
-                double v = -1;
-
-                if (row[1] != null) {
-                    v = ((Double)row[1]).doubleValue();
-                }
-
-                setLoadFraction(load, km, v, range, fraction);
-            }
-
-        }
-
-        return load;
-    }
-
-    /**
-     * Get sediment loads from db.
-     *
-     * @param river the river
-     * @param type the sediment load type (year, epoch or off_epoch)
-     *
-     * @return according sediment loads.
-     */
-    public static SedimentLoadLSData getSedimentLoadWithDataUncached(
-        String river,
-        String type,
-        double startKm,
-        double endKm,
-        int syear,
-        int eyear
-    ) {
-        log.debug("SedimentLoadFactory.getSedimentLoadWithDataUncached");
-        Session session = SessionHolder.HOLDER.get();
-        SQLQuery sqlQuery = null;
-
-        // Measurement stations: all, for float-stuff, for suspended stuff.
-        // Because they need fast sorted access, use TreeMaps.
-        // They map the starting validity range km to the station itself.
-        List<MeasurementStation> allStations =
-            RiverFactory.getRiver(river).getMeasurementStations();
-        TreeMap<Double,MeasurementStation> floatStations =
-            new TreeMap<Double, MeasurementStation>();
-        TreeMap<Double,MeasurementStation> suspStations =
-            new TreeMap<Double, MeasurementStation>();
-
-        // From all stations, sort into the two kinds, skip undefined ones.
-        for (MeasurementStation measurementStation: allStations) {
-            if (measurementStation.getMeasurementType() == null ||
-                measurementStation.getRange() == null) {
-                continue;
-            }
-            if (measurementStation.getMeasurementType().equals("Schwebstoff")) {
-                suspStations.put(
-                    measurementStation.getRange().getA().doubleValue(),
-                    measurementStation);
-            }
-            else if (measurementStation.getMeasurementType().equals("Geschiebe")) {
-                floatStations.put(
-                    measurementStation.getRange().getA().doubleValue(),
-                    measurementStation);
-            }
-        }
-
-        // Construct date constraint.
-        Calendar start = Calendar.getInstance();
-        start.set(syear - 1, 11, 31);
-        Calendar end = Calendar.getInstance();
-        end.set(syear, 11, 30);
-
-        if (type.equals("year") || type.equals("epoch")) {
-            sqlQuery = session.createSQLQuery(SQL_SELECT_SINGLES_DATA)
-                .addScalar("description", StandardBasicTypes.STRING)
-                .addScalar("year", StandardBasicTypes.DATE)
-                .addScalar("load", StandardBasicTypes.DOUBLE)
-                .addScalar("km", StandardBasicTypes.DOUBLE)
-                .addScalar("unit", StandardBasicTypes.STRING);
-            sqlQuery.setString("name", river);
-            sqlQuery.setDouble("startKm", startKm);
-            sqlQuery.setDouble("endKm", endKm);
-            sqlQuery.setDate("begin", start.getTime());
-            sqlQuery.setDate("end", end.getTime());
-            sqlQuery.setString("grain", "total");
-            List<Object []> results = sqlQuery.list();
-            SedimentLoadLSData load = new SedimentLoadLSData();
-            if (results.isEmpty()) {
-                log.warn("Empty result for year calculation.");
-            }
-            else {
-                Object[] row = results.get(0);
-                load = new SedimentLoadLSData(
-                        (String) row[0], //description
-                        (Date) row[1], //start
-                        null,  //end
-                        false, //isEpoch
-                        (String) row[4]); //unit
-            }
-            load = getValues("coarse", sqlQuery, load, floatStations);
-            load = getValues("fine_middle", sqlQuery, load, floatStations);
-            load = getValues("sand", sqlQuery, load, floatStations);
-            load = getValues("suspended_sediment", sqlQuery, load, suspStations);
-            load = getValues("susp_sand_bed", sqlQuery, load, floatStations);
-            load = getValues("susp_sand", sqlQuery, load, floatStations);
-
-            return load;
-        }
-        else if (type.equals("off_epoch")) {
-            // Set calendars to fetch the epochs by their start and end
-            // dates.
-            Calendar toStart = Calendar.getInstance();
-            toStart.set(eyear - 1, 11, 31);
-            Calendar toEnd = Calendar.getInstance();
-            toEnd.set(eyear+1, 00, 01);
-            // Set query parameters.
-            sqlQuery = session.createSQLQuery(SQL_SELECT_EPOCHS_DATA)
-                .addScalar("description", StandardBasicTypes.STRING)
-                .addScalar("startYear", StandardBasicTypes.DATE)
-                .addScalar("load", StandardBasicTypes.DOUBLE)
-                .addScalar("km", StandardBasicTypes.DOUBLE)
-                .addScalar("endYear", StandardBasicTypes.DATE)
-                .addScalar("unit", StandardBasicTypes.STRING);
-            sqlQuery.setString("name", river);
-            sqlQuery.setDouble("startKm", startKm);
-            sqlQuery.setDouble("endKm", endKm);
-            sqlQuery.setDate("sbegin", start.getTime());
-            sqlQuery.setDate("send", end.getTime());
-            sqlQuery.setDate("ebegin", toStart.getTime());
-            sqlQuery.setDate("eend", toEnd.getTime());
-            sqlQuery.setString("grain", "total");
-
-            List<Object[]> results = null;
-            results = sqlQuery.list();
-
-            SedimentLoadLSData load = null;
-            if (results.isEmpty()) {
-                log.warn("No total results for off-epoch");
-            }
-            else {
-                Object[] row = results.get(0);
-                load = new SedimentLoadLSData(
-                        (String) row[0],
-                        (Date) row[1],
-                        (Date) row[4],
-                        true,
-                        (String)row[5]);
-                TDoubleArrayList kms = new TDoubleArrayList();
-                for (int i = 0, R = results.size(); i < R; i++) {
-                    row = results.get(i);
-                    kms.add((Double)row[3]);
-                    load.setLoadTotal((Double)row[3], (Double)row[2]);
-                }
-            }
-            load = getValues("coarse", sqlQuery, load, floatStations);
-            load = getValues("fine_middle", sqlQuery, load, floatStations);
-            load = getValues("sand", sqlQuery, load, floatStations);
-            load = getValues("suspended_sediment", sqlQuery, load, suspStations);
-            load = getValues("susp_sand_bed", sqlQuery, load, floatStations);
-            load = getValues("susp_sand", sqlQuery, load, floatStations);
-            return load;
-        }
-        return new SedimentLoadLSData();
-    }
-
-    protected static Range findMeasurementStationRange(
-        TreeMap<Double, MeasurementStation> stations,
-        double km
-    ) {
-        MeasurementStation station = stations.get(km);
-        if (station == null) {
-            return null;
-        }
-
-        double endKm;
-
-        if (stations.ceilingEntry(km + 0.1d) != null) {
-            MeasurementStation nextStation = stations.ceilingEntry(km + 0.1d).getValue();
-            endKm = nextStation.getRange().getA().doubleValue();
-        }
-        else {
-            // TODO end-of-river instead of B.
-            endKm = station.getRange().getB().doubleValue();
-        }
-
-        return new Range(
-            station.getRange().getA().doubleValue(),
-            endKm);
-    }
-
-    /**
-     * Run query with grain parameter set to fraction, feed result into
-     * load. Create load if null.
-     *
-     * @param fraction value to set 'grain' parameter in query to.
-     * @param query query in which to set 'grain' parameter and run.
-     * @param load[out] SedimentLoad which to populate with values. if null
-     *                  and values are found, return a new load.
-     * @return param load or new load if null.
-     */
-    protected static SedimentLoadLSData getValues (
-        String fraction,
-        SQLQuery query,
-        SedimentLoadLSData load,
-        TreeMap<Double, MeasurementStation> stations
-    ) {
-        query.setString("grain", fraction);
-        List<Object[]> results = query.list();
-
-        // We have the first results for this query, create new load.
-        if (!results.isEmpty() && load == null) {
-           Object[] row = results.get(0);
-           load = new SedimentLoadLSData(
-                   (String) row[0],
-                   (Date) row[1],
-                   (Date) row[4],
-                   true,
-                   (String)row[5]);
-        }
-
-        for (int i = 0, R = results.size(); i < R; i++) {
-            Object[] row = results.get(i);
-            double km = (Double)row[3];
-            Range range = findMeasurementStationRange(stations, km);
-            if (range == null) {
-                log.warn("No measurement station for " + fraction + " km " + km);
-                continue;
-            }
-            double v = -1;
-
-            if (row[2] != null) {
-                v = ((Double)row[2]).doubleValue();
-            }
-
-            setLoadFraction(load, km, v, range, fraction);
-        }
-
-        if (results.isEmpty()) {
-            log.warn("No " + fraction + " values found.");
-        }
-
-        return load;
-    }
-
-
-    /** Set a fraction value of load to given km, value and range. */
-    private static void setLoadFraction(
-        SedimentLoadLSData load, double km, double v, Range range, String fraction) {
-        if (fraction.equals("coarse")) {
-            load.setCoarse(km, v, range);
-        }
-        else if (fraction.equals("sand")) {
-            load.setSand(km, v, range);
-        }
-        else if (fraction.equals("fine_middle")) {
-            load.setFineMiddle(km, v, range);
-        }
-        else if (fraction.equals("suspended_sediment")) {
-            load.setSuspSediment(km, v, range);
-        }
-        else if (fraction.equals("susp_sand")) {
-            load.setSuspSand(km, v, range);
-        }
-        else if (fraction.equals("susp_sand_bed")) {
-            load.setSuspSandBed(km, v, range);
-        }
-        else if (fraction.equals("total")) {
-            load.setLoadTotal(km, v, range);
-        }
-        else {
-            log.error("Unknown fraction type " + fraction);
-        }
-    }
-
-    public static SedimentLoadLSData getLoadUnknown(
-        String river,
-        String description,
-        String type
-    ) {
-        log.debug("SedimentLoadFactory.getLoadWithData");
-        Cache cache = CacheFactory.getCache(LOAD_DATA_CACHE_NAME);
-
-        if (cache == null) {
-            log.debug("Cache not configured.");
-            return getSedimentLoadUnknownUncached(river, description, type);
-        }
-
-        StaticSedimentLoadCacheKey key =
-            new StaticSedimentLoadCacheKey(river, 0d, 0d, 0, 0);
-
-        Element element = cache.get(key);
-
-        if (element != null) {
-            log.debug("SedimentLoad found in cache");
-            return (SedimentLoadLSData)element.getValue();
-        }
-
-        SedimentLoadLSData values =
-            getSedimentLoadUnknownUncached(river, description, type);
-
-        if (values != null && key != null) {
-            log.debug("Store static bed height values in cache.");
-            element = new Element(key, values);
-            cache.put(element);
-        }
-        return values;
-    }
-
-    /**
-     * Get sediment loads with fraction 'unknown' from db.
-     * @param river the river
-     * @param type the sediment load type (year or epoch)
-     * @return according sediment loads.
-     */
-    public static SedimentLoadLSData getSedimentLoadUnknownUncached(
-        String river,
-        String description,
-        String type
-    ) {
-        log.debug("SedimentLoadFactory.getSedimentLoadWithDataUncached");
-        Session session = SessionHolder.HOLDER.get();
-        SQLQuery sqlQuery = null;
-
-        sqlQuery = session.createSQLQuery(SQL_SELECT_UNKNOWN_DATA)
-            .addScalar("description", StandardBasicTypes.STRING)
-            .addScalar("startYear", StandardBasicTypes.DATE)
-            .addScalar("end", StandardBasicTypes.DATE)
-            .addScalar("load", StandardBasicTypes.DOUBLE)
-            .addScalar("km", StandardBasicTypes.DOUBLE)
-            .addScalar("unit", StandardBasicTypes.STRING);
-        sqlQuery.setString("name", river);
-        sqlQuery.setString("descr", description);
-        if (type.equals("off_epoch")) {
-            sqlQuery.setInteger("type", 1);
-        }
-        else {
-            sqlQuery.setInteger("type", 0);
-        }
-        List<Object []> results = sqlQuery.list();
-        SedimentLoadLSData load = new SedimentLoadLSData();
-        if (results.isEmpty()) {
-            return new SedimentLoadLSData();
-        }
-        Object[] row = results.get(0);
-        load = new SedimentLoadLSData(
-            (String) row[0],
-            (Date) row[1],
-            (Date) row[2],
-            false,
-            (String)row[5]);
-
-        for (int i = 0, R = results.size(); i < R; i++) {
-            row = results.get(i);
-            SedimentLoadFraction fraction = new SedimentLoadFraction();
-            fraction.setUnknown((Double)row[3]);
-            load.addKm((Double)row[4], fraction);
-        }
-        return load;
-    }
-
-    /**
-     * Return sediment loads with 'unknown' fraction type.
-     * @param river Name of the river
-     * @param unit Restrict result set to those of given unit.
-     * @param type Type like year, epoch, off_epoch
-     */
-    public static SedimentLoadLSData[] getSedimentLoadUnknown(
-        String river,
-        String unit,
-        String type) {
-        Session session = SessionHolder.HOLDER.get();
-        SQLQuery sqlQuery = session.createSQLQuery(SQL_SELECT_UNKNOWN)
-            .addScalar("description", StandardBasicTypes.STRING)
-            .addScalar("startYear", StandardBasicTypes.DATE)
-            .addScalar("end", StandardBasicTypes.DATE);
-        sqlQuery.setString("river", river);
-        sqlQuery.setString("unit", unit);
-        if (type.equals("off_epoch")) {
-            sqlQuery.setInteger("type", 1);
-        }
-        else {
-            sqlQuery.setInteger("type", 0);
-        }
-        List<Object[]> results = sqlQuery.list();
-        SedimentLoadLSData[] loads = new SedimentLoadLSData[results.size()];
-        int counter = 0;
-        for (Object[] row: results) {
-            loads[counter] = new SedimentLoadLSData(
-                (String)row[0], (Date)row[1], (Date)row[2], false, "");
-            counter++;
-        }
-        return loads;
-    }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/model/minfo/SedimentLoadUnknownFacet.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-package org.dive4elements.river.artifacts.model.minfo;
-
-import org.apache.log4j.Logger;
-import org.dive4elements.artifactdatabase.state.Facet;
-import org.dive4elements.artifacts.Artifact;
-import org.dive4elements.artifacts.CallContext;
-import org.dive4elements.river.artifacts.D4EArtifact;
-import org.dive4elements.river.artifacts.access.SedimentLoadAccess;
-import org.dive4elements.river.artifacts.model.DataFacet;
-import org.dive4elements.river.artifacts.states.DefaultState.ComputeType;
-
-
-public class SedimentLoadUnknownFacet
-extends DataFacet
-{
-    /** Very own logger. */
-    private static Logger logger = Logger.getLogger(SedimentLoadUnknownFacet.class);
-
-    public SedimentLoadUnknownFacet() {
-    }
-
-    public SedimentLoadUnknownFacet(int idx, String name, String description,
-        ComputeType type, String stateId, String hash) {
-        super(idx, name, description, type, hash, stateId);
-        this.metaData.put("X", "chart.longitudinal.section.xaxis.label");
-        this.metaData.put("Y", "");
-    }
-
-    /** Get data from SedimentLoad with unknown type, from factory. */
-    @Override
-    public Object getData(Artifact artifact, CallContext context) {
-        logger.debug("Get data for sediment load at index: " + index);
-
-        D4EArtifact flys = (D4EArtifact) artifact;
-
-        SedimentLoadAccess access = new SedimentLoadAccess(flys);
-        String river = access.getRiverName();
-        String unit  = access.getUnit();
-        SedimentLoadLSData[] unknown =
-            SedimentLoadFactory.getSedimentLoadUnknown(
-                river,
-                unit.replace("_per_","/"),
-                access.getYearEpoch());
-
-        SedimentLoadLSData load = SedimentLoadFactory.getLoadUnknown(
-            river, unknown[index].getDescription(), access.getYearEpoch());
-        return load;
-    }
-
-    /** Copy deeply. */
-    @Override
-    public Facet deepCopy() {
-        SedimentLoadUnknownFacet copy = new SedimentLoadUnknownFacet();
-        copy.set(this);
-        copy.hash = hash;
-        copy.stateId = stateId;
-        return copy;
-    }
-}
--- a/artifacts/src/main/java/org/dive4elements/river/exports/minfo/BedDiffBaseGenerator.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-/* Copyright (C) 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.exports.minfo;
-
-import org.apache.log4j.Logger;
-
-import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
-import org.dive4elements.river.artifacts.model.minfo.BedDifferencesResult;
-import org.dive4elements.river.jfree.Bounds;
-import org.dive4elements.river.jfree.DoubleBounds;
-import org.dive4elements.river.exports.fixings.FixChartGenerator;
-
-/** Base for BedDiff*Year*Generators, to avoid duplicate code of setContextBounds. */
-public abstract class BedDiffBaseGenerator
-extends FixChartGenerator
-{
-    /** The logger that is used in this generator. */
-    private static Logger logger = Logger.getLogger(BedDiffBaseGenerator.class);
-
-    /** Set context values for something. */
-    public void setContextBounds(ArtifactAndFacet bundle) {
-        Bounds xBounds = getXBounds(0);
-        if (xBounds != null && getDomainAxisRange() != null) {
-            Bounds bounds =
-                calculateZoom(xBounds, getDomainAxisRange());
-            context.putContextValue("startkm", bounds.getLower());
-            context.putContextValue("endkm", bounds.getUpper());
-        }
-        else if (xBounds != null && getDomainAxisRange() == null) {
-            context.putContextValue("startkm", xBounds.getLower());
-            context.putContextValue("endkm", xBounds.getUpper());
-        }
-        else if (xBounds == null && getDomainAxisRange() == null) {
-            BedDifferencesResult data = (BedDifferencesResult)bundle.getData(context);
-            if (data.getKms().size() > 0) {
-                context.putContextValue("startkm", data.getKms().min());
-                context.putContextValue("endkm", data.getKms().max());
-            }
-            else {
-                logger.warn("No data to define start and end km");
-            }
-        }
-        else if (xBounds == null && getDomainAxisRange() != null){
-            BedDifferencesResult data = (BedDifferencesResult)bundle.getData(context);
-            Bounds b = new DoubleBounds(data.getKms().min(), data.getKms().max());
-            Bounds bounds =
-                calculateZoom(b, getDomainAxisRange());
-            context.putContextValue("startkm", bounds.getLower());
-            context.putContextValue("endkm", bounds.getUpper());
-        }
-    }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/artifacts/src/main/java/org/dive4elements/river/exports/process/KMIndexProcessor.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.exports.process;
-
-import org.apache.log4j.Logger;
-import org.jfree.data.xy.XYSeries;
-import org.jfree.data.xy.XYSeriesCollection;
-
-import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
-import org.dive4elements.artifacts.CallContext;
-import org.dive4elements.river.artifacts.model.FacetTypes;
-import org.dive4elements.river.artifacts.model.fixings.AnalysisPeriod;
-import org.dive4elements.river.artifacts.model.fixings.QWD;
-import org.dive4elements.river.exports.XYChartGenerator;
-import org.dive4elements.river.jfree.StyledXYSeries;
-import org.dive4elements.river.themes.ThemeDocument;
-import org.dive4elements.river.utils.KMIndex;
-
-public class KMIndexProcessor extends DefaultProcessor {
-
-    private static final Logger logger = Logger.getLogger(KMIndexProcessor.class);
-
-    @Override
-    public void doOut(XYChartGenerator generator, ArtifactAndFacet bundle,
-            ThemeDocument theme, boolean visible, int index) {
-        String facettype = bundle.getFacetName();
-        if (facettype.contains(FacetTypes.FIX_SECTOR_AVERAGE_LS)) {
-            doSectorAverageOut(generator, bundle, theme, visible, index);
-        }
-        else if (facettype.equals(FacetTypes.FIX_REFERENCE_EVENTS_LS)) {
-            doReferenceEventsOut(generator, bundle, theme, visible, index);
-        }
-        else if (facettype.equals(FacetTypes.FIX_ANALYSIS_EVENTS_LS)) {
-            doAnalysisEventsOut(generator, bundle, theme, visible, index);
-        }
-
-    }
-
-    @Override
-    public boolean canHandle(String facettype) {
-        if (facettype == null) {
-            return false;
-        }
-
-        if (facettype.contains(FacetTypes.FIX_SECTOR_AVERAGE_LS)
-                || facettype.equals(FacetTypes.FIX_REFERENCE_EVENTS_LS)
-                || facettype.equals(FacetTypes.FIX_ANALYSIS_EVENTS_LS))
-        {
-            return true;
-        }
-        return false;
-    }
-
-    private void doSectorAverageOut(XYChartGenerator generator, ArtifactAndFacet bundle,
-            ThemeDocument doc, boolean visible, int idx) {
-        logger.debug("doSectorAverageOut" + bundle.getFacet().getIndex());
-
-        CallContext context = generator.getCallContext();
-        int index = bundle.getFacet().getIndex();
-        int sectorNdx = index & 3;
-
-        @SuppressWarnings("unchecked")
-        KMIndex<AnalysisPeriod> kms =
-                (KMIndex<AnalysisPeriod>)bundle.getData(context);
-
-        if(kms == null) {
-            return;
-        }
-
-        XYSeries series = new StyledXYSeries(bundle.getFacetDescription(), doc);
-
-        for (KMIndex.Entry<AnalysisPeriod> entry: kms) {
-            double km = entry.getKm();
-            AnalysisPeriod ap = entry.getValue();
-            QWD qwd = ap.getQSectorAverages()[sectorNdx];
-            if (qwd == null) {
-                continue;
-            }
-            double deltaW = qwd.getDeltaW();
-            series.add(km, deltaW);
-        }
-
-        generator.addAxisSeries(series, idx, visible);
-    }
-
-    private void doReferenceEventsOut(XYChartGenerator generator,
-            ArtifactAndFacet bundle, ThemeDocument doc, boolean visible, int idx) {
-        logger.debug("doReferenceEventOut");
-
-        CallContext context = generator.getCallContext();
-
-        @SuppressWarnings("unchecked")
-        KMIndex<QWD> kms =
-                (KMIndex<QWD>)bundle.getData(context);
-
-        if(kms == null) {
-            return;
-        }
-
-        XYSeriesCollection col = new XYSeriesCollection();
-
-        StyledXYSeries series = new StyledXYSeries(bundle.getFacetDescription(), false,
-                doc);
-
-        for (KMIndex.Entry<QWD> entry: kms) {
-            double km = entry.getKm();
-            QWD qwd = entry.getValue();
-
-            series.add(km, qwd.getDeltaW());
-        }
-        col.addSeries(series);
-
-        generator.addAxisDataset(col, idx, visible);
-    }
-
-    private void doAnalysisEventsOut(XYChartGenerator generator,
-            ArtifactAndFacet bundle, ThemeDocument doc, boolean visible, int idx) {
-        logger.debug("doAnalysisEventsOut");
-
-        CallContext context = generator.getCallContext();
-
-        @SuppressWarnings("unchecked")
-        KMIndex<QWD> kms =
-                (KMIndex<QWD>)bundle.getData(context);
-
-        if(kms == null) {
-            return;
-        }
-
-        XYSeriesCollection col = new XYSeriesCollection();
-
-        StyledXYSeries series = new StyledXYSeries(bundle.getFacetDescription(), false, doc);
-
-        for (KMIndex.Entry<QWD> entry: kms) {
-            double km = entry.getKm();
-            QWD qwd = entry.getValue();
-
-            series.add(km, qwd.getDeltaW());
-        }
-        col.addSeries(series);
-
-        generator.addAxisDataset(col, idx, visible);
-    }
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/artifacts/src/main/java/org/dive4elements/river/themes/PointStyle.java	Thu Sep 04 15:27:47 2014 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
- * Software engineering by Intevation GmbH
- *
- * This file is Free Software under the GNU AGPL (>=v3)
- * and comes with ABSOLUTELY NO WARRANTY! Check out the
- * documentation coming with Dive4Elements River for details.
- */
-
-package org.dive4elements.river.themes;
-
-public class PointStyle {
-    // TODO tbd
-}
\ No newline at end of file

http://dive4elements.wald.intevation.org