sascha@2186: package de.intevation.flys.artifacts.model;
sascha@2186: 
sascha@2326: import de.intevation.artifacts.CallContext;
sascha@2326: import de.intevation.artifacts.CallMeta;
sascha@2326: 
sascha@2326: import de.intevation.flys.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@2256:         WstValueTable       wst, 
sascha@2326:         Map<Double, Double> kms2gaugeDatums,
sascha@2326:         CallContext         context
sascha@2256:     ) {
felix@2283:         ArrayList<WWQQ> results = new ArrayList<WWQQ>();
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@2326:         double   startKm, 
sascha@2326:         double   endKm
sascha@2326:     ) {
sascha@2326:         NumberFormat nf = Formatter.getCalculationKm(meta);
sascha@2326:         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 :