raimund@2883: package de.intevation.flys.client.client.ui.fixation;
raimund@2883:
raimund@2883: import java.util.List;
raimund@2883: import java.util.ArrayList;
raimund@2883: import java.util.Date;
raimund@2883:
raimund@2883: import com.google.gwt.core.client.GWT;
raimund@2883: import com.google.gwt.i18n.client.DateTimeFormat;
raimund@2883:
raimund@2883: import com.smartgwt.client.data.Record;
raimund@2883:
raimund@2883: import com.smartgwt.client.widgets.Canvas;
raimund@2883: import com.smartgwt.client.widgets.Label;
raimund@2883: import com.smartgwt.client.widgets.Button;
raimund@2883: import com.smartgwt.client.widgets.events.ClickEvent;
raimund@2883: import com.smartgwt.client.widgets.events.ClickHandler;
raimund@2883:
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;
raimund@2883:
raimund@2883: import com.smartgwt.client.widgets.layout.HLayout;
raimund@2883: import com.smartgwt.client.widgets.layout.VLayout;
raimund@2883:
raimund@2883: import com.smartgwt.client.types.ListGridFieldType;
raimund@2883:
raimund@2883: import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
raimund@2883: import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
raimund@2883:
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:
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: {
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:
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);
raimund@2883: Button add = new Button("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: */
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: }
raimund@2883: return (Data[]) data.toArray(new Data[data.size()]);
raimund@2883: }
raimund@2883:
raimund@2883:
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: }