annotate flys-artifacts/src/main/java/de/intevation/flys/artifacts/CrossSectionArtifact.java @ 4655:cd44d28d0fbc

Move the access to artifact data to the Access object Use BedHeightAccess class to receive the data from the artifact. This abstracts the data access from the actual artifact.
author Björn Ricks <bjoern.ricks@intevation.de>
date Tue, 11 Dec 2012 09:44:04 +0100
parents a2735a4bf75e
children c7133c1f8ede
rev   line source
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.artifacts;
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
2
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
3 import java.util.ArrayList;
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
4 import java.util.List;
2120
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
5 import java.util.NavigableMap;
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
6
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
7 import org.apache.log4j.Logger;
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
8
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
9 import org.w3c.dom.Document;
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
10
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
11 import de.intevation.artifacts.Artifact;
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
12 import de.intevation.artifacts.ArtifactFactory;
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
13 import de.intevation.artifacts.CallMeta;
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
14
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
15 import de.intevation.flys.artifacts.model.CrossSectionFacet;
2120
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
16 import de.intevation.flys.artifacts.model.FastCrossSectionLineFactory;
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
17
2126
d626ae185305 Use the fast cross section lines from backend now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2120
diff changeset
18 import de.intevation.flys.model.FastCrossSectionLine;
d626ae185305 Use the fast cross section lines from backend now.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2120
diff changeset
19
1967
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
20 import de.intevation.flys.model.CrossSection;
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
21 import de.intevation.flys.model.CrossSectionLine;
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
22 import de.intevation.flys.artifacts.model.CrossSectionFactory;
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
23
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
24 import de.intevation.flys.artifacts.states.StaticState;
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
25
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
26 import de.intevation.artifactdatabase.state.Facet;
3556
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
27 import de.intevation.artifactdatabase.state.FacetActivity;
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
28 import de.intevation.artifactdatabase.state.State;
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
29
2037
986820795c3b Better initialize cross_section.km of cross-section-artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2036
diff changeset
30 import de.intevation.flys.utils.FLYSUtils;
986820795c3b Better initialize cross_section.km of cross-section-artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2036
diff changeset
31
2120
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
32 import de.intevation.flys.artifacts.services.CrossSectionKMService;
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
33
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
34
1985
07b176b14205 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1982
diff changeset
35 /**
07b176b14205 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1982
diff changeset
36 * Artifact describing a cross-section.
07b176b14205 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1982
diff changeset
37 */
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
38 public class CrossSectionArtifact extends StaticFLYSArtifact {
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
39
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
40 /** Name of Artifact. */
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
41 public static final String CS_ARTIFACT_NAME = "cross_section";
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
42
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
43 /** Name of state. */
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
44 public static final String STATIC_STATE_NAME = "state.cross_section";
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
45
1967
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
46 /** Name of data item keeping the position. */
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
47 public static final String DATA_KM = "cross_section.km";
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
48
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
49 /** Name of data item keeping the database id of this c.s.. */
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
50 public static final String DATA_DBID = "cross_section.dbid";
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
51
2040
cd9bcdcf6597 Make only newest CrossSection intially active in diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2037
diff changeset
52 /** Name of data item flagging whether we think that we are master. */
1967
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
53 public static final String DATA_IS_MASTER = "cross_section.master?";
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
54
2040
cd9bcdcf6597 Make only newest CrossSection intially active in diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2037
diff changeset
55 /** Name of data item flagging whether we are the newest. */
cd9bcdcf6597 Make only newest CrossSection intially active in diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2037
diff changeset
56 public static final String DATA_IS_NEWEST = "cross_section.newest?";
cd9bcdcf6597 Make only newest CrossSection intially active in diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2037
diff changeset
57
3272
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
58 /** Name of data item storing the previous possible km. */
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
59 public static final String DATA_PREV_KM = "cross_section.km.previous";
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
60
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
61 /** Name of data item storing the next possible km. */
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
62 public static final String DATA_NEXT_KM = "cross_section.km.next";
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
63
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
64 /** Own logger. */
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
65 private static final Logger logger =
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
66 Logger.getLogger(CrossSectionArtifact.class);
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
67
3556
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
68 static {
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
69 // TODO: Move to configuration.
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
70 FacetActivity.Registry.getInstance().register(
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
71 CS_ARTIFACT_NAME,
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
72 new FacetActivity() {
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
73 @Override
3558
c3cd414982fe Adjusted to follow the Chain-of-responsibility pattern in figuring out facet activities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3556
diff changeset
74 public Boolean isInitialActive(
3556
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
75 Artifact artifact,
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
76 Facet facet,
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
77 String outputName
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
78 ) {
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
79 if (artifact instanceof FLYSArtifact) {
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
80 FLYSArtifact flys = (FLYSArtifact)artifact;
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
81 String data = flys.getDataAsString(DATA_IS_NEWEST);
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
82 return data != null && data.equals("1");
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
83 }
3558
c3cd414982fe Adjusted to follow the Chain-of-responsibility pattern in figuring out facet activities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3556
diff changeset
84 return null;
3556
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
85 }
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
86 });
afc7bfb4800b Use the new infrastructure to figure out if a facet should
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3405
diff changeset
87 }
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
88
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
89 /** Return given name. */
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
90 @Override
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
91 public String getName() {
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
92 return CS_ARTIFACT_NAME;
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
93 }
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
94
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
95
1985
07b176b14205 Cosmetics, docs.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1982
diff changeset
96 /** Store ids, create a CrossSectionFacet. */
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
97 @Override
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
98 public void setup(
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
99 String identifier,
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
100 ArtifactFactory factory,
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
101 Object context,
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
102 CallMeta callMeta,
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
103 Document data)
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
104 {
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
105 logger.info("CrossSectionArtifact.setup");
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
106
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
107 super.setup(identifier, factory, context, callMeta, data);
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
108
2741
0251393f037c Refactor usage of now static xpath, other artifacts will follow in later commits.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2740
diff changeset
109 String ids = getDatacageIDValue(data);
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
110
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
111 if (ids != null && ids.length() > 0) {
1967
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
112 addStringData(DATA_DBID, ids);
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
113 logger.debug("CrossSectionArtifacts db-id: " + ids);
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
114 }
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
115 else {
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
116 throw new IllegalArgumentException("No attribute 'ids' found!");
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
117 }
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
118
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
119 List<Facet> fs = new ArrayList<Facet>();
2120
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
120 CrossSection cs = CrossSectionFactory.getCrossSection(
3405
b0ba96bbf01d Use Integer.parseInt() instead of Integer.valueOf() + Autounboxing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3284
diff changeset
121 Integer.parseInt(ids));
2120
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
122
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
123 List<CrossSectionLine> csls = cs.getLines();
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
124 if (!csls.isEmpty()) {
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
125 CrossSectionLine csl = csls.get(0);
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
126 // Find min-km of cross sections,
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
127 // then set DATA_KM to min(DATA_KM, minCross).
3272
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
128 double dataKm = Double.valueOf(getDataAsString(DATA_KM));
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
129 if (dataKm < csl.getKm().doubleValue()) {
2036
c03aeb0cf46b Initialize km of cross-section artifact to a better value (not all cases covered, yet).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1985
diff changeset
130 addStringData(DATA_KM, csl.getKm().toString());
c03aeb0cf46b Initialize km of cross-section artifact to a better value (not all cases covered, yet).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1985
diff changeset
131 }
c03aeb0cf46b Initialize km of cross-section artifact to a better value (not all cases covered, yet).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1985
diff changeset
132 }
1971
741d2067cfe1 Given CrossSections a name, let crosssection facets survive.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1967
diff changeset
133 fs.add(new CrossSectionFacet(0, cs.getDescription()));
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
134
3272
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
135 // Find out if we are newest and become master if so.
2040
cd9bcdcf6597 Make only newest CrossSection intially active in diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2037
diff changeset
136 boolean isNewest = CrossSectionFactory.isNewest(cs);
cd9bcdcf6597 Make only newest CrossSection intially active in diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2037
diff changeset
137 String newString = (isNewest) ? "1" : "0";
cd9bcdcf6597 Make only newest CrossSection intially active in diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2037
diff changeset
138 addStringData(DATA_IS_NEWEST, newString);
cd9bcdcf6597 Make only newest CrossSection intially active in diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2037
diff changeset
139 addStringData(DATA_IS_MASTER, newString);
cd9bcdcf6597 Make only newest CrossSection intially active in diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2037
diff changeset
140
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
141 StaticState state = (StaticState) getCurrentState(context);
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
142
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
143 if (!fs.isEmpty()) {
4497
a2735a4bf75e Change facets member variable to private
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3558
diff changeset
144 addFacets(getCurrentStateId(), fs);
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
145 }
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
146 }
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
147
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
148
2036
c03aeb0cf46b Initialize km of cross-section artifact to a better value (not all cases covered, yet).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1985
diff changeset
149 /** Copy km where master-artifact "starts". */
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
150 @Override
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
151 protected void initialize(
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
152 Artifact artifact,
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
153 Object context,
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
154 CallMeta callMeta)
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
155 {
2153
734d5f5e55c0 'New chart' for cross sections.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 2126
diff changeset
156 FLYSArtifact winfo = (FLYSArtifact) artifact;
2037
986820795c3b Better initialize cross_section.km of cross-section-artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2036
diff changeset
157 double[] range = FLYSUtils.getKmRange(winfo);
986820795c3b Better initialize cross_section.km of cross-section-artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2036
diff changeset
158 double min = 0.0f;
986820795c3b Better initialize cross_section.km of cross-section-artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2036
diff changeset
159 if (range != null && range.length > 0) {
986820795c3b Better initialize cross_section.km of cross-section-artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2036
diff changeset
160 min = range[0];
986820795c3b Better initialize cross_section.km of cross-section-artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2036
diff changeset
161 }
986820795c3b Better initialize cross_section.km of cross-section-artifacts.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2036
diff changeset
162 this.addStringData(DATA_KM, Double.toString(min));
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
163 }
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
164
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
165
3284
d9af29a4bb85 Various cosmetic doc fixes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 3272
diff changeset
166 /** Returns next possible km for a cross-section. */
3272
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
167 public Double getNextKm() {
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
168 return getDataAsDouble(DATA_NEXT_KM);
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
169 }
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
170
3284
d9af29a4bb85 Various cosmetic doc fixes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 3272
diff changeset
171
d9af29a4bb85 Various cosmetic doc fixes.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 3272
diff changeset
172 /** Returns previous possible km for a cross-section. */
3272
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
173 public Double getPrevKm() {
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
174 return getDataAsDouble(DATA_PREV_KM);
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
175 }
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
176
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
177
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
178 /**
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
179 * Create and return a new StaticState with charting output.
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
180 */
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
181 @Override
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
182 public State getCurrentState(Object cc) {
4497
a2735a4bf75e Change facets member variable to private
Björn Ricks <bjoern.ricks@intevation.de>
parents: 3558
diff changeset
183 final List<Facet> fs = getFacets(getCurrentStateId());
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
184
1971
741d2067cfe1 Given CrossSections a name, let crosssection facets survive.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1967
diff changeset
185 StaticState state = new StaticState(STATIC_STATE_NAME) {
1982
8afd6a9bb244 Cosmetics.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1973
diff changeset
186 @Override
1971
741d2067cfe1 Given CrossSections a name, let crosssection facets survive.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1967
diff changeset
187 public Object staticCompute(List<Facet> facets) {
741d2067cfe1 Given CrossSections a name, let crosssection facets survive.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1967
diff changeset
188 if (facets != null) {
741d2067cfe1 Given CrossSections a name, let crosssection facets survive.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1967
diff changeset
189 facets.addAll(fs);
741d2067cfe1 Given CrossSections a name, let crosssection facets survive.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1967
diff changeset
190 }
741d2067cfe1 Given CrossSections a name, let crosssection facets survive.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1967
diff changeset
191 return null;
741d2067cfe1 Given CrossSections a name, let crosssection facets survive.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1967
diff changeset
192 }
741d2067cfe1 Given CrossSections a name, let crosssection facets survive.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1967
diff changeset
193 };
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
194
1967
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
195 state.addDefaultChartOutput("cross_section", fs);
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
196
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
197 return state;
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
198 }
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
199
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
200
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
201 /**
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
202 * Get a list containing the one and only State.
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
203 * @param context ignored.
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
204 * @return list with one and only state.
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
205 */
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
206 @Override
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
207 protected List<State> getStates(Object context) {
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
208 ArrayList<State> states = new ArrayList<State>();
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
209 states.add(getCurrentState(context));
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
210
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
211 return states;
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
212 }
1967
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
213
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
214 // TODO all data access needs proper caching.
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
215
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
216 /**
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
217 * Get a DataItem casted to int (0 if fails).
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
218 */
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
219 public int getDataAsIntNull(String dataName) {
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
220 String val = getDataAsString(dataName);
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
221 try {
3405
b0ba96bbf01d Use Integer.parseInt() instead of Integer.valueOf() + Autounboxing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3284
diff changeset
222 return Integer.parseInt(val);
1967
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
223 }
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
224 catch (NumberFormatException e) {
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
225 logger.warn("Could not get data " + dataName + " as int", e);
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
226 return 0;
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
227 }
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
228 }
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
229
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
230
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
231 /** Returns database-id of cross-section (from data). */
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
232 protected int getDBID() {
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
233 return getDataAsIntNull(DATA_DBID);
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
234 }
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
235
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
236
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
237 /**
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
238 * Return position (km) from data, 0 if not found.
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
239 */
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
240 protected double getKm() {
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
241 String val = getDataAsString(DATA_KM);
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
242 try {
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
243 return Double.valueOf(val);
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
244 }
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
245 catch (NumberFormatException e) {
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
246 logger.warn("Could not get data " + DATA_KM + " as double", e);
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
247 return 0;
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
248 }
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
249 }
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
250
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
251
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
252 /** Returns true if artifact is set to be a "master" (other facets will
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
253 * refer to this). */
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
254 public boolean isMaster() {
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
255 return !getDataAsString(DATA_IS_MASTER).equals("0");
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
256 }
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
257
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
258
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
259 /**
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
260 * Get points of Profile of cross section at given kilometer.
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
261 *
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
262 * @return an array holding coordinates of points of profile (
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
263 * in the form {{x1, x2} {y1, y2}} ).
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
264 */
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
265 public double [][] getCrossSectionData() {
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
266 logger.info("getCrossSectionData() for cross_section.km "
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
267 + getDataAsString(DATA_KM));
2120
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
268 FastCrossSectionLine line = searchCrossSectionLine();
1967
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
269
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
270 return line != null
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
271 ? line.fetchCrossSectionProfile()
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
272 : null;
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
273 }
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
274
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
275
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
276 /**
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
277 * Get CrossSectionLine spatially closest to what is specified in the data
2678
d35e37b6a211 Fix issue620: synchron navigation at impossible km.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2153
diff changeset
278 * "cross_section.km", null if considered too far.
1967
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
279 *
3272
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
280 * It also adds DataItems to store the next and previous (numerically)
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
281 * values at which cross-section data was recorded.
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
282 *
2678
d35e37b6a211 Fix issue620: synchron navigation at impossible km.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2153
diff changeset
283 * @return CrossSectionLine closest to "cross_section.km", might be null
d35e37b6a211 Fix issue620: synchron navigation at impossible km.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2153
diff changeset
284 * if considered too far.
1967
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
285 */
2120
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
286 public FastCrossSectionLine searchCrossSectionLine() {
2678
d35e37b6a211 Fix issue620: synchron navigation at impossible km.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2153
diff changeset
287 double TOO_FAR = 1d;
2120
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
288 CrossSection crossSection = CrossSectionFactory
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
289 .getCrossSection(getDBID());
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
290
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
291 if (logger.isDebugEnabled()) {
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
292 logger.debug("dbid " + getDBID() + " : " + crossSection);
1967
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
293 }
2120
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
294
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
295 NavigableMap<Double, Integer> kms = CrossSectionKMService
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
296 .getKms(crossSection.getId());
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
297
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
298 Double wishKM = getKm();
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
299
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
300 Double floor = kms.floorKey(wishKM);
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
301 Double ceil = kms.ceilingKey(wishKM);
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
302
3272
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
303 Double nextKm;
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
304 Double prevKm;
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
305
2120
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
306 double floorD = floor != null
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
307 ? Math.abs(floor - wishKM)
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
308 : Double.MAX_VALUE;
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
309
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
310 double ceilD = ceil != null
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
311 ? Math.abs(ceil - wishKM)
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
312 : Double.MAX_VALUE;
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
313
3272
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
314 double km;
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
315 if (floorD < ceilD) {
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
316 km = floor;
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
317 }
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
318 else {
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
319 km = ceil;
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
320 }
2120
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
321
2678
d35e37b6a211 Fix issue620: synchron navigation at impossible km.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2153
diff changeset
322 // If we are too far from the wished km, return null.
d35e37b6a211 Fix issue620: synchron navigation at impossible km.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2153
diff changeset
323 if (Math.abs(km - wishKM) > TOO_FAR) {
d35e37b6a211 Fix issue620: synchron navigation at impossible km.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2153
diff changeset
324 return null;
d35e37b6a211 Fix issue620: synchron navigation at impossible km.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2153
diff changeset
325 }
d35e37b6a211 Fix issue620: synchron navigation at impossible km.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2153
diff changeset
326
3272
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
327 // Store next and previous km.
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
328 nextKm = kms.higherKey(km);
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
329 prevKm = kms.lowerKey(km);
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
330
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
331 if (prevKm == null) {
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
332 prevKm = -1d;
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
333 }
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
334 if (nextKm == null) {
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
335 nextKm = -1d;
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
336 }
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
337
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
338 addStringData(DATA_PREV_KM, prevKm.toString());
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
339 addStringData(DATA_NEXT_KM, nextKm.toString());
31168ac9c7e7 Partial fix for issue694 (heightmarks snap to nearest cross section).
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 2763
diff changeset
340
2120
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
341 return FastCrossSectionLineFactory
f021080cb409 Use improved caching for cross section lines data.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2040
diff changeset
342 .getCrossSectionLine(crossSection, km);
1967
27bb2e24f7f8 Preparations for better CrossSection diagrams.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1964
diff changeset
343 }
1964
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
344 }
85e442933e6d New CrossSectionArtifact.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents:
diff changeset
345 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org