raimund@1602: package de.intevation.flys.client.client.ui; raimund@1602: raimund@1602: import com.google.gwt.core.client.GWT; raimund@1602: raimund@1602: import com.smartgwt.client.types.ListGridFieldType; raimund@1602: raimund@1602: import com.smartgwt.client.data.Record; raimund@1602: raimund@1602: import com.smartgwt.client.widgets.layout.VLayout; raimund@1602: import com.smartgwt.client.widgets.Canvas; raimund@1602: import com.smartgwt.client.widgets.grid.ListGrid; raimund@1602: import com.smartgwt.client.widgets.grid.ListGridField; raimund@1602: import com.smartgwt.client.widgets.grid.CellFormatter; raimund@1602: import com.smartgwt.client.widgets.grid.ListGridRecord; raimund@1602: import com.smartgwt.client.widgets.grid.events.RecordClickHandler; raimund@1602: import com.smartgwt.client.widgets.grid.events.RecordClickEvent; raimund@1602: raimund@1602: import de.intevation.flys.client.client.FLYSConstants; raimund@1602: import de.intevation.flys.client.client.Config; raimund@1602: raimund@1602: import de.intevation.flys.client.shared.model.DataList; raimund@1602: import de.intevation.flys.client.shared.model.DataItem; raimund@1602: import de.intevation.flys.client.shared.model.ArtifactDescription; raimund@1602: import de.intevation.flys.client.shared.model.Data; raimund@1602: raimund@1602: import de.intevation.flys.client.client.ui.range.DischargeInfoDataSource; raimund@1602: raimund@1602: /** raimund@1602: * @author Raimund Renkert raimund@1602: */ raimund@1602: public class GaugeTimeRangePanel extends IntegerRangePanel { raimund@1602: raimund@1602: /** The message class that provides i18n strings. */ raimund@1602: protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); raimund@1602: raimund@1602: protected ListGrid yearTable; raimund@1602: raimund@1602: public GaugeTimeRangePanel() { raimund@1602: GWT.log("Creating YearInputPanel"); raimund@1602: yearTable = new ListGrid(); raimund@1602: yearTable.setAutoFetchData(true); raimund@1602: yearTable.setShowHeaderContextMenu(false); raimund@1602: raimund@1602: } raimund@1602: raimund@1602: public Canvas create(DataList data) { raimund@1602: setDataName(data); raimund@1602: raimund@1602: VLayout root = new VLayout(); raimund@1602: raimund@1602: root.addMember(createLabel(data)); raimund@1602: root.addMember(createForm(data)); raimund@1602: root.addMember(getNextButton()); raimund@1602: raimund@1602: initDefaults(data); raimund@1602: raimund@1602: raimund@1602: initYearTable(); raimund@1602: raimund@1602: long gauge = getGaugeNumber(); raimund@1602: raimund@1602: Config config = Config.getInstance(); raimund@1602: String url = config.getServerUrl(); raimund@1602: yearTable.setDataSource(new DischargeInfoDataSource(url, gauge)); raimund@1602: raimund@1602: helperContainer.addMember(yearTable); raimund@1602: return root; raimund@1602: } raimund@1602: raimund@1602: raimund@1602: protected ListGrid initYearTable() { raimund@1602: String baseUrl = GWT.getHostPageBaseURL(); raimund@1602: raimund@1602: yearTable.setWidth100(); raimund@1602: yearTable.setHeight100(); raimund@1602: yearTable.setShowRecordComponents(true); raimund@1602: yearTable.setShowRecordComponentsByCell(true); raimund@1602: yearTable.setEmptyMessage(MESSAGES.empty_filter()); raimund@1602: yearTable.setCanReorderFields(false); raimund@1602: raimund@1602: CellFormatter cf = new CellFormatter() { raimund@1602: public String format( raimund@1602: Object value, raimund@1602: ListGridRecord record, raimund@1602: int rowNum, int colNum) { raimund@1602: if (value == null) return null; raimund@1602: if (value.toString().equals("-1")) { raimund@1602: return ""; raimund@1602: } raimund@1602: return value.toString(); raimund@1602: } raimund@1602: }; raimund@1602: raimund@1602: raimund@1602: ListGridField addstart = new ListGridField ("", ""); raimund@1602: addstart.setType (ListGridFieldType.ICON); raimund@1602: addstart.setWidth (20); raimund@1602: addstart.setCellIcon(baseUrl + MESSAGES.markerGreen()); raimund@1602: addstart.addRecordClickHandler(new RecordClickHandler() { raimund@1602: public void onRecordClick(RecordClickEvent e) { raimund@1602: Record r = e.getRecord(); raimund@1602: if (r.getAttribute("start").equals("-1")) { raimund@1602: return; raimund@1602: } raimund@1602: else { raimund@1602: setLower(r.getAttribute("start")); raimund@1602: } raimund@1602: } raimund@1602: }); raimund@1602: raimund@1602: ListGridField addend = new ListGridField ("", ""); raimund@1602: addend.setType (ListGridFieldType.ICON); raimund@1602: addend.setWidth (20); raimund@1602: addend.setCellIcon(baseUrl + MESSAGES.markerRed()); raimund@1602: addend.addRecordClickHandler(new RecordClickHandler() { raimund@1602: public void onRecordClick(RecordClickEvent e) { raimund@1602: Record r = e.getRecord(); raimund@1602: if (r.getAttribute("end").equals("-1")) { raimund@1602: return; raimund@1602: } raimund@1602: else { raimund@1602: setUpper(r.getAttribute("end")); raimund@1602: } raimund@1602: } raimund@1602: }); raimund@1602: raimund@1602: ListGridField desc = raimund@1602: new ListGridField("description", MESSAGES.description()); raimund@1602: desc.setType(ListGridFieldType.TEXT); raimund@1602: desc.setWidth("*"); raimund@1602: raimund@1602: ListGridField start = raimund@1602: new ListGridField("start", MESSAGES.start_year()); raimund@1602: start.setType(ListGridFieldType.INTEGER); raimund@1602: start.setWidth(50); raimund@1602: start.setCellFormatter(cf); raimund@1602: raimund@1602: ListGridField end = raimund@1602: new ListGridField("end", MESSAGES.end_year()); raimund@1602: end.setType(ListGridFieldType.INTEGER); raimund@1602: end.setWidth(50); raimund@1602: end.setCellFormatter(cf); raimund@1602: raimund@1602: yearTable.setFields(addstart, addend, desc, start, end); raimund@1602: raimund@1602: return yearTable; raimund@1602: } raimund@1602: raimund@1602: raimund@1602: protected long getGaugeNumber() { raimund@1602: ArtifactDescription adescr = artifact.getArtifactDescription(); raimund@1602: DataList[] data = adescr.getOldData(); raimund@1602: raimund@1602: String gauge = ""; raimund@1602: if (data != null && data.length > 0) { raimund@1602: for (int i = 0; i < data.length; i++) { raimund@1602: DataList dl = data[i]; raimund@1602: if (dl.getState().equals("state.winfo.historicalq.reference_gauge")) { raimund@1602: for (int j = 0; j < dl.size(); j++) { raimund@1602: Data d = dl.get(j); raimund@1602: DataItem[] di = d.getItems(); raimund@1602: if (di != null && di.length == 1) { raimund@1602: gauge = d.getItems()[0].getStringValue(); raimund@1602: } raimund@1602: } raimund@1602: } raimund@1602: } raimund@1602: } raimund@1602: try { raimund@1602: return Long.parseLong(gauge); raimund@1602: } raimund@1602: catch (NumberFormatException nfe) { raimund@1602: GWT.log("Error parsing gauge."); raimund@1602: return 0; raimund@1602: } raimund@1602: } raimund@1602: }