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.fixation; raimund@2505: raimund@2505: import java.util.ArrayList; gernotbelger@9099: import java.util.List; raimund@2505: teichmann@5835: import org.dive4elements.river.client.client.FLYSConstants; teichmann@5835: import org.dive4elements.river.client.client.ui.DoubleRangePanel; 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; gernotbelger@9256: import org.dive4elements.river.client.shared.model.FixingsOverviewInfo; gernotbelger@9099: gernotbelger@9099: import com.google.gwt.core.client.GWT; gernotbelger@9099: import com.smartgwt.client.widgets.Canvas; gernotbelger@9099: import com.smartgwt.client.widgets.Label; gernotbelger@9099: import com.smartgwt.client.widgets.form.fields.FormItem; gernotbelger@9099: import com.smartgwt.client.widgets.form.fields.events.BlurEvent; gernotbelger@9099: import com.smartgwt.client.widgets.form.fields.events.BlurHandler; gernotbelger@9099: import com.smartgwt.client.widgets.layout.HLayout; gernotbelger@9099: import com.smartgwt.client.widgets.layout.VLayout; gernotbelger@9099: raimund@2505: /** raimund@2505: * This UIProvider creates a panel for location or distance input. raimund@2505: * raimund@2505: * @author Raimund Renkert raimund@2505: */ gernotbelger@9099: public class FixLocationPanel extends FixationPanel implements BlurHandler { raimund@2505: /** The message class that provides i18n strings. */ raimund@2505: protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); raimund@2505: gernotbelger@9099: /** The constant name of the input field to enter locations. */ raimund@2505: public static final String FIELD_VALUE_LOCATION = "location"; raimund@2505: gernotbelger@9099: /** The constant name of the input field to enter distance. */ raimund@2505: public static final String FIELD_VALUE_DISTANCE = "distance"; raimund@2505: raimund@2505: DoubleRangePanel inputPanel; raimund@2505: raimund@2505: double from; raimund@2505: double to; raimund@2505: double step; raimund@2505: gernotbelger@9099: @Override gernotbelger@9099: public Canvas createWidget(final DataList data) { raimund@2505: instances.put(this.artifact.getUuid(), this); raimund@2505: gernotbelger@9099: final VLayout layout = new VLayout(); raimund@2505: gernotbelger@9099: final Canvas title = new Label(this.MESSAGES.distance()); raimund@2505: title.setHeight("25px"); raimund@2505: gernotbelger@9099: this.inputPanel = new DoubleRangePanel(this.MESSAGES.unitFrom(), this.MESSAGES.unitTo(), this.MESSAGES.unitWidth(), 0d, 0d, 0d, 240, this); raimund@2505: raimund@2505: layout.addMember(title); gernotbelger@9099: layout.addMember(this.inputPanel); raimund@2505: return layout; raimund@2505: } raimund@2505: raimund@2505: @Override gernotbelger@9099: public Canvas createOld(final DataList dataList) { gernotbelger@9099: final List items = dataList.getAll(); raimund@2505: gernotbelger@9099: final Data f = getData(items, "ld_from"); gernotbelger@9099: final Data t = getData(items, "ld_to"); gernotbelger@9099: final Data s = getData(items, "ld_step"); gernotbelger@9099: final DataItem[] fItems = f.getItems(); gernotbelger@9099: final DataItem[] tItems = t.getItems(); gernotbelger@9099: final DataItem[] sItems = s.getItems(); raimund@2505: gernotbelger@9099: final StringBuilder sb = new StringBuilder(); raimund@2505: sb.append(fItems[0].getLabel()); gernotbelger@9099: sb.append(" " + this.MESSAGES.unitFrom() + " "); raimund@2505: sb.append(tItems[0].getLabel()); gernotbelger@9099: sb.append(" " + this.MESSAGES.unitTo() + " "); raimund@2505: sb.append(sItems[0].getLabel()); gernotbelger@9099: sb.append(" " + this.MESSAGES.unitWidth()); raimund@2505: gernotbelger@9099: final Label old = new Label(sb.toString()); raimund@2505: old.setWidth(130); raimund@2505: gernotbelger@9099: final HLayout layout = new HLayout(); raimund@2505: layout.setWidth("400px"); raimund@2505: gernotbelger@9099: final Label label = new Label(dataList.getLabel()); raimund@2505: label.setWidth("200px"); raimund@2505: gernotbelger@9099: final Canvas back = getBackButton(dataList.getState()); raimund@2505: raimund@2505: layout.addMember(label); raimund@2505: layout.addMember(old); raimund@2505: layout.addMember(back); raimund@2505: raimund@2505: return layout; raimund@2505: } raimund@2505: raimund@2505: /** raimund@2505: * This method returns the selected data. raimund@2505: * raimund@2505: * @return the selected/inserted data. raimund@2505: */ gernotbelger@9099: @Override raimund@2505: public Data[] getData() { gernotbelger@9099: final List data = new ArrayList(); raimund@2505: gernotbelger@9099: final boolean valid = saveRangeValues(this.inputPanel); raimund@2505: if (valid) { gernotbelger@9099: final String f = Double.valueOf(this.from).toString(); gernotbelger@9099: final String t = Double.valueOf(this.to).toString(); gernotbelger@9099: final String s = Double.valueOf(this.step).toString(); gernotbelger@9099: final DataItem fi = new DefaultDataItem("ld_from", "ld_from", f); gernotbelger@9099: final DataItem ti = new DefaultDataItem("ld_to", "ld_to", t); gernotbelger@9099: final DataItem si = new DefaultDataItem("ld_step", "ld_step", s); gernotbelger@9099: data.add(new DefaultData("ld_from", null, null, new DataItem[] { fi })); gernotbelger@9099: data.add(new DefaultData("ld_to", null, null, new DataItem[] { ti })); gernotbelger@9099: data.add(new DefaultData("ld_step", null, null, new DataItem[] { si })); raimund@2505: } raimund@2505: // what else? sascha@3379: return data.toArray(new Data[data.size()]); raimund@2505: } raimund@2505: gernotbelger@9099: protected boolean saveRangeValues(final DoubleRangePanel p) { gernotbelger@9099: final FormItem[] items = p.getFields(); gernotbelger@9099: final boolean valid = p.validateForm(); raimund@2505: gernotbelger@9099: if (valid) { raimund@2505: this.from = p.getFrom(); raimund@2505: this.to = p.getTo(); raimund@2505: this.step = p.getStep(); raimund@2505: } raimund@2505: return valid; raimund@2505: } raimund@2505: raimund@2505: @Override gernotbelger@9099: public void setValues(final String cid, final boolean checked) { raimund@2505: // No user interaction, do nothing. raimund@2505: } raimund@2505: raimund@2505: @Override raimund@2505: public boolean renderCheckboxes() { raimund@2505: // No selection, return false. raimund@2505: return false; raimund@2505: } raimund@2505: gernotbelger@9099: @Override gernotbelger@9256: public void success(final FixingsOverviewInfo fixInfo) { gernotbelger@9256: // TODO: check if revert makes sense gernotbelger@9256: this.inputPanel.setValues(fixInfo.getLowerKm(), fixInfo.getUpperKm(), 100d); raimund@2537: } raimund@2517: raimund@2505: /** raimund@2505: * This method is used to validate the inserted data in the form fields. raimund@2505: * gernotbelger@9099: * @param event gernotbelger@9099: * The BlurEvent that gives information about the FormItem that gernotbelger@9099: * has been modified and its value. raimund@2505: */ gernotbelger@9099: @Override gernotbelger@9099: public void onBlur(final BlurEvent event) { gernotbelger@9099: final FormItem item = event.getItem(); gernotbelger@9099: final String field = item.getFieldName(); raimund@2505: raimund@2505: if (field == null) { raimund@2505: return; raimund@2505: } gernotbelger@9099: final DoubleRangePanel p = (DoubleRangePanel) event.getForm(); raimund@2505: } raimund@2505: gernotbelger@9256: // public void dumpGWT(final String cid) { gernotbelger@9256: // GWT.log("Setting values for cId: " + cid); gernotbelger@9256: // GWT.log("River: " + this.fixInfo.getRiver()); gernotbelger@9256: // GWT.log("Date: " + this.fixInfo.getEventByCId(cid).getDate()); gernotbelger@9256: // GWT.log("Name: " + this.fixInfo.getEventByCId(cid).getDescription()); gernotbelger@9256: // } raimund@2505: }