gernotbelger@9439: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9439: * Software engineering by gernotbelger@9439: * Björnsen Beratende Ingenieure GmbH gernotbelger@9439: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9439: * gernotbelger@9439: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9439: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9439: * documentation coming with Dive4Elements River for details. gernotbelger@9439: */ gernotbelger@9439: package test.bundu; gernotbelger@9439: gernotbelger@9570: import java.io.File; gernotbelger@9439: import java.io.IOException; gernotbelger@9567: import java.util.Calendar; gernotbelger@9439: import java.util.List; gernotbelger@9567: import java.util.TimeZone; gernotbelger@9439: gernotbelger@9439: import org.dive4elements.artifacts.httpclient.exceptions.ConnectionException; gernotbelger@9439: import org.dive4elements.river.client.shared.exceptions.ServerException; gernotbelger@9439: import org.dive4elements.river.client.shared.model.Data; gernotbelger@9439: import org.dive4elements.river.client.shared.model.DataItem; gernotbelger@9439: import org.dive4elements.river.client.shared.model.DefaultDataItem; gernotbelger@9439: import org.dive4elements.river.client.shared.model.IntDataItem; gernotbelger@9439: import org.dive4elements.river.client.shared.model.IntegerArrayData; gernotbelger@9439: import org.dive4elements.river.client.shared.model.StringOptionsData; gernotbelger@9439: gernotbelger@9439: import test.AbstractBerechnungsartenTester.River; gernotbelger@9439: import test.AbstractModuleRunner; gernotbelger@9439: gernotbelger@9439: /** gernotbelger@9439: * @author Domenico Nardi Tironi gernotbelger@9439: * gernotbelger@9439: */ gernotbelger@9439: class BunduBezugswstRunner extends AbstractModuleRunner { gernotbelger@9439: gernotbelger@9439: private final String fixationChoice; gernotbelger@9439: private final int bezugsjahr; gernotbelger@9439: private final int years_length; gernotbelger@9439: gernotbelger@9439: private final boolean fehlvolumina; gernotbelger@9439: private final String sounding; gernotbelger@9439: gernotbelger@9439: private final String calcChoice; gernotbelger@9439: private final double step; gernotbelger@9439: private final List segments; gernotbelger@9442: private final String qSectorStart; gernotbelger@9442: private final String qSectorEnd; gernotbelger@9439: private final int[] events; gernotbelger@9442: private final String function; gernotbelger@9567: private final Double fehlVolFrom; gernotbelger@9567: private final Double fehlVolTo; gernotbelger@9567: private final boolean preprocessing; gernotbelger@9439: gernotbelger@9570: public BunduBezugswstRunner(final File testFolder, final double from, final double to, final double step, final River river, final int bezugsjahr, gernotbelger@9570: final String fixationChoice, final String function, final String abflussklasseFrom, final String abflussklasseTo, final int[] events, gernotbelger@9570: final int years_length, final List segments, final String calcChoice, final boolean preprocessing, final boolean fehlvolumina, gernotbelger@9570: final Double fehlVolFrom, final Double fehlVolTo, final String sounding) throws ConnectionException, ServerException { gernotbelger@9570: super(testFolder, AbstractModuleRunner.Infotype.bundu, test.bundu.BunduBerechnungsartenTester.CalcMode.bundu_bezugswst, from, to, river); gernotbelger@9439: this.fixationChoice = fixationChoice; gernotbelger@9442: this.qSectorStart = abflussklasseFrom; gernotbelger@9442: this.qSectorEnd = abflussklasseTo; gernotbelger@9439: this.bezugsjahr = bezugsjahr; gernotbelger@9439: this.years_length = years_length; gernotbelger@9439: this.fehlvolumina = fehlvolumina; gernotbelger@9567: this.fehlVolFrom = fehlVolFrom; gernotbelger@9567: this.fehlVolTo = fehlVolTo; gernotbelger@9439: this.sounding = sounding; gernotbelger@9439: this.calcChoice = calcChoice; gernotbelger@9567: this.preprocessing = preprocessing; gernotbelger@9439: this.step = step; gernotbelger@9439: this.segments = segments; gernotbelger@9439: this.events = events; gernotbelger@9442: this.function = function; gernotbelger@9567: gernotbelger@9439: } gernotbelger@9439: gernotbelger@9439: @Override gernotbelger@9567: public void runTest() throws ServerException, IOException { gernotbelger@9439: /* Select River */ gernotbelger@9439: super.selectRiver(); gernotbelger@9439: gernotbelger@9439: /* Select ICalcMode */ gernotbelger@9439: super.selectCalcMode(); gernotbelger@9439: gernotbelger@9439: /* Select Range with step */ gernotbelger@9567: final Data[] temp = super.makeFromToData("ld_from", "ld_to", this.getFrom(), this.getTo()); gernotbelger@9439: final String stepStr = String.valueOf(this.step); gernotbelger@9439: final Data[] data = super.addItemToExistingData(temp, gernotbelger@9439: new StringOptionsData("ld_step", "ld_step", new DataItem[] { new DefaultDataItem(stepStr, stepStr, stepStr) })); gernotbelger@9439: gernotbelger@9439: super.feedAndGo(data, 0); gernotbelger@9439: gernotbelger@9439: /* bezugsjahr */ gernotbelger@9439: final String bezugsjahr = String.valueOf(this.bezugsjahr); gernotbelger@9567: gernotbelger@9567: final IntDataItem[] eventArray = new IntDataItem[this.events.length]; gernotbelger@9567: for (int i = 0; i < this.events.length; i++) { gernotbelger@9567: eventArray[i] = new IntDataItem("id", "id", this.events[i]); gernotbelger@9567: } gernotbelger@9567: gernotbelger@9567: final IntegerArrayData iadTemp = new IntegerArrayData("events_temp", "events_temp", eventArray); gernotbelger@9567: gernotbelger@9567: super.feedAndGo(new Data[] { super.getSimpleTextInput("singleyear", bezugsjahr), iadTemp }, 0); gernotbelger@9439: gernotbelger@9439: /* fixierungsauswahl - auto oder manuell */ gernotbelger@9439: // AUTO: 0, 3 gernotbelger@9442: final Data q1 = super.getSimpleTextInput("q1", this.qSectorStart); gernotbelger@9442: final Data q2 = super.getSimpleTextInput("q2", this.qSectorEnd); gernotbelger@9439: final Data fixChoice = super.getSimpleTextInput("fix_choice", this.fixationChoice); gernotbelger@9567: // start, end (missing) gernotbelger@9567: // final DateTimeFormat df = DateTimeFormat.getFormat("dd.MM.yyyy"); gernotbelger@9567: final Calendar cal = Calendar.getInstance(); gernotbelger@9567: cal.setTimeZone(TimeZone.getDefault());// TODO: TimeZoneHandling gernotbelger@9567: cal.set(Calendar.YEAR, (this.bezugsjahr - 5)); gernotbelger@9567: cal.set(Calendar.DAY_OF_YEAR, 1); gernotbelger@9439: gernotbelger@9567: final Data startData = super.getSimpleTextInput("start", String.valueOf(cal.getTime().getTime())); gernotbelger@9567: cal.set(Calendar.YEAR, (this.bezugsjahr - 5)); gernotbelger@9567: cal.set(Calendar.DAY_OF_YEAR, 365); gernotbelger@9567: final Data endData = super.getSimpleTextInput("end", String.valueOf(cal.getTime().getTime())); gernotbelger@9567: final IntegerArrayData iad = new IntegerArrayData("events", "events", eventArray); gernotbelger@9567: gernotbelger@9567: super.feedAndGo(new Data[] { q1, q2, iad, fixChoice, startData, endData }, 0); gernotbelger@9567: gernotbelger@9567: if (this.fixationChoice.equals("state.bundu.wst.fix.manual")) { gernotbelger@9567: super.feedAndGo(new Data[] { q1, q2 }, 0); // ein State extra im workflow gernotbelger@9439: } gernotbelger@9439: gernotbelger@9439: /* Länge der Abflusszeitreihe */ gernotbelger@9439: super.feedAndGoSimpleTextInput("year_input_q_series", String.valueOf(this.years_length)); gernotbelger@9439: gernotbelger@9439: /* (W)Q-Input / UD Input */ gernotbelger@9439: gernotbelger@9439: final Data[] wqData = Segment.getDataforFeed("wq_values", this.segments); gernotbelger@9439: final Data[] wqAndMode = super.addItemToExistingData(wqData, gernotbelger@9439: new StringOptionsData("bundu.wst.mode", "bundu.wst.mode", new DataItem[] { new DefaultDataItem("Q", "Q", "Q") })); gernotbelger@9439: gernotbelger@9439: super.feedAndGo(wqAndMode, // gernotbelger@9439: 0);// reachable state index gernotbelger@9439: gernotbelger@9439: /* calc_choice */ gernotbelger@9567: final Data preprocessingData = super.getSimpleTextInput("preprocessing", String.valueOf(this.preprocessing)); gernotbelger@9442: final Data functionData = super.getSimpleTextInput("function", this.function); gernotbelger@9439: final Data calcChoice = super.getSimpleTextInput("calc_choice", this.calcChoice); gernotbelger@9567: super.feedAndGo(new Data[] { calcChoice, preprocessingData, functionData }, 0); gernotbelger@9439: gernotbelger@9567: if (this.calcChoice.equals("state.bundu.wst.calc.manual")) { gernotbelger@9567: super.feedAndGo(new Data[] { functionData }, 0); // extra states im workflow gernotbelger@9567: super.feedAndGo(new Data[] { preprocessingData }, 0); gernotbelger@9567: } gernotbelger@9439: gernotbelger@9439: /* missing_volume */ gernotbelger@9567: final Data missingVolume = super.getSimpleTextInput("missing_volume", String.valueOf(this.fehlvolumina)); gernotbelger@9567: super.feedAndGo(new Data[] { missingVolume }, 0); gernotbelger@9439: gernotbelger@9567: if (this.fehlvolumina) { gernotbelger@9567: super.makeKmRange(this.fehlVolFrom, this.fehlVolTo, "ld_from_part", "ld_to_part"); gernotbelger@9567: super.feedAndGoSimpleTextInput("soundings", this.sounding); gernotbelger@9567: } gernotbelger@9439: describeCollection(); gernotbelger@9567: super.runTests(); gernotbelger@9439: } gernotbelger@9439: gernotbelger@9439: }