gernotbelger@9064: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde gernotbelger@9064: * Software engineering by Intevation GmbH gernotbelger@9064: * gernotbelger@9064: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9064: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9064: * documentation coming with Dive4Elements River for details. gernotbelger@9064: */ gernotbelger@9064: gernotbelger@9064: package org.dive4elements.river.client.client.ui.uinfo; gernotbelger@9064: gernotbelger@9064: import java.util.ArrayList; gernotbelger@9064: import java.util.List; gernotbelger@9064: gernotbelger@9064: import org.dive4elements.river.client.client.ui.AbstractUIProvider; gernotbelger@9064: import org.dive4elements.river.client.shared.model.Data; gernotbelger@9064: import org.dive4elements.river.client.shared.model.DataItem; gernotbelger@9064: import org.dive4elements.river.client.shared.model.DataList; gernotbelger@9064: import org.dive4elements.river.client.shared.model.DefaultData; gernotbelger@9064: import org.dive4elements.river.client.shared.model.DefaultDataItem; gernotbelger@9064: gernotbelger@9064: import com.google.gwt.core.client.GWT; gernotbelger@9064: import com.smartgwt.client.data.Record; gernotbelger@9064: import com.smartgwt.client.types.ListGridFieldType; gernotbelger@9064: import com.smartgwt.client.widgets.Button; gernotbelger@9064: import com.smartgwt.client.widgets.Canvas; gernotbelger@9064: import com.smartgwt.client.widgets.Label; gernotbelger@9064: import com.smartgwt.client.widgets.events.ClickEvent; gernotbelger@9064: import com.smartgwt.client.widgets.events.ClickHandler; gernotbelger@9064: import com.smartgwt.client.widgets.form.DynamicForm; gernotbelger@9064: import com.smartgwt.client.widgets.form.fields.TextItem; gernotbelger@9064: import com.smartgwt.client.widgets.form.validator.IsIntegerValidator; gernotbelger@9064: import com.smartgwt.client.widgets.form.validator.IsStringValidator; gernotbelger@9064: import com.smartgwt.client.widgets.form.validator.Validator; gernotbelger@9064: import com.smartgwt.client.widgets.grid.ListGrid; gernotbelger@9064: import com.smartgwt.client.widgets.grid.ListGridField; gernotbelger@9064: import com.smartgwt.client.widgets.grid.ListGridRecord; gernotbelger@9064: import com.smartgwt.client.widgets.grid.events.RecordClickEvent; gernotbelger@9064: import com.smartgwt.client.widgets.grid.events.RecordClickHandler; gernotbelger@9064: import com.smartgwt.client.widgets.layout.HLayout; gernotbelger@9064: import com.smartgwt.client.widgets.layout.VLayout; gernotbelger@9064: gernotbelger@9064: public class VegetationzonesTable extends AbstractUIProvider { gernotbelger@9064: private static final long serialVersionUID = 1L; gernotbelger@9064: gernotbelger@9064: protected ListGrid elements; gernotbelger@9064: private TextItem vegzone; gernotbelger@9064: private TextItem start; gernotbelger@9064: private TextItem end; gernotbelger@9064: private ListGrid table; gernotbelger@9064: gernotbelger@9064: private TextItem createItem(final String identifier, final String title, final int width, final Validator... validator) { gernotbelger@9064: final TextItem item = new TextItem(identifier, title); gernotbelger@9064: item.setWidth(width); gernotbelger@9064: item.setWrapTitle(false); gernotbelger@9064: item.setValidators(validator);// eigentlich überflüssig, oder? gernotbelger@9064: return item; gernotbelger@9064: } gernotbelger@9064: gernotbelger@9064: public Canvas createWidget(final DataList data) { gernotbelger@9064: gernotbelger@9064: final VLayout root = new VLayout(); gernotbelger@9064: final HLayout input = new HLayout(); gernotbelger@9064: final VLayout tableLayout = new VLayout(); gernotbelger@9064: final HLayout fields = new HLayout(); gernotbelger@9064: final HLayout fields2 = new HLayout(); gernotbelger@9064: final VLayout spacer = new VLayout(); gernotbelger@9064: spacer.setHeight(10); gernotbelger@9064: gernotbelger@9064: final Button add = new Button(this.MSG.add_date()); // TODO: make key more generic or change to more specific gernotbelger@9064: this.elements = new ListGrid(); gernotbelger@9064: gernotbelger@9064: final Label title = new Label(data.get(0).getDescription()); gernotbelger@9064: title.setHeight("35px"); // orig:25 gernotbelger@9064: gernotbelger@9064: this.vegzone = createItem("uinfo_vegetation_zone_label", this.MSG.uinfo_vegetation_zone_label(), 200, new IsStringValidator()); gernotbelger@9064: this.start = createItem("uinfo_vegetation_zones_from", this.MSG.uinfo_vegetation_zones_from(), 40, new IsIntegerValidator()); gernotbelger@9064: this.end = createItem("uinfo_vegetation_zones_to", this.MSG.uinfo_vegetation_zones_to(), 40, new IsIntegerValidator()); gernotbelger@9064: gernotbelger@9064: final DynamicForm form1 = new DynamicForm(); gernotbelger@9064: final DynamicForm form2 = new DynamicForm(); gernotbelger@9064: form2.setNumCols(5); gernotbelger@9064: form1.setNumCols(7); gernotbelger@9064: form1.setFields(this.vegzone); gernotbelger@9064: form2.setFields(this.start, this.end); gernotbelger@9064: gernotbelger@9064: add.addClickHandler(new ClickHandler() { gernotbelger@9064: @Override gernotbelger@9064: public void onClick(final ClickEvent ce) { gernotbelger@9064: final String v1 = VegetationzonesTable.this.start.getValueAsString(); gernotbelger@9064: final String v2 = VegetationzonesTable.this.end.getValueAsString(); gernotbelger@9064: final String v3 = VegetationzonesTable.this.vegzone.getValueAsString(); gernotbelger@9064: if (v1 == null || v2 == null || v3 == null) { gernotbelger@9064: return; gernotbelger@9064: } gernotbelger@9064: gernotbelger@9064: final ListGridRecord r = new ListGridRecord(); gernotbelger@9064: r.setAttribute("vegzone", v3); gernotbelger@9064: r.setAttribute("from", v1); gernotbelger@9064: r.setAttribute("to", v2); gernotbelger@9064: VegetationzonesTable.this.elements.addData(r); gernotbelger@9064: } gernotbelger@9064: }); gernotbelger@9064: gernotbelger@9064: final Label sel = new Label(this.MSG.select()); gernotbelger@9064: sel.setHeight(25); gernotbelger@9064: this.elements.setWidth(450); // 185 gernotbelger@9064: this.elements.setHeight(500); // 120 gernotbelger@9064: this.elements.setShowHeaderContextMenu(false); gernotbelger@9064: this.elements.setCanReorderFields(false); gernotbelger@9064: this.elements.setCanSort(false); gernotbelger@9064: this.elements.setCanEdit(false); gernotbelger@9064: final ListGridField vegzone = new ListGridField("vegzone", this.MSG.uinfo_vegetation_zones_label()); gernotbelger@9064: final ListGridField from = new ListGridField("from", this.MSG.uinfo_vegetation_zones_from()); gernotbelger@9064: final ListGridField to = new ListGridField("to", this.MSG.uinfo_vegetation_zones_to()); gernotbelger@9064: vegzone.setWidth(285); gernotbelger@9064: from.setWidth(70); gernotbelger@9064: to.setWidth(70); gernotbelger@9064: gernotbelger@9064: final ListGridField removeField = new ListGridField("_removeRecord", "Remove Record") { gernotbelger@9064: { gernotbelger@9064: setType(ListGridFieldType.ICON); gernotbelger@9064: setIcon(GWT.getHostPageBaseURL() + VegetationzonesTable.this.MSG.removeFeature()); gernotbelger@9064: setCanEdit(false); gernotbelger@9064: setCanFilter(false); gernotbelger@9064: setCanSort(false); gernotbelger@9064: setCanGroupBy(false); gernotbelger@9064: setCanFreeze(false); gernotbelger@9064: setWidth(25); gernotbelger@9064: } gernotbelger@9064: }; gernotbelger@9064: gernotbelger@9064: this.elements.addRecordClickHandler(new RecordClickHandler() { gernotbelger@9064: @Override gernotbelger@9064: public void onRecordClick(final RecordClickEvent event) { gernotbelger@9064: // Just handle remove-clicks gernotbelger@9064: if (!event.getField().getName().equals(removeField.getName())) { gernotbelger@9064: return; gernotbelger@9064: } gernotbelger@9064: event.getViewer().removeData(event.getRecord()); gernotbelger@9064: } gernotbelger@9064: }); gernotbelger@9064: gernotbelger@9064: this.elements.setFields(vegzone, from, to, removeField); gernotbelger@9064: gernotbelger@9064: fields.addMember(form1); gernotbelger@9064: fields2.addMember(form2); gernotbelger@9064: // fields2.addMember(add); gernotbelger@9064: gernotbelger@9064: tableLayout.addMember(this.elements); gernotbelger@9064: root.addMember(title); gernotbelger@9064: root.addMember(input); gernotbelger@9064: root.addMember(tableLayout); gernotbelger@9064: root.addMember(spacer); gernotbelger@9064: root.addMember(fields); gernotbelger@9064: root.addMember(fields2); gernotbelger@9064: root.addMember(spacer); gernotbelger@9064: root.addMember(add); gernotbelger@9064: root.addMember(spacer); gernotbelger@9064: root.addMember(spacer); gernotbelger@9064: gernotbelger@9064: return root; gernotbelger@9064: } gernotbelger@9064: gernotbelger@9064: @Override gernotbelger@9064: public Canvas createOld(final DataList dataList) { gernotbelger@9064: final HLayout layout = new HLayout(); gernotbelger@9064: layout.setWidth("400px"); gernotbelger@9064: final VLayout vLayout = new VLayout(); gernotbelger@9064: vLayout.setWidth(130); gernotbelger@9064: final Label label = new Label(dataList.getLabel()); gernotbelger@9064: label.setWidth("200px"); gernotbelger@9064: label.setHeight(25); gernotbelger@9064: gernotbelger@9064: final List items = dataList.getAll(); gernotbelger@9064: final Data str = getData(items, "vegzones"); gernotbelger@9064: final DataItem[] strItems = str.getItems(); gernotbelger@9064: gernotbelger@9064: final String[] entries = strItems[0].getLabel().split(";"); gernotbelger@9064: for (final String entry : entries) { gernotbelger@9064: final String[] vals = entry.split(","); gernotbelger@9064: final Label dateLabel = new Label(vals[0] + " - " + vals[1]); gernotbelger@9064: dateLabel.setHeight(20); gernotbelger@9064: vLayout.addMember(dateLabel); gernotbelger@9064: } gernotbelger@9064: final Canvas back = getBackButton(dataList.getState()); gernotbelger@9064: layout.addMember(label); gernotbelger@9064: layout.addMember(vLayout); gernotbelger@9064: layout.addMember(back); gernotbelger@9064: gernotbelger@9064: return layout; gernotbelger@9064: } gernotbelger@9064: gernotbelger@9064: @Override gernotbelger@9064: public Canvas create(final DataList data) { gernotbelger@9064: final VLayout layout = new VLayout(); gernotbelger@9064: final Canvas helper = createHelper(); gernotbelger@9064: this.helperContainer.addMember(helper); gernotbelger@9064: gernotbelger@9064: final Canvas submit = getNextButton(); gernotbelger@9064: final Canvas widget = createWidget(data); gernotbelger@9064: gernotbelger@9064: layout.addMember(widget); gernotbelger@9064: layout.addMember(submit); // TODO: SUBMIT gernotbelger@9064: gernotbelger@9064: // fetchSedimentLoadData(); //TODO: feed from database... gernotbelger@9064: gernotbelger@9064: return layout; gernotbelger@9064: } gernotbelger@9064: gernotbelger@9064: private Canvas createHelper() { gernotbelger@9064: this.table = new ListGrid(); gernotbelger@9064: this.table.setShowHeaderContextMenu(false); gernotbelger@9064: this.table.setWidth100(); gernotbelger@9064: this.table.setShowRecordComponents(true); gernotbelger@9064: this.table.setShowRecordComponentsByCell(true); gernotbelger@9064: this.table.setHeight100(); gernotbelger@9064: this.table.setEmptyMessage(this.MSG.empty_table()); gernotbelger@9064: this.table.setCanReorderFields(false); gernotbelger@9064: gernotbelger@9064: /* Input support pins */ gernotbelger@9064: // final String baseUrl = GWT.getHostPageBaseURL(); gernotbelger@9064: // final ListGridField pinFrom = new ListGridField("fromIcon", this.MSG.uinfo_vegetation_zones_from()); gernotbelger@9064: // pinFrom.setWidth(300); gernotbelger@9064: // pinFrom.setType(ListGridFieldType.ICON); gernotbelger@9064: // pinFrom.setCellIcon(baseUrl + this.MSG.markerGreen()); gernotbelger@9064: // gernotbelger@9064: // final ListGridField pinTo = new ListGridField("toIcon", this.MSG.uinfo_vegetation_zones_to()); gernotbelger@9064: // pinTo.setType(ListGridFieldType.ICON); gernotbelger@9064: // pinTo.setWidth(300); gernotbelger@9064: // pinTo.setCellIcon(baseUrl + this.MSG.markerRed()); gernotbelger@9064: // gernotbelger@9064: // pinFrom.addRecordClickHandler(new RecordClickHandler() { gernotbelger@9064: // @Override gernotbelger@9064: // public void onRecordClick(final RecordClickEvent e) { gernotbelger@9064: // final Record r = e.getRecord(); gernotbelger@9064: // VegetationzonesTable.this.vegzone.setValue(r.getAttribute("date")); // date?? gernotbelger@9064: // } gernotbelger@9064: // }); gernotbelger@9064: // gernotbelger@9064: // pinFrom.addRecordClickHandler(new RecordClickHandler() { gernotbelger@9064: // @Override gernotbelger@9064: // public void onRecordClick(final RecordClickEvent e) { gernotbelger@9064: // final Record r = e.getRecord(); gernotbelger@9064: // VegetationzonesTable.this.start.setValue(r.getAttribute("date")); gernotbelger@9064: // } gernotbelger@9064: // }); gernotbelger@9064: // gernotbelger@9064: // pinTo.addRecordClickHandler(new RecordClickHandler() { gernotbelger@9064: // @Override gernotbelger@9064: // public void onRecordClick(final RecordClickEvent e) { gernotbelger@9064: // final Record r = e.getRecord(); gernotbelger@9064: // VegetationzonesTable.this.end.setValue(r.getAttribute("date")); gernotbelger@9064: // } gernotbelger@9064: // }); gernotbelger@9064: // gernotbelger@9064: // final ListGridField date = new ListGridField("date", this.MSG.year()); gernotbelger@9064: // date.setType(ListGridFieldType.TEXT); gernotbelger@9064: // date.setWidth(100); gernotbelger@9064: // gernotbelger@9064: // final ListGridField descr = new ListGridField("description", this.MSG.description()); gernotbelger@9064: // descr.setType(ListGridFieldType.TEXT); gernotbelger@9064: // descr.setWidth("*"); gernotbelger@9064: // gernotbelger@9064: // this.table.setFields(pinFrom, pinTo, date, descr); gernotbelger@9064: return this.table; gernotbelger@9064: } gernotbelger@9064: gernotbelger@9064: @Override gernotbelger@9064: protected Data[] getData() { gernotbelger@9064: final List data = new ArrayList(); gernotbelger@9064: gernotbelger@9064: final ListGridRecord[] lgr = this.elements.getRecords(); gernotbelger@9064: if (lgr.length == 0) { gernotbelger@9064: return new Data[0]; gernotbelger@9064: } gernotbelger@9064: String d = ""; gernotbelger@9064: for (final ListGridRecord element : lgr) { gernotbelger@9064: final Record r = element; gernotbelger@9064: d += r.getAttribute("vegzone") + "," + r.getAttribute("from") + "," + r.getAttribute("to"); gernotbelger@9064: d += ";"; gernotbelger@9064: } gernotbelger@9064: gernotbelger@9064: final DataItem item = new DefaultDataItem("vegzones", null, d); // DATA-key gernotbelger@9064: data.add(new DefaultData("vegzones", null, null, new DataItem[] { item })); gernotbelger@9064: return data.toArray(new Data[data.size()]); gernotbelger@9064: } gernotbelger@9064: gernotbelger@9064: }