# HG changeset patch # User Ingo Weinzierl # Date 1317127242 0 # Node ID aaf8d32f85bd9988151722046d7956cb45607056 # Parent 74142aa5d938faaa3c66c6c368738c173534e988 Improved Facet creation for floodmaps - WSPLGEN and barriers Facets are only created if the calculation was successful. flys-artifacts/trunk@2837 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 74142aa5d938 -r aaf8d32f85bd flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Tue Sep 27 11:33:45 2011 +0000 +++ b/flys-artifacts/ChangeLog Tue Sep 27 12:40:42 2011 +0000 @@ -1,3 +1,22 @@ +2011-09-27 Ingo Weinzierl + + * src/main/java/de/intevation/flys/wsplgen/FacetCreator.java: New. Code + from FloodMapState moved to its own class with the intent, to use it in + classes different from FloodMapState. + + * src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java: + Removed the inner class FacetCreator. + + * src/main/java/de/intevation/flys/artifacts/model/WSPLGENJob.java: Stores + an instance of FacetCreator. + NOTE: Maybe we should move the WSPLGEN parameters into an own class + which might be serializable. + + * src/main/java/de/intevation/flys/wsplgen/JobExecutor.java: Use the + FacetCreator instance stored in the WSPLGENJob to create a new WSPLGEN + facet if the calculation was successfully (without errors). Finally, the + facets of FacetCreator are added to the Facet list of the FLYSArtifacts. + 2011-09-27 Ingo Weinzierl * src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java: diff -r 74142aa5d938 -r aaf8d32f85bd flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WSPLGENJob.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WSPLGENJob.java Tue Sep 27 11:33:45 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/WSPLGENJob.java Tue Sep 27 12:40:42 2011 +0000 @@ -11,6 +11,7 @@ import de.intevation.artifacts.CallContext; import de.intevation.flys.artifacts.FLYSArtifact; +import de.intevation.flys.wsplgen.FacetCreator; public class WSPLGENJob { @@ -25,6 +26,8 @@ protected WSPLGENCalculation calculation; + protected FacetCreator facetCreator; + protected File workingDir; protected String dgm; @@ -52,13 +55,15 @@ public WSPLGENJob( FLYSArtifact flys, File workingDir, + FacetCreator facetCreator, CallContext context, WSPLGENCalculation calculation) { - this.artifact = flys; - this.workingDir = workingDir; - this.callContext = context; - this.calculation = calculation; + this.artifact = flys; + this.workingDir = workingDir; + this.facetCreator = facetCreator; + this.callContext = context; + this.calculation = calculation; out = -1; start = Double.NaN; @@ -81,6 +86,11 @@ } + public FacetCreator getFacetCreator() { + return facetCreator; + } + + public WSPLGENCalculation getCalculation() { return calculation; } diff -r 74142aa5d938 -r aaf8d32f85bd flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java Tue Sep 27 11:33:45 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/FloodMapState.java Tue Sep 27 12:40:42 2011 +0000 @@ -39,7 +39,6 @@ import de.intevation.flys.artifacts.model.CalculationResult; import de.intevation.flys.artifacts.model.FacetTypes; import de.intevation.flys.artifacts.model.WQKms; -import de.intevation.flys.artifacts.model.WMSLayerFacet; import de.intevation.flys.artifacts.model.WSPLGENCalculation; import de.intevation.flys.artifacts.model.WSPLGENJob; import de.intevation.flys.artifacts.model.WSPLGENReportFacet; @@ -48,7 +47,7 @@ import de.intevation.flys.exports.WstWriter; import de.intevation.flys.utils.FLYSUtils; import de.intevation.flys.utils.GeometryUtils; -import de.intevation.flys.utils.MapfileGenerator; +import de.intevation.flys.wsplgen.FacetCreator; import de.intevation.flys.wsplgen.JobObserver; import de.intevation.flys.wsplgen.Scheduler; @@ -78,130 +77,10 @@ public static final String WSPLGEN_WSP_FILE = "waterlevel.wst"; public static final String WSPLGEN_OUTPUT_FILE = "wsplgen.shp"; - public static final String I18N_WSPLGEN_RESULT = "floodmap.uesk"; - public static final String I18N_WSPLGEN_DEFAULT = "floodmap.uesk"; - public static final String I18N_BARRIERS = "floodmap.barriers"; - public static final String I18N_BARRIERS_DEFAULT = "floodmap.barriers"; - public static final int WSPLGEN_DEFAULT_OUTPUT = 0; - /** - * Inner class that is used to create facets. An instance of this class is - * used while packaging the data for the WSPLGEN calculation. - */ - private static class FacetCreator { - protected FLYSArtifact artifact; - protected CallContext cc; - protected List facets; - protected String url; - protected String hash; - protected String stateId; - - public FacetCreator( - FLYSArtifact artifact, - CallContext cc, - String hash, - String sId - ) { - this.facets = new ArrayList(2); - this.artifact = artifact; - this.cc = cc; - this.hash = hash; - this.stateId = sId; - } - - protected String getRiver() { - return artifact.getDataAsString("river"); - } - - protected String getUrl() { - String url = FLYSUtils.getXPathString(FLYSUtils.XPATH_MAPSERVER_URL); - url = url + "user-wms"; - return url; - } - - protected String getSrid() { - return FLYSUtils.getRiverSrid(artifact); - } - - protected String getWSPLGENBounds() { - String river = getRiver(); - double kms[] = FLYSUtils.getKmRange(artifact); - - CrossSectionTrack a = - CrossSectionTrack.getCrossSectionTrack(river, kms[0]); - - CrossSectionTrack b = - CrossSectionTrack.getCrossSectionTrack(river, kms[1]); - - if (a == null || b == null) { - return null; - } - - return GeometryUtils.createOLBounds(a.getGeom(), b.getGeom()); - } - - protected String getBounds() { - return GeometryUtils.getRiverBounds(getRiver()); - } - - public List getFacets() { - return facets; - } - - public void createWSPLGENFacet() { - WMSLayerFacet wsplgen = new WMSLayerFacet( - 0, - FLOODMAP_WSPLGEN, - Resources.getMsg( - cc.getMeta(), - I18N_WSPLGEN_RESULT, - I18N_WSPLGEN_DEFAULT), - ComputeType.ADVANCE, - stateId, - hash, - getUrl()); - - String bounds = getWSPLGENBounds(); - - if (bounds == null || bounds.length() == 0) { - bounds = getBounds(); - } - - wsplgen.addLayer( - artifact.identifier() + MapfileGenerator.MS_WSPLGEN_POSTFIX); - wsplgen.setSrid(getSrid()); - wsplgen.setExtent(bounds); - - facets.add(wsplgen); - } - - public void createBarrierFacet() { - WMSLayerFacet barriers = new WMSLayerFacet( - 1, - FLOODMAP_WSPLGEN, - Resources.getMsg( - cc.getMeta(), - I18N_BARRIERS, - I18N_BARRIERS_DEFAULT), - ComputeType.ADVANCE, - stateId, - hash, - getUrl()); - - barriers.addLayer( - artifact.identifier() + MapfileGenerator.MS_BARRIERS_POSTFIX); - barriers.setSrid(getSrid()); - barriers.setExtent(getBounds()); - - facets.add(barriers); - } - } // end of FacetCreator - - - @Override public Object computeAdvance( FLYSArtifact artifact, @@ -222,7 +101,7 @@ WSPLGENCalculation calculation = new WSPLGENCalculation(); FacetCreator facetCreator = new FacetCreator( - artifact, context, hash, getID()); + artifact, context, hash, getID(), facets); WSPLGENJob job = prepareWSPLGENJob( artifact, @@ -252,10 +131,6 @@ return null; } - facetCreator.createWSPLGENFacet(); - - facets.addAll(facetCreator.getFacets()); - context.afterCall(CallContext.BACKGROUND); context.addBackgroundMessage(new CalculationMessage( JobObserver.STEPS.length, @@ -333,6 +208,7 @@ WSPLGENJob job = new WSPLGENJob( artifact, artifactDir, + facetCreator, context, calculation); diff -r 74142aa5d938 -r aaf8d32f85bd flys-artifacts/src/main/java/de/intevation/flys/wsplgen/FacetCreator.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/wsplgen/FacetCreator.java Tue Sep 27 12:40:42 2011 +0000 @@ -0,0 +1,146 @@ +package de.intevation.flys.wsplgen; + +import java.util.ArrayList; +import java.util.List; + +import de.intevation.artifacts.CallContext; + +import de.intevation.artifactdatabase.state.Facet; + +import de.intevation.flys.model.CrossSectionTrack; + +import de.intevation.flys.artifacts.FLYSArtifact; +import de.intevation.flys.artifacts.model.FacetTypes; +import de.intevation.flys.artifacts.model.WMSLayerFacet; +import de.intevation.flys.artifacts.resources.Resources; +import de.intevation.flys.artifacts.states.DefaultState.ComputeType; +import de.intevation.flys.utils.FLYSUtils; +import de.intevation.flys.utils.GeometryUtils; +import de.intevation.flys.utils.MapfileGenerator; + + +public class FacetCreator implements FacetTypes { + + public static final String I18N_WSPLGEN_RESULT = "floodmap.uesk"; + public static final String I18N_WSPLGEN_DEFAULT = "floodmap.uesk"; + public static final String I18N_BARRIERS = "floodmap.barriers"; + public static final String I18N_BARRIERS_DEFAULT = "floodmap.barriers"; + + protected FLYSArtifact artifact; + + protected CallContext cc; + + protected List facets; + protected List tmpFacets; + + protected String url; + protected String hash; + protected String stateId; + + public FacetCreator( + FLYSArtifact artifact, + CallContext cc, + String hash, + String sId, + List facets + ) { + this.tmpFacets = new ArrayList(2); + this.facets = facets; + this.artifact = artifact; + this.cc = cc; + this.hash = hash; + this.stateId = sId; + } + + protected String getRiver() { + return artifact.getDataAsString("river"); + } + + protected String getUrl() { + String url = FLYSUtils.getXPathString(FLYSUtils.XPATH_MAPSERVER_URL); + url = url + "user-wms"; + return url; + } + + protected String getSrid() { + return FLYSUtils.getRiverSrid(artifact); + } + + protected String getWSPLGENBounds() { + String river = getRiver(); + double kms[] = FLYSUtils.getKmRange(artifact); + + CrossSectionTrack a = + CrossSectionTrack.getCrossSectionTrack(river, kms[0]); + + CrossSectionTrack b = + CrossSectionTrack.getCrossSectionTrack(river, kms[1]); + + if (a == null || b == null) { + return null; + } + + return GeometryUtils.createOLBounds(a.getGeom(), b.getGeom()); + } + + protected String getBounds() { + return GeometryUtils.getRiverBounds(getRiver()); + } + + public List getFacets() { + return tmpFacets; + } + + public void createWSPLGENFacet() { + WMSLayerFacet wsplgen = new WMSLayerFacet( + 0, + FLOODMAP_WSPLGEN, + Resources.getMsg( + cc.getMeta(), + I18N_WSPLGEN_RESULT, + I18N_WSPLGEN_DEFAULT), + ComputeType.ADVANCE, + stateId, + hash, + getUrl()); + + String bounds = getWSPLGENBounds(); + + if (bounds == null || bounds.length() == 0) { + bounds = getBounds(); + } + + wsplgen.addLayer( + artifact.identifier() + MapfileGenerator.MS_WSPLGEN_POSTFIX); + wsplgen.setSrid(getSrid()); + wsplgen.setExtent(bounds); + + tmpFacets.add(wsplgen); + } + + public void createBarrierFacet() { + WMSLayerFacet barriers = new WMSLayerFacet( + 1, + FLOODMAP_WSPLGEN, + Resources.getMsg( + cc.getMeta(), + I18N_BARRIERS, + I18N_BARRIERS_DEFAULT), + ComputeType.ADVANCE, + stateId, + hash, + getUrl()); + + barriers.addLayer( + artifact.identifier() + MapfileGenerator.MS_BARRIERS_POSTFIX); + barriers.setSrid(getSrid()); + barriers.setExtent(getBounds()); + + tmpFacets.add(barriers); + } + + + public void finish() { + facets.addAll(getFacets()); + } +} // end of FacetCreator diff -r 74142aa5d938 -r aaf8d32f85bd flys-artifacts/src/main/java/de/intevation/flys/wsplgen/JobExecutor.java --- a/flys-artifacts/src/main/java/de/intevation/flys/wsplgen/JobExecutor.java Tue Sep 27 11:33:45 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/wsplgen/JobExecutor.java Tue Sep 27 12:40:42 2011 +0000 @@ -79,8 +79,6 @@ } catch (InterruptedException iee) { /* do nothing */ } - job.getCallContext().afterBackground(CallContext.STORE); - logger.info("WSPLGEN exit value: " + process.exitValue()); logger.info( "WSPLGEN throw " + @@ -89,7 +87,15 @@ "WSPLGEN throw " + errorObserver.numWarnings() + " warnings."); - MapfileGenerator.getInstance().update(); + if (process.exitValue() < 2 && errorObserver.numErrors() == 0) { + FacetCreator fc = job.getFacetCreator(); + fc.createWSPLGENFacet(); + fc.finish(); + + MapfileGenerator.getInstance().update(); + } + + job.getCallContext().afterBackground(CallContext.STORE); return; }