Mercurial > dive4elements > river
view flys-client/src/main/java/de/intevation/flys/client/client/ui/DistancePanel.java @ 782:4a7ece57f44c
#159 The tables in the WQ panel for calculation 4 are now filled with data.
flys-client/trunk@2273 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Fri, 01 Jul 2011 08:44:24 +0000 |
parents | 6653cf54b45d |
children | 8ebaad41285b |
line wrap: on
line source
package de.intevation.flys.client.client.ui; import java.util.ArrayList; import java.util.List; import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.NumberFormat; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.form.fields.events.BlurHandler; import com.smartgwt.client.widgets.form.fields.events.BlurEvent; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; import com.smartgwt.client.widgets.tab.TabSet; import com.smartgwt.client.widgets.tab.Tab; import de.intevation.flys.client.shared.model.ArtifactDescription; import de.intevation.flys.client.shared.model.Data; import de.intevation.flys.client.shared.model.DataItem; import de.intevation.flys.client.shared.model.DataList; import de.intevation.flys.client.shared.model.DefaultData; import de.intevation.flys.client.shared.model.DefaultDataItem; import de.intevation.flys.client.client.Config; import de.intevation.flys.client.client.FLYSConstants; import de.intevation.flys.client.client.ui.range.DistanceInfoDataSource; import de.intevation.flys.client.client.ui.range.RangeTable; import de.intevation.flys.client.client.ui.range.LocationsTable; public class DistancePanel extends AbstractUIProvider implements BlurHandler { public static final int DEFAULT_STEP_WIDTH = 100; protected FLYSConstants MSG = GWT.create(FLYSConstants.class); protected RangeTable distancesTable; protected LocationsTable locationsTable; protected DoubleRangePanel distancePanel; protected TabSet tabs; protected double min; protected double max; public DistancePanel() { distancesTable = new RangeTable(); locationsTable = new LocationsTable(); distancePanel = new DoubleRangePanel( MSG.unitFrom(), MSG.unitTo(), MSG.unitWidth(), 0d, 0d, 0d, 250, this); } @Override public Canvas create(DataList data) { VLayout layout = new VLayout(); layout.setMembersMargin(10); Label label = new Label(MSG.distance_state()); Canvas submit = getNextButton(); label.setHeight(25); distancePanel.setHeight(50); layout.addMember(label); layout.addMember(distancePanel); layout.addMember(submit); initMinMaxValues(data); initDefaultValues(data); initHelperPanel(); return layout; } @Override public Canvas createOld(DataList dataList) { String s = getOldSelectionString(dataList); String l = dataList.getLabel(); Label label = new Label(l); Label selected = new Label(s); HLayout layout = new HLayout(); layout.setWidth(400); label.setWidth(200); selected.setWidth(130); layout.addMember(label); layout.addMember(selected); return layout; } protected String getOldSelectionString(DataList dataList) { List<Data> items = dataList.getAll(); Data dFrom = getData(items, "ld_from"); Data dTo = getData(items, "ld_to"); Data dStep = getData(items, "ld_step"); DataItem[] from = dFrom.getItems(); DataItem[] to = dTo.getItems(); DataItem[] step = dStep.getItems(); StringBuilder sb = new StringBuilder(); sb.append(from[0].getLabel()); sb.append(" " + MSG.unitFrom() + " "); sb.append(to[0].getLabel()); sb.append(" " + MSG.unitTo() + " "); sb.append(step[0].getLabel()); sb.append(" " + MSG.unitWidth()); return sb.toString(); } @Override public List<String> validate() { List<String> errors = new ArrayList<String>(); if (!distancePanel.validateForm()) { errors.add(MSG.wrongFormat()); return errors; } validateFrom(errors); validateTo(errors); return errors; } protected void validateFrom(List<String> errors) { double from = distancePanel.getFrom(); if (from < min || from > max) { NumberFormat nf = NumberFormat.getDecimalFormat(); String tmp = MSG.error_validate_lower_range(); tmp = tmp.replace("$1", nf.format(from)); tmp = tmp.replace("$2", nf.format(min)); distancePanel.setFrom(min); errors.add(tmp); } } protected void validateTo(List<String> errors) { double to = distancePanel.getTo(); if (to < min || to > max) { NumberFormat nf = NumberFormat.getDecimalFormat(); String tmp = MSG.error_validate_upper_range(); tmp = tmp.replace("$1", nf.format(to)); tmp = tmp.replace("$2", nf.format(max)); distancePanel.setTo(max); errors.add(tmp); } } @Override public Data[] getData() { Data[] data = new Data[3]; data[0] = getDataFrom(); data[1] = getDataTo(); data[2] = getDataStep(); return data; } protected Data getDataFrom() { String value = String.valueOf(distancePanel.getFrom()); DataItem item = new DefaultDataItem("ld_from", "ld_from", value); return new DefaultData( "ld_from", null, null, new DataItem[] { item }); } protected Data getDataTo() { String value = String.valueOf(distancePanel.getTo()); DataItem item = new DefaultDataItem("ld_to", "ld_to", value); return new DefaultData( "ld_to", null, null, new DataItem[] { item }); } protected Data getDataStep() { String value = String.valueOf(distancePanel.getStep()); DataItem item = new DefaultDataItem("ld_step","ld_step", value); return new DefaultData( "ld_step", null, null, new DataItem[] { item }); } @Override public void onBlur(BlurEvent event) { distancePanel.validateForm(); } protected void initMinMaxValues(DataList data) { Data f = getData(data.getAll(), "ld_from"); Data t = getData(data.getAll(), "ld_to"); DataItem[] fItems = f.getItems(); DataItem[] tItems = t.getItems(); try { min = Double.valueOf(fItems[0].getStringValue()); max = Double.valueOf(tItems[0].getStringValue()); } catch (NumberFormatException nfe) { min = -Double.MAX_VALUE; max = Double.MAX_VALUE; } } protected void initDefaultValues(DataList data) { initDefaultFrom(data); initDefaultTo(data); initDefaultStep(data); } protected void initDefaultFrom(DataList data) { Data f = getData(data.getAll(), "ld_from"); double from = min; try { from = getDefaultValue(f); } catch (NumberFormatException nfe) { // do nothing } distancePanel.setFrom(from); } protected void initDefaultTo(DataList data) { Data t = getData(data.getAll(), "ld_to"); double to = max; try { to = getDefaultValue(t); } catch (NumberFormatException nfe) { // do nothing } distancePanel.setTo(to); } protected void initDefaultStep(DataList data) { Data s = getData(data.getAll(), "ld_step"); double step = (double) DEFAULT_STEP_WIDTH; try { step = getDefaultValue(s); } catch (NumberFormatException nfe) { // do nothing } distancePanel.setStep(step); } protected double getDefaultValue(Data data) throws NumberFormatException { DataItem def = data.getDefault(); String defValue = def != null ? def.getStringValue() : null; return Double.valueOf(defValue); } protected void initHelperPanel() { Config config = Config.getInstance(); String url = config.getServerUrl(); String river = getRiverName(); distancesTable.setAutoFetchData(true); locationsTable.setAutoFetchData(true); distancesTable.setDataSource(new DistanceInfoDataSource( url, river, "distances")); locationsTable.setDataSource(new DistanceInfoDataSource( url, river, "locations")); tabs = new TabSet(); tabs.setWidth100(); tabs.setHeight100(); Tab locations = new Tab(MSG.locations()); Tab distances = new Tab(MSG.distance()); locations.setPane(locationsTable); distances.setPane(distancesTable); tabs.addTab(locations, 0); tabs.addTab(distances, 1); helperContainer.addChild(tabs); } protected String getRiverName() { ArtifactDescription adescr = artifact.getArtifactDescription(); DataList[] data = adescr.getOldData(); if (data != null && data.length > 0) { for (int i = 0; i < data.length; i++) { DataList dl = data[i]; if (dl.getState().equals("state.winfo.river")) { for (int j = 0; j < dl.size(); j++) { Data d = dl.get(j); DataItem[] di = d.getItems(); if (di != null && di.length == 1) { return d.getItems()[0].getStringValue(); } } } } } return null; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :