rrenkert@4223: package de.intevation.flys.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@4299: import com.smartgwt.client.types.ListGridFieldType; rrenkert@4299: import com.smartgwt.client.util.SC; rrenkert@4223: import com.smartgwt.client.widgets.Canvas; rrenkert@4223: import com.smartgwt.client.widgets.Label; 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@4299: import com.smartgwt.client.widgets.grid.ListGrid; rrenkert@4299: import com.smartgwt.client.widgets.grid.ListGridField; rrenkert@4223: import com.smartgwt.client.widgets.layout.HLayout; rrenkert@4223: import com.smartgwt.client.widgets.layout.VLayout; rrenkert@4223: rrenkert@4299: import de.intevation.flys.client.client.Config; rrenkert@4299: import de.intevation.flys.client.client.services.SedimentLoadInfoService; rrenkert@4299: import de.intevation.flys.client.client.services.SedimentLoadInfoServiceAsync; rrenkert@4223: import de.intevation.flys.client.client.ui.AbstractUIProvider; rrenkert@4299: import de.intevation.flys.client.shared.model.ArtifactDescription; rrenkert@4223: import de.intevation.flys.client.shared.model.Data; rrenkert@4223: import de.intevation.flys.client.shared.model.DataItem; rrenkert@4223: import de.intevation.flys.client.shared.model.DataList; rrenkert@4223: import de.intevation.flys.client.shared.model.DefaultData; rrenkert@4223: import de.intevation.flys.client.shared.model.DefaultDataItem; rrenkert@4299: import de.intevation.flys.client.shared.model.SedimentLoadInfoObject; rrenkert@4299: import de.intevation.flys.client.shared.model.SedimentLoadInfoRecord; rrenkert@4223: rrenkert@4223: rrenkert@4223: public class SedLoadPeriodPanel rrenkert@4223: extends AbstractUIProvider rrenkert@4223: { rrenkert@4299: protected SedimentLoadInfoServiceAsync sedLoadInfoService = rrenkert@4299: GWT.create(SedimentLoadInfoService.class); rrenkert@4223: rrenkert@4223: private TextItem start; rrenkert@4223: private TextItem end; rrenkert@4223: rrenkert@4299: private ListGrid sedLoadTable; rrenkert@4299: rrenkert@4223: public SedLoadPeriodPanel () { rrenkert@4223: } rrenkert@4223: rrenkert@4223: @Override rrenkert@4223: public Canvas createOld(DataList dataList) { rrenkert@4223: List items = dataList.getAll(); rrenkert@4223: Data start = getData(items, "start"); rrenkert@4223: Data end = getData(items, "end"); rrenkert@4223: DataItem[] startItem = start.getItems(); rrenkert@4223: DataItem[] endItem = end.getItems(); rrenkert@4223: rrenkert@4223: String v1 = startItem[0].getStringValue(); rrenkert@4223: String v2 = endItem[0].getStringValue(); rrenkert@4223: rrenkert@4223: int v1i = 0; rrenkert@4223: int v2i = 0; rrenkert@4223: try { rrenkert@4223: v1i = Integer.parseInt(v1); rrenkert@4223: v2i = Integer.parseInt(v2); rrenkert@4223: } rrenkert@4223: catch (NumberFormatException nfe) { rrenkert@4223: GWT.log(nfe.toString()); rrenkert@4223: } rrenkert@4223: Label old = new Label(v1i + " - " + v2i); rrenkert@4223: HLayout layout = new HLayout(); rrenkert@4223: layout.setWidth("400px"); rrenkert@4223: rrenkert@4223: Label label = new Label(dataList.getLabel()); rrenkert@4223: label.setWidth("200px"); rrenkert@4223: rrenkert@4223: Canvas back = getBackButton(dataList.getState()); rrenkert@4223: rrenkert@4223: layout.addMember(label); rrenkert@4223: layout.addMember(old); 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@4223: rrenkert@4299: Canvas helper = createHelper(); rrenkert@4299: this.helperContainer.addMember(helper); rrenkert@4223: 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: public Canvas createWidget(DataList data) { rrenkert@4223: VLayout layout = new VLayout(); 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.setValidators(new IsIntegerValidator()); rrenkert@4223: end = new TextItem(MSG.to()); rrenkert@4223: end.setValidators(new IsIntegerValidator()); rrenkert@4223: form.setFields(start, end); rrenkert@4223: // inputPanel.setToTitle(MSG.to()); rrenkert@4223: // inputPanel.setFromTitle(MSG.from()); rrenkert@4223: // inputPanel.setShowTitle(false); rrenkert@4223: rrenkert@4223: layout.addMember(title); rrenkert@4223: layout.addMember(form); rrenkert@4223: rrenkert@4223: return layout; rrenkert@4223: } rrenkert@4223: rrenkert@4223: @Override rrenkert@4223: protected Data[] getData() { rrenkert@4223: int v1; rrenkert@4223: int v2; rrenkert@4223: try { rrenkert@4223: v1 = Integer.parseInt(start.getValueAsString()); rrenkert@4223: v2 = Integer.parseInt(end.getValueAsString()); rrenkert@4223: } rrenkert@4223: catch(NumberFormatException nfe) { rrenkert@4223: // warn the user... rrenkert@4223: return new Data[0]; rrenkert@4223: } rrenkert@4223: if (validateRange(v1, v2)) { rrenkert@4223: List data = new ArrayList(); rrenkert@4223: rrenkert@4223: DataItem startItem = new DefaultDataItem("start", "start", start.getValueAsString()); rrenkert@4223: DataItem endItem = new DefaultDataItem("end", "end", end.getValueAsString()); rrenkert@4223: data.add(new DefaultData( rrenkert@4223: "start", rrenkert@4223: null, rrenkert@4223: null, rrenkert@4223: new DataItem[] { startItem })); rrenkert@4223: data.add(new DefaultData( rrenkert@4223: "end", rrenkert@4223: null, rrenkert@4223: null, rrenkert@4223: new DataItem[] { endItem })); rrenkert@4223: rrenkert@4223: return data.toArray(new Data[data.size()]); rrenkert@4223: } rrenkert@4223: return new Data[0]; rrenkert@4223: } rrenkert@4223: rrenkert@4223: protected boolean validateRange(int v1, int v2) { rrenkert@4223: // TODO: Set useful years for validation. Current range is between start rrenkert@4223: // of gregorian calendar and a year in the future... teichmann@4736: if ((v1 > 1582 && v1 < 2100) rrenkert@4223: && (v2 > 1582 && v2 < 2100)) { rrenkert@4223: return true; rrenkert@4223: } rrenkert@4223: return false; 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@4223: rrenkert@4223: }