comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/BedHeightsArtifact.java @ 4535:b838d16c629e

Refactor BedHeightArtifacts to provide bed height single values of a range The range of bed height single values is necessary to generate a chart for sounding widths.
author Björn Ricks <bjoern.ricks@intevation.de>
date Thu, 15 Nov 2012 16:20:02 +0100
parents 5b0a545fceef
children cd44d28d0fbc
comparison
equal deleted inserted replaced
4534:1619f80eb62e 4535:b838d16c629e
4 import java.util.List; 4 import java.util.List;
5 5
6 import org.apache.log4j.Logger; 6 import org.apache.log4j.Logger;
7 import org.w3c.dom.Document; 7 import org.w3c.dom.Document;
8 8
9 import de.intevation.artifactdatabase.state.DefaultOutput;
9 import de.intevation.artifactdatabase.state.Facet; 10 import de.intevation.artifactdatabase.state.Facet;
10 import de.intevation.artifactdatabase.state.FacetActivity; 11 import de.intevation.artifactdatabase.state.FacetActivity;
11 import de.intevation.artifactdatabase.state.State;
12 import de.intevation.artifacts.ArtifactFactory; 12 import de.intevation.artifacts.ArtifactFactory;
13 import de.intevation.artifacts.Artifact;
13 import de.intevation.artifacts.CallMeta; 14 import de.intevation.artifacts.CallMeta;
14 import de.intevation.artifacts.common.utils.XMLUtils; 15 import de.intevation.artifacts.common.utils.XMLUtils;
15 import de.intevation.flys.artifacts.model.minfo.BedHeight; 16 import de.intevation.flys.artifacts.model.minfo.BedHeight;
16 import de.intevation.flys.artifacts.model.minfo.BedHeightFacet; 17 import de.intevation.flys.artifacts.model.minfo.BedHeightFacet;
17 import de.intevation.flys.artifacts.model.minfo.BedHeightFactory; 18 import de.intevation.flys.artifacts.model.minfo.BedHeightFactory;
18 import de.intevation.flys.artifacts.states.StaticState; 19 import de.intevation.flys.artifacts.states.StaticState;
20 import de.intevation.flys.model.BedHeightSingle;
21 import de.intevation.flys.model.BedHeightSingleValue;
19 22
20 public class BedHeightsArtifact 23 public class BedHeightsArtifact
21 extends StaticFLYSArtifact 24 extends AbstractStaticStateArtifact
22 { 25 {
23 /** The logger for this class. */ 26 /** The logger for this class. */
24 private static Logger logger = 27 private static Logger logger =
25 Logger.getLogger(BedHeightsArtifact.class); 28 Logger.getLogger(BedHeightsArtifact.class);
26 29
27 private static final String NAME = "bedheights"; 30 private static final String NAME = "bedheights";
31 private static final String STATIC_FACET_NAME = "bedheight";
28 32
29 static { 33 static {
30 // TODO: Move to configuration. 34 // TODO: Move to configuration.
31 FacetActivity.Registry.getInstance() 35 FacetActivity.Registry.getInstance()
32 .register(NAME, FacetActivity.INACTIVE); 36 .register(NAME, FacetActivity.INACTIVE);
37 41
38 /** Data Item name to know whether we are Heighmarks and reveive 42 /** Data Item name to know whether we are Heighmarks and reveive
39 * some data slightly different. */ 43 * some data slightly different. */
40 public static final String DATA_HEIGHT_TYPE = 44 public static final String DATA_HEIGHT_TYPE =
41 "height_marks"; 45 "height_marks";
42
43 /** One and only state to be in. */
44 protected transient State state = null;
45
46 46
47 /** 47 /**
48 * Trivial Constructor. 48 * Trivial Constructor.
49 */ 49 */
50 public BedHeightsArtifact() { 50 public BedHeightsArtifact() {
67 CallMeta callMeta, 67 CallMeta callMeta,
68 Document data) 68 Document data)
69 { 69 {
70 logger.debug("BedHeightsArtifact.setup"); 70 logger.debug("BedHeightsArtifact.setup");
71 71
72 state = new StaticState(STATIC_STATE_NAME);
73
74 if (logger.isDebugEnabled()) { 72 if (logger.isDebugEnabled()) {
75 logger.debug(XMLUtils.toString(data)); 73 logger.debug(XMLUtils.toString(data));
76 } 74 }
77 75
78 List<Facet> fs = new ArrayList<Facet>();
79 String code = getDatacageIDValue(data); 76 String code = getDatacageIDValue(data);
80 77
81 if (code != null) { 78 if (code != null) {
82 String [] parts = code.split("-"); 79 String [] parts = code.split("-");
83 80
84 if (parts.length >= 4) { 81 if (parts.length >= 4) {
85 if (parts[0].equals("bedheight")) { 82 String name = parts[0];
86 addStringData("type", parts[1]); 83 String type = parts[1];
84 String btype = type;
85 int hId = Integer.parseInt(parts[2]);
86 if (name.equals("bedheight")) {
87 addStringData("type", type);
87 addStringData("height_id", parts[2]); 88 addStringData("height_id", parts[2]);
88 addStringData("time", parts[3]); 89 addStringData("time", parts[3]);
89 } 90 }
90 int hId = Integer.parseInt(parts[2]); 91 if (type.equals("singlevalues")) {
91 String bedHName = BedHeightFactory.getHeightName(parts[1], hId); 92 btype = "single";
93 }
92 94
93 Facet bedHFacet = new BedHeightFacet( 95 String bedHName = BedHeightFactory.getHeightName(btype, hId);
94 "bedheight",
95 bedHName);
96 96
97 fs.add(bedHFacet); 97 Facet facet = new BedHeightFacet(
98 addFacets(state.getID(), fs); 98 STATIC_FACET_NAME, bedHName, type);
99
100 ArrayList<Facet> facets = new ArrayList<Facet>(1);
101 facets.add(facet);
102
103 addFacets(STATIC_STATE_NAME, facets);
99 } 104 }
100 } 105 }
101
102 //spawnState();
103 super.setup(identifier, factory, context, callMeta, data); 106 super.setup(identifier, factory, context, callMeta, data);
104 }
105
106 /**
107 * Get a list containing the one and only State.
108 * @param context ignored.
109 * @return list with one and only state.
110 */
111 @Override
112 protected List<State> getStates(Object context) {
113 ArrayList<State> states = new ArrayList<State>();
114 states.add(state);
115 return states;
116 } 107 }
117 108
118 /** 109 /**
119 */ 110 */
120 public BedHeight getHeight() { 111 public BedHeight getHeight() {
121 return BedHeightFactory.getHeight( 112 return BedHeightFactory.getHeight(
122 getDataAsString("type"), 113 getDataAsString("type"),
123 Integer.parseInt(getDataAsString("height_id")), 114 Integer.parseInt(getDataAsString("height_id")),
124 Integer.parseInt(getDataAsString("time"))); 115 Integer.parseInt(getDataAsString("time")));
125 } 116 }
117
118 public List<BedHeightSingleValue> getSingleValues() {
119 logger.debug("getSingleValues");
120 BedHeightSingle single = BedHeightSingle.getBedHeightSingleById(
121 getDataAsInteger("height_id"));
122 return BedHeightSingleValue.getBedHeightSingleValues(single,
123 getDataAsDouble("ld_from"),
124 getDataAsDouble("ld_to"));
125 }
126
127 @Override
128 protected void initStaticState() {
129
130 logger.debug("initStaticState " + getName() + " " + identifier());
131
132 StaticState state = new StaticState(STATIC_STATE_NAME);
133 DefaultOutput output = new DefaultOutput(
134 "general",
135 "general",
136 "image/png",
137 "chart");
138
139 List<Facet> facets = getFacets(STATIC_STATE_NAME);
140 output.addFacets(facets);
141 state.addOutput(output);
142
143 setStaticState(state);
144 }
145
146 @Override
147 protected void initialize(Artifact artifact, Object context, CallMeta meta) {
148 // do not clone facets, etc. from master artifact
149
150 logger.debug("initialize");
151 importData((FLYSArtifact)artifact, "ld_from");
152 importData((FLYSArtifact)artifact, "ld_to");
153
154 logger.debug("ld_from " + getDataAsString("ld_from"));
155 logger.debug("ld_to " + getDataAsString("ld_to"));
156 }
126 } 157 }
127 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : 158 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org