teichmann@5861: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5861: * Software engineering by Intevation GmbH teichmann@5861: * teichmann@5993: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5861: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5993: * documentation coming with Dive4Elements River for details. teichmann@5861: */ teichmann@5861: teichmann@5835: package org.dive4elements.river.client.client.ui.minfo; rrenkert@4223: rrenkert@4299: import java.util.ArrayList; rrenkert@4299: import java.util.List; rrenkert@4299: rrenkert@4299: import com.google.gwt.core.client.GWT; rrenkert@4299: import com.google.gwt.user.client.rpc.AsyncCallback; rrenkert@4299: import com.smartgwt.client.data.Record; rrenkert@4299: import com.smartgwt.client.types.ListGridFieldType; rrenkert@4299: import com.smartgwt.client.types.SelectionAppearance; rrenkert@4299: import com.smartgwt.client.util.SC; rrenkert@4299: import com.smartgwt.client.widgets.Canvas; rrenkert@4299: import com.smartgwt.client.widgets.Label; rrenkert@4299: import com.smartgwt.client.widgets.grid.ListGrid; rrenkert@4299: import com.smartgwt.client.widgets.grid.ListGridField; rrenkert@4299: import com.smartgwt.client.widgets.grid.ListGridRecord; rrenkert@4299: import com.smartgwt.client.widgets.layout.HLayout; rrenkert@4299: import com.smartgwt.client.widgets.layout.VLayout; rrenkert@4299: 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.PeriodPanel; 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: felix@6712: /** Show input to select an official epoch. */ rrenkert@4223: public class SedLoadOffEpochPanel rrenkert@4223: extends PeriodPanel rrenkert@4223: { rrenkert@4299: protected SedimentLoadInfoServiceAsync sedLoadInfoService = rrenkert@4299: GWT.create(SedimentLoadInfoService.class); rrenkert@4299: rrenkert@4299: private ListGrid sedLoadTable; rrenkert@4299: felix@6712: /** Creates layout with title. */ rrenkert@4299: public Canvas createWidget(DataList data) { rrenkert@4299: VLayout root = new VLayout(); rrenkert@4299: rrenkert@4299: Label title = new Label(data.get(0).getDescription()); rrenkert@4299: title.setHeight("25px"); rrenkert@4299: rrenkert@4299: root.addMember(title); rrenkert@4299: rrenkert@4299: return root; rrenkert@4299: } rrenkert@4299: felix@6728: /** Create layout for data entered previously. */ rrenkert@4299: @Override rrenkert@4299: public Canvas createOld(DataList dataList) { rrenkert@4299: HLayout layout = new HLayout(); rrenkert@4299: layout.setWidth("400px"); rrenkert@4299: VLayout vLayout = new VLayout(); rrenkert@4299: vLayout.setWidth(130); rrenkert@4299: Label label = new Label(dataList.getLabel()); rrenkert@4299: label.setWidth("200px"); rrenkert@4299: label.setHeight(25); rrenkert@4299: rrenkert@4299: List items = dataList.getAll(); rrenkert@4299: Data str = getData(items, "epochs"); rrenkert@4299: DataItem[] strItems = str.getItems(); rrenkert@4299: rrenkert@4299: String[] pairs = strItems[0].getLabel().split(";"); rrenkert@4299: for (int i = 0; i < pairs.length; i++) { rrenkert@4299: String[] vals = pairs[i].split(","); rrenkert@4299: Label dateLabel = new Label(vals[0] + " - " + vals[1]); rrenkert@4299: dateLabel.setHeight(20); rrenkert@4299: vLayout.addMember(dateLabel); rrenkert@4299: } rrenkert@4299: Canvas back = getBackButton(dataList.getState()); rrenkert@4299: layout.addMember(label); rrenkert@4299: layout.addMember(vLayout); rrenkert@4299: layout.addMember(back); rrenkert@4299: rrenkert@4299: return layout; rrenkert@4299: } rrenkert@4299: rrenkert@4299: @Override rrenkert@4299: public Canvas create(DataList data) { rrenkert@4299: VLayout layout = new VLayout(); rrenkert@4299: Canvas helper = createHelper(); rrenkert@4299: this.helperContainer.addMember(helper); rrenkert@4299: rrenkert@4299: Canvas submit = getNextButton(); rrenkert@4299: Canvas widget = createWidget(data); rrenkert@4299: rrenkert@4299: layout.addMember(widget); rrenkert@4299: layout.addMember(submit); rrenkert@4299: rrenkert@4299: fetchSedimentLoadData(); rrenkert@4299: rrenkert@4299: return layout; rrenkert@4299: } rrenkert@4299: felix@6712: /** Creates the helper grid in which off epochs can be selected. */ rrenkert@4299: protected 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: sedLoadTable.setSelectionAppearance(SelectionAppearance.CHECKBOX); 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@4299: @Override rrenkert@4299: public Data[] getData() { rrenkert@4299: List data = new ArrayList(); rrenkert@4299: rrenkert@4299: ListGridRecord[] lgr = sedLoadTable.getSelectedRecords(); rrenkert@4299: if (lgr.length == 0) { rrenkert@4299: return new Data[0]; rrenkert@4299: } rrenkert@4299: String d = ""; rrenkert@4299: for (int i = 0; i < lgr.length; i++) { rrenkert@4299: Record r = (Record) lgr[i]; rrenkert@4299: String date = r.getAttribute("date"); rrenkert@4299: String[] range = date.split(" - "); rrenkert@4299: d += range[0] + "," + range[1]; rrenkert@4299: d += ";"; rrenkert@4299: } rrenkert@4299: DataItem item = new DefaultDataItem("epochs", null, d); rrenkert@4299: data.add(new DefaultData( rrenkert@4299: "epochs", rrenkert@4299: null, rrenkert@4299: null, rrenkert@4299: new DataItem[] { item })); rrenkert@4299: return data.toArray(new Data[data.size()]); rrenkert@4299: } rrenkert@4299: rrenkert@4299: protected void fetchSedimentLoadData() { felix@6712: Config config = Config.getInstance(); felix@6712: 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: felix@6728: sedLoadInfoService.getSedimentLoadInfo(locale, river, "off_epoch", km[0], km[1], rrenkert@4299: new AsyncCallback() { rrenkert@4299: public void onFailure(Throwable caught) { felix@6712: GWT.log("Could not receive 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; felix@6712: GWT.log("Received " + 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@4223: } felix@6712: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :