raimund@1602: package de.intevation.flys.client.client.ui;
raimund@1602:
raimund@2468: import java.util.List;
raimund@2468: import java.util.ArrayList;
raimund@2468: import java.util.Date;
raimund@2468:
raimund@1602: import com.google.gwt.core.client.GWT;
raimund@2468: import com.google.gwt.i18n.client.DateTimeFormat;
raimund@1602:
raimund@1602: import com.smartgwt.client.types.ListGridFieldType;
raimund@1602:
raimund@1602: import com.smartgwt.client.data.Record;
raimund@2468: import com.smartgwt.client.widgets.layout.HLayout;
raimund@2468: import com.smartgwt.client.widgets.form.DynamicForm;
raimund@2468: import com.smartgwt.client.widgets.form.fields.DateRangeItem;
raimund@2468: import com.smartgwt.client.widgets.Label;
raimund@1602:
raimund@1602: import com.smartgwt.client.widgets.layout.VLayout;
raimund@1602: import com.smartgwt.client.widgets.Canvas;
raimund@1602: import com.smartgwt.client.widgets.grid.ListGrid;
raimund@1602: import com.smartgwt.client.widgets.grid.ListGridField;
raimund@1602: import com.smartgwt.client.widgets.grid.CellFormatter;
raimund@1602: import com.smartgwt.client.widgets.grid.ListGridRecord;
raimund@1602: import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
raimund@1602: import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
raimund@1602:
raimund@1602: import de.intevation.flys.client.client.FLYSConstants;
raimund@1602: import de.intevation.flys.client.client.Config;
raimund@1602:
raimund@1602: import de.intevation.flys.client.shared.model.DataList;
raimund@1602: import de.intevation.flys.client.shared.model.DataItem;
raimund@1602: import de.intevation.flys.client.shared.model.ArtifactDescription;
raimund@1602: import de.intevation.flys.client.shared.model.Data;
raimund@2468: import de.intevation.flys.client.shared.model.RangeData;
raimund@2468: import de.intevation.flys.client.shared.model.LongRangeData;
raimund@1602:
raimund@1602: import de.intevation.flys.client.client.ui.range.DischargeInfoDataSource;
raimund@1602:
raimund@1602: /**
raimund@1602: * @author Raimund Renkert
raimund@1602: */
raimund@2468: public class GaugeTimeRangePanel extends RangePanel {
raimund@1602:
raimund@1602: /** The message class that provides i18n strings. */
raimund@1602: protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class);
raimund@1602:
raimund@1602: protected ListGrid yearTable;
raimund@1602:
raimund@2468: protected DateRangeItem dateRange;
raimund@2468:
raimund@1602: public GaugeTimeRangePanel() {
raimund@1602: GWT.log("Creating YearInputPanel");
raimund@1602: yearTable = new ListGrid();
raimund@1602: yearTable.setAutoFetchData(true);
raimund@1602: yearTable.setShowHeaderContextMenu(false);
raimund@1602:
raimund@1602: }
raimund@1602:
raimund@1602: public Canvas create(DataList data) {
raimund@1602: setDataName(data);
raimund@1602:
raimund@1602: VLayout root = new VLayout();
raimund@1602:
raimund@1602: root.addMember(createLabel(data));
raimund@1602: root.addMember(createForm(data));
raimund@1602: root.addMember(getNextButton());
raimund@1602:
raimund@1602: initDefaults(data);
raimund@1602:
raimund@1602:
raimund@1602: initYearTable();
raimund@1602:
raimund@1602: long gauge = getGaugeNumber();
raimund@1602:
raimund@1602: Config config = Config.getInstance();
raimund@1602: String url = config.getServerUrl();
raimund@1602: yearTable.setDataSource(new DischargeInfoDataSource(url, gauge));
raimund@1602:
raimund@1602: helperContainer.addMember(yearTable);
raimund@1602: return root;
raimund@1602: }
raimund@1602:
raimund@1602:
raimund@2468: @Override
raimund@2468: protected void initDefaults(DataList dataList) {
raimund@2468: RangeData data = findRangeData(dataList);
raimund@2468:
raimund@2468: if(data != null) {
raimund@2468: GWT.log("data: " + data);
raimund@2468: }
raimund@2468: }
raimund@2468:
raimund@2468:
raimund@2468: @Override
raimund@2468: public Canvas createOld(DataList dataList) {
raimund@2468: GWT.log("create old date.");
raimund@2468: Data data = dataList.get(0);
raimund@2468: DataItem[] items = data.getItems();
raimund@2468: GWT.log(data.getClass().toString());
raimund@2468: HLayout layout = new HLayout();
raimund@2468:
raimund@2468: Label label = new Label(dataList.getLabel());
raimund@2468: label.setWidth(200);
raimund@2468: label.setHeight(20);
raimund@2468:
raimund@2468: Date dl = new Date((Long)((LongRangeData)data).getLower());
raimund@2468: Date du = new Date((Long)((LongRangeData)data).getUpper());
raimund@2468: DateTimeFormat dtf = DateTimeFormat.getMediumDateFormat();
raimund@2468: Label value = new Label(dtf.format(dl) + " - " + dtf.format(du));
raimund@2468: value.setHeight(20);
raimund@2468:
raimund@2468: layout.addMember(label);
raimund@2468: layout.addMember(value);
raimund@2468: layout.addMember(getBackButton(dataList.getState()));
raimund@2468:
raimund@2468: return layout;
raimund@2468: }
raimund@2468:
raimund@2468:
raimund@2468: @Override
raimund@2468: protected Data[] getData() {
raimund@2468: long lo = getLowerAsLong();
raimund@2468: long up = getUpperAsLong();
raimund@2468:
raimund@2468: return new Data[] { new LongRangeData(getDataName(), null, lo, up) };
raimund@2468: }
raimund@2468:
raimund@2468:
raimund@2468: @Override
raimund@2468: protected Canvas createForm(DataList dataList) {
raimund@2468: HLayout layout = new HLayout();
raimund@2468: DynamicForm form = new DynamicForm();
raimund@2468: dateRange = new DateRangeItem();
raimund@2468: dateRange.setToTitle(MESSAGES.to());
raimund@2468: dateRange.setFromTitle(MESSAGES.from());
raimund@2468: dateRange.setShowTitle(false);
raimund@2468: form.setFields(dateRange);
raimund@2468:
raimund@2468: layout.addMember(form);
raimund@2468: return layout;
raimund@2468:
raimund@2468: }
raimund@2468:
raimund@2468:
raimund@2468: @Override
raimund@2468: public Object getMaxLower() {
raimund@2468: Date d = dateRange.getFromDate();
raimund@2468: return new Long(d.getTime());
raimund@2468: }
raimund@2468:
raimund@2468:
raimund@2468: protected long getLowerAsLong() {
raimund@2468: Date d = dateRange.getFromDate();
raimund@2468: return d.getTime();
raimund@2468: }
raimund@2468:
raimund@2468:
raimund@2468: protected long getUpperAsLong() {
raimund@2468: Date d = dateRange.getToDate();
raimund@2468: return d.getTime();
raimund@2468: }
raimund@2468:
raimund@2468:
raimund@2468: @Override
raimund@2468: public Object getMaxUpper() {
raimund@2468: Date d = dateRange.getToDate();
raimund@2468: return new Long(d.getTime());
raimund@2468: }
raimund@2468:
raimund@2468:
raimund@2468: @Override
raimund@2468: public void setLower(String lower) {
raimund@2468: try {
raimund@2468: DateTimeFormat dtf =
raimund@2468: DateTimeFormat.getFormat("yyyy");
raimund@2468: Date dy = dtf.parse(lower);
raimund@2468: dy.setMonth(0);
raimund@2468: dy.setDate(1);
raimund@2468: dateRange.setFromDate(dy);
raimund@2468: }
raimund@2468: catch(IllegalArgumentException iae) {
raimund@2468: GWT.log("could not parse lower date.");
raimund@2468: //TODO: Messagebox with error.
raimund@2468: }
raimund@2468: }
raimund@2468:
raimund@2468:
raimund@2468: @Override
raimund@2468: public void setUpper(String upper) {
raimund@2468: try {
raimund@2468: DateTimeFormat dtf =
raimund@2468: DateTimeFormat.getFormat("yyyy");
raimund@2468: Date dy = dtf.parse(upper);
raimund@2468: dy.setMonth(0);
raimund@2468: dy.setDate(1);
raimund@2468: dateRange.setToDate(dy);
raimund@2468: }
raimund@2468: catch(IllegalArgumentException iae) {
raimund@2468: GWT.log("could not parse upper date.");
raimund@2468: //TODO: Messagebox with error.
raimund@2468: }
raimund@2468: }
raimund@2468:
raimund@2468:
raimund@1602: protected ListGrid initYearTable() {
raimund@1602: String baseUrl = GWT.getHostPageBaseURL();
raimund@1602:
raimund@1602: yearTable.setWidth100();
raimund@1602: yearTable.setHeight100();
raimund@1602: yearTable.setShowRecordComponents(true);
raimund@1602: yearTable.setShowRecordComponentsByCell(true);
raimund@1602: yearTable.setEmptyMessage(MESSAGES.empty_filter());
raimund@1602: yearTable.setCanReorderFields(false);
raimund@1602:
raimund@1602: CellFormatter cf = new CellFormatter() {
raimund@1602: public String format(
raimund@1602: Object value,
raimund@1602: ListGridRecord record,
raimund@1602: int rowNum, int colNum) {
raimund@1602: if (value == null) return null;
raimund@1602: if (value.toString().equals("-1")) {
raimund@1602: return "";
raimund@1602: }
raimund@1602: return value.toString();
raimund@1602: }
raimund@1602: };
raimund@1602:
raimund@1602:
raimund@1602: ListGridField addstart = new ListGridField ("", "");
raimund@1602: addstart.setType (ListGridFieldType.ICON);
raimund@1602: addstart.setWidth (20);
raimund@1602: addstart.setCellIcon(baseUrl + MESSAGES.markerGreen());
raimund@1602: addstart.addRecordClickHandler(new RecordClickHandler() {
raimund@1602: public void onRecordClick(RecordClickEvent e) {
raimund@1602: Record r = e.getRecord();
raimund@1602: if (r.getAttribute("start").equals("-1")) {
raimund@1602: return;
raimund@1602: }
raimund@1602: else {
raimund@1602: setLower(r.getAttribute("start"));
raimund@1602: }
raimund@1602: }
raimund@1602: });
raimund@1602:
raimund@1602: ListGridField addend = new ListGridField ("", "");
raimund@1602: addend.setType (ListGridFieldType.ICON);
raimund@1602: addend.setWidth (20);
raimund@1602: addend.setCellIcon(baseUrl + MESSAGES.markerRed());
raimund@1602: addend.addRecordClickHandler(new RecordClickHandler() {
raimund@1602: public void onRecordClick(RecordClickEvent e) {
raimund@1602: Record r = e.getRecord();
raimund@1602: if (r.getAttribute("end").equals("-1")) {
raimund@1602: return;
raimund@1602: }
raimund@1602: else {
raimund@1602: setUpper(r.getAttribute("end"));
raimund@1602: }
raimund@1602: }
raimund@1602: });
raimund@1602:
raimund@1602: ListGridField desc =
raimund@1602: new ListGridField("description", MESSAGES.description());
raimund@1602: desc.setType(ListGridFieldType.TEXT);
raimund@1602: desc.setWidth("*");
raimund@1602:
raimund@1602: ListGridField start =
raimund@1602: new ListGridField("start", MESSAGES.start_year());
raimund@1602: start.setType(ListGridFieldType.INTEGER);
raimund@1602: start.setWidth(50);
raimund@1602: start.setCellFormatter(cf);
raimund@1602:
raimund@1602: ListGridField end =
raimund@1602: new ListGridField("end", MESSAGES.end_year());
raimund@1602: end.setType(ListGridFieldType.INTEGER);
raimund@1602: end.setWidth(50);
raimund@1602: end.setCellFormatter(cf);
raimund@1602:
raimund@1602: yearTable.setFields(addstart, addend, desc, start, end);
raimund@1602:
raimund@1602: return yearTable;
raimund@1602: }
raimund@1602:
raimund@1602:
raimund@1602: protected long getGaugeNumber() {
raimund@1602: ArtifactDescription adescr = artifact.getArtifactDescription();
raimund@1602: DataList[] data = adescr.getOldData();
raimund@1602:
raimund@1602: String gauge = "";
raimund@1602: if (data != null && data.length > 0) {
raimund@1602: for (int i = 0; i < data.length; i++) {
raimund@1602: DataList dl = data[i];
raimund@1602: if (dl.getState().equals("state.winfo.historicalq.reference_gauge")) {
raimund@1602: for (int j = 0; j < dl.size(); j++) {
raimund@1602: Data d = dl.get(j);
raimund@1602: DataItem[] di = d.getItems();
raimund@1602: if (di != null && di.length == 1) {
raimund@1602: gauge = d.getItems()[0].getStringValue();
raimund@1602: }
raimund@1602: }
raimund@1602: }
raimund@1602: }
raimund@1602: }
raimund@1602: try {
raimund@1602: return Long.parseLong(gauge);
raimund@1602: }
raimund@1602: catch (NumberFormatException nfe) {
raimund@1602: GWT.log("Error parsing gauge.");
raimund@1602: return 0;
raimund@1602: }
raimund@1602: }
raimund@2468:
raimund@2468:
raimund@2468: @Override
raimund@2468: public List validate() {
raimund@2468: List errors = new ArrayList();
raimund@2468: if (dateRange.getFromDate() == null ||
raimund@2468: dateRange.getToDate() == null ||
raimund@2468: !dateRange.getFromDate().before(dateRange.getToDate()))
raimund@2468: {
raimund@2468: String msg = MSG.error_validate_date_range();
raimund@2468: errors.add(msg);
raimund@2468: }
raimund@2468: return errors;
raimund@2468: }
raimund@1602: }