comparison gnv-artifacts/src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java @ 1070:7096a2e13676

Added functionality to publish the the mbr of the generated layer to the client. gnv-artifacts/trunk@1166 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Tim Englich <tim.englich@intevation.de>
date Mon, 07 Jun 2010 14:42:42 +0000
parents 04967dc9c83f
children faae3fc7b792
comparison
equal deleted inserted replaced
1069:0d15e515f88d 1070:7096a2e13676
9 9
10 import org.apache.log4j.Logger; 10 import org.apache.log4j.Logger;
11 import org.w3c.dom.Document; 11 import org.w3c.dom.Document;
12 import org.w3c.dom.Node; 12 import org.w3c.dom.Node;
13 13
14 import com.vividsolutions.jts.geom.Envelope;
14 import com.vividsolutions.jts.geom.Geometry; 15 import com.vividsolutions.jts.geom.Geometry;
15 import com.vividsolutions.jts.io.ParseException; 16 import com.vividsolutions.jts.io.ParseException;
16 import com.vividsolutions.jts.io.WKTReader; 17 import com.vividsolutions.jts.io.WKTReader;
17 18
18 import de.intevation.artifactdatabase.Config; 19 import de.intevation.artifactdatabase.Config;
233 /** 234 /**
234 * Fetches the Data from the Databasebackend. 235 * Fetches the Data from the Databasebackend.
235 * 236 *
236 * @return the resultdata. 237 * @return the resultdata.
237 */ 238 */
238 protected Collection<Result> fetchData(LayerMetaData layerMetaData){ 239 protected Collection<Result> fetchData(LayerMetaData layerMetaData, Envelope mbr){
239 log.debug("LayerOutputState.fetchData"); 240 log.debug("LayerOutputState.fetchData");
240 Collection<Result> data = null; 241 Collection<Result> data = null;
241 QueryExecutor queryExecutor = QueryExecutorFactory.getInstance() 242 QueryExecutor queryExecutor = QueryExecutorFactory.getInstance()
242 .getQueryExecutor(); 243 .getQueryExecutor();
243 try { 244 try {
244 data = queryExecutor.executeQuery(dataQueryID, 245 data = queryExecutor.executeQuery(dataQueryID,
245 layerMetaData.getQueryValues()); 246 layerMetaData.getQueryValues());
246 if (data != null && layerMetaData.getGeometryWKT() != null){ 247 if (data != null){
247 WKTReader wktReader = new WKTReader(); 248 WKTReader wktReader = new WKTReader();
248 Geometry border = wktReader.read(layerMetaData.getGeometryWKT()); 249 Geometry border = null;
250 if (layerMetaData.getGeometryWKT() != null){
251 border = wktReader.read(layerMetaData.getGeometryWKT());
252 }
249 Iterator<Result> dataIt = data.iterator(); 253 Iterator<Result> dataIt = data.iterator();
250 while (dataIt.hasNext()){ 254 while (dataIt.hasNext()){
251 // Trim the Geometries using the 255 // Trim the Geometries using the
252 // Geometry if one is available. 256 // Geometry if one is available.
253 Result current = dataIt.next(); 257 Result current = dataIt.next();
258 } catch (Exception e) { 262 } catch (Exception e) {
259 log.error("Error parsing Geometry "+ currentWKT); 263 log.error("Error parsing Geometry "+ currentWKT);
260 log.error(e,e); 264 log.error(e,e);
261 } 265 }
262 if (currentGeometry != null){ 266 if (currentGeometry != null){
263 Geometry newGeometry = currentGeometry.intersection(border); 267 if (border != null){
264 current.addColumnValue(0, newGeometry.toText()); 268 currentGeometry = currentGeometry.intersection(border);
269 current.addColumnValue(0, currentGeometry.toText());
270 }
271 if (mbr.isNull()){
272 mbr.init(currentGeometry.getEnvelopeInternal());
273 }else{
274 mbr.expandToInclude(currentGeometry.getEnvelopeInternal());
275 }
265 } 276 }
266 } 277 }
267 } 278 }
268 } catch (QueryException e) { 279 } catch (QueryException e) {
269 log.error(e,e); 280 log.error(e,e);
473 if (!this.createShapeDir(baseDir, uuid)){ 484 if (!this.createShapeDir(baseDir, uuid)){
474 return; 485 return;
475 } 486 }
476 Iterator<LayerMetaData> it = layerMetaData.iterator(); 487 Iterator<LayerMetaData> it = layerMetaData.iterator();
477 int i = 1; 488 int i = 1;
489 Envelope mbr = new Envelope();
478 while(it.hasNext()){ 490 while(it.hasNext()){
479 LayerMetaData lmd = it.next(); 491 LayerMetaData lmd = it.next();
480 Collection<Result> data = this.fetchData(lmd); 492 Collection<Result> data = this.fetchData(lmd, mbr);
481 p = writeToShapeFile(uuid, data, callContext,lmd.getGeometryType(),i++); 493 p = writeToShapeFile(uuid, data, callContext,lmd.getGeometryType(),i++);
482 } 494 }
483 if (p != null) { 495 if (p != null) {
484 FileUtils.createZipArchive(new File(p), output); 496 FileUtils.createZipArchive(new File(p), output);
485 } 497 }
629 if (prefix == null) { 641 if (prefix == null) {
630 prefix = uuid; 642 prefix = uuid;
631 } 643 }
632 644
633 int layerNumber = 0; 645 int layerNumber = 0;
646 Envelope mbr = new Envelope();
634 while (it.hasNext()){ 647 while (it.hasNext()){
635 LayerMetaData lmd = it.next(); 648 LayerMetaData lmd = it.next();
636 layerNumber ++; 649 layerNumber ++;
637 650
638 String geometryType = lmd.getGeometryType(); 651 String geometryType = lmd.getGeometryType();
639 String templateId = lmd.getTemplateID(); 652 String templateId = lmd.getTemplateID();
640 653
641 ExclusiveExec.UniqueKey key = ExclusiveExec.INSTANCE.acquire(uuid); 654 ExclusiveExec.UniqueKey key = ExclusiveExec.INSTANCE.acquire(uuid);
642 try{ 655 try{
643 Collection<Result> results = this.fetchData(lmd); 656 Collection<Result> results = this.fetchData(lmd,mbr);
644 if (results != null && writeToShapeFile(uuid, results, 657 if (results != null && writeToShapeFile(uuid, results,
645 callContext, 658 callContext,
646 geometryType, 659 geometryType,
647 layerNumber) != null) { 660 layerNumber) != null) {
648 String name = getLayerName(uuid, layerNumber); 661 String name = getLayerName(uuid, layerNumber);
661 } 674 }
662 675
663 success = true; 676 success = true;
664 677
665 if (meta != null && !it.hasNext()) { 678 if (meta != null && !it.hasNext()) {
679 MetaWriter.insertMbr(mbr, "EPSG:4326",meta);
666 MetaWriter.writeMetaFile(path, meta); 680 MetaWriter.writeMetaFile(path, meta);
667 MapfileGenerator.getInstance().update(); 681 MapfileGenerator.getInstance().update();
668 return meta; 682 return meta;
669 } 683 }
670 }finally{ 684 }finally{
671 ExclusiveExec.INSTANCE.release(key); 685 ExclusiveExec.INSTANCE.release(key);
672 } 686 }
673 } 687 }
688
674 return document; 689 return document;
675 } 690 }
676 finally { 691 finally {
677 if (!success && createdDir) { 692 if (!success && createdDir) {
678 FileUtils.deleteRecursive(shapeDir); 693 FileUtils.deleteRecursive(shapeDir);

http://dive4elements.wald.intevation.org