raimund@2883: package de.intevation.flys.client.client.ui.fixation; raimund@2883: raimund@2883: import com.google.gwt.core.client.GWT; raimund@2883: import com.google.gwt.i18n.client.DateTimeFormat; raimund@2883: christian@3835: import com.smartgwt.client.types.ListGridFieldType; christian@3835: import com.smartgwt.client.widgets.Button; raimund@2883: import com.smartgwt.client.widgets.Canvas; raimund@2883: import com.smartgwt.client.widgets.Label; raimund@2883: import com.smartgwt.client.widgets.events.ClickEvent; raimund@2883: import com.smartgwt.client.widgets.events.ClickHandler; raimund@2883: import com.smartgwt.client.widgets.grid.ListGrid; raimund@2883: import com.smartgwt.client.widgets.grid.ListGridField; raimund@2883: import com.smartgwt.client.widgets.grid.ListGridRecord; christian@3835: import com.smartgwt.client.widgets.grid.events.RecordClickEvent; christian@3835: import com.smartgwt.client.widgets.grid.events.RecordClickHandler; raimund@2883: import com.smartgwt.client.widgets.layout.HLayout; raimund@2883: import com.smartgwt.client.widgets.layout.VLayout; raimund@2883: christian@3835: import de.intevation.flys.client.client.FLYSConstants; raimund@2883: import de.intevation.flys.client.shared.model.Data; raimund@2883: import de.intevation.flys.client.shared.model.DataItem; raimund@2883: import de.intevation.flys.client.shared.model.DataList; raimund@2883: import de.intevation.flys.client.shared.model.DefaultData; raimund@2883: import de.intevation.flys.client.shared.model.DefaultDataItem; raimund@2883: christian@3835: import java.util.ArrayList; christian@3835: import java.util.Date; christian@3835: import java.util.List; christian@3835: raimund@2883: /** raimund@2883: * This UIProvider creates a panel for location or distance input. raimund@2883: * raimund@2883: * @author Raimund Renkert raimund@2883: */ raimund@2883: public class FixMultiPeriodPanel raimund@2883: extends FixPeriodPanel raimund@2883: { christian@3835: /** The message class that provides i18n strings. */ christian@3835: protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); raimund@2883: raimund@2883: protected ListGrid elements; raimund@2883: raimund@2883: protected String values; raimund@2883: raimund@2883: public FixMultiPeriodPanel() { raimund@2883: this("", ""); raimund@2883: } raimund@2883: raimund@2883: public FixMultiPeriodPanel(String startName, String endName) { raimund@2883: super(startName, endName); raimund@2883: } raimund@2883: christian@3835: @Override raimund@2883: public Canvas createWidget(DataList data) { raimund@2883: HLayout input = new HLayout(); raimund@2883: VLayout root = new VLayout(); raimund@2883: VLayout grid = new VLayout(); raimund@2883: VLayout layout = (VLayout) super.createWidget(data); christian@3835: Button add = new Button(MESSAGES.add()); raimund@2883: elements = new ListGrid(); raimund@2883: raimund@2883: add.addClickHandler(new ClickHandler() { raimund@2883: public void onClick(ClickEvent ce) { raimund@2883: Date f = inputPanel.getFromDate(); raimund@2883: Date t = inputPanel.getToDate(); raimund@2883: if (f == null || t == null) { raimund@2883: return; raimund@2883: } raimund@2883: DateRangeRecord drr = new DateRangeRecord(f, t); raimund@2883: elements.addData(drr); raimund@2883: } raimund@2883: }); raimund@2883: layout.addMember(add); raimund@2883: raimund@2883: Label sel = new Label("Selected"); raimund@2883: sel.setHeight(25); raimund@2883: elements.setWidth(185); raimund@2883: elements.setHeight(120); raimund@2883: elements.setShowHeaderContextMenu(false); raimund@2883: elements.setCanReorderFields(false); raimund@2883: elements.setCanSort(false); raimund@2883: elements.setCanEdit(false); raimund@2883: ListGridField from = new ListGridField("from", "From"); raimund@2883: ListGridField to = new ListGridField("to", "To"); raimund@2883: from.setWidth(70); raimund@2883: to.setWidth(70); raimund@2883: raimund@2883: final ListGridField removeField = raimund@2883: new ListGridField("_removeRecord", "Remove Record"){{ raimund@2883: setType(ListGridFieldType.ICON); raimund@2883: setIcon(GWT.getHostPageBaseURL() + MSG.removeFeature()); raimund@2883: setCanEdit(false); raimund@2883: setCanFilter(false); raimund@2883: setCanSort(false); raimund@2883: setCanGroupBy(false); raimund@2883: setCanFreeze(false); raimund@2883: setWidth(25); raimund@2883: }}; raimund@2883: raimund@2883: elements.addRecordClickHandler(new RecordClickHandler() { raimund@2883: public void onRecordClick(final RecordClickEvent event) { raimund@2883: // Just handle remove-clicks raimund@2883: if(!event.getField().getName().equals(removeField.getName())) { raimund@2883: return; raimund@2883: } raimund@2883: event.getViewer().removeData(event.getRecord()); raimund@2883: } raimund@2883: }); raimund@2883: raimund@2883: elements.setFields(from, to, removeField); raimund@2883: raimund@2883: grid.addMember(sel); raimund@2883: grid.addMember(elements); raimund@2883: input.addMember(layout); raimund@2883: input.addMember(grid); raimund@2883: root.addMember(input); raimund@2883: raimund@2883: return root; raimund@2883: } raimund@2883: raimund@2883: @Override raimund@2883: public Canvas createOld(DataList dataList) { raimund@2883: HLayout layout = new HLayout(); raimund@2883: layout.setWidth("400px"); raimund@2883: VLayout vLayout = new VLayout(); raimund@2883: vLayout.setWidth(130); raimund@2883: Label label = new Label(dataList.getLabel()); raimund@2883: label.setWidth("200px"); raimund@2883: label.setHeight(25); raimund@2883: raimund@2883: List items = dataList.getAll(); raimund@2883: Data str = getData(items, "ana_data"); raimund@2883: DataItem[] strItems = str.getItems(); raimund@2883: raimund@2883: String[] pairs = strItems[0].getLabel().split(";"); raimund@2883: for (int i = 0; i < pairs.length; i++) { raimund@2883: String[] vals = pairs[i].split(","); raimund@2883: try { raimund@2883: long f = Long.valueOf(vals[0]).longValue(); raimund@2883: long t = Long.valueOf(vals[1]).longValue(); raimund@2883: Date from = new Date(f); raimund@2883: Date to = new Date(t); raimund@2883: String fromString = raimund@2883: DateTimeFormat.getMediumDateFormat().format(from); raimund@2883: String toString = raimund@2883: DateTimeFormat.getMediumDateFormat().format(to); raimund@2883: raimund@2883: Label dateLabel = new Label(fromString + " - " + toString); raimund@2883: dateLabel.setHeight(20); raimund@2883: vLayout.addMember(dateLabel); raimund@2883: } raimund@2883: catch(NumberFormatException nfe) { raimund@2883: } raimund@2883: } raimund@2883: Canvas back = getBackButton(dataList.getState()); raimund@2883: layout.addMember(label); raimund@2883: layout.addMember(vLayout); raimund@2883: layout.addMember(back); raimund@2883: raimund@2883: return layout; raimund@2883: } raimund@2883: raimund@2883: raimund@2883: /** raimund@2883: * This method returns the selected data. raimund@2883: * raimund@2883: * @return the selected/inserted data. raimund@2883: */ christian@3835: @Override raimund@2883: public Data[] getData() { raimund@2883: List data = new ArrayList(); raimund@2883: raimund@2883: boolean valid = saveDateValues(); raimund@2883: if(valid) { raimund@2883: DataItem item = new DefaultDataItem("ana_data", null, this.values); raimund@2883: data.add(new DefaultData( raimund@2883: "ana_data", raimund@2883: null, raimund@2883: null, raimund@2883: new DataItem[] { item })); raimund@2883: } sascha@3379: return data.toArray(new Data[data.size()]); raimund@2883: } raimund@2883: raimund@2883: christian@3835: @Override raimund@2883: protected boolean saveDateValues() { raimund@2883: ListGridRecord[] lgr = elements.getRecords(); raimund@2883: if (lgr.length == 0) { raimund@2883: return false; raimund@2883: } raimund@2883: String data = ""; raimund@2883: for (int i = 0; i < lgr.length; i++) { raimund@2883: DateRangeRecord drr = (DateRangeRecord) lgr[i]; raimund@2883: data += drr.getFrom() + "," + drr.getTo(); raimund@2883: data += ";"; raimund@2883: } raimund@2883: values = data; raimund@2883: return true; raimund@2883: } raimund@2883: raimund@2883: raimund@2883: protected static class DateRangeRecord extends ListGridRecord { raimund@2883: protected Date from; raimund@2883: protected Date to; raimund@2883: raimund@2883: protected final static String FROM_FIELD = "from"; raimund@2883: protected final static String TO_FIELD = "to"; raimund@2883: raimund@2883: public DateRangeRecord (Date from, Date to) { raimund@2883: setFrom(from); raimund@2883: setTo(to); raimund@2883: } raimund@2883: raimund@2883: public void setFrom(Date from) { raimund@2883: this.from = from; raimund@2883: setAttribute( raimund@2883: FROM_FIELD, raimund@2883: DateTimeFormat.getMediumDateFormat().format(from)); raimund@2883: } raimund@2883: raimund@2883: raimund@2883: public void setTo(Date to) { raimund@2883: this.to = to; raimund@2883: setAttribute( raimund@2883: TO_FIELD, raimund@2883: DateTimeFormat.getMediumDateFormat().format(to)); raimund@2883: } raimund@2883: raimund@2883: raimund@2883: public long getFrom() { raimund@2883: return this.from.getTime(); raimund@2883: } raimund@2883: raimund@2883: raimund@2883: public long getTo() { raimund@2883: return this.to.getTime(); raimund@2883: } raimund@2883: } raimund@2883: }