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