Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java @ 1118:7398280b11a0
Write WSP file for WSPLGEN and add its filepath to the WSPLGEN job.
flys-artifacts/trunk@2625 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 31 Aug 2011 13:19:29 +0000 |
parents | 563e015f0f22 |
children | faca1825818e |
comparison
equal
deleted
inserted
replaced
1117:ea80e652f033 | 1118:7398280b11a0 |
---|---|
1 package de.intevation.flys.artifacts.states; | 1 package de.intevation.flys.artifacts.states; |
2 | 2 |
3 import java.io.File; | 3 import java.io.File; |
4 import java.io.FileNotFoundException; | |
5 import java.io.FileOutputStream; | |
4 import java.io.IOException; | 6 import java.io.IOException; |
5 import java.net.MalformedURLException; | 7 import java.net.MalformedURLException; |
6 import java.util.List; | 8 import java.util.List; |
7 | 9 |
8 import javax.xml.xpath.XPathConstants; | 10 import javax.xml.xpath.XPathConstants; |
33 import de.intevation.flys.model.DGM; | 35 import de.intevation.flys.model.DGM; |
34 import de.intevation.flys.model.Floodplain; | 36 import de.intevation.flys.model.Floodplain; |
35 import de.intevation.flys.model.RiverAxis; | 37 import de.intevation.flys.model.RiverAxis; |
36 | 38 |
37 import de.intevation.flys.artifacts.FLYSArtifact; | 39 import de.intevation.flys.artifacts.FLYSArtifact; |
40 import de.intevation.flys.artifacts.model.CalculationResult; | |
38 import de.intevation.flys.artifacts.model.FacetTypes; | 41 import de.intevation.flys.artifacts.model.FacetTypes; |
42 import de.intevation.flys.artifacts.model.WQKms; | |
39 import de.intevation.flys.artifacts.model.WSPLGENFacet; | 43 import de.intevation.flys.artifacts.model.WSPLGENFacet; |
40 import de.intevation.flys.artifacts.model.WSPLGENJob; | 44 import de.intevation.flys.artifacts.model.WSPLGENJob; |
45 import de.intevation.flys.artifacts.states.DefaultState.ComputeType; | |
46 import de.intevation.flys.exports.WstWriter; | |
41 import de.intevation.flys.utils.FLYSUtils; | 47 import de.intevation.flys.utils.FLYSUtils; |
42 import de.intevation.flys.utils.GeometryUtils; | 48 import de.intevation.flys.utils.GeometryUtils; |
43 | 49 |
44 | 50 |
45 public class FloodMapState | 51 public class FloodMapState |
55 | 61 |
56 | 62 |
57 public static final String XPATH_SHAPEFILE_DIR = | 63 public static final String XPATH_SHAPEFILE_DIR = |
58 "/artifact-database/floodmap/shapefile-path/@value"; | 64 "/artifact-database/floodmap/shapefile-path/@value"; |
59 | 65 |
66 public static final String WSP_ARTIFACT_UUID = "uesk.wsp.artifact"; | |
67 | |
68 public static final String WINFO_WSP_STATE_ID = "state.winfo.waterlevel"; | |
69 | |
60 public static final String WSPLGEN_PARAMETER_FILE = "wsplgen.par"; | 70 public static final String WSPLGEN_PARAMETER_FILE = "wsplgen.par"; |
61 public static final String WSPLGEN_BARRIERS_LINES = "barrier_lines.shp"; | 71 public static final String WSPLGEN_BARRIERS_LINES = "barrier_lines.shp"; |
62 public static final String WSPLGEN_BARRIERS_POLY = "barrier_polygons.shp"; | 72 public static final String WSPLGEN_BARRIERS_POLY = "barrier_polygons.shp"; |
63 public static final String WSPLGEN_AXIS = "axis.shp"; | 73 public static final String WSPLGEN_AXIS = "axis.shp"; |
64 public static final String WSPLGEN_QPS = "qps.shp"; | 74 public static final String WSPLGEN_QPS = "qps.shp"; |
65 public static final String WSPLGEN_FLOODPLAIN = "talaue.shp"; | 75 public static final String WSPLGEN_FLOODPLAIN = "talaue.shp"; |
76 public static final String WSPLGEN_WSP_FILE = "waterlevel.txt"; | |
77 public static final String WSPLGEN_OUTPUT_FILE = "wsplgen.shp"; | |
66 | 78 |
67 public static final int WSPLGEN_DEFAULT_OUTPUT = 0; | 79 public static final int WSPLGEN_DEFAULT_OUTPUT = 0; |
68 | 80 |
69 | 81 |
70 | 82 |
83 if (artifactDir == null) { | 95 if (artifactDir == null) { |
84 logger.error("Could not create directory for WSPLGEN results!"); | 96 logger.error("Could not create directory for WSPLGEN results!"); |
85 return null; | 97 return null; |
86 } | 98 } |
87 | 99 |
88 WSPLGENJob job = prepareWSPLGENJob(artifact, artifactDir); | 100 WSPLGENJob job = prepareWSPLGENJob(artifact, artifactDir, context); |
89 | 101 |
90 if (job == null) { | 102 if (job == null) { |
91 if (KEEP_ARTIFACT_DIR.equals("false")) { | 103 if (KEEP_ARTIFACT_DIR.equals("false")) { |
92 removeDirectory(artifact); | 104 removeDirectory(artifact); |
93 } | 105 } |
164 } | 176 } |
165 | 177 |
166 | 178 |
167 protected WSPLGENJob prepareWSPLGENJob( | 179 protected WSPLGENJob prepareWSPLGENJob( |
168 FLYSArtifact artifact, | 180 FLYSArtifact artifact, |
169 File artifactDir | 181 File artifactDir, |
182 CallContext context | |
170 ) { | 183 ) { |
171 logger.debug("FloodMapState.prepareWSPLGENJob"); | 184 logger.debug("FloodMapState.prepareWSPLGENJob"); |
172 | 185 |
173 WSPLGENJob job = new WSPLGENJob(); | 186 WSPLGENJob job = new WSPLGENJob(); |
174 File paraFile = new File(artifactDir, WSPLGEN_PARAMETER_FILE); | 187 File paraFile = new File(artifactDir, WSPLGEN_PARAMETER_FILE); |
181 setLine(artifact, artifactDir, job); | 194 setLine(artifact, artifactDir, job); |
182 setAxis(artifact, artifactDir, job); | 195 setAxis(artifact, artifactDir, job); |
183 setPro(artifact, artifactDir, job); | 196 setPro(artifact, artifactDir, job); |
184 setDgm(artifact, job); | 197 setDgm(artifact, job); |
185 setArea(artifact, artifactDir, job); | 198 setArea(artifact, artifactDir, job); |
199 setOutFile(artifact, job); | |
200 setWsp(artifact, context, artifactDir, job); // WSP | |
186 | 201 |
187 // TODO | 202 // TODO |
188 // setWsp(artifact, job); // WSP | |
189 // setWspTag(artifact, job); | 203 // setWspTag(artifact, job); |
190 // setOutFile(artifact, job); | |
191 | 204 |
192 try { | 205 try { |
193 job.toFile(paraFile); | 206 job.toFile(paraFile); |
194 | 207 |
195 return job; | 208 return job; |
473 } | 486 } |
474 catch (IOException ioe) { | 487 catch (IOException ioe) { |
475 logger.error("Error while writing shapefile: " + ioe.getMessage()); | 488 logger.error("Error while writing shapefile: " + ioe.getMessage()); |
476 } | 489 } |
477 } | 490 } |
491 | |
492 | |
493 protected void setOutFile(FLYSArtifact artifact, WSPLGENJob job) { | |
494 job.setOutFile(WSPLGEN_OUTPUT_FILE); | |
495 } | |
496 | |
497 | |
498 protected void setWsp( | |
499 FLYSArtifact artifact, | |
500 CallContext context, | |
501 File dir, | |
502 WSPLGENJob job) | |
503 { | |
504 logger.debug("FloodMapState.setWsp"); | |
505 | |
506 String otherArtifact = artifact.getDataAsString(WSP_ARTIFACT_UUID); | |
507 FLYSArtifact src = otherArtifact != null | |
508 ? FLYSUtils.getArtifact(otherArtifact, context) | |
509 : artifact; | |
510 | |
511 CalculationResult rawData = (CalculationResult) src.compute( | |
512 context, | |
513 null, | |
514 WINFO_WSP_STATE_ID, | |
515 ComputeType.ADVANCE, | |
516 false); | |
517 | |
518 if (rawData == null) { | |
519 logger.warn("No WST data found!"); | |
520 return; | |
521 } | |
522 | |
523 WQKms[] data = (WQKms[]) rawData.getData(); | |
524 WstWriter writer = new WstWriter(data.length); | |
525 | |
526 // TODO REMOVE job.setWspTag(...) This is only used until the user is | |
527 // able to select the WSP column himself! | |
528 boolean writeWspTag = true; | |
529 | |
530 double[] buf = new double[4]; | |
531 for (WQKms wqkms: data) { | |
532 logger.debug("Add WST column: " + wqkms.getName()); | |
533 writer.addColumn(wqkms.getName()); | |
534 | |
535 if (writeWspTag) { | |
536 job.setWspTag(wqkms.getName()); | |
537 writeWspTag = false; | |
538 } | |
539 | |
540 for (int i = 0, num = wqkms.size(); i < num; i++) { | |
541 wqkms.get(i, buf); | |
542 writer.add(buf); | |
543 } | |
544 } | |
545 | |
546 FileOutputStream fout = null; | |
547 | |
548 try { | |
549 File wspFile = new File(dir, WSPLGEN_WSP_FILE); | |
550 fout = new FileOutputStream(wspFile); | |
551 | |
552 writer.write(fout); | |
553 | |
554 job.setWsp(wspFile.getAbsolutePath()); | |
555 } | |
556 catch (FileNotFoundException fnfe) { | |
557 logger.warn("Error while writing wsp file: " + fnfe.getMessage()); | |
558 } | |
559 finally { | |
560 if (fout != null) { | |
561 try { | |
562 fout.close(); | |
563 } | |
564 catch (IOException ioe) { /* do nothing */ } | |
565 } | |
566 } | |
567 } | |
478 } | 568 } |
479 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : | 569 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : |