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: }