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:
gernotbelger@9256: import java.util.ArrayList;
gernotbelger@9256: import java.util.Date;
gernotbelger@9256: import java.util.List;
gernotbelger@9256:
gernotbelger@9256: import org.dive4elements.river.client.client.FLYSConstants;
gernotbelger@9256: import org.dive4elements.river.client.shared.model.Data;
gernotbelger@9256: import org.dive4elements.river.client.shared.model.DataItem;
gernotbelger@9256: import org.dive4elements.river.client.shared.model.DataList;
gernotbelger@9256: import org.dive4elements.river.client.shared.model.DefaultData;
gernotbelger@9256: import org.dive4elements.river.client.shared.model.DefaultDataItem;
gernotbelger@9256: import org.dive4elements.river.client.shared.model.FixingsOverviewInfo;
gernotbelger@9256: import org.dive4elements.river.client.shared.model.FixingsOverviewInfo.FixEvent;
gernotbelger@9256:
raimund@2505: import com.google.gwt.core.client.GWT;
raimund@2537: import com.google.gwt.i18n.client.DateTimeFormat;
raimund@2505: import com.smartgwt.client.util.SC;
raimund@2505: import com.smartgwt.client.widgets.Canvas;
raimund@2505: import com.smartgwt.client.widgets.Label;
christian@3855: import com.smartgwt.client.widgets.form.DynamicForm;
christian@3855: import com.smartgwt.client.widgets.form.fields.DateRangeItem;
raimund@2505: import com.smartgwt.client.widgets.layout.HLayout;
raimund@2505: import com.smartgwt.client.widgets.layout.VLayout;
raimund@2505:
raimund@2505: /**
raimund@2505: * This UIProvider creates a panel for location or distance input.
raimund@2505: *
raimund@2505: * @author Raimund Renkert
raimund@2505: */
gernotbelger@9256: public class FixPeriodPanel extends FixationPanel {
raimund@2505: /** The message class that provides i18n strings. */
raimund@2505: protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class);
raimund@2505:
raimund@2505: DateRangeItem inputPanel;
raimund@2505:
raimund@2505: long start;
raimund@2505: long end;
raimund@2505:
sascha@2538: protected String startName;
sascha@2538: protected String endName;
sascha@2538:
raimund@2505: public FixPeriodPanel() {
sascha@2538: this("start", "end");
sascha@2538: }
sascha@2538:
gernotbelger@9256: public FixPeriodPanel(final String startName, final String endName) {
sascha@2538: this.startName = startName;
gernotbelger@9256: this.endName = endName;
raimund@2505: }
raimund@2505:
christian@3855: @Override
gernotbelger@9256: public Canvas createWidget(final DataList data) {
raimund@2505: instances.put(this.artifact.getUuid(), this);
raimund@2505:
gernotbelger@9256: final VLayout layout = new VLayout();
raimund@2505:
gernotbelger@9256: final Label title = new Label(data.get(0).getDescription());
raimund@2505: title.setHeight("25px");
raimund@2505:
gernotbelger@9256: final DynamicForm form = new DynamicForm();
gernotbelger@9256: this.inputPanel = new DateRangeItem();
gernotbelger@9256: this.inputPanel.setToTitle(this.MESSAGES.to());
gernotbelger@9256: this.inputPanel.setFromTitle(this.MESSAGES.from());
gernotbelger@9256: this.inputPanel.setShowTitle(false);
gernotbelger@9256: form.setFields(this.inputPanel);
raimund@2505:
raimund@2505: layout.addMember(title);
raimund@2505: layout.addMember(form);
raimund@2505:
raimund@2505: return layout;
raimund@2505: }
raimund@2505:
raimund@2505: @Override
gernotbelger@9256: public Canvas createOld(final DataList dataList) {
gernotbelger@9256: final List items = dataList.getAll();
raimund@2505:
gernotbelger@9256: final Data start = getData(items, this.startName);
gernotbelger@9256: final Data end = getData(items, this.endName);
gernotbelger@9256: final DataItem[] startItem = start.getItems();
gernotbelger@9256: final DataItem[] endItem = end.getItems();
raimund@2505:
gernotbelger@9256: final String v1 = startItem[0].getStringValue();
gernotbelger@9256: final String v2 = endItem[0].getStringValue();
raimund@2537:
raimund@2537: long v1l = 0;
raimund@2537: long v2l = 0;
raimund@2537: try {
raimund@2537: v1l = Long.parseLong(v1);
raimund@2537: v2l = Long.parseLong(v2);
raimund@2537: }
gernotbelger@9256: catch (final NumberFormatException nfe) {
raimund@2537: GWT.log(nfe.toString());
raimund@2537: }
gernotbelger@9256: final Date d1 = new Date(v1l);
gernotbelger@9256: final Date d2 = new Date(v2l);
raimund@2537:
gernotbelger@9256: final DateTimeFormat f = DateTimeFormat.getFormat(DateTimeFormat.PredefinedFormat.DATE_MEDIUM);
gernotbelger@9256: final StringBuilder sb = new StringBuilder();
raimund@2537: sb.append(f.format(d1) + " - ");
raimund@2537: sb.append(f.format(d2));
raimund@2505:
gernotbelger@9256: final Label old = new Label(sb.toString());
raimund@2505: old.setWidth(130);
raimund@2505:
gernotbelger@9256: final HLayout layout = new HLayout();
raimund@2505: layout.setWidth("400px");
raimund@2505:
gernotbelger@9256: final Label label = new Label(dataList.getLabel());
raimund@2505: label.setWidth("200px");
raimund@2505:
gernotbelger@9256: 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: */
christian@3855: @Override
raimund@2505: public Data[] getData() {
gernotbelger@9256: final List data = new ArrayList();
raimund@2505:
gernotbelger@9256: final boolean valid = saveDateValues();
gernotbelger@9256: if (valid) {
gernotbelger@9256: final String start = Long.valueOf(this.start).toString();
gernotbelger@9256: final String end = Long.valueOf(this.end).toString();
gernotbelger@9256: final DataItem startItem = new DefaultDataItem(this.startName, this.startName, start);
gernotbelger@9256: final DataItem endItem = new DefaultDataItem(this.endName, this.endName, end);
gernotbelger@9256: data.add(new DefaultData(this.startName, null, null, new DataItem[] { startItem }));
gernotbelger@9256: data.add(new DefaultData(this.endName, null, null, new DataItem[] { endItem }));
raimund@2505: }
raimund@2505:
sascha@3379: return data.toArray(new Data[data.size()]);
raimund@2505: }
raimund@2505:
raimund@2505: @Override
gernotbelger@9256: 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:
christian@3855: @Override
gernotbelger@9256: public void success(final FixingsOverviewInfo fixInfo) {
gernotbelger@9256: final List list = fixInfo.getEvents();
raimund@2892:
christian@3855: // The date in FixEvent is always "de" locale, so it seems...
gernotbelger@9256: final DateTimeFormat df = DateTimeFormat.getFormat("dd.MM.yyyy");
christian@3855:
christian@3855: if (!setFromAndToDate(list, df)) {
gernotbelger@9256: GWT.log("FixPeriodPanel::success(): could not set " + "from and to dates!");
christian@3855: }
christian@3855: }
christian@3855:
gernotbelger@9256: protected boolean setFromAndToDate(final List list, final DateTimeFormat df) {
raimund@2886: try {
christian@3855: setFromDate(list.get(0).getDate(), df);
christian@3855: setToDate(list.get(list.size() - 1).getDate(), df);
christian@3855: return true;
raimund@2886: }
gernotbelger@9256: catch (final IllegalArgumentException ex) {
christian@3855: GWT.log("FixPeriodPanel::setFromAndToDate(): " + ex.toString());
christian@3855: return false;
raimund@2886: }
raimund@2886: }
raimund@2517:
gernotbelger@9256: protected void setFromDate(final String date, final DateTimeFormat df) throws IllegalArgumentException {
gernotbelger@9256: final Date from = df.parse(date);
christian@3855: this.inputPanel.setFromDate(from);
christian@3855: }
christian@3855:
gernotbelger@9256: protected void setToDate(final String date, final DateTimeFormat df) throws IllegalArgumentException {
gernotbelger@9256: final Date to = df.parse(date);
christian@3855: this.inputPanel.setToDate(to);
christian@3855: }
christian@3855:
raimund@2505: protected boolean saveDateValues() {
gernotbelger@9256: final Date st = this.inputPanel.getValue().getStartDate();
gernotbelger@9256: final Date en = this.inputPanel.getValue().getEndDate();
raimund@2505: if (st == null || en == null) {
gernotbelger@9256: SC.warn(this.MESSAGES.error_wrong_date());
raimund@2505: return false;
raimund@2505: }
raimund@2505:
gernotbelger@9256: final long start = st.getTime();
gernotbelger@9256: final long end = en.getTime();
raimund@2505:
raimund@2505: if (start <= end) {
raimund@2505: this.start = start;
raimund@2505: this.end = end;
raimund@2505: return true;
raimund@2505: }
raimund@2505: return false;
raimund@2505: }
raimund@2505: }