Mercurial > dive4elements > river
diff gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java @ 9079:aafae1ab25f0
epoch-panels, single-input-panels
author | gernotbelger |
---|---|
date | Wed, 23 May 2018 17:30:24 +0200 |
parents | fc02833dbcc1 |
children | 5a0e8d76582e |
line wrap: on
line diff
--- a/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java Tue May 22 17:44:05 2018 +0200 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/AbstractSingleItemPanel.java Wed May 23 17:30:24 2018 +0200 @@ -21,10 +21,7 @@ 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; @@ -34,24 +31,30 @@ */ public abstract class AbstractSingleItemPanel extends AbstractUIProvider { - protected static final String FORM_ID = "FORM_ID"; + private static final long serialVersionUID = 1L; - protected TextItem inputItem; + protected enum Type { + single, multi // "SingleItem" (Klassenname) meint, dass es nur ein einziges Eingabefeld gibt (nicht from-to; epoch) + // Type multi: append (year): es können mehrere Werte eingegeben werden; Leerzeichen-getrennt + // Type single: append (year, sohlhöhendifferenz): nur ein Wert ist zulässig + } - protected List<String> validInputs = new ArrayList<String>(); + private final Type type; - protected ListGrid table; + private TextItem inputItem; + + private List<String> validInputs = new ArrayList<String>(); protected abstract String getDatakey(); - protected abstract void appendValue(final String value); + protected abstract Canvas createWidget(final DataList data); - protected abstract boolean getTitleVisible(); - - protected abstract String errorForItemMsg(); + public AbstractSingleItemPanel(final Type type) { + this.type = type; + } @Override - public Canvas create(final DataList data) { + public final Canvas create(final DataList data) { final VLayout layout = new VLayout(); final IColumnClickHandler fromHandler = new IColumnClickHandler() { // add to external class @@ -76,28 +79,8 @@ 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.setID(FORM_ID); - form.setNumCols(4); - this.inputItem = new TextItem(this.MSG.years()); - this.inputItem.setShowTitle(getTitleVisible()); - this.inputItem.setValidators(new IsIntegerValidator()); // TODO: validator to be overriden... - form.setFields(this.inputItem); - - layout.addMember(title); - layout.addMember(form); - - return layout; - } - @Override - public Canvas createOld(final DataList dataList) { + public final Canvas createOld(final DataList dataList) { final List<Data> items = dataList.getAll(); final Data years = getData(items, getDatakey()); final DataItem[] yearsItems = years.getItems(); @@ -121,20 +104,45 @@ } @Override - public List<String> validate() { + protected final Data[] getData() { + final List<String> errors = this.validate(); + if (errors.size() > 0) { + showErrors(errors); // TODO: do not allow advance state + // return null; + } + if (this.inputItem != null && !this.inputItem.getValueAsString().isEmpty()) { + final List<Data> data = new ArrayList<Data>(); + + final DataItem yearsdata = new DefaultDataItem(getDatakey(), getDatakey(), this.inputItem.getValueAsString().trim()); + data.add(new DefaultData(getDatakey(), null, null, new DataItem[] { yearsdata })); + + return data.toArray(new Data[data.size()]); + } + return new Data[0]; + } + + protected final TextItem createInputItem(final String title) { + this.inputItem = PanelHelper.createItem(title);// new TextItem(title); + return this.inputItem; + } + + private final List<String> checkForEmpty() { final List<String> errors = new ArrayList<String>(); if (this.inputItem.getValueAsString() == null || this.inputItem.getValueAsString().trim().isEmpty()) { errors.add(this.MSG.empty_filter()); return errors; } - final String sValue = this.inputItem.getValueAsString(); - String filtered = ""; - int goodValues = 0; + return errors; + } - int value = 0; + private final List<String> validateSingleInput(final String sValue) { + final List<String> errors = new ArrayList<String>(); + // String filtered = ""; + // int goodValues = 0; + try { - value = Integer.parseInt(sValue); + Integer.parseInt(sValue); } catch (final NumberFormatException e) { errors.add(this.MSG.wrongFormat() + ": " + sValue); @@ -154,32 +162,63 @@ errors.add(tmp); // continue; } - goodValues++; - if (goodValues > 1) { - filtered += " " + Integer.toString(value); - } else { - filtered = Integer.toString(value); + // goodValues++; + // if (goodValues > 1) { + // filtered += " " + Integer.toString(value); + // } else { + // filtered = Integer.toString(value); + // } + return errors; + } + + protected abstract String errorForItemMsg(); + + protected final void appendValue(final String value) { + + switch (this.type) { + case multi: + // APPEND = ADD to existing -> MULTI YEAR + final String oldYears = this.inputItem.getValueAsString(); + if (oldYears != null && !oldYears.isEmpty()) + this.inputItem.setValue(oldYears.trim() + " " + value); + else + this.inputItem.setValue(value); + + break; + + case single: + this.inputItem.setValue(value); + break; + + default: + throw new IllegalStateException(); + } + } + + @Override + public final List<String> validate() { + + final List<String> errors = new ArrayList<String>(); + errors.addAll(this.checkForEmpty()); + + final String sValue = this.inputItem.getValueAsString(); + + switch (this.type) { + case multi: + final String[] sValues = sValue.trim().split(" "); + for (final String value : sValues) { + errors.addAll(this.validateSingleInput(value)); + } + break; + + case single: + errors.addAll(this.validateSingleInput(sValue)); + break; + + default: + throw new IllegalStateException(); } return errors; } - - @Override - protected Data[] getData() { - final List<String> errors = this.validate(); - if (errors.size() > 0) { - showErrors(errors); // TODO: do not allow advance state - // return null; - } - if (this.inputItem != null && !this.inputItem.getValueAsString().isEmpty()) { - final List<Data> data = new ArrayList<Data>(); - - final DataItem yearsdata = new DefaultDataItem(getDatakey(), getDatakey(), this.inputItem.getValueAsString().trim()); - data.add(new DefaultData(getDatakey(), null, null, new DataItem[] { yearsdata })); - - return data.toArray(new Data[data.size()]); - } - return new Data[0]; - } - -} +} \ No newline at end of file