gernotbelger@9267: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde gernotbelger@9267: * Software engineering by Intevation GmbH gernotbelger@9267: * gernotbelger@9267: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9267: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9267: * documentation coming with Dive4Elements River for details. gernotbelger@9267: */ gernotbelger@9267: gernotbelger@9267: package org.dive4elements.river.client.client.ui.fixation; gernotbelger@9267: gernotbelger@9267: import java.util.ArrayList; gernotbelger@9267: import java.util.List; gernotbelger@9267: gernotbelger@9267: import org.dive4elements.river.client.client.FLYSConstants; gernotbelger@9267: import org.dive4elements.river.client.client.ui.PanelHelper; gernotbelger@9270: import org.dive4elements.river.client.client.ui.StringArrayParseHelper; gernotbelger@9267: import org.dive4elements.river.client.client.ui.ValidationHelper; gernotbelger@9267: import org.dive4elements.river.client.shared.model.Data; gernotbelger@9267: import org.dive4elements.river.client.shared.model.DataItem; gernotbelger@9267: import org.dive4elements.river.client.shared.model.DataList; gernotbelger@9267: import org.dive4elements.river.client.shared.model.DefaultData; gernotbelger@9267: import org.dive4elements.river.client.shared.model.DefaultDataItem; gernotbelger@9267: import org.dive4elements.river.client.shared.model.FixingsOverviewInfo; gernotbelger@9267: import org.dive4elements.river.client.shared.model.FixingsOverviewInfo.FixEvent; gernotbelger@9267: import org.dive4elements.river.client.shared.model.IntDataItem; gernotbelger@9267: import org.dive4elements.river.client.shared.model.IntegerArrayData; gernotbelger@9267: gernotbelger@9267: import com.google.gwt.core.client.GWT; gernotbelger@9267: import com.google.gwt.i18n.client.DateTimeFormat; gernotbelger@9267: import com.smartgwt.client.widgets.Canvas; gernotbelger@9267: import com.smartgwt.client.widgets.Label; gernotbelger@9267: import com.smartgwt.client.widgets.form.DynamicForm; gernotbelger@9267: import com.smartgwt.client.widgets.form.fields.TextItem; gernotbelger@9267: import com.smartgwt.client.widgets.layout.HLayout; gernotbelger@9267: import com.smartgwt.client.widgets.layout.VLayout; gernotbelger@9267: gernotbelger@9267: /** gernotbelger@9267: * This UIProvider creates a panel for location or distance input. gernotbelger@9267: * gernotbelger@9267: * @author Raimund Renkert gernotbelger@9267: */ gernotbelger@9267: public class BunduFixPeriodPanel extends FixationPanel { gernotbelger@9267: private static final long serialVersionUID = 1L; gernotbelger@9267: /** The message class that provides i18n strings. */ gernotbelger@9267: protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); gernotbelger@9267: private TextItem inputItem; gernotbelger@9267: gernotbelger@9267: long start; gernotbelger@9267: long end; gernotbelger@9267: gernotbelger@9267: private final ArrayList events = new ArrayList(); gernotbelger@9267: gernotbelger@9267: protected String getDatakey() { gernotbelger@9267: return "singleyear"; gernotbelger@9267: } gernotbelger@9267: gernotbelger@9267: @Override gernotbelger@9267: public Canvas createWidget(final DataList data) { gernotbelger@9267: instances.put(this.artifact.getUuid(), this); gernotbelger@9267: final VLayout layout = new VLayout(); gernotbelger@9267: gernotbelger@9267: final Label title = new Label(data.get(0).getDescription()); gernotbelger@9267: title.setHeight("25px"); gernotbelger@9267: gernotbelger@9267: final DynamicForm form = new DynamicForm(); gernotbelger@9267: form.setNumCols(4); gernotbelger@9267: gernotbelger@9267: this.inputItem = PanelHelper.createItem("YEAR_INPUT"); gernotbelger@9267: this.inputItem.setShowHint(true); gernotbelger@9267: this.inputItem.setHint(this.MSG.common_input_hint_year()); gernotbelger@9267: this.inputItem.setShowHintInField(true); gernotbelger@9267: this.inputItem.setShowTitle(false); gernotbelger@9267: form.setFields(this.inputItem); gernotbelger@9267: gernotbelger@9267: layout.addMember(title); gernotbelger@9267: layout.addMember(form); gernotbelger@9267: gernotbelger@9267: return layout; gernotbelger@9267: } gernotbelger@9267: gernotbelger@9267: @Override gernotbelger@9267: public Canvas createOld(final DataList dataList) { gernotbelger@9267: final List items = dataList.getAll(); gernotbelger@9267: final Data years = getData(items, getDatakey()); gernotbelger@9267: final DataItem[] yearsItems = years.getItems(); gernotbelger@9267: gernotbelger@9267: final String v1 = yearsItems[0].getStringValue().replace(" ", ", "); // multi.. single only allowed.. TODO: make createOld expecting single (general gernotbelger@9267: // refactoring necessary) gernotbelger@9267: gernotbelger@9267: final Label old = new Label(v1); gernotbelger@9267: final HLayout layout = new HLayout(); gernotbelger@9267: layout.setWidth("400px"); gernotbelger@9267: gernotbelger@9267: final Label label = new Label(dataList.getLabel()); gernotbelger@9267: label.setWidth("200px"); gernotbelger@9267: gernotbelger@9267: final Canvas back = getBackButton(dataList.getState()); gernotbelger@9267: gernotbelger@9267: layout.addMember(label); gernotbelger@9267: layout.addMember(old); gernotbelger@9267: layout.addMember(back); gernotbelger@9267: gernotbelger@9267: return layout; gernotbelger@9267: } gernotbelger@9267: gernotbelger@9267: /** gernotbelger@9267: * This method returns the selected data. gernotbelger@9267: * gernotbelger@9267: * @return the selected/inserted data. gernotbelger@9267: */ gernotbelger@9267: @Override gernotbelger@9267: public Data[] getData() { gernotbelger@9267: final List errors = this.validate(); gernotbelger@9267: if (errors.size() > 0) { gernotbelger@9267: showErrors(errors); // TODO: do not allow advance state gernotbelger@9267: } gernotbelger@9267: long startMillis = 0; gernotbelger@9267: long endMillis = 0; gernotbelger@9267: final DateTimeFormat df = DateTimeFormat.getFormat("dd.MM.yyyy"); gernotbelger@9267: if (this.inputItem != null && !this.inputItem.getValueAsString().isEmpty()) { gernotbelger@9267: final List data = new ArrayList(); gernotbelger@9270: final String bezugsjahr = StringArrayParseHelper.trimRawString(this.inputItem.getValueAsString()); gernotbelger@9267: final DataItem yearsdata = new DefaultDataItem(getDatakey(), getDatakey(), bezugsjahr); gernotbelger@9267: data.add(new DefaultData(getDatakey(), null, null, new DataItem[] { yearsdata })); gernotbelger@9267: gernotbelger@9267: // start/end gernotbelger@9267: gernotbelger@9267: final int bezugsjahrInt = Integer.valueOf(bezugsjahr); gernotbelger@9267: gernotbelger@9267: startMillis = df.parse("01.01." + (bezugsjahrInt - 5)).getTime(); gernotbelger@9267: // ist; radio-auswahl erfolgt aber erst im nächsten schritt gernotbelger@9267: endMillis = df.parse("31.12." + (bezugsjahrInt + 5)).getTime(); gernotbelger@9267: gernotbelger@9267: // events: gernotbelger@9267: if (this.events.size() > 0) { gernotbelger@9267: // filter by start/end gernotbelger@9267: final ArrayList temp = new ArrayList(); gernotbelger@9267: gernotbelger@9267: for (final FixEvent e : this.events) { gernotbelger@9267: final long time = df.parse(e.getDate()).getTime(); gernotbelger@9267: if (!(time >= startMillis && time <= endMillis)) { gernotbelger@9267: temp.add(e); gernotbelger@9267: } gernotbelger@9267: } gernotbelger@9267: this.events.removeAll(temp); gernotbelger@9267: gernotbelger@9267: final IntDataItem[] arr = new IntDataItem[this.events.size()]; gernotbelger@9267: for (int i = 0, E = this.events.size(); i < E; i++) { gernotbelger@9267: try { gernotbelger@9267: final Integer v = new Integer(this.events.get(i).getCId()); gernotbelger@9267: arr[i] = new IntDataItem("id", "id", v.intValue()); gernotbelger@9267: } gernotbelger@9267: catch (final NumberFormatException nfe) { gernotbelger@9267: return data.toArray(new Data[data.size()]); gernotbelger@9267: } gernotbelger@9267: } gernotbelger@9267: gernotbelger@9267: final IntegerArrayData iad = new IntegerArrayData("events_temp", "events_temp", arr); gernotbelger@9267: gernotbelger@9267: data.add(iad); gernotbelger@9267: } gernotbelger@9267: gernotbelger@9267: return data.toArray(new Data[data.size()]); gernotbelger@9267: } gernotbelger@9267: return new Data[0]; gernotbelger@9267: } gernotbelger@9267: gernotbelger@9267: @Override gernotbelger@9267: public final List validate() { gernotbelger@9267: final List errors = new ArrayList(); gernotbelger@9267: errors.addAll(ValidationHelper.checkForEmpty(this.inputItem, this.MSG)); gernotbelger@9267: try { gernotbelger@9267: final int year = Integer.valueOf(this.inputItem.getValueAsString()); gernotbelger@9267: if (year < 1000 || year > 9999) { gernotbelger@9292: final StringBuilder builder = new StringBuilder(); gernotbelger@9292: builder.append(this.MSG.wrongFormat())// gernotbelger@9292: .append(" (") // gernotbelger@9292: .append(this.MSG.common_input_hint_year())// gernotbelger@9292: .append(")");// gernotbelger@9292: errors.add(builder.toString()); gernotbelger@9267: } gernotbelger@9267: } gernotbelger@9267: catch (final NumberFormatException e) { gernotbelger@9267: errors.add(this.MSG.error_invalid_integer()); gernotbelger@9267: } gernotbelger@9267: return errors; gernotbelger@9267: } gernotbelger@9267: gernotbelger@9267: @Override gernotbelger@9267: public void setValues(final String cid, final boolean checked) { gernotbelger@9267: // No user interaction, do nothing. gernotbelger@9267: } gernotbelger@9267: gernotbelger@9267: @Override gernotbelger@9267: public boolean renderCheckboxes() { gernotbelger@9267: // No selection, return false. gernotbelger@9267: return false; gernotbelger@9267: } gernotbelger@9267: gernotbelger@9267: @Override gernotbelger@9267: public void success(final FixingsOverviewInfo fixInfo) { gernotbelger@9267: for (final FixEvent fe : fixInfo.getEvents()) { gernotbelger@9267: this.events.add(fe); gernotbelger@9267: } gernotbelger@9267: } gernotbelger@9267: }