raimund@2898: package de.intevation.flys.client.client.ui; raimund@2898: raimund@2898: import java.util.List; raimund@2898: import java.util.ArrayList; raimund@2898: import java.util.Date; raimund@2898: raimund@2898: import com.google.gwt.core.client.GWT; raimund@2898: import com.google.gwt.i18n.client.DateTimeFormat; raimund@2898: import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; raimund@2898: raimund@2898: import com.smartgwt.client.util.SC; raimund@2898: raimund@2898: import com.smartgwt.client.widgets.Canvas; raimund@2898: import com.smartgwt.client.widgets.Label; raimund@2898: raimund@2898: import com.smartgwt.client.widgets.layout.HLayout; raimund@2898: import com.smartgwt.client.widgets.layout.VLayout; raimund@2898: raimund@2898: import com.smartgwt.client.widgets.form.DynamicForm; raimund@2898: import com.smartgwt.client.widgets.form.fields.DateRangeItem; raimund@2898: raimund@2898: import de.intevation.flys.client.client.FLYSConstants; raimund@2898: raimund@2898: import de.intevation.flys.client.shared.model.Data; raimund@2898: import de.intevation.flys.client.shared.model.DataItem; raimund@2898: import de.intevation.flys.client.shared.model.DataList; raimund@2898: import de.intevation.flys.client.shared.model.DefaultData; raimund@2898: import de.intevation.flys.client.shared.model.DefaultDataItem; raimund@2898: import de.intevation.flys.client.shared.model.FixingsOverviewInfo.FixEvent; raimund@2898: raimund@2898: /** raimund@2898: * This UIProvider creates a panel for location or distance input. raimund@2898: * raimund@2898: * @author Raimund Renkert raimund@2898: */ raimund@2898: public class PeriodPanel raimund@2898: extends AbstractUIProvider raimund@2898: { raimund@2898: /** The message class that provides i18n strings. */ raimund@2898: protected FLYSConstants MSG = GWT.create(FLYSConstants.class); raimund@2898: raimund@2898: DateRangeItem inputPanel; raimund@2898: raimund@2898: long start; raimund@2898: long end; raimund@2898: raimund@2898: protected String startName; raimund@2898: protected String endName; raimund@2898: raimund@2898: public PeriodPanel() { raimund@2898: this("start", "end"); raimund@2898: } raimund@2898: raimund@2898: public PeriodPanel(String startName, String endName) { raimund@2898: this.startName = startName; raimund@2898: this.endName = endName; raimund@2898: } raimund@2898: raimund@2898: raimund@2898: public Canvas create(DataList list) { raimund@2898: VLayout layout = new VLayout(); raimund@2898: raimund@2898: Canvas helper = createHelper(); raimund@2898: this.helperContainer.addMember(helper); raimund@2898: raimund@2898: Canvas submit = getNextButton(); raimund@2898: Canvas widget = createWidget(list); raimund@2898: raimund@2898: layout.addMember(widget); raimund@2898: layout.addMember(submit); raimund@2898: return layout; raimund@2898: } raimund@2898: raimund@2898: raimund@2898: public Canvas createWidget(DataList data) { raimund@2898: VLayout layout = new VLayout(); raimund@2898: raimund@2898: Label title = new Label(data.get(0).getDescription()); raimund@2898: title.setHeight("25px"); raimund@2898: raimund@2898: DynamicForm form = new DynamicForm(); raimund@2898: inputPanel = new DateRangeItem(); raimund@2898: inputPanel.setToTitle(MSG.to()); raimund@2898: inputPanel.setFromTitle(MSG.from()); raimund@2898: inputPanel.setShowTitle(false); raimund@2898: form.setFields(inputPanel); raimund@2898: raimund@2898: layout.addMember(title); raimund@2898: layout.addMember(form); raimund@2898: raimund@2898: return layout; raimund@2898: } raimund@2898: raimund@2898: protected Canvas createHelper() { raimund@2898: return new VLayout(); raimund@2898: } raimund@2898: raimund@2898: @Override raimund@2898: public Canvas createOld(DataList dataList) { raimund@2898: List items = dataList.getAll(); raimund@2898: raimund@2898: Data start = getData(items, startName); raimund@2898: Data end = getData(items, endName); raimund@2898: DataItem[] startItem = start.getItems(); raimund@2898: DataItem[] endItem = end.getItems(); raimund@2898: raimund@2898: String v1 = startItem[0].getStringValue(); raimund@2898: String v2 = endItem[0].getStringValue(); raimund@2898: raimund@2898: long v1l = 0; raimund@2898: long v2l = 0; raimund@2898: try { raimund@2898: v1l = Long.parseLong(v1); raimund@2898: v2l = Long.parseLong(v2); raimund@2898: } raimund@2898: catch(NumberFormatException nfe) { raimund@2898: GWT.log(nfe.toString()); raimund@2898: } raimund@2898: Date d1 = new Date(v1l); raimund@2898: Date d2 = new Date(v2l); raimund@2898: raimund@2898: DateTimeFormat f = raimund@2898: DateTimeFormat.getFormat( raimund@2898: DateTimeFormat.PredefinedFormat.DATE_MEDIUM); raimund@2898: StringBuilder sb = new StringBuilder(); raimund@2898: sb.append(f.format(d1) + " - "); raimund@2898: sb.append(f.format(d2)); raimund@2898: raimund@2898: Label old = new Label(sb.toString()); raimund@2898: old.setWidth(130); raimund@2898: raimund@2898: HLayout layout = new HLayout(); raimund@2898: layout.setWidth("400px"); raimund@2898: raimund@2898: Label label = new Label(dataList.getLabel()); raimund@2898: label.setWidth("200px"); raimund@2898: raimund@2898: Canvas back = getBackButton(dataList.getState()); raimund@2898: raimund@2898: layout.addMember(label); raimund@2898: layout.addMember(old); raimund@2898: layout.addMember(back); raimund@2898: raimund@2898: return layout; raimund@2898: } raimund@2898: raimund@2898: raimund@2898: /** raimund@2898: * This method returns the selected data. raimund@2898: * raimund@2898: * @return the selected/inserted data. raimund@2898: */ raimund@2898: public Data[] getData() { raimund@2898: List data = new ArrayList(); raimund@2898: raimund@2898: boolean valid = saveDateValues(); raimund@2898: if(valid) { raimund@2898: String start = Long.valueOf(this.start).toString(); raimund@2898: String end = Long.valueOf(this.end).toString(); raimund@2898: DataItem startItem = new DefaultDataItem(startName, startName, start); raimund@2898: DataItem endItem = new DefaultDataItem(endName, endName, end); raimund@2898: data.add(new DefaultData( raimund@2898: startName, raimund@2898: null, raimund@2898: null, raimund@2898: new DataItem[] { startItem })); raimund@2898: data.add(new DefaultData( raimund@2898: endName, raimund@2898: null, raimund@2898: null, raimund@2898: new DataItem[] { endItem })); raimund@2898: } raimund@2898: raimund@2898: return (Data[]) data.toArray(new Data[data.size()]); raimund@2898: } raimund@2898: raimund@2898: raimund@2898: protected boolean saveDateValues() { raimund@2898: Date st = inputPanel.getFromDate(); raimund@2898: Date en = inputPanel.getToDate(); raimund@2898: if (st == null || en == null) { raimund@2898: SC.warn(MSG.error_wrong_date()); raimund@2898: return false; raimund@2898: } raimund@2898: raimund@2898: long start = st.getTime(); raimund@2898: long end = en.getTime(); raimund@2898: raimund@2898: if (start <= end) { raimund@2898: this.start = start; raimund@2898: this.end = end; raimund@2898: return true; raimund@2898: } raimund@2898: return false; raimund@2898: } raimund@2898: }