rrenkert@4223: package de.intevation.flys.client.client.ui.minfo; rrenkert@4223: rrenkert@4223: import java.util.List; rrenkert@4223: rrenkert@4223: import com.smartgwt.client.data.Record; rrenkert@4223: 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.fields.events.BlurEvent; rrenkert@4223: import com.smartgwt.client.widgets.form.fields.events.BlurHandler; rrenkert@4223: import com.smartgwt.client.widgets.grid.events.CellClickEvent; rrenkert@4223: import com.smartgwt.client.widgets.grid.events.CellClickHandler; rrenkert@4223: import com.smartgwt.client.widgets.layout.HLayout; rrenkert@4223: import com.smartgwt.client.widgets.layout.VLayout; rrenkert@4223: rrenkert@4223: import de.intevation.flys.client.client.Config; rrenkert@4223: import de.intevation.flys.client.client.ui.AbstractUIProvider; rrenkert@4223: import de.intevation.flys.client.client.ui.DoubleRangeOnlyPanel; rrenkert@4223: import de.intevation.flys.client.client.ui.DoubleRangePanel; rrenkert@4223: import de.intevation.flys.client.client.ui.LocationPicker; rrenkert@4223: import de.intevation.flys.client.client.ui.range.DistanceInfoDataSource; rrenkert@4223: 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@4223: rrenkert@4223: rrenkert@4223: public class SedLoadDistancePanel rrenkert@4223: extends AbstractUIProvider rrenkert@4223: implements BlurHandler, CellClickHandler rrenkert@4223: { rrenkert@4223: public static final String FIELD_LOWER = "ld_from"; rrenkert@4223: public static final String FIELD_UPPER = "ld_to"; rrenkert@4223: rrenkert@4223: protected DoubleRangePanel distancePanel; rrenkert@4223: protected double min; rrenkert@4223: protected double max; rrenkert@4223: protected LocationPicker picker; rrenkert@4223: rrenkert@4223: @Override rrenkert@4223: public Canvas createOld(DataList dataList) { rrenkert@4223: String s = getOldSelectionString(dataList); rrenkert@4223: String l = dataList.getLabel(); rrenkert@4223: rrenkert@4223: Label label = new Label(l); rrenkert@4223: Label selected = new Label(s); rrenkert@4223: rrenkert@4223: HLayout layout = new HLayout(); rrenkert@4223: rrenkert@4223: layout.setWidth(400); rrenkert@4223: label.setWidth(200); rrenkert@4223: selected.setWidth(130); rrenkert@4223: rrenkert@4223: layout.addMember(label); rrenkert@4223: layout.addMember(selected); rrenkert@4223: layout.addMember(getBackButton(dataList.getState())); rrenkert@4223: rrenkert@4223: return layout; rrenkert@4223: } rrenkert@4223: rrenkert@4223: protected String getOldSelectionString(DataList dataList) { rrenkert@4223: List items = dataList.getAll(); rrenkert@4223: rrenkert@4223: Data dFrom = getData(items, FIELD_LOWER); rrenkert@4223: Data dTo = getData(items, FIELD_UPPER); rrenkert@4223: rrenkert@4223: DataItem[] from = dFrom.getItems(); rrenkert@4223: DataItem[] to = dTo.getItems(); rrenkert@4223: rrenkert@4223: StringBuilder sb = new StringBuilder(); rrenkert@4223: sb.append(from[0].getLabel()); rrenkert@4223: sb.append(" " + MSG.dpUnitFrom() + " - "); rrenkert@4223: sb.append(to[0].getLabel()); rrenkert@4223: sb.append(" " + MSG.dpUnitTo()); rrenkert@4223: rrenkert@4223: return sb.toString(); rrenkert@4223: } rrenkert@4223: rrenkert@4223: @Override rrenkert@4223: public Canvas create(DataList data) { rrenkert@4223: picker = new LocationPicker(this); rrenkert@4223: distancePanel = new DoubleRangeOnlyPanel( rrenkert@4223: MSG.dpUnitFrom() + " - ", MSG.dpUnitTo(), 0d, 0d, 250, this, "right"); rrenkert@4223: VLayout layout = new VLayout(); rrenkert@4223: layout.setMembersMargin(10); rrenkert@4223: rrenkert@4223: Label label = new Label(MSG.distance_state()); rrenkert@4223: rrenkert@4223: Canvas submit = getNextButton(); rrenkert@4223: rrenkert@4223: label.setHeight(25); rrenkert@4223: distancePanel.setHeight(50); rrenkert@4223: rrenkert@4223: layout.addMember(label); rrenkert@4223: layout.addMember(distancePanel); rrenkert@4223: layout.addMember(submit); rrenkert@4223: rrenkert@4223: initMinMaxValues(data); rrenkert@4223: initDefaultValues(data); rrenkert@4223: rrenkert@4223: rrenkert@4223: picker.setIsDistance(true); rrenkert@4223: picker.getLocationTable().setAutoFetchData(true); rrenkert@4223: picker.prepareFilter(); rrenkert@4223: rrenkert@4223: helperContainer.addMember(picker.getLocationTable()); rrenkert@4223: helperContainer.addMember(picker.getFilterLayout()); rrenkert@4223: helperContainer.addMember(picker.getResultCountForm()); rrenkert@4223: rrenkert@4223: setPickerDataSource(); rrenkert@4223: picker.createLocationTable(); rrenkert@4223: rrenkert@4223: return layout; rrenkert@4223: } rrenkert@4223: rrenkert@4223: protected void initMinMaxValues(DataList data) { rrenkert@4223: Data f = getData(data.getAll(), FIELD_LOWER); rrenkert@4223: Data t = getData(data.getAll(), FIELD_UPPER); rrenkert@4223: rrenkert@4223: DataItem[] fItems = f.getItems(); rrenkert@4223: DataItem[] tItems = t.getItems(); rrenkert@4223: rrenkert@4223: try { rrenkert@4223: min = Double.valueOf(fItems[0].getStringValue()); rrenkert@4223: max = Double.valueOf(tItems[0].getStringValue()); rrenkert@4223: } rrenkert@4223: catch (NumberFormatException nfe) { rrenkert@4223: min = -Double.MAX_VALUE; rrenkert@4223: max = Double.MAX_VALUE; rrenkert@4223: } rrenkert@4223: } rrenkert@4223: rrenkert@4223: protected void initDefaultValues(DataList data) { rrenkert@4223: initDefaultFrom(data); rrenkert@4223: initDefaultTo(data); rrenkert@4223: } rrenkert@4223: rrenkert@4223: protected void initDefaultFrom(DataList data) { rrenkert@4223: Data f = getData(data.getAll(), FIELD_LOWER); rrenkert@4223: rrenkert@4223: double from = getDefaultFrom(); rrenkert@4223: rrenkert@4223: try { rrenkert@4223: from = getDefaultValue(f); rrenkert@4223: } rrenkert@4223: catch (NumberFormatException nfe) { rrenkert@4223: // do nothing rrenkert@4223: } rrenkert@4223: rrenkert@4223: distancePanel.setFrom(from); rrenkert@4223: } rrenkert@4223: rrenkert@4223: rrenkert@4223: protected double getDefaultFrom() { rrenkert@4223: return min; rrenkert@4223: } rrenkert@4223: rrenkert@4223: rrenkert@4223: protected void initDefaultTo(DataList data) { rrenkert@4223: Data t = getData(data.getAll(), FIELD_UPPER); rrenkert@4223: rrenkert@4223: double to = getDefaultTo(); rrenkert@4223: rrenkert@4223: try { rrenkert@4223: to = getDefaultValue(t); rrenkert@4223: } rrenkert@4223: catch (NumberFormatException nfe) { rrenkert@4223: // do nothing rrenkert@4223: } rrenkert@4223: rrenkert@4223: distancePanel.setTo(to); rrenkert@4223: } rrenkert@4223: rrenkert@4223: rrenkert@4223: protected double getDefaultTo() { rrenkert@4223: return max; rrenkert@4223: } rrenkert@4223: rrenkert@4223: protected double getDefaultValue(Data data) rrenkert@4223: throws NumberFormatException rrenkert@4223: { rrenkert@4223: DataItem def = data.getDefault(); rrenkert@4223: String defValue = def != null ? def.getStringValue() : null; rrenkert@4223: rrenkert@4223: return Double.valueOf(defValue); rrenkert@4223: } rrenkert@4223: rrenkert@4223: /** Hook service to the listgrid with possible input values. */ rrenkert@4223: protected void setPickerDataSource() { rrenkert@4223: Config config = Config.getInstance(); rrenkert@4223: String url = config.getServerUrl(); rrenkert@4223: String river = ""; rrenkert@4223: rrenkert@4223: ArtifactDescription adescr = artifact.getArtifactDescription(); rrenkert@4223: DataList[] data = adescr.getOldData(); rrenkert@4223: rrenkert@4223: // Try to find a "river" data item to set the source for the rrenkert@4223: // list grid. rrenkert@4223: String dataFilter = "locations"; rrenkert@4223: if (data != null && data.length > 0) { rrenkert@4223: for (int i = 0; i < data.length; i++) { rrenkert@4223: DataList dl = data[i]; rrenkert@4223: if (dl.getState().equals("state.minfo.river")) { rrenkert@4223: dataFilter = "measuringpoint"; rrenkert@4223: } rrenkert@4223: if (dl.getState().equals("state.winfo.river") || rrenkert@4223: dl.getState().equals("state.chart.river") || rrenkert@4223: dl.getState().equals("state.minfo.river")) { rrenkert@4223: for (int j = 0; j < dl.size(); j++) { rrenkert@4223: Data d = dl.get(j); rrenkert@4223: DataItem[] di = d.getItems(); rrenkert@4223: if (di != null && di.length == 1) { rrenkert@4223: river = d.getItems()[0].getStringValue(); rrenkert@4223: break; rrenkert@4223: } rrenkert@4223: } rrenkert@4223: } rrenkert@4223: } rrenkert@4223: } rrenkert@4223: rrenkert@4223: picker.getLocationTable().setDataSource(new DistanceInfoDataSource( rrenkert@4223: url, river, dataFilter)); rrenkert@4223: } rrenkert@4223: rrenkert@4223: @Override rrenkert@4223: protected Data[] getData() { rrenkert@4223: Data[] data = new Data[2]; rrenkert@4223: rrenkert@4223: data[0] = getDataFrom(); rrenkert@4223: data[1] = getDataTo(); rrenkert@4223: rrenkert@4223: return data; rrenkert@4223: } rrenkert@4223: rrenkert@4223: protected Data getDataFrom() { rrenkert@4223: String value = String.valueOf(distancePanel.getFrom()); rrenkert@4223: String field = FIELD_LOWER; rrenkert@4223: rrenkert@4223: DataItem item = new DefaultDataItem(field, field, value); rrenkert@4223: return new DefaultData( rrenkert@4223: field, null, null, new DataItem[] { item }); rrenkert@4223: } rrenkert@4223: rrenkert@4223: protected Data getDataTo() { rrenkert@4223: String value = String.valueOf(distancePanel.getTo()); rrenkert@4223: String field = FIELD_UPPER; rrenkert@4223: rrenkert@4223: DataItem item = new DefaultDataItem(field, field, value); rrenkert@4223: return new DefaultData( rrenkert@4223: field, null, null, new DataItem[] { item }); rrenkert@4223: } rrenkert@4223: rrenkert@4223: @Override rrenkert@4223: public void onBlur(BlurEvent event) { rrenkert@4223: distancePanel.validateForm(); rrenkert@4223: } rrenkert@4223: rrenkert@4223: @Override rrenkert@4223: public void onCellClick(CellClickEvent e) { rrenkert@4223: Record record = e.getRecord(); rrenkert@4223: int ndx = e.getColNum(); rrenkert@4223: String from = record.getAttribute("from"); rrenkert@4223: try { rrenkert@4223: double value = Double.valueOf(from); rrenkert@4223: switch (ndx) { rrenkert@4223: case 0: distancePanel.setFrom(value); break; rrenkert@4223: case 1: distancePanel.setTo(value); break; rrenkert@4223: } rrenkert@4223: } rrenkert@4223: catch(NumberFormatException nfe) { rrenkert@4223: SC.warn(MSG.wrongFormat()); rrenkert@4223: } rrenkert@4223: } rrenkert@4223: }