Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java @ 3121:0b86b005bb9a
FixA: Respect the selected events and reference period correctly.
flys-artifacts/trunk@4722 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 20 Jun 2012 11:25:21 +0000 |
parents | cbf308f5c41b |
children | 3b6ab6fac843 |
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java Wed Jun 20 11:24:30 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/fixings/FixCalculation.java Wed Jun 20 11:25:21 2012 +0000 @@ -12,12 +12,15 @@ import de.intevation.flys.artifacts.model.FixingsOverview.AndFilter; import de.intevation.flys.artifacts.model.FixingsOverview.DateRangeFilter; + +import de.intevation.flys.artifacts.model.FixingsOverview.Fixing.Filter; + import de.intevation.flys.artifacts.model.FixingsOverview.Fixing; -import de.intevation.flys.artifacts.model.FixingsOverview.IdFilter; +import de.intevation.flys.artifacts.model.FixingsOverview.IdsFilter; import de.intevation.flys.artifacts.model.FixingsOverview.KmFilter; import de.intevation.flys.artifacts.model.FixingsOverview.Range; +import de.intevation.flys.artifacts.model.FixingsOverview.SectorFilter; import de.intevation.flys.artifacts.model.FixingsOverview.SectorRangeFilter; -import de.intevation.flys.artifacts.model.FixingsOverview.SectorFilter; import de.intevation.flys.artifacts.model.FixingsOverview; import de.intevation.flys.artifacts.model.FixingsOverviewFactory; @@ -49,6 +52,7 @@ protected boolean preprocessing; protected String function; protected int [] events; + protected DateRange referencePeriod; protected DateRange [] analysisPeriods; protected int qSectorStart; protected int qSectorEnd; @@ -58,16 +62,17 @@ public FixCalculation(FixationArtifactAccess access) { - String river = access.getRiver(); - Double from = access.getFrom(); - Double to = access.getTo(); - Double step = access.getStep(); - String function = access.getFunction(); - int [] events = access.getEvents(); + String river = access.getRiver(); + Double from = access.getFrom(); + Double to = access.getTo(); + Double step = access.getStep(); + String function = access.getFunction(); + int [] events = access.getEvents(); + DateRange referencePeriod = access.getReferencePeriod(); DateRange [] analysisPeriods = access.getAnalysisPeriods(); - Integer qSectorStart = access.getQSectorStart(); - Integer qSectorEnd = access.getQSectorEnd(); - Boolean preprocessing = access.getPreprocessing(); + Integer qSectorStart = access.getQSectorStart(); + Integer qSectorEnd = access.getQSectorEnd(); + Boolean preprocessing = access.getPreprocessing(); if (river == null) { // TODO: i18n @@ -99,6 +104,11 @@ addProblem("fix.missing.events"); } + if (referencePeriod == null) { + // TODO: i18n + addProblem("fix.missing.reference.period"); + } + if (analysisPeriods == null || analysisPeriods.length < 1) { // TODO: i18n addProblem("fix.missing.analysis.periods"); @@ -126,6 +136,7 @@ this.step = step; this.function = function; this.events = events; + this.referencePeriod = referencePeriod; this.analysisPeriods = analysisPeriods; this.qSectorStart = qSectorStart; this.qSectorEnd = qSectorEnd; @@ -222,7 +233,6 @@ // Fill Qs and Ws from event columns. for (int j = 0; j < ws.length; ++j) { interpolated[j] = eventColumns.get(j).getQW(km, qs, ws, j); - // TODO: mark as interpolated. } fitting.reset(); @@ -281,31 +291,31 @@ FixingsColumnFactory fcf = FixingsColumnFactory.getInstance(); - List<Column> columns = new ArrayList<Column>(events.length); - - for (int eventId: events) { - IdFilter idFilter = new IdFilter(eventId); - - List<Fixing.Column> metas = overview.filter(null, idFilter); + IdsFilter ids = new IdsFilter(events); + DateRangeFilter rdf = new DateRangeFilter( + referencePeriod.getFrom(), + referencePeriod.getTo()); + Filter filter = new AndFilter().add(rdf).add(ids); - if (metas.isEmpty()) { - // TODO: i18n - addProblem("fix.missing.column", eventId); - continue; - } + List<Fixing.Column> metas = overview.filter(null, filter); - FixingsColumn data = fcf.getColumnData(metas.get(0)); + List<Column> columns = new ArrayList<Column>(metas.size()); + + for (Fixing.Column meta: metas) { + + FixingsColumn data = fcf.getColumnData(meta); if (data == null) { // TODO: i18n - addProblem("fix.cannot.load.data", eventId); - continue; + addProblem("fix.cannot.load.data"); } - - columns.add(new Column(metas.get(0), data)); + else { + columns.add(new Column(metas.get(0), data)); + } } return columns; } + protected KMIndex<AnalysisPeriod []> calculateAnalysisPeriods( Function function, @@ -331,6 +341,8 @@ KMIndex<AnalysisPeriod []> results = new KMIndex<AnalysisPeriod []>(parameters.size()); + IdsFilter idsFilter = new IdsFilter(events); + for (int row = 0, R = parameters.size(); row < R; ++row) { double km = parameters.get(row, kmIndex); parameters.get(row, parameterIndices, parameterValues); @@ -355,10 +367,11 @@ // for all Q sectors. for (int qSector = qSectorStart; qSector < qSectorEnd; ++qSector) { - AndFilter filter = new AndFilter(); - filter.add(kmFilter); - filter.add(new SectorFilter(qSector)); - filter.add(drf); + Filter filter = new AndFilter() + .add(kmFilter) + .add(new SectorFilter(qSector)) + .add(drf) + .add(idsFilter); List<Fixing.Column> metas = overview.filter(range, filter);