Mercurial > dive4elements > river
view gwt-client/src/main/java/org/dive4elements/river/client/client/ui/sinfo/CollisionLoadYearPanel.java @ 9076:22d8928895a1
dynamic input table epochSelect
author | gernotbelger |
---|---|
date | Tue, 22 May 2018 11:58:30 +0200 |
parents | 89740fe82196 |
children | 2b13de1b0897 |
line wrap: on
line source
/* 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.client.client.ui.sinfo; import java.util.ArrayList; import java.util.List; import org.dive4elements.river.client.client.FLYSConstants; import org.dive4elements.river.client.client.ui.AbstractUIProvider; import org.dive4elements.river.client.client.ui.FromToTableHelperPanel; import org.dive4elements.river.client.client.ui.FromToTableHelperPanel.IColumnClickHandler; 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.DefaultData; import org.dive4elements.river.client.shared.model.DefaultDataItem; import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.NumberFormat; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.form.validator.IsIntegerValidator; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; public class CollisionLoadYearPanel extends AbstractUIProvider { private final FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); private TextItem yearsItem; private List<String> validYears = new ArrayList<String>(); private ListGrid table; public CollisionLoadYearPanel() { } @Override public Canvas createOld(final DataList dataList) { final List<Data> items = dataList.getAll(); final Data years = getData(items, "years"); final DataItem[] yearsItems = years.getItems(); final String v1 = yearsItems[0].getStringValue().replace(" ", ", "); final Label old = new Label(v1); final HLayout layout = new HLayout(); layout.setWidth("400px"); final Label label = new Label(dataList.getLabel()); label.setWidth("200px"); final Canvas back = getBackButton(dataList.getState()); layout.addMember(label); layout.addMember(old); layout.addMember(back); return layout; } @Override public List<String> validate() { return validateYears(); } @Override public Canvas create(final DataList data) { final VLayout layout = new VLayout(); final IColumnClickHandler fromHandler = new IColumnClickHandler() { // add to external class @Override public void columnClicked(final String value) { appendYear(value); } }; final FromToTableHelperPanel helper = new FromToTableHelperPanel(data, "years", this.MSG, fromHandler, null); final Canvas table = helper.getTable(); this.validYears = helper.getKeycolEntries(); this.helperContainer.addMember(table); final Canvas submit = getNextButton(); final Canvas widget = createWidget(data); layout.addMember(widget); layout.addMember(submit); return layout; } public Canvas createWidget(final DataList data) { final VLayout layout = new VLayout(); final Label title = new Label(data.get(0).getDescription()); title.setHeight("25px"); final DynamicForm form = new DynamicForm(); form.setNumCols(4); this.yearsItem = new TextItem(this.MSG.years()); this.yearsItem.setValidators(new IsIntegerValidator()); form.setFields(this.yearsItem); // TODO: move to helper layout.addMember(title); layout.addMember(form); return layout; } @Override protected Data[] getData() { validateYears(); if (this.yearsItem != null && !this.yearsItem.getValueAsString().isEmpty()) { final List<Data> data = new ArrayList<Data>(); final DataItem yearsdata = new DefaultDataItem("years", "years", this.yearsItem.getValueAsString().trim()); data.add(new DefaultData("years", null, null, new DataItem[] { yearsdata })); return data.toArray(new Data[data.size()]); } return new Data[0]; } private List<String> validateYears() { final List<String> errors = new ArrayList<String>(); final NumberFormat nf = NumberFormat.getDecimalFormat(); if (this.yearsItem.getValueAsString() == null || this.yearsItem.getValueAsString().trim().isEmpty()) { errors.add(this.MESSAGES.empty_filter()); return errors; } final String[] sValues = this.yearsItem.getValueAsString().trim().split(" "); String filtered = ""; int goodValues = 0; for (final String sValue : sValues) { int value; try { value = Integer.parseInt(sValue); } catch (final NumberFormatException e) { errors.add(this.MESSAGES.wrongFormat() + ": " + sValue); continue; } boolean isGood = false; for (final String validYear : this.validYears) { /* No list contains for strings? */ if (sValue.equals(validYear)) { isGood = true; break; } } if (!isGood) { String tmp = this.MESSAGES.no_data_for_year(); tmp = tmp.replace("$1", sValue); errors.add(tmp); continue; } goodValues++; if (goodValues > 1) { filtered += " " + Integer.toString(value); } else { filtered = Integer.toString(value); } } return errors; } protected final void appendYear(final String year) { final String oldYears = this.yearsItem.getValueAsString(); if (oldYears != null && !oldYears.isEmpty()) { this.yearsItem.setValue(oldYears.trim() + " " + year); } else { this.yearsItem.setValue(year); } } }