gernotbelger@9074: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9074: * Software engineering by gernotbelger@9074: * Björnsen Beratende Ingenieure GmbH gernotbelger@9074: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9074: * gernotbelger@9074: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9074: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9074: * documentation coming with Dive4Elements River for details. gernotbelger@9074: */ gernotbelger@9074: package org.dive4elements.river.artifacts.states; gernotbelger@9074: gernotbelger@9074: import java.util.ArrayList; gernotbelger@9074: import java.util.HashMap; gernotbelger@9074: import java.util.List; gernotbelger@9074: import java.util.Map; gernotbelger@9074: import java.util.Map.Entry; gernotbelger@9074: gernotbelger@9074: import org.dive4elements.artifacts.CallMeta; gernotbelger@9074: import org.dive4elements.artifacts.common.utils.XMLUtils.ElementCreator; gernotbelger@9074: import org.dive4elements.river.artifacts.resources.Resources; gernotbelger@9074: import org.w3c.dom.Element; gernotbelger@9074: gernotbelger@9074: /** gernotbelger@9074: * @author Domenico Nardi Tironi gernotbelger@9074: * gernotbelger@9074: */ gernotbelger@9074: public class AddTableDataHelper { gernotbelger@9074: gernotbelger@9074: private final ElementCreator creator; gernotbelger@9074: private final Element select; gernotbelger@9074: private final CallMeta callmeta; gernotbelger@9074: // Create Metadata: gernotbelger@9074: final Map> meta = new HashMap<>(); gernotbelger@9074: final List columnValidList = new ArrayList<>(); gernotbelger@9074: gernotbelger@9074: public AddTableDataHelper(final ElementCreator creator, final Element select, final String pinKeyColumn, final CallMeta callMeta) { gernotbelger@9074: this.creator = creator; gernotbelger@9074: this.select = select; gernotbelger@9074: this.callmeta = callMeta; gernotbelger@9074: creator.addAttr(select, "type", "multiattribute", true); gernotbelger@9074: gernotbelger@9074: final Map metaTableInfo = new HashMap<>(); gernotbelger@9074: metaTableInfo.put("keycol", pinKeyColumn); gernotbelger@9074: this.meta.put("meta_tableinfo", metaTableInfo); gernotbelger@9074: gernotbelger@9074: } gernotbelger@9074: gernotbelger@9074: public void submitMapToXml() { gernotbelger@9074: gernotbelger@9074: final Element meta = this.creator.create("meta"); gernotbelger@9074: gernotbelger@9074: for (final Entry> entry : this.meta.entrySet()) { gernotbelger@9074: final String name = entry.getKey(); // z.B. Spaltenname gernotbelger@9074: final Map keyValueMap = entry.getValue(); gernotbelger@9074: final Element element = this.creator.create(name); gernotbelger@9074: gernotbelger@9074: for (final Entry kventry : keyValueMap.entrySet()) { gernotbelger@9074: this.creator.addAttr(element, kventry.getKey(), kventry.getValue()); gernotbelger@9074: } gernotbelger@9074: meta.appendChild(element); gernotbelger@9074: } gernotbelger@9074: gernotbelger@9074: this.select.appendChild(meta); gernotbelger@9074: gernotbelger@9074: } gernotbelger@9074: gernotbelger@9074: public void addRow(final Map colValMap) throws Exception { gernotbelger@9074: gernotbelger@9074: final Element item = this.creator.create("item"); gernotbelger@9074: gernotbelger@9074: for (final Entry entry : colValMap.entrySet()) { gernotbelger@9074: if (this.meta.containsKey(entry.getKey())) { gernotbelger@9074: this.creator.addAttr(item, entry.getKey(), entry.getValue() != null ? entry.getValue().toString() : ""); gernotbelger@9074: } else { gernotbelger@9074: throw new Exception("Error: No such column " + entry.getKey()); gernotbelger@9074: } gernotbelger@9074: } gernotbelger@9074: this.select.appendChild(item); gernotbelger@9074: } gernotbelger@9074: gernotbelger@9074: public void addColumn(final int order, final String rootHashmapKey, final String colWidth, final String translationKeyFromMessages, final String type, gernotbelger@9074: final String alignment, final String pinType) { gernotbelger@9074: gernotbelger@9074: final Map map = new HashMap<>(); gernotbelger@9074: map.put("colwidth", colWidth); gernotbelger@9074: final String translation = Resources.getMsg(this.callmeta, translationKeyFromMessages); gernotbelger@9074: map.put("translation", translation); gernotbelger@9074: map.put("type", type); gernotbelger@9074: map.put("alignment", alignment); gernotbelger@9074: map.put("order", Integer.toString(order)); gernotbelger@9074: map.put("pin", pinType); gernotbelger@9074: this.meta.put(rootHashmapKey, map); gernotbelger@9074: gernotbelger@9074: } gernotbelger@9074: gernotbelger@9074: }