gernotbelger@9223: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde gernotbelger@9223: * Software engineering by Intevation GmbH gernotbelger@9223: * gernotbelger@9223: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9223: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9223: * documentation coming with Dive4Elements River for details. gernotbelger@9223: */ gernotbelger@9223: gernotbelger@9223: package org.dive4elements.river.artifacts.uinfo.salix; gernotbelger@9223: gernotbelger@9223: import java.util.HashMap; gernotbelger@9245: import java.util.Iterator; gernotbelger@9245: import java.util.List; gernotbelger@9223: import java.util.Map; gernotbelger@9245: import java.util.TreeMap; gernotbelger@9223: gernotbelger@9223: import org.dive4elements.artifacts.Artifact; gernotbelger@9223: import org.dive4elements.artifacts.CallContext; gernotbelger@9223: import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; gernotbelger@9223: import org.dive4elements.river.artifacts.states.AddTableDataHelper; gernotbelger@9223: import org.dive4elements.river.artifacts.states.DefaultState; gernotbelger@9245: import org.dive4elements.river.artifacts.uinfo.UINFOArtifact; gernotbelger@9245: import org.dive4elements.river.model.BedHeight; gernotbelger@9223: import org.w3c.dom.Element; gernotbelger@9223: gernotbelger@9224: public class LoadSingleEpochSelectState extends DefaultState { gernotbelger@9321: gernotbelger@9224: private static final long serialVersionUID = 1L; gernotbelger@9223: gernotbelger@9223: /** gernotbelger@9223: * The default constructor that initializes an empty State object. gernotbelger@9223: */ gernotbelger@9224: public LoadSingleEpochSelectState() { gernotbelger@9223: } gernotbelger@9223: gernotbelger@9223: @Override gernotbelger@9223: protected String getUIProvider() { gernotbelger@9248: return "uinfo.salix.load_single_year_pseudo_epoch_select"; gernotbelger@9223: } gernotbelger@9223: gernotbelger@9223: @Override gernotbelger@9223: protected void appendItems(final Artifact artifact, final ElementCreator creator, final String name, final CallContext context, final Element select) { gernotbelger@9224: final String datakey = "singleepoch"; gernotbelger@9245: gernotbelger@9223: try { gernotbelger@9223: if (datakey.equals(name)) { gernotbelger@9245: final SalixLineAccess access = new SalixLineAccess((UINFOArtifact) artifact); gernotbelger@9245: final List bhs = BedHeight.getBedHeightEpochs(access.getRiver(), access.getLowerKm(), access.getUpperKm()); gernotbelger@9321: makeDataSourceYearEpoch(creator, select, context, bhs); gernotbelger@9223: } gernotbelger@9223: } gernotbelger@9223: catch ( gernotbelger@9223: gernotbelger@9321: final IllegalArgumentException iae) { gernotbelger@9223: iae.printStackTrace(); gernotbelger@9223: } gernotbelger@9223: } gernotbelger@9245: gernotbelger@9321: public static final void makeDataSourceYearEpoch(final ElementCreator creator, final Element select, final CallContext context, gernotbelger@9245: final List bedheights) { // TODO: maybe move to appropriate helper... gernotbelger@9245: gernotbelger@9245: final AddTableDataHelper helper = new AddTableDataHelper(creator, select, "year", context.getMeta()); gernotbelger@9245: gernotbelger@9245: helper.addColumn(0, "pinfrom", "40", "common.client.ui.from", "ICON", "CENTER", "from"); gernotbelger@9245: helper.addColumn(1, "year", "60", "year", "INTEGER", "LEFT", null); gernotbelger@9245: helper.addColumn(2, "sounding", "500", "uinfo.salix.soundings", "STRING", "LEFT", null); gernotbelger@9245: gernotbelger@9245: final TreeMap bedHeightSorted = new TreeMap<>(); gernotbelger@9245: gernotbelger@9245: for (final BedHeight bh : bedheights) { gernotbelger@9245: final int year = bh.getYear(); gernotbelger@9245: final String soundings = bedHeightSorted.containsKey(year) ? bedHeightSorted.get(year) + ", " : ""; gernotbelger@9245: bedHeightSorted.put(year, soundings + bh.getDescription()); gernotbelger@9245: } gernotbelger@9245: final Iterator iterator = bedHeightSorted.keySet().iterator(); gernotbelger@9245: while (iterator.hasNext()) { gernotbelger@9245: final int year = iterator.next(); gernotbelger@9245: final String soundings = bedHeightSorted.get(year); gernotbelger@9245: final Map row = new HashMap<>(); gernotbelger@9245: row.put("year", String.valueOf(year)); gernotbelger@9245: row.put("sounding", soundings); gernotbelger@9245: helper.addRow(row); gernotbelger@9245: } gernotbelger@9245: gernotbelger@9245: helper.submitMapToXml(); gernotbelger@9245: } gernotbelger@9321: }