teichmann@5831: package org.dive4elements.river.artifacts.model; sascha@2186: teichmann@5831: import org.dive4elements.artifacts.CallContext; teichmann@5831: import org.dive4elements.artifacts.CallMeta; sascha@2326: teichmann@5831: import org.dive4elements.river.utils.Formatter; sascha@2326: sascha@2326: import java.text.NumberFormat; sascha@2326: sascha@2186: import java.util.ArrayList; sascha@2256: import java.util.Map; sascha@2186: sascha@2186: import org.apache.log4j.Logger; sascha@2186: sascha@2186: public class Calculation5 sascha@2186: extends Calculation sascha@2186: { sascha@2186: private static Logger log = Logger.getLogger(Calculation5.class); sascha@2186: sascha@2186: protected double startKm; sascha@2186: protected double [] endKms; sascha@2186: sascha@2186: public Calculation5() { sascha@2186: } sascha@2186: sascha@2186: public Calculation5(double startKm, double [] endKms) { sascha@2186: this.startKm = startKm; sascha@2186: this.endKms = endKms; sascha@2186: } sascha@2186: sascha@2256: public CalculationResult calculate( sascha@3076: WstValueTable wst, sascha@2326: Map kms2gaugeDatums, sascha@2326: CallContext context sascha@2256: ) { felix@2283: ArrayList results = new ArrayList(); sascha@2186: sascha@2186: int numProblems = numProblems(); sascha@2186: sascha@2326: CallMeta meta = context.getMeta(); sascha@2326: sascha@2186: for (double endKm: endKms) { sascha@2186: sascha@2186: double [][] wws = wst.relateWs(startKm, endKm, this); sascha@2186: int newNumProblems = numProblems(); sascha@2186: sascha@2267: if (wws.length == 4) { sascha@2271: WWQQ wwqq = new WWQQ( sascha@2326: generateName(meta, startKm, endKm), sascha@2271: startKm, kms2gaugeDatums.get(startKm), wws[0], wws[1], sascha@2271: endKm, kms2gaugeDatums.get(endKm), wws[2], wws[3]); sascha@2186: sascha@2192: if (newNumProblems > numProblems) { sascha@2271: wwqq.removeNaNs(); sascha@2186: } sascha@2186: sascha@2271: results.add(wwqq); sascha@2186: } sascha@2186: numProblems = newNumProblems; sascha@2186: } sascha@2186: sascha@2186: return new CalculationResult( felix@2283: results.toArray(new WWQQ[results.size()]), sascha@2186: this); sascha@2186: } sascha@2186: sascha@2326: protected static String generateName( sascha@2326: CallMeta meta, sascha@3076: double startKm, sascha@2326: double endKm sascha@2326: ) { sascha@2326: NumberFormat nf = Formatter.getCalculationKm(meta); sascha@3076: return "W(km " + nf.format(startKm) + sascha@2326: ") ~ W(km " + nf.format(endKm) + ")"; sascha@2186: } sascha@2186: } sascha@2186: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :