Mercurial > dive4elements > river
diff flys-artifacts/src/main/java/org/dive4elements/river/artifacts/GaugeDischargeCurveArtifact.java @ 5831:bd047b71ab37
Repaired internal references
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Thu, 25 Apr 2013 12:06:39 +0200 |
parents | flys-artifacts/src/main/java/de/intevation/flys/artifacts/GaugeDischargeCurveArtifact.java@526fd442e0e5 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/flys-artifacts/src/main/java/org/dive4elements/river/artifacts/GaugeDischargeCurveArtifact.java Thu Apr 25 12:06:39 2013 +0200 @@ -0,0 +1,211 @@ +package org.dive4elements.river.artifacts; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import org.apache.log4j.Logger; + +import org.w3c.dom.Document; + +import org.dive4elements.artifactdatabase.state.DefaultOutput; +import org.dive4elements.artifactdatabase.state.Facet; +import org.dive4elements.artifactdatabase.data.DefaultStateData; + +import org.dive4elements.artifacts.ArtifactFactory; +import org.dive4elements.artifacts.CallMeta; + +import org.dive4elements.artifacts.common.ArtifactNamespaceContext; +import org.dive4elements.artifacts.common.utils.XMLUtils; + +import org.dive4elements.river.artifacts.model.GaugeDischargeCurveFacet; +import org.dive4elements.river.artifacts.resources.Resources; +import org.dive4elements.river.artifacts.states.StaticState; + +import org.dive4elements.river.model.Gauge; +import org.dive4elements.river.utils.FLYSUtils; + + +/** + * Artifact to calculate a discharge curve from a gauge overview info + * + * @author <a href="mailto:bjoern.ricks@intevation.de">Björn Ricks</a> + */ +public class GaugeDischargeCurveArtifact +extends AbstractStaticStateArtifact +{ + + private static final Logger logger = + Logger.getLogger(GaugeDischargeCurveArtifact.class); + + public static final String XPATH_RIVER = "/art:action/art:river/@art:name"; + public static final String XPATH_GAUGE = "/art:action/art:gauge/@art:reference"; + public static final String NAME = "gaugedischargecurve"; + public static final String STATIC_STATE_NAME = "state.gaugedischargecurve.static"; + public static final String UIPROVIDER = "gauge_discharge_curve"; + public static final String GAUGE_DISCHARGE_CURVE_FACET = + "gauge_discharge_curve"; + public static final String GAUGE_DISCHARGE_CURVE_AT_EXPORT_FACET = + "at"; + public static final String GAUGE_DISCHARGE_CURVE_OUT = + "discharge_curve"; + public static final String GAUGE_DISCHARGE_CURVE_AT_EXPORT_OUT = + "computed_dischargecurve_at_export"; + public static final String GAUGE_DISCHARGE_CURVE_EXPORT_OUT = + "computed_dischargecurve_export"; + public static final String GAUGE_DISCHARGE_CURVE_CSV_FACET = + "csv"; + public static final String GAUGE_DISCHARGE_CURVE_PDF_FACET = + "pdf"; + + private Facet atexportfacet; + private Facet curvefacet; + private Facet csvfacet; + private Facet pdffacet; + + /** + * Setup initializes the data by extracting the river and gauge from + * the XML Document. + */ + @Override + public void setup( + String identifier, + ArtifactFactory factory, + Object context, + CallMeta callmeta, + Document data) + { + logger.debug("GaugeDischargeCurveArtifact.setup"); + + if (logger.isDebugEnabled()) { + logger.debug("GaugeDischargeCurveArtifact.setup" + XMLUtils.toString(data)); + } + String gaugeref = XMLUtils.xpathString(data, XPATH_GAUGE, + ArtifactNamespaceContext.INSTANCE); + String rivername = XMLUtils.xpathString(data, XPATH_RIVER, + ArtifactNamespaceContext.INSTANCE); + + addData("river", new DefaultStateData("river", + Resources.getMsg(callmeta, + "facet.gauge_discharge_curve.river", + "Name of the river"), + "String", rivername)); + addData("reference_gauge", new DefaultStateData("reference_gauge", + Resources.getMsg(callmeta, + "facet.gauge_discharge_curve.reference_gauge", + "Gauge official number"), + "Long", gaugeref)); + + Gauge gauge = FLYSUtils.getReferenceGauge(this); + String gaugename = ""; + Double gaugelocation = null; + if (gauge != null) { + gaugename = gauge.getName(); + BigDecimal station = gauge.getStation(); + if (station != null) { + gaugelocation = station.doubleValue(); + } + } + + addData("gauge_name", new DefaultStateData("gauge_name", + Resources.getMsg(callmeta, + "facet.gauge_discharge_curve.gauge_name", + "Name of the gauge"), + "String", gaugename)); + + if (gaugelocation != null) { + addData("ld_locations", new DefaultStateData("ld_locations", + Resources.getMsg(callmeta, + "facet.gauge_discharge_curve.gauge_location", + "Location of the gauge"), + "Double", gaugelocation.toString())); + } + + String description = Resources.format(callmeta, + "facet.gauge_discharge_curve.description", + "Discharge curve on gauge", + rivername, + gaugename); + + List<Facet> fs = new ArrayList<Facet>(4); + curvefacet = new GaugeDischargeCurveFacet( + GAUGE_DISCHARGE_CURVE_FACET, description); + fs.add(curvefacet); + + description = Resources.format(callmeta, + "facet.gauge_discharge_curve_at_export.description", + "Discharge curve AT export on gauge", + rivername, + gaugename); + atexportfacet = new GaugeDischargeCurveFacet( + GAUGE_DISCHARGE_CURVE_AT_EXPORT_FACET, description); + fs.add(atexportfacet); + + description = Resources.format(callmeta, + "facet.computed_dischargecurve_export.csv", + "Discharge curve CSV export on gauge", + rivername, + gaugename); + csvfacet = new GaugeDischargeCurveFacet( + GAUGE_DISCHARGE_CURVE_CSV_FACET, description); + fs.add(csvfacet); + + description = Resources.format(callmeta, + "facet.computed_dischargecurve_export.pdf", + "Discharge curve PDF export on gauge", + rivername, + gaugename); + pdffacet = new GaugeDischargeCurveFacet( + GAUGE_DISCHARGE_CURVE_PDF_FACET, description); + fs.add(pdffacet); + + addFacets(STATIC_STATE_NAME, fs); + + super.setup(identifier, factory, context, callmeta, data); + } + + @Override + public String getName() { + return NAME; + } + + @Override + protected void initStaticState() { + StaticState state = new StaticState(STATIC_STATE_NAME); + + List<Facet> fs = new ArrayList<Facet>(1); + fs.add(curvefacet); + + DefaultOutput output = new DefaultOutput( + GAUGE_DISCHARGE_CURVE_OUT, + "output.discharge_curve", + "image/png", + fs, + "chart"); + state.addOutput(output); + + fs = new ArrayList<Facet>(1); + fs.add(atexportfacet); + output = new DefaultOutput( + GAUGE_DISCHARGE_CURVE_AT_EXPORT_OUT, + "output.computed_dischargecurve_at_export", + "text/plain", + fs, + "export"); + state.addOutput(output); + + fs = new ArrayList<Facet>(2); + fs.add(csvfacet); + fs.add(pdffacet); + output = new DefaultOutput( + GAUGE_DISCHARGE_CURVE_EXPORT_OUT, + "output.computed_dischargecurve_export", + "text/plain", + fs, + "export"); + state.addOutput(output); + + state.setUIProvider(UIPROVIDER); + setStaticState(state); + } +}