# HG changeset patch # User Andre Heinecke # Date 1423674048 -3600 # Node ID 73a4c3c202e5af849f0f2bd11fd4b617beb806ff # Parent 3e6d4bd1c06e8887c175b36c1e7a1c7dbc491563 (issue1051) Use a list of single years in SedimentLoadYear mode Instead of a range you can now select multiple distinct years in the sedimentload calculation. diff -r 3e6d4bd1c06e -r 73a4c3c202e5 artifacts/doc/conf/artifacts/minfo.xml --- a/artifacts/doc/conf/artifacts/minfo.xml Wed Feb 11 12:41:51 2015 +0100 +++ b/artifacts/doc/conf/artifacts/minfo.xml Wed Feb 11 18:00:48 2015 +0100 @@ -545,8 +545,7 @@ - - + validYears; + public SedLoadPeriodPanel () { } @Override public Canvas createOld(DataList dataList) { List items = dataList.getAll(); - Data start = getData(items, "start"); - Data end = getData(items, "end"); - DataItem[] startItem = start.getItems(); - DataItem[] endItem = end.getItems(); - - String v1 = startItem[0].getStringValue(); - String v2 = endItem[0].getStringValue(); + Data years = getData(items, "years"); + DataItem[] yearsItems = years.getItems(); - int v1i = 0; - int v2i = 0; - try { - v1i = Integer.parseInt(v1); - v2i = Integer.parseInt(v2); - } - catch (NumberFormatException nfe) { - GWT.log(nfe.toString()); - } - Label old = new Label(v1i + " - " + v2i); + String v1 = yearsItems[0].getStringValue().replace(" ", ", "); + + Label old = new Label(v1); HLayout layout = new HLayout(); layout.setWidth("400px"); @@ -90,6 +86,11 @@ } @Override + public List validate() { + return validateYears(); + } + + @Override public Canvas create(DataList data) { VLayout layout = new VLayout(); @@ -126,7 +127,21 @@ descr.setType(ListGridFieldType.TEXT); descr.setWidth("*"); - sedLoadTable.setFields(date, descr); + 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; } @@ -138,14 +153,9 @@ DynamicForm form = new DynamicForm(); form.setNumCols(4); - start = new TextItem(MSG.from()); - start.setValidators(new IsIntegerValidator()); - end = new TextItem(MSG.to()); - end.setValidators(new IsIntegerValidator()); - form.setFields(start, end); -// inputPanel.setToTitle(MSG.to()); -// inputPanel.setFromTitle(MSG.from()); -// inputPanel.setShowTitle(false); + yearsItem = new TextItem(MSG.years()); + yearsItem.setValidators(new IsIntegerValidator()); + form.setFields(yearsItem); layout.addMember(title); layout.addMember(form); @@ -155,45 +165,66 @@ @Override protected Data[] getData() { - int v1; - int v2; - try { - v1 = Integer.parseInt(start.getValueAsString()); - v2 = Integer.parseInt(end.getValueAsString()); - } - catch(NumberFormatException nfe) { - // warn the user... - return new Data[0]; - } - if (validateRange(v1, v2)) { + validateYears(); + if (yearsItem != null && !yearsItem.getValueAsString().isEmpty()) { List data = new ArrayList(); - DataItem startItem = new DefaultDataItem("start", "start", start.getValueAsString()); - DataItem endItem = new DefaultDataItem("end", "end", end.getValueAsString()); + DataItem yearsdata = new DefaultDataItem("years", "years", yearsItem.getValueAsString().trim()); data.add(new DefaultData( - "start", + "years", null, null, - new DataItem[] { startItem })); - data.add(new DefaultData( - "end", - null, - null, - new DataItem[] { endItem })); + new DataItem[] { yearsdata })); return data.toArray(new Data[data.size()]); } return new Data[0]; } - protected boolean validateRange(int v1, int v2) { - // TODO: Set useful years for validation. Current range is between start - // of gregorian calendar and a year in the future... - if ((v1 > 1582 && v1 < 2100) - && (v2 > 1582 && v2 < 2100)) { - return true; + protected List validateYears() { + List errors = new ArrayList(); + NumberFormat nf = NumberFormat.getDecimalFormat(); + + if (yearsItem.getValueAsString() == null || + yearsItem.getValueAsString().trim().isEmpty()) { + errors.add(MESSAGES.empty_filter()); + return errors; } - return false; + + 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()); + 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() { @@ -207,6 +238,7 @@ String river = artifact.getArtifactDescription().getRiver(); String sq_ti_id = ""; + validYears = new ArrayList(data.length); for (int i = 0; i < data.length; i++) { Data str = getData(data[i].getAll(), "sq_ti_id"); if (str != null) { @@ -246,7 +278,16 @@ 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); + } + } }