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 :

http://dive4elements.wald.intevation.org