gernotbelger@9074: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde gernotbelger@9074: * Software engineering by Intevation GmbH 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: gernotbelger@9074: package org.dive4elements.river.client.client.ui.sinfo; gernotbelger@9074: gernotbelger@9074: import java.util.ArrayList; gernotbelger@9074: import java.util.List; gernotbelger@9074: gernotbelger@9074: import org.dive4elements.river.client.client.FLYSConstants; gernotbelger@9074: import org.dive4elements.river.client.client.ui.AbstractUIProvider; gernotbelger@9076: import org.dive4elements.river.client.client.ui.FromToTableHelperPanel; gernotbelger@9076: import org.dive4elements.river.client.client.ui.FromToTableHelperPanel.IColumnClickHandler; gernotbelger@9074: import org.dive4elements.river.client.shared.model.Data; gernotbelger@9074: import org.dive4elements.river.client.shared.model.DataItem; gernotbelger@9074: import org.dive4elements.river.client.shared.model.DataList; gernotbelger@9074: import org.dive4elements.river.client.shared.model.DefaultData; gernotbelger@9074: import org.dive4elements.river.client.shared.model.DefaultDataItem; gernotbelger@9074: gernotbelger@9074: import com.google.gwt.core.client.GWT; gernotbelger@9074: import com.google.gwt.i18n.client.NumberFormat; gernotbelger@9074: import com.smartgwt.client.widgets.Canvas; gernotbelger@9074: import com.smartgwt.client.widgets.Label; gernotbelger@9074: import com.smartgwt.client.widgets.form.DynamicForm; gernotbelger@9074: import com.smartgwt.client.widgets.form.fields.TextItem; gernotbelger@9074: import com.smartgwt.client.widgets.form.validator.IsIntegerValidator; gernotbelger@9074: import com.smartgwt.client.widgets.grid.ListGrid; gernotbelger@9074: import com.smartgwt.client.widgets.layout.HLayout; gernotbelger@9074: import com.smartgwt.client.widgets.layout.VLayout; gernotbelger@9074: gernotbelger@9074: public class CollisionLoadYearPanel extends AbstractUIProvider { gernotbelger@9074: gernotbelger@9074: private final FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); gernotbelger@9074: gernotbelger@9074: private TextItem yearsItem; gernotbelger@9074: gernotbelger@9075: private List validYears = new ArrayList(); gernotbelger@9074: gernotbelger@9074: private ListGrid table; gernotbelger@9074: gernotbelger@9074: public CollisionLoadYearPanel() { gernotbelger@9074: } gernotbelger@9074: gernotbelger@9074: @Override gernotbelger@9074: public Canvas createOld(final DataList dataList) { gernotbelger@9074: final List items = dataList.getAll(); gernotbelger@9074: final Data years = getData(items, "years"); gernotbelger@9074: final DataItem[] yearsItems = years.getItems(); gernotbelger@9074: gernotbelger@9074: final String v1 = yearsItems[0].getStringValue().replace(" ", ", "); gernotbelger@9074: gernotbelger@9074: final Label old = new Label(v1); gernotbelger@9074: final HLayout layout = new HLayout(); gernotbelger@9074: layout.setWidth("400px"); gernotbelger@9074: gernotbelger@9074: final Label label = new Label(dataList.getLabel()); gernotbelger@9074: label.setWidth("200px"); gernotbelger@9074: gernotbelger@9074: final Canvas back = getBackButton(dataList.getState()); gernotbelger@9074: gernotbelger@9074: layout.addMember(label); gernotbelger@9074: layout.addMember(old); gernotbelger@9074: layout.addMember(back); gernotbelger@9074: gernotbelger@9074: return layout; gernotbelger@9074: } gernotbelger@9074: gernotbelger@9074: @Override gernotbelger@9074: public List validate() { gernotbelger@9074: return validateYears(); gernotbelger@9074: } gernotbelger@9074: gernotbelger@9074: @Override gernotbelger@9074: public Canvas create(final DataList data) { gernotbelger@9074: final VLayout layout = new VLayout(); gernotbelger@9074: final IColumnClickHandler fromHandler = new IColumnClickHandler() { // add to external class gernotbelger@9074: gernotbelger@9074: @Override gernotbelger@9074: public void columnClicked(final String value) { gernotbelger@9074: appendYear(value); gernotbelger@9074: } gernotbelger@9074: }; gernotbelger@9074: gernotbelger@9076: final FromToTableHelperPanel helper = new FromToTableHelperPanel(data, "years", this.MSG, fromHandler, null); gernotbelger@9075: final Canvas table = helper.getTable(); gernotbelger@9075: this.validYears = helper.getKeycolEntries(); gernotbelger@9074: gernotbelger@9075: this.helperContainer.addMember(table); gernotbelger@9074: gernotbelger@9075: final Canvas submit = getNextButton(); gernotbelger@9075: final Canvas widget = createWidget(data); gernotbelger@9074: gernotbelger@9075: layout.addMember(widget); gernotbelger@9075: layout.addMember(submit); gernotbelger@9074: gernotbelger@9075: return layout; gernotbelger@9074: } gernotbelger@9074: gernotbelger@9074: public Canvas createWidget(final DataList data) { gernotbelger@9074: final VLayout layout = new VLayout(); gernotbelger@9074: gernotbelger@9074: final Label title = new Label(data.get(0).getDescription()); gernotbelger@9074: title.setHeight("25px"); gernotbelger@9074: gernotbelger@9074: final DynamicForm form = new DynamicForm(); gernotbelger@9074: form.setNumCols(4); gernotbelger@9074: this.yearsItem = new TextItem(this.MSG.years()); gernotbelger@9074: this.yearsItem.setValidators(new IsIntegerValidator()); gernotbelger@9076: form.setFields(this.yearsItem); // TODO: move to helper gernotbelger@9074: gernotbelger@9074: layout.addMember(title); gernotbelger@9074: layout.addMember(form); gernotbelger@9074: gernotbelger@9074: return layout; gernotbelger@9074: } gernotbelger@9074: gernotbelger@9074: @Override gernotbelger@9074: protected Data[] getData() { gernotbelger@9074: validateYears(); gernotbelger@9074: if (this.yearsItem != null && !this.yearsItem.getValueAsString().isEmpty()) { gernotbelger@9074: final List data = new ArrayList(); gernotbelger@9074: gernotbelger@9074: final DataItem yearsdata = new DefaultDataItem("years", "years", this.yearsItem.getValueAsString().trim()); gernotbelger@9074: data.add(new DefaultData("years", null, null, new DataItem[] { yearsdata })); gernotbelger@9074: gernotbelger@9074: return data.toArray(new Data[data.size()]); gernotbelger@9074: } gernotbelger@9074: return new Data[0]; gernotbelger@9074: } gernotbelger@9074: gernotbelger@9074: private List validateYears() { gernotbelger@9074: final List errors = new ArrayList(); gernotbelger@9074: final NumberFormat nf = NumberFormat.getDecimalFormat(); gernotbelger@9074: gernotbelger@9074: if (this.yearsItem.getValueAsString() == null || this.yearsItem.getValueAsString().trim().isEmpty()) { gernotbelger@9074: errors.add(this.MESSAGES.empty_filter()); gernotbelger@9074: return errors; gernotbelger@9074: } gernotbelger@9074: gernotbelger@9074: final String[] sValues = this.yearsItem.getValueAsString().trim().split(" "); gernotbelger@9074: String filtered = ""; gernotbelger@9074: int goodValues = 0; gernotbelger@9074: for (final String sValue : sValues) { gernotbelger@9074: int value; gernotbelger@9074: try { gernotbelger@9074: value = Integer.parseInt(sValue); gernotbelger@9074: } gernotbelger@9074: catch (final NumberFormatException e) { gernotbelger@9074: errors.add(this.MESSAGES.wrongFormat() + ": " + sValue); gernotbelger@9074: continue; gernotbelger@9074: } gernotbelger@9074: boolean isGood = false; gernotbelger@9074: for (final String validYear : this.validYears) { gernotbelger@9074: /* No list contains for strings? */ gernotbelger@9074: if (sValue.equals(validYear)) { gernotbelger@9074: isGood = true; gernotbelger@9074: break; gernotbelger@9074: } gernotbelger@9074: } gernotbelger@9074: if (!isGood) { gernotbelger@9074: String tmp = this.MESSAGES.no_data_for_year(); gernotbelger@9074: tmp = tmp.replace("$1", sValue); gernotbelger@9074: errors.add(tmp); gernotbelger@9074: continue; gernotbelger@9074: } gernotbelger@9074: goodValues++; gernotbelger@9074: if (goodValues > 1) { gernotbelger@9074: filtered += " " + Integer.toString(value); gernotbelger@9074: } else { gernotbelger@9074: filtered = Integer.toString(value); gernotbelger@9074: } gernotbelger@9074: } gernotbelger@9074: gernotbelger@9074: return errors; gernotbelger@9074: } gernotbelger@9074: gernotbelger@9074: protected final void appendYear(final String year) { gernotbelger@9074: final String oldYears = this.yearsItem.getValueAsString(); gernotbelger@9074: if (oldYears != null && !oldYears.isEmpty()) { gernotbelger@9074: this.yearsItem.setValue(oldYears.trim() + " " + year); gernotbelger@9074: } else { gernotbelger@9074: this.yearsItem.setValue(year); gernotbelger@9074: } gernotbelger@9074: } gernotbelger@9074: }