raimund@2898: package de.intevation.flys.client.client.ui;
raimund@2898:
raimund@2898: import com.google.gwt.core.client.GWT;
raimund@2898: import com.google.gwt.i18n.client.DateTimeFormat;
raimund@2898:
christian@4131: import com.smartgwt.client.types.ListGridFieldType;
christian@4131: import com.smartgwt.client.widgets.Button;
raimund@2898: import com.smartgwt.client.widgets.Canvas;
raimund@2898: import com.smartgwt.client.widgets.Label;
raimund@2898: import com.smartgwt.client.widgets.events.ClickEvent;
raimund@2898: import com.smartgwt.client.widgets.events.ClickHandler;
raimund@2898: import com.smartgwt.client.widgets.grid.ListGrid;
raimund@2898: import com.smartgwt.client.widgets.grid.ListGridField;
raimund@2898: import com.smartgwt.client.widgets.grid.ListGridRecord;
christian@4131: import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
christian@4131: import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
raimund@2898: import com.smartgwt.client.widgets.layout.HLayout;
raimund@2898: import com.smartgwt.client.widgets.layout.VLayout;
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:
christian@4131: import java.util.ArrayList;
christian@4131: import java.util.Date;
christian@4131: import java.util.List;
christian@4131:
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 MultiPeriodPanel
raimund@2898: extends PeriodPanel
raimund@2898: {
raimund@2898:
christian@4131: private static final long serialVersionUID = 1811025931934462457L;
christian@4131:
raimund@2898: protected ListGrid elements;
raimund@2898:
raimund@2898: protected String values;
raimund@2898:
raimund@2898: public MultiPeriodPanel() {
raimund@2898: this("", "");
raimund@2898: }
raimund@2898:
raimund@2898: public MultiPeriodPanel(String startName, String endName) {
raimund@2898: super(startName, endName);
raimund@2898: }
raimund@2898:
christian@4131: @Override
raimund@2898: public Canvas createWidget(DataList data) {
raimund@2898: HLayout input = new HLayout();
raimund@2898: VLayout root = new VLayout();
raimund@2898: VLayout grid = new VLayout();
raimund@2898: VLayout layout = (VLayout) super.createWidget(data);
raimund@2898: Button add = new Button(MSG.add_date());
raimund@2898: elements = new ListGrid();
raimund@2898:
raimund@2898: add.addClickHandler(new ClickHandler() {
christian@4131: @Override
raimund@2898: public void onClick(ClickEvent ce) {
raimund@2898: Date f = inputPanel.getFromDate();
raimund@2898: Date t = inputPanel.getToDate();
raimund@2898: if (f == null || t == null) {
raimund@2898: return;
raimund@2898: }
raimund@2898: DateRangeRecord drr = new DateRangeRecord(f, t);
raimund@2898: elements.addData(drr);
raimund@2898: }
raimund@2898: });
raimund@2898: layout.addMember(add);
raimund@2898:
raimund@2898: Label sel = new Label(MSG.select());
raimund@2898: sel.setHeight(25);
raimund@2898: elements.setWidth(185);
raimund@2898: elements.setHeight(120);
raimund@2898: elements.setShowHeaderContextMenu(false);
raimund@2898: elements.setCanReorderFields(false);
raimund@2898: elements.setCanSort(false);
raimund@2898: elements.setCanEdit(false);
raimund@2898: ListGridField from = new ListGridField("from", MSG.from());
raimund@2898: ListGridField to = new ListGridField("to", MSG.to());
raimund@2898: from.setWidth(70);
raimund@2898: to.setWidth(70);
raimund@2898:
raimund@2898: final ListGridField removeField =
raimund@2898: new ListGridField("_removeRecord", "Remove Record"){{
raimund@2898: setType(ListGridFieldType.ICON);
raimund@2898: setIcon(GWT.getHostPageBaseURL() + MSG.removeFeature());
raimund@2898: setCanEdit(false);
raimund@2898: setCanFilter(false);
raimund@2898: setCanSort(false);
raimund@2898: setCanGroupBy(false);
raimund@2898: setCanFreeze(false);
raimund@2898: setWidth(25);
raimund@2898: }};
raimund@2898:
raimund@2898: elements.addRecordClickHandler(new RecordClickHandler() {
christian@4131: @Override
raimund@2898: public void onRecordClick(final RecordClickEvent event) {
raimund@2898: // Just handle remove-clicks
raimund@2898: if(!event.getField().getName().equals(removeField.getName())) {
raimund@2898: return;
raimund@2898: }
raimund@2898: event.getViewer().removeData(event.getRecord());
raimund@2898: }
raimund@2898: });
raimund@2898:
raimund@2898: elements.setFields(from, to, removeField);
raimund@2898:
raimund@2898: grid.addMember(sel);
raimund@2898: grid.addMember(elements);
raimund@2898: input.addMember(layout);
raimund@2898: input.addMember(grid);
raimund@2898: root.addMember(input);
raimund@2898:
raimund@2898: return root;
raimund@2898: }
raimund@2898:
christian@4131: @SuppressWarnings("deprecation")
raimund@2898: @Override
raimund@2898: public Canvas createOld(DataList dataList) {
raimund@2898: GWT.log("old............................");
raimund@2898: HLayout layout = new HLayout();
raimund@2898: layout.setWidth("400px");
raimund@2898: VLayout vLayout = new VLayout();
raimund@2898: vLayout.setWidth(130);
raimund@2898: Label label = new Label(dataList.getLabel());
raimund@2898: label.setWidth("200px");
raimund@2898: label.setHeight(25);
raimund@2898:
raimund@2898: List items = dataList.getAll();
raimund@2898: Data str = getData(items, "periods");
raimund@2898: DataItem[] strItems = str.getItems();
raimund@2898:
raimund@2898: String[] pairs = strItems[0].getLabel().split(";");
raimund@2898: for (int i = 0; i < pairs.length; i++) {
raimund@2898: String[] vals = pairs[i].split(",");
raimund@2898: long f = Long.valueOf(vals[0]).longValue();
raimund@2898: long t = Long.valueOf(vals[1]).longValue();
raimund@2898: Date from = new Date(f);
raimund@2898: Date to = new Date(t);
raimund@2898: String fromString =
raimund@2898: DateTimeFormat.getMediumDateFormat().format(from);
raimund@2898: String toString =
raimund@2898: DateTimeFormat.getMediumDateFormat().format(to);
raimund@2898:
raimund@2898: Label dateLabel = new Label(fromString + " - " + toString);
raimund@2898: dateLabel.setHeight(20);
raimund@2898: vLayout.addMember(dateLabel);
raimund@2898: }
raimund@2898: Canvas back = getBackButton(dataList.getState());
raimund@2898: layout.addMember(label);
raimund@2898: layout.addMember(vLayout);
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: */
christian@4131: @Override
raimund@2898: public Data[] getData() {
raimund@2898: List data = new ArrayList();
raimund@2898:
raimund@2898: boolean valid = saveDateValues();
raimund@2898: if(valid) {
raimund@2898: DataItem item = new DefaultDataItem("periods", null, this.values);
raimund@2898: data.add(new DefaultData(
raimund@2898: "periods",
raimund@2898: null,
raimund@2898: null,
raimund@2898: new DataItem[] { item }));
raimund@2898: }
sascha@3379: return data.toArray(new Data[data.size()]);
raimund@2898: }
raimund@2898:
raimund@2898:
christian@4131: @Override
raimund@2898: protected boolean saveDateValues() {
raimund@2898: ListGridRecord[] lgr = elements.getRecords();
raimund@2898: if (lgr.length == 0) {
raimund@2898: return false;
raimund@2898: }
raimund@2898: String data = "";
raimund@2898: for (int i = 0; i < lgr.length; i++) {
raimund@2898: DateRangeRecord drr = (DateRangeRecord) lgr[i];
raimund@2898: data += drr.getFrom() + "," + drr.getTo();
raimund@2898: data += ";";
raimund@2898: }
raimund@2898: values = data;
raimund@2898: return true;
raimund@2898: }
raimund@2898:
raimund@2898:
raimund@2898: protected static class DateRangeRecord extends ListGridRecord {
raimund@2898: protected Date from;
raimund@2898: protected Date to;
raimund@2898:
raimund@2898: protected final static String FROM_FIELD = "from";
raimund@2898: protected final static String TO_FIELD = "to";
raimund@2898:
raimund@2898: public DateRangeRecord (Date from, Date to) {
raimund@2898: setFrom(from);
raimund@2898: setTo(to);
raimund@2898: }
raimund@2898:
christian@4131: @SuppressWarnings("deprecation")
raimund@2898: public void setFrom(Date from) {
raimund@2898: this.from = from;
raimund@2898: setAttribute(
raimund@2898: FROM_FIELD,
raimund@2898: DateTimeFormat.getMediumDateFormat().format(from));
raimund@2898: }
raimund@2898:
raimund@2898:
christian@4131: @SuppressWarnings("deprecation")
raimund@2898: public void setTo(Date to) {
raimund@2898: this.to = to;
raimund@2898: setAttribute(
raimund@2898: TO_FIELD,
raimund@2898: DateTimeFormat.getMediumDateFormat().format(to));
raimund@2898: }
raimund@2898:
raimund@2898:
raimund@2898: public long getFrom() {
raimund@2898: return this.from.getTime();
raimund@2898: }
raimund@2898:
raimund@2898:
raimund@2898: public long getTo() {
raimund@2898: return this.to.getTime();
raimund@2898: }
raimund@2898: }
raimund@2898: }