Mercurial > dive4elements > river
diff gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/LoadSingleYearPanel.java @ 9063:b6919e3c2d86
work on uinfo-inundation_duration states
author | gernotbelger |
---|---|
date | Tue, 08 May 2018 15:21:23 +0200 |
parents | |
children | b5d7a9d79837 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gwt-client/src/main/java/org/dive4elements/river/client/client/ui/uinfo/LoadSingleYearPanel.java Tue May 08 15:21:23 2018 +0200 @@ -0,0 +1,296 @@ +/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde + * Software engineering by Intevation GmbH + * + * This file is Free Software under the GNU AGPL (>=v3) + * and comes with ABSOLUTELY NO WARRANTY! Check out the + * documentation coming with Dive4Elements River for details. + */ + +package org.dive4elements.river.client.client.ui.uinfo; + +import java.util.ArrayList; +import java.util.List; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.i18n.client.NumberFormat; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.data.Record; +import com.smartgwt.client.types.ListGridFieldType; +import com.smartgwt.client.util.SC; +import com.smartgwt.client.widgets.Canvas; +import com.smartgwt.client.widgets.Label; +import com.smartgwt.client.widgets.form.DynamicForm; +import com.smartgwt.client.widgets.form.fields.TextItem; +import com.smartgwt.client.widgets.form.validator.IsIntegerValidator; +import com.smartgwt.client.widgets.grid.ListGrid; +import com.smartgwt.client.widgets.grid.ListGridField; +import com.smartgwt.client.widgets.layout.HLayout; +import com.smartgwt.client.widgets.layout.VLayout; +import com.smartgwt.client.widgets.grid.events.RecordClickHandler; +import com.smartgwt.client.widgets.grid.events.RecordClickEvent; + +import org.dive4elements.river.client.client.Config; +import org.dive4elements.river.client.client.FLYSConstants; +import org.dive4elements.river.client.client.services.SedimentLoadInfoService; +import org.dive4elements.river.client.client.services.SedimentLoadInfoServiceAsync; +import org.dive4elements.river.client.client.ui.AbstractUIProvider; +import org.dive4elements.river.client.shared.model.ArtifactDescription; +import org.dive4elements.river.client.shared.model.Data; +import org.dive4elements.river.client.shared.model.DataItem; +import org.dive4elements.river.client.shared.model.DataList; +import org.dive4elements.river.client.shared.model.DefaultData; +import org.dive4elements.river.client.shared.model.DefaultDataItem; +import org.dive4elements.river.client.shared.model.SedimentLoadInfoObject; +import org.dive4elements.river.client.shared.model.SedimentLoadInfoRecord; + + +public class LoadSingleYearPanel +extends AbstractUIProvider +{ + protected SedimentLoadInfoServiceAsync sedLoadInfoService = + GWT.create(SedimentLoadInfoService.class); + + protected FLYSConstants MESSAGES = GWT.create(FLYSConstants.class); + + private TextItem yearsItem; + + private ListGrid sedLoadTable; + + protected List<String> validYears; + + public LoadSingleYearPanel () { + } + + @Override + public Canvas createOld(DataList dataList) { + List<Data> items = dataList.getAll(); + Data years = getData(items, "years"); + DataItem[] yearsItems = years.getItems(); + + String v1 = yearsItems[0].getStringValue().replace(" ", ", "); + + Label old = new Label(v1); + HLayout layout = new HLayout(); + layout.setWidth("400px"); + + Label label = new Label(dataList.getLabel()); + label.setWidth("200px"); + + Canvas back = getBackButton(dataList.getState()); + + layout.addMember(label); + layout.addMember(old); + layout.addMember(back); + + return layout; + } + + @Override + public List<String> validate() { + return validateYears(); + } + + @Override + public Canvas create(DataList data) { + VLayout layout = new VLayout(); + + Canvas helper = createHelper(); + this.helperContainer.addMember(helper); + + Canvas submit = getNextButton(); + Canvas widget = createWidget(data); + + layout.addMember(widget); + layout.addMember(submit); + + fetchSedimentLoadData(); + + return layout; + } + + private Canvas createHelper() { + sedLoadTable = new ListGrid(); + sedLoadTable.setShowHeaderContextMenu(false); + sedLoadTable.setWidth100(); + sedLoadTable.setShowRecordComponents(true); + sedLoadTable.setShowRecordComponentsByCell(true); + sedLoadTable.setHeight100(); + sedLoadTable.setEmptyMessage(MSG.empty_table()); + sedLoadTable.setCanReorderFields(false); + + ListGridField date = new ListGridField("date", MSG.year()); + date.setType(ListGridFieldType.TEXT); + date.setWidth(100); + + ListGridField descr = + new ListGridField("description", MSG.description()); + descr.setType(ListGridFieldType.TEXT); + descr.setWidth("*"); + + String baseUrl = GWT.getHostPageBaseURL(); + ListGridField pinFrom = new ListGridField( + "fromIcon", MESSAGES.selection()); + pinFrom.setWidth (60); + pinFrom.setType (ListGridFieldType.ICON); + pinFrom.setCellIcon(baseUrl + MESSAGES.markerGreen()); + + pinFrom.addRecordClickHandler (new RecordClickHandler () { + @Override + public void onRecordClick (RecordClickEvent e) { + Record r = e.getRecord(); + appendYear(r.getAttribute("date")); + } + }); + + sedLoadTable.setFields(pinFrom, date, descr); + return sedLoadTable; + } + + public Canvas createWidget(DataList data) { + VLayout layout = new VLayout(); + + Label title = new Label(data.get(0).getDescription()); + title.setHeight("25px"); + + DynamicForm form = new DynamicForm(); + form.setNumCols(4); + yearsItem = new TextItem(MSG.years()); + yearsItem.setValidators(new IsIntegerValidator()); + form.setFields(yearsItem); + + layout.addMember(title); + layout.addMember(form); + + return layout; + } + + @Override + protected Data[] getData() { + validateYears(); + if (yearsItem != null && !yearsItem.getValueAsString().isEmpty()) { + List<Data> data = new ArrayList<Data>(); + + DataItem yearsdata = new DefaultDataItem( + "years", "years", yearsItem.getValueAsString().trim()); + data.add(new DefaultData( + "years", + null, + null, + new DataItem[] { yearsdata })); + + return data.toArray(new Data[data.size()]); + } + return new Data[0]; + } + + protected List<String> validateYears() { + List<String> errors = new ArrayList<String>(); + NumberFormat nf = NumberFormat.getDecimalFormat(); + + if (yearsItem.getValueAsString() == null || + yearsItem.getValueAsString().trim().isEmpty()) { + errors.add(MESSAGES.empty_filter()); + return errors; + } + + String [] sValues = yearsItem.getValueAsString().trim().split(" "); + String filtered = ""; + int goodValues = 0; + for (String sValue: sValues) { + int value; + try { + value = Integer.parseInt(sValue); + } catch (NumberFormatException e) { + errors.add(MESSAGES.wrongFormat() + ": " + sValue); + continue; + } + boolean isGood = false; + for (String validYear: validYears) { + /* No list contains for strings? */ + if (sValue.equals(validYear)) { + isGood = true; + break; + } + } + if (!isGood) { + String tmp = MESSAGES.no_data_for_year(); + tmp = tmp.replace("$1", sValue); + errors.add(tmp); + continue; + } + goodValues++; + if (goodValues > 1) { + filtered += " " + Integer.toString(value); + } else { + filtered = Integer.toString(value); + } + } + + return errors; + } + + protected void fetchSedimentLoadData() { + Config config = Config.getInstance(); + String locale = config.getLocale (); + + ArtifactDescription adescr = artifact.getArtifactDescription(); + DataList[] data = adescr.getOldData(); + + double[] km = artifact.getArtifactDescription().getKMRange(); + String river = artifact.getArtifactDescription().getRiver(); + + String sq_ti_id = ""; + validYears = new ArrayList<String>(data.length); + for (int i = 0; i < data.length; i++) { + Data str = getData(data[i].getAll(), "sq_ti_id"); + if (str != null) { + DataItem[] strItems = str.getItems(); + sq_ti_id = strItems[0].getStringValue(); + break; + } + } + + if (sq_ti_id.isEmpty()){ + GWT.log("Failed to find sq time interval id in data."); + } + + sedLoadInfoService.getSedimentLoadInfo( + locale, river, "single", km[0], km[1], sq_ti_id, + new AsyncCallback<SedimentLoadInfoObject[]>() { + public void onFailure(Throwable caught) { + GWT.log("Could not recieve sediment load informations."); + SC.warn(MSG.getString(caught.getMessage())); + } + + public void onSuccess(SedimentLoadInfoObject[] sedLoad) { + int num = sedLoad != null ? sedLoad.length :0; + GWT.log("Recieved " + num + " sediment load informations."); + + if (num == 0) { + return; + } + + addSedimentLoadInfo(sedLoad); + } + } + ); + } + + + protected void addSedimentLoadInfo (SedimentLoadInfoObject[] sedLoad) { + for(SedimentLoadInfoObject sl: sedLoad) { + SedimentLoadInfoRecord rec = new SedimentLoadInfoRecord(sl); + sedLoadTable.addData(rec); + validYears.add(rec.getDate()); + } + } + + protected void appendYear (String year) { + String oldYears = yearsItem.getValueAsString(); + if (oldYears != null && !oldYears.isEmpty()) { + yearsItem.setValue(oldYears.trim() + " " + year); + } else { + yearsItem.setValue(year); + } + } +}