teichmann@5835: package org.dive4elements.river.client.client.ui.minfo; rrenkert@4223: rrenkert@4223: import java.util.ArrayList; rrenkert@4223: import java.util.List; rrenkert@4223: rrenkert@4223: import com.google.gwt.core.client.GWT; rrenkert@4299: import com.google.gwt.user.client.rpc.AsyncCallback; rrenkert@4223: import com.smartgwt.client.data.Record; rrenkert@4223: import com.smartgwt.client.types.ListGridFieldType; rrenkert@4299: import com.smartgwt.client.util.SC; rrenkert@4223: import com.smartgwt.client.widgets.Button; rrenkert@4223: import com.smartgwt.client.widgets.Canvas; rrenkert@4223: import com.smartgwt.client.widgets.Label; rrenkert@4223: import com.smartgwt.client.widgets.events.ClickEvent; rrenkert@4223: import com.smartgwt.client.widgets.events.ClickHandler; rrenkert@4223: import com.smartgwt.client.widgets.form.DynamicForm; rrenkert@4223: import com.smartgwt.client.widgets.form.fields.TextItem; rrenkert@4223: import com.smartgwt.client.widgets.form.validator.IsIntegerValidator; rrenkert@4223: import com.smartgwt.client.widgets.grid.ListGrid; rrenkert@4223: import com.smartgwt.client.widgets.grid.ListGridField; rrenkert@4223: import com.smartgwt.client.widgets.grid.ListGridRecord; rrenkert@4223: import com.smartgwt.client.widgets.grid.events.RecordClickEvent; rrenkert@4223: import com.smartgwt.client.widgets.grid.events.RecordClickHandler; rrenkert@4223: import com.smartgwt.client.widgets.layout.HLayout; rrenkert@4223: import com.smartgwt.client.widgets.layout.VLayout; rrenkert@4223: teichmann@5835: import org.dive4elements.river.client.client.Config; teichmann@5835: import org.dive4elements.river.client.client.services.SedimentLoadInfoService; teichmann@5835: import org.dive4elements.river.client.client.services.SedimentLoadInfoServiceAsync; teichmann@5835: import org.dive4elements.river.client.client.ui.AbstractUIProvider; teichmann@5835: import org.dive4elements.river.client.shared.model.ArtifactDescription; teichmann@5835: import org.dive4elements.river.client.shared.model.Data; teichmann@5835: import org.dive4elements.river.client.shared.model.DataItem; teichmann@5835: import org.dive4elements.river.client.shared.model.DataList; teichmann@5835: import org.dive4elements.river.client.shared.model.DefaultData; teichmann@5835: import org.dive4elements.river.client.shared.model.DefaultDataItem; teichmann@5835: import org.dive4elements.river.client.shared.model.SedimentLoadInfoObject; teichmann@5835: import org.dive4elements.river.client.shared.model.SedimentLoadInfoRecord; rrenkert@4223: rrenkert@4223: rrenkert@4223: public class SedLoadEpochPanel rrenkert@4223: extends AbstractUIProvider rrenkert@4223: { rrenkert@4299: protected SedimentLoadInfoServiceAsync sedLoadInfoService = rrenkert@4299: GWT.create(SedimentLoadInfoService.class); rrenkert@4299: rrenkert@4223: protected ListGrid elements; rrenkert@4223: private TextItem start; rrenkert@4223: private TextItem end; rrenkert@4299: private ListGrid sedLoadTable; rrenkert@4223: rrenkert@4223: public Canvas createWidget(DataList data) { rrenkert@4223: HLayout input = new HLayout(); rrenkert@4223: VLayout root = new VLayout(); rrenkert@4223: VLayout grid = new VLayout(); rrenkert@4223: VLayout intFields = new VLayout(); rrenkert@4223: Button add = new Button(MSG.add_date()); rrenkert@4223: elements = new ListGrid(); rrenkert@4223: rrenkert@4223: Label title = new Label(data.get(0).getDescription()); rrenkert@4223: title.setHeight("25px"); rrenkert@4223: rrenkert@4223: DynamicForm form = new DynamicForm(); rrenkert@4223: form.setNumCols(4); rrenkert@4223: start = new TextItem(MSG.from()); rrenkert@4223: start.setWidth(60); rrenkert@4223: start.setValidators(new IsIntegerValidator()); rrenkert@4223: end = new TextItem(MSG.to()); rrenkert@4223: end.setWidth(60); rrenkert@4223: end.setValidators(new IsIntegerValidator()); rrenkert@4223: form.setFields(start, end); rrenkert@4223: add.addClickHandler(new ClickHandler() { rrenkert@4223: @Override rrenkert@4223: public void onClick(ClickEvent ce) { rrenkert@4223: String v1 = start.getValueAsString(); rrenkert@4223: String v2 = end.getValueAsString(); rrenkert@4223: //TODO: better validation. rrenkert@4223: if (v1 == null || v2 == null) { rrenkert@4223: return; rrenkert@4223: } rrenkert@4223: try { rrenkert@4223: int v1i = Integer.parseInt(v1); rrenkert@4223: int v2i = Integer.parseInt(v2); rrenkert@4223: } rrenkert@4223: catch(NumberFormatException nfe) { rrenkert@4223: return; rrenkert@4223: } rrenkert@4223: Record r = new Record(); rrenkert@4223: r.setAttribute("from", v1); rrenkert@4223: r.setAttribute("to", v2); rrenkert@4223: elements.addData(r); rrenkert@4223: } rrenkert@4223: }); rrenkert@4223: rrenkert@4223: Label sel = new Label(MSG.select()); rrenkert@4223: sel.setHeight(25); rrenkert@4223: elements.setWidth(185); rrenkert@4223: elements.setHeight(120); rrenkert@4223: elements.setShowHeaderContextMenu(false); rrenkert@4223: elements.setCanReorderFields(false); rrenkert@4223: elements.setCanSort(false); rrenkert@4223: elements.setCanEdit(false); rrenkert@4223: ListGridField from = new ListGridField("from", MSG.from()); rrenkert@4223: ListGridField to = new ListGridField("to", MSG.to()); rrenkert@4223: from.setWidth(70); rrenkert@4223: to.setWidth(70); rrenkert@4223: rrenkert@4223: final ListGridField removeField = rrenkert@4223: new ListGridField("_removeRecord", "Remove Record"){{ rrenkert@4223: setType(ListGridFieldType.ICON); rrenkert@4223: setIcon(GWT.getHostPageBaseURL() + MSG.removeFeature()); rrenkert@4223: setCanEdit(false); rrenkert@4223: setCanFilter(false); rrenkert@4223: setCanSort(false); rrenkert@4223: setCanGroupBy(false); rrenkert@4223: setCanFreeze(false); rrenkert@4223: setWidth(25); rrenkert@4223: }}; rrenkert@4223: rrenkert@4223: elements.addRecordClickHandler(new RecordClickHandler() { rrenkert@4223: @Override rrenkert@4223: public void onRecordClick(final RecordClickEvent event) { rrenkert@4223: // Just handle remove-clicks rrenkert@4223: if(!event.getField().getName().equals(removeField.getName())) { rrenkert@4223: return; rrenkert@4223: } rrenkert@4223: event.getViewer().removeData(event.getRecord()); rrenkert@4223: } rrenkert@4223: }); rrenkert@4223: rrenkert@4223: elements.setFields(from, to, removeField); rrenkert@4223: rrenkert@4223: intFields.addMember(form); rrenkert@4223: intFields.addMember(add); rrenkert@4223: grid.addMember(sel); rrenkert@4223: grid.addMember(elements); rrenkert@4223: input.addMember(intFields); rrenkert@4223: input.addMember(grid); rrenkert@4223: root.addMember(title); rrenkert@4223: root.addMember(input); rrenkert@4223: rrenkert@4223: return root; rrenkert@4223: } rrenkert@4299: rrenkert@4223: @Override rrenkert@4223: public Canvas createOld(DataList dataList) { rrenkert@4223: HLayout layout = new HLayout(); rrenkert@4223: layout.setWidth("400px"); rrenkert@4223: VLayout vLayout = new VLayout(); rrenkert@4223: vLayout.setWidth(130); rrenkert@4223: Label label = new Label(dataList.getLabel()); rrenkert@4223: label.setWidth("200px"); rrenkert@4223: label.setHeight(25); rrenkert@4223: rrenkert@4223: List items = dataList.getAll(); rrenkert@4223: Data str = getData(items, "epochs"); rrenkert@4223: DataItem[] strItems = str.getItems(); rrenkert@4223: rrenkert@4223: String[] pairs = strItems[0].getLabel().split(";"); rrenkert@4223: for (int i = 0; i < pairs.length; i++) { rrenkert@4223: String[] vals = pairs[i].split(","); rrenkert@4223: Label dateLabel = new Label(vals[0] + " - " + vals[1]); rrenkert@4223: dateLabel.setHeight(20); rrenkert@4223: vLayout.addMember(dateLabel); rrenkert@4223: } rrenkert@4223: Canvas back = getBackButton(dataList.getState()); rrenkert@4223: layout.addMember(label); rrenkert@4223: layout.addMember(vLayout); rrenkert@4223: layout.addMember(back); rrenkert@4223: rrenkert@4223: return layout; rrenkert@4223: } rrenkert@4223: rrenkert@4223: @Override rrenkert@4223: public Canvas create(DataList data) { rrenkert@4223: VLayout layout = new VLayout(); rrenkert@4299: Canvas helper = createHelper(); rrenkert@4299: this.helperContainer.addMember(helper); rrenkert@4299: rrenkert@4223: Canvas submit = getNextButton(); rrenkert@4223: Canvas widget = createWidget(data); rrenkert@4223: rrenkert@4223: layout.addMember(widget); rrenkert@4223: layout.addMember(submit); rrenkert@4299: rrenkert@4299: fetchSedimentLoadData(); rrenkert@4299: rrenkert@4223: return layout; rrenkert@4223: } rrenkert@4223: rrenkert@4299: private Canvas createHelper() { rrenkert@4299: sedLoadTable = new ListGrid(); rrenkert@4299: sedLoadTable.setShowHeaderContextMenu(false); rrenkert@4299: sedLoadTable.setWidth100(); rrenkert@4299: sedLoadTable.setShowRecordComponents(true); rrenkert@4299: sedLoadTable.setShowRecordComponentsByCell(true); rrenkert@4299: sedLoadTable.setHeight100(); rrenkert@4299: sedLoadTable.setEmptyMessage(MSG.empty_table()); rrenkert@4299: sedLoadTable.setCanReorderFields(false); rrenkert@4299: rrenkert@4299: ListGridField date = new ListGridField("date", MSG.year()); rrenkert@4299: date.setType(ListGridFieldType.TEXT); rrenkert@4299: date.setWidth(100); rrenkert@4299: rrenkert@4299: ListGridField descr = rrenkert@4299: new ListGridField("description", MSG.description()); rrenkert@4299: descr.setType(ListGridFieldType.TEXT); rrenkert@4299: descr.setWidth("*"); rrenkert@4299: rrenkert@4299: sedLoadTable.setFields(date, descr); rrenkert@4299: return sedLoadTable; rrenkert@4299: } rrenkert@4299: rrenkert@4223: @Override rrenkert@4223: protected Data[] getData() { rrenkert@4223: List data = new ArrayList(); rrenkert@4223: rrenkert@4223: ListGridRecord[] lgr = elements.getRecords(); rrenkert@4223: if (lgr.length == 0) { rrenkert@4223: return new Data[0]; rrenkert@4223: } rrenkert@4223: String d = ""; rrenkert@4223: for (int i = 0; i < lgr.length; i++) { rrenkert@4223: Record r = (Record) lgr[i]; rrenkert@4223: d += r.getAttribute("from") + "," + r.getAttribute("to"); rrenkert@4223: d += ";"; rrenkert@4223: } rrenkert@4223: rrenkert@4223: DataItem item = new DefaultDataItem("epochs", null, d); rrenkert@4223: data.add(new DefaultData( rrenkert@4223: "epochs", rrenkert@4223: null, rrenkert@4223: null, rrenkert@4223: new DataItem[] { item })); rrenkert@4223: return data.toArray(new Data[data.size()]); rrenkert@4223: } rrenkert@4223: rrenkert@4299: protected void fetchSedimentLoadData() { rrenkert@4299: Config config = Config.getInstance(); rrenkert@4299: String locale = config.getLocale (); rrenkert@4299: rrenkert@4299: ArtifactDescription adescr = artifact.getArtifactDescription(); rrenkert@4299: DataList[] data = adescr.getOldData(); rrenkert@4299: rrenkert@4299: double[] km = artifact.getArtifactDescription().getKMRange(); rrenkert@4299: String river = artifact.getArtifactDescription().getRiver(); rrenkert@4299: rrenkert@4299: sedLoadInfoService.getSedimentLoadInfo(locale, river, "single", km[0], km[1], rrenkert@4299: new AsyncCallback() { rrenkert@4299: public void onFailure(Throwable caught) { rrenkert@4299: GWT.log("Could not recieve sediment load informations."); rrenkert@4299: SC.warn(caught.getMessage()); rrenkert@4299: } rrenkert@4299: rrenkert@4299: public void onSuccess(SedimentLoadInfoObject[] sedLoad) { rrenkert@4299: int num = sedLoad != null ? sedLoad.length :0; rrenkert@4299: GWT.log("Recieved " + num + " sediment load informations."); rrenkert@4299: rrenkert@4299: if (num == 0) { rrenkert@4299: return; rrenkert@4299: } rrenkert@4299: rrenkert@4299: addSedimentLoadInfo(sedLoad); rrenkert@4299: } rrenkert@4299: } rrenkert@4299: ); rrenkert@4299: } rrenkert@4299: rrenkert@4299: rrenkert@4299: protected void addSedimentLoadInfo (SedimentLoadInfoObject[] sedLoad) { rrenkert@4299: for(SedimentLoadInfoObject sl: sedLoad) { rrenkert@4299: SedimentLoadInfoRecord rec = new SedimentLoadInfoRecord(sl); rrenkert@4299: sedLoadTable.addData(rec); rrenkert@4299: } rrenkert@4299: } rrenkert@4299: rrenkert@4223: }