Mercurial > dive4elements > river
view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/FromToTableHelperPanel.java @ 9270:7337034eb5d5
multiple whitespace input fix
author | gernotbelger |
---|---|
date | Thu, 19 Jul 2018 13:36:38 +0200 |
parents | 5a0e8d76582e |
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.client.client.ui; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.SortedMap; import java.util.TreeMap; import org.dive4elements.river.client.client.FLYSConstants; import org.dive4elements.river.client.shared.model.Data; import org.dive4elements.river.client.shared.model.DataItem; import org.dive4elements.river.client.shared.model.DataList; import org.dive4elements.river.client.shared.model.MultiAttributeData; import org.dive4elements.river.client.shared.model.MultiDataItem; import com.google.gwt.core.client.GWT; import com.smartgwt.client.data.Record; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.ListGridFieldType; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.events.RecordClickEvent; import com.smartgwt.client.widgets.grid.events.RecordClickHandler; /** * @author Domenico Nardi Tironi * */ public class FromToTableHelperPanel { public interface IColumnClickHandler { void columnClicked(String value); } private enum PinType { none, from, to } private final ListGrid table; private final DataList dataList; private final FLYSConstants flys; private final List<String> keyColEntries = new ArrayList<String>(); public FromToTableHelperPanel(final DataList dataList, final String definitionStr, final FLYSConstants flys, final IColumnClickHandler fromHandler, final IColumnClickHandler toHandler) { this.flys = flys; this.dataList = dataList; this.table = new ListGrid(); this.table.setShowHeaderContextMenu(false); this.table.setWidth100(); this.table.setShowRecordComponents(true); this.table.setShowRecordComponentsByCell(true); this.table.setHeight100(); this.table.setEmptyMessage(flys.empty_table()); this.table.setCanReorderFields(false); final MultiAttributeData mData = findDefinition(definitionStr); final Map<String, Map<String, String>> meta = mData.getMeta(); final Map<String, String> tableInfo = meta.get("meta_tableinfo"); final String keyColumnName = tableInfo.get("keycol"); final SortedMap<Integer, ListGridField> fields = new TreeMap<Integer, ListGridField>(); for (final Entry<String, Map<String, String>> entry : meta.entrySet()) { final String colName = entry.getKey(); if (colName.startsWith("meta_")) continue; final Map<String, String> values = entry.getValue(); final int order = Integer.parseInt(values.get("order")); final ListGridField field = createField(colName, keyColumnName, values, fromHandler, toHandler); fields.put(order, field); } if (mData == null || mData.opts == null) { this.table.setEmptyMessage(flys.error_feed_no_data()); return; } for (final DataItem dataItem : mData.opts) { final MultiDataItem item = (MultiDataItem) dataItem; final Map<String, String> valueMap = item.getValue(); final Record newRecord = new Record(); for (final Entry<String, String> entry : valueMap.entrySet()) { final String key = entry.getKey(); final String value = entry.getValue(); newRecord.setAttribute(key, value); if (key.equals(keyColumnName)) this.keyColEntries.add(value); } this.table.addData(newRecord); } this.table.setEmptyMessage(""); this.table.setFields(fields.values().toArray(new ListGridField[fields.size()])); } public Canvas getTable() { return this.table; } private MultiAttributeData findDefinition(final String paranemterName) { for (final Data data : this.dataList.getAll()) { final String label = data.getLabel(); if (label.equals(paranemterName) && data instanceof MultiAttributeData) return (MultiAttributeData) data; } return null; } private ListGridField createField(final String colName, final String keyColumnName, final Map<String, String> values, final IColumnClickHandler fromHandler, final IColumnClickHandler toHandler) { final String translation = getMeta(values, "translation", colName); final ListGridField field = new ListGridField(colName, translation); final String width = getMeta(values, "colwidth", "99"); field.setWidth(width); final ListGridFieldType type = getMeta(values, "type", ListGridFieldType.TEXT, ListGridFieldType.class); field.setType(type); final Alignment alignment = getMeta(values, "alignment", Alignment.LEFT, Alignment.class); field.setAlign(alignment); final PinType pinType = getMeta(values, "pin", PinType.none, PinType.class); switch (pinType) { case from: { makePin(keyColumnName, fromHandler, field, this.flys.markerGreen()); } break; case to: { makePin(keyColumnName, toHandler, field, this.flys.markerRed()); } break; case none: default: break; } return field; } private void makePin(final String keyColumnName, final IColumnClickHandler handler, final ListGridField field, final String markerStr) { final String baseUrl = GWT.getHostPageBaseURL(); field.setCellIcon(baseUrl + markerStr); field.addRecordClickHandler(new RecordClickHandler() { @Override public void onRecordClick(final RecordClickEvent e) { final Record r = e.getRecord(); handler.columnClicked(r.getAttribute(keyColumnName)); } }); } private String getMeta(final Map<String, String> values, final String key, final String defaultValue) { final String value = values.get(key); if (value == null || value.isEmpty()) return defaultValue; return value; } private <TYPE extends Enum<TYPE>> TYPE getMeta(final Map<String, String> values, final String key, final TYPE defaultValue, final Class<TYPE> enumType) { final String value = values.get(key); if (value == null || value.isEmpty()) return defaultValue; try { return Enum.valueOf(enumType, value); } catch (final Exception e) { e.printStackTrace(); return defaultValue; } } public List<String> getKeycolEntries() { return this.keyColEntries; } }