view artifacts/src/main/java/org/dive4elements/river/artifacts/states/AddTableDataHelper.java @ 9425:3f49835a00c3

Extended CrossSectionFacet so it may fetch different data from within the artifact result. Also allows to have acces to the potentially already computed artifact result via its normal computation cache.
author gernotbelger
date Fri, 17 Aug 2018 15:31:02 +0200
parents 2b13de1b0897
children
line wrap: on
line source
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
 * Software engineering by
 *  Björnsen Beratende Ingenieure GmbH
 *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
 *
 * 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.states;

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

import org.dive4elements.artifacts.CallMeta;
import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator;
import org.dive4elements.river.artifacts.resources.Resources;
import org.w3c.dom.Element;

/**
 * @author Domenico Nardi Tironi
 *
 */
public class AddTableDataHelper {

    private final ElementCreator creator;
    private final Element select;
    private final CallMeta callmeta;
    // Create Metadata:
    final Map<String, Map<String, String>> meta = new HashMap<>();
    final List<String> columnValidList = new ArrayList<>();

    public AddTableDataHelper(final ElementCreator creator, final Element select, final String pinKeyColumn, final CallMeta callMeta) {
        this.creator = creator;
        this.select = select;
        this.callmeta = callMeta;
        creator.addAttr(select, "type", "multiattribute", true);

        final Map<String, String> metaTableInfo = new HashMap<>();
        metaTableInfo.put("keycol", pinKeyColumn);
        this.meta.put("meta_tableinfo", metaTableInfo);

    }

    public void submitMapToXml() {

        final Element meta = this.creator.create("meta");

        for (final Entry<String, Map<String, String>> entry : this.meta.entrySet()) {
            final String name = entry.getKey(); // z.B. Spaltenname
            final Map<String, String> keyValueMap = entry.getValue();
            final Element element = this.creator.create(name);

            for (final Entry<String, String> kventry : keyValueMap.entrySet()) {
                this.creator.addAttr(element, kventry.getKey(), kventry.getValue());
            }
            meta.appendChild(element);
        }

        this.select.appendChild(meta);

    }

    public void addRow(final Map<String, String> colValMap) {

        final Element item = this.creator.create("item");

        for (final Entry<String, String> entry : colValMap.entrySet()) {
            if (this.meta.containsKey(entry.getKey())) {
                this.creator.addAttr(item, entry.getKey(), entry.getValue() != null ? entry.getValue().toString() : "");
            } else {
                try {
                    throw new Exception("Error: No such column " + entry.getKey());
                }
                catch (final Exception e) {
                    e.printStackTrace();
                }
            }
        }
        this.select.appendChild(item);
    }

    public void addColumn(final int order, final String rootHashmapKey, final String colWidth, final String translationKeyFromMessages, final String type,
            final String alignment, final String pinType) {

        final Map<String, String> map = new HashMap<>();
        map.put("colwidth", colWidth);
        final String translation = Resources.getMsg(this.callmeta, translationKeyFromMessages);
        map.put("translation", translation);
        map.put("type", type);
        map.put("alignment", alignment);
        map.put("order", Integer.toString(order));
        map.put("pin", pinType);
        this.meta.put(rootHashmapKey, map);

    }

}

http://dive4elements.wald.intevation.org