comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/WINFOArtifact.java @ 2194:05984871520f

Call the "Bezugslinienverfahren" from the WINFOArtifact. flys-artifacts/trunk@3809 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 27 Jan 2012 15:43:04 +0000
parents 2898b1ff6013
children ebbb18ed78c4
comparison
equal deleted inserted replaced
2193:73490b828a90 2194:05984871520f
1 package de.intevation.flys.artifacts; 1 package de.intevation.flys.artifacts;
2
3 import java.awt.geom.Point2D;
4 2
5 import de.intevation.artifactdatabase.ProtocolUtils; 3 import de.intevation.artifactdatabase.ProtocolUtils;
6 4
7 import de.intevation.artifactdatabase.data.StateData; 5 import de.intevation.artifactdatabase.data.StateData;
8 6
16 import de.intevation.artifacts.CallContext; 14 import de.intevation.artifacts.CallContext;
17 import de.intevation.artifacts.Message; 15 import de.intevation.artifacts.Message;
18 16
19 import de.intevation.artifacts.common.ArtifactNamespaceContext; 17 import de.intevation.artifacts.common.ArtifactNamespaceContext;
20 18
19 import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator;
20
21 import de.intevation.artifacts.common.utils.XMLUtils; 21 import de.intevation.artifacts.common.utils.XMLUtils;
22 import de.intevation.artifacts.common.utils.XMLUtils.ElementCreator;
23 22
24 import de.intevation.flys.artifacts.context.FLYSContext; 23 import de.intevation.flys.artifacts.context.FLYSContext;
25 24
26 import de.intevation.flys.artifacts.model.Calculation1; 25 import de.intevation.flys.artifacts.model.Calculation1;
27 import de.intevation.flys.artifacts.model.Calculation2; 26 import de.intevation.flys.artifacts.model.Calculation2;
28 import de.intevation.flys.artifacts.model.Calculation3; 27 import de.intevation.flys.artifacts.model.Calculation3;
29 import de.intevation.flys.artifacts.model.Calculation4; 28 import de.intevation.flys.artifacts.model.Calculation4;
29 import de.intevation.flys.artifacts.model.Calculation5;
30 import de.intevation.flys.artifacts.model.Calculation; 30 import de.intevation.flys.artifacts.model.Calculation;
31 import de.intevation.flys.artifacts.model.CalculationMessage;
31 import de.intevation.flys.artifacts.model.CalculationResult; 32 import de.intevation.flys.artifacts.model.CalculationResult;
32 import de.intevation.flys.artifacts.model.DischargeTables; 33 import de.intevation.flys.artifacts.model.DischargeTables;
33 import de.intevation.flys.artifacts.model.FacetTypes; 34 import de.intevation.flys.artifacts.model.FacetTypes;
34 import de.intevation.flys.artifacts.model.MainValuesFactory; 35 import de.intevation.flys.artifacts.model.MainValuesFactory;
35 import de.intevation.flys.artifacts.model.Segment; 36 import de.intevation.flys.artifacts.model.Segment;
36 import de.intevation.flys.artifacts.model.WQKms; 37 import de.intevation.flys.artifacts.model.WQKms;
38 import de.intevation.flys.artifacts.model.WW;
37 import de.intevation.flys.artifacts.model.WstValueTable; 39 import de.intevation.flys.artifacts.model.WstValueTable;
38 import de.intevation.flys.artifacts.model.WstValueTableFactory; 40 import de.intevation.flys.artifacts.model.WstValueTableFactory;
39 41
40 import de.intevation.flys.model.FastCrossSectionLine;
41
42 import de.intevation.flys.artifacts.states.DefaultState; 42 import de.intevation.flys.artifacts.states.DefaultState;
43 import de.intevation.flys.artifacts.states.LocationDistanceSelect; 43 import de.intevation.flys.artifacts.states.LocationDistanceSelect;
44 44
45 import de.intevation.flys.geom.Lines; 45 import de.intevation.flys.geom.Lines;
46 46
47 import de.intevation.flys.model.FastCrossSectionLine;
47 import de.intevation.flys.model.Gauge; 48 import de.intevation.flys.model.Gauge;
48 import de.intevation.flys.model.River; 49 import de.intevation.flys.model.River;
49 50
50 import de.intevation.flys.utils.DoubleUtil; 51 import de.intevation.flys.utils.DoubleUtil;
51 import de.intevation.flys.utils.FLYSUtils; 52 import de.intevation.flys.utils.FLYSUtils;
52 53
53 import gnu.trove.TDoubleArrayList; 54 import gnu.trove.TDoubleArrayList;
55
56 import java.awt.geom.Point2D;
54 57
55 import java.util.ArrayList; 58 import java.util.ArrayList;
56 import java.util.Arrays; 59 import java.util.Arrays;
57 import java.util.Collections; 60 import java.util.Collections;
58 import java.util.LinkedList; 61 import java.util.LinkedList;
62 import org.apache.log4j.Logger; 65 import org.apache.log4j.Logger;
63 66
64 import org.w3c.dom.Document; 67 import org.w3c.dom.Document;
65 import org.w3c.dom.Element; 68 import org.w3c.dom.Element;
66 import org.w3c.dom.Node; 69 import org.w3c.dom.Node;
67
68 import de.intevation.flys.artifacts.model.CalculationMessage;
69 70
70 /** 71 /**
71 * The default WINFO artifact. 72 * The default WINFO artifact.
72 * 73 *
73 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> 74 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
643 Calculation4 calc4 = new Calculation4(segments, river, isQ()); 644 Calculation4 calc4 = new Calculation4(segments, river, isQ());
644 645
645 return calc4.calculate(table, range[0], range[1], range[2]); 646 return calc4.calculate(table, range[0], range[1], range[2]);
646 } 647 }
647 648
649 /**
650 * Returns the data that is computed by a reference curve computation.
651 *
652 * @return the data computed by a reference curve computation.
653 */
654 public CalculationResult getReferenceCurveData() {
655
656 Double startKm = getReferenceStartKm();
657
658 if (startKm == null) {
659 return error(new WW[0], "no.reference.start.km");
660 }
661
662 double [] endKms = getReferenceEndKms();
663
664 if (endKms == null || endKms.length == 0) {
665 return error(new WW[0], "no.reference.end.kms");
666 }
667
668 Calculation5 calc5 = new Calculation5(startKm, endKms);
669
670 River r = FLYSUtils.getRiver(this);
671 if (r == null) {
672 return error(new WW[0], "no.river.found");
673 }
674
675 WstValueTable wst = WstValueTableFactory.getTable(r);
676 if (wst == null) {
677 return error(new WW[0], "no.wst.for.river");
678 }
679
680 return calc5.calculate(wst);
681 }
682
683 protected Double getReferenceStartKm() {
684 StateData sd = getData("reference_start");
685
686 if (sd == null) {
687 logger.warn("no reference start given.");
688 return null;
689 }
690
691 String input = (String)sd.getValue();
692
693 if (input == null | (input = input.trim()).length() == 0) {
694 logger.warn("reference start string is empty.");
695 return null;
696 }
697
698 try {
699 return Double.valueOf(input);
700 }
701 catch (NumberFormatException nfe) {
702 logger.warn("reference start string is not numeric.");
703 }
704
705 return null;
706 }
707
708 protected double [] getReferenceEndKms() {
709
710 StateData sd = getData("reference_end");
711
712 if (sd == null) {
713 logger.warn("no reference end given.");
714 return null;
715 }
716
717 String input = (String)sd.getValue();
718
719 if (input == null | (input = input.trim()).length() == 0) {
720 logger.warn("reference end string is empty.");
721 return null;
722 }
723
724 TDoubleArrayList endKms = new TDoubleArrayList();
725
726 for (String part: input.split("\\s+")) {
727 try {
728 endKms.add(Double.parseDouble(part));
729 }
730 catch (NumberFormatException nfe) {
731 logger.warn("reference end string is not numeric.");
732 }
733 }
734
735 return endKms.toNativeArray();
736 }
648 737
649 public List<Segment> getSegments() { 738 public List<Segment> getSegments() {
650 StateData wqValues = getData("wq_values"); 739 StateData wqValues = getData("wq_values");
651 if (wqValues == null) { 740 if (wqValues == null) {
652 logger.warn("no wq_values given"); 741 logger.warn("no wq_values given");

http://dive4elements.wald.intevation.org