bjoern@3936: package de.intevation.flys.artifacts;
bjoern@3936:
bjoern@4190: import java.math.BigDecimal;
bjoern@3936: import java.util.ArrayList;
bjoern@3936: import java.util.List;
bjoern@3936:
bjoern@3936: import org.apache.log4j.Logger;
bjoern@3936:
bjoern@3936: import org.w3c.dom.Document;
bjoern@3936:
bjoern@3936: import de.intevation.artifactdatabase.state.DefaultOutput;
bjoern@3936: import de.intevation.artifactdatabase.state.Facet;
bjoern@4034: import de.intevation.artifactdatabase.data.DefaultStateData;
bjoern@3936:
bjoern@3936: import de.intevation.artifacts.ArtifactFactory;
bjoern@3936: import de.intevation.artifacts.CallMeta;
bjoern@3936:
bjoern@3936: import de.intevation.artifacts.common.ArtifactNamespaceContext;
bjoern@3936: import de.intevation.artifacts.common.utils.XMLUtils;
bjoern@3936:
bjoern@4032: import de.intevation.flys.artifacts.model.GaugeDischargeCurveFacet;
bjoern@4032: import de.intevation.flys.artifacts.resources.Resources;
bjoern@3936: import de.intevation.flys.artifacts.states.StaticState;
bjoern@4032:
bjoern@4032: import de.intevation.flys.model.Gauge;
bjoern@4032: import de.intevation.flys.utils.FLYSUtils;
bjoern@3936:
bjoern@3936:
bjoern@3936: /**
bjoern@3936: * Artifact to calculate a discharge curve from a gauge overview info
bjoern@3936: *
bjoern@3936: * @author Björn Ricks
bjoern@3936: */
bjoern@3936: public class GaugeDischargeCurveArtifact
bjoern@3936: extends AbstractStaticStateArtifact
bjoern@3936: {
bjoern@3936:
bjoern@3936: private static final Logger logger =
bjoern@3936: Logger.getLogger(GaugeDischargeCurveArtifact.class);
bjoern@3936:
bjoern@4027: public static final String XPATH_RIVER = "/art:action/art:river/@art:name";
bjoern@4027: public static final String XPATH_GAUGE = "/art:action/art:gauge/@art:reference";
bjoern@3936: public static final String NAME = "gaugedischargecurve";
bjoern@3936: public static final String STATIC_STATE_NAME = "state.gaugedischargecurve.static";
bjoern@4159: public static final String UIPROVIDER = "gauge_discharge_curve";
bjoern@4188: public static final String GAUGE_DISCHARGE_CURVE_FACET =
bjoern@4188: "gauge_discharge_curve";
bjoern@4188: public static final String GAUGE_DISCHARGE_CURVE_AT_EXPORT_FACET =
bjoern@4305: "at";
bjoern@4188: public static final String GAUGE_DISCHARGE_CURVE_OUT =
bjoern@4188: "discharge_curve";
bjoern@4188: public static final String GAUGE_DISCHARGE_CURVE_AT_EXPORT_OUT =
bjoern@4188: "computed_dischargecurve_at_export";
bjoern@4586: public static final String GAUGE_DISCHARGE_CURVE_CSV_OUT =
bjoern@4586: "computed_dischargecurve_export";
bjoern@4586: public static final String GAUGE_DISCHARGE_CURVE_CSV_FACET =
bjoern@4586: "csv";
bjoern@4188:
bjoern@4188: private Facet atexportfacet;
bjoern@4188: private Facet curvefacet;
bjoern@4586: private Facet csvfacet;
bjoern@3936:
bjoern@3936: /**
bjoern@3936: * Setup initializes the data by extracting the river and gauge from
bjoern@3936: * the XML Document.
bjoern@3936: */
bjoern@3936: @Override
bjoern@3936: public void setup(
bjoern@3936: String identifier,
bjoern@3936: ArtifactFactory factory,
bjoern@3936: Object context,
bjoern@3936: CallMeta callmeta,
bjoern@3936: Document data)
bjoern@3936: {
bjoern@3936: logger.debug("GaugeDischargeCurveArtifact.setup");
bjoern@3936:
bjoern@3936: if (logger.isDebugEnabled()) {
bjoern@4028: logger.debug("GaugeDischargeCurveArtifact.setup" + XMLUtils.toString(data));
bjoern@3936: }
bjoern@3936: String gaugeref = XMLUtils.xpathString(data, XPATH_GAUGE,
bjoern@3936: ArtifactNamespaceContext.INSTANCE);
bjoern@3936: String rivername = XMLUtils.xpathString(data, XPATH_RIVER,
bjoern@3936: ArtifactNamespaceContext.INSTANCE);
bjoern@3936:
bjoern@4034: addData("river", new DefaultStateData("river",
bjoern@4034: Resources.getMsg(callmeta,
bjoern@4034: "facet.gauge_discharge_curve.river",
bjoern@4034: "Name of the river"),
bjoern@4034: "String", rivername));
bjoern@4034: addData("reference_gauge", new DefaultStateData("reference_gauge",
bjoern@4034: Resources.getMsg(callmeta,
bjoern@4034: "facet.gauge_discharge_curve.reference_gauge",
bjoern@4034: "Gauge official number"),
bjoern@4186: "Long", gaugeref));
bjoern@3936:
bjoern@4032: Gauge gauge = FLYSUtils.getReferenceGauge(this);
bjoern@4034: String gaugename = "";
bjoern@4190: Double gaugelocation = null;
bjoern@4034: if (gauge != null) {
bjoern@4034: gaugename = gauge.getName();
bjoern@4190: BigDecimal station = gauge.getStation();
bjoern@4190: if (station != null) {
bjoern@4190: gaugelocation = station.doubleValue();
bjoern@4190: }
bjoern@4034: }
bjoern@4032:
bjoern@4164: addData("gauge_name", new DefaultStateData("gauge_name",
bjoern@4164: Resources.getMsg(callmeta,
bjoern@4164: "facet.gauge_discharge_curve.gauge_name",
bjoern@4164: "Name of the gauge"),
bjoern@4164: "String", gaugename));
bjoern@4164:
bjoern@4190: if (gaugelocation != null) {
bjoern@4190: addData("ld_locations", new DefaultStateData("ld_locations",
bjoern@4190: Resources.getMsg(callmeta,
bjoern@4190: "facet.gauge_discharge_curve.gauge_location",
bjoern@4190: "Location of the gauge"),
bjoern@4190: "Double", gaugelocation.toString()));
bjoern@4190: }
bjoern@4190:
bjoern@4032: String description = Resources.format(callmeta,
bjoern@4032: "facet.gauge_discharge_curve.description",
bjoern@4032: "Discharge curve on gauge",
bjoern@4032: rivername,
bjoern@4034: gaugename);
bjoern@4032:
bjoern@4586: List fs = new ArrayList(3);
bjoern@4188: curvefacet = new GaugeDischargeCurveFacet(
bjoern@4188: GAUGE_DISCHARGE_CURVE_FACET, description);
bjoern@4188: fs.add(curvefacet);
bjoern@3936:
bjoern@4188: description = Resources.format(callmeta,
bjoern@4188: "facet.gauge_discharge_curve_at_export.description",
bjoern@4188: "Discharge curve AT export on gauge",
bjoern@4188: rivername,
bjoern@4188: gaugename);
bjoern@4188: atexportfacet = new GaugeDischargeCurveFacet(
bjoern@4188: GAUGE_DISCHARGE_CURVE_AT_EXPORT_FACET, description);
bjoern@4188: fs.add(atexportfacet);
bjoern@3936:
bjoern@4586: description = Resources.format(callmeta,
bjoern@4586: "facet.computed_dischargecurve_export.csv",
bjoern@4586: "Discharge curve CSV export on gauge",
bjoern@4586: rivername,
bjoern@4586: gaugename);
bjoern@4586: csvfacet = new GaugeDischargeCurveFacet(
bjoern@4586: GAUGE_DISCHARGE_CURVE_CSV_FACET, description);
bjoern@4586: fs.add(csvfacet);
bjoern@4586:
bjoern@3936: addFacets(STATIC_STATE_NAME, fs);
bjoern@3936:
bjoern@3936: super.setup(identifier, factory, context, callmeta, data);
bjoern@3936: }
bjoern@3936:
bjoern@3936: @Override
bjoern@3936: public String getName() {
bjoern@3936: return NAME;
bjoern@3936: }
bjoern@3936:
bjoern@3936: @Override
bjoern@3936: protected void initStaticState() {
bjoern@3936: StaticState state = new StaticState(STATIC_STATE_NAME);
bjoern@4188:
bjoern@4188: List fs = new ArrayList(1);
bjoern@4188: fs.add(curvefacet);
bjoern@4188:
bjoern@3936: DefaultOutput output = new DefaultOutput(
bjoern@4188: GAUGE_DISCHARGE_CURVE_OUT,
bjoern@4188: "output.discharge_curve",
bjoern@4188: "image/png",
bjoern@3936: fs,
bjoern@3936: "chart");
bjoern@4188: state.addOutput(output);
bjoern@3936:
bjoern@4188: fs = new ArrayList(1);
bjoern@4188: fs.add(atexportfacet);
bjoern@4188: output = new DefaultOutput(
bjoern@4188: GAUGE_DISCHARGE_CURVE_AT_EXPORT_OUT,
bjoern@4188: "output.computed_dischargecurve_at_export",
bjoern@4188: "text/plain",
bjoern@4188: fs,
bjoern@4188: "export");
bjoern@3936: state.addOutput(output);
bjoern@4188:
bjoern@4586: fs = new ArrayList(1);
bjoern@4586: fs.add(csvfacet);
bjoern@4586: output = new DefaultOutput(
bjoern@4586: GAUGE_DISCHARGE_CURVE_CSV_OUT,
bjoern@4586: "output.computed_dischargecurve_export",
bjoern@4586: "text/plain",
bjoern@4586: fs,
bjoern@4586: "export");
bjoern@4586: state.addOutput(output);
bjoern@4586:
bjoern@4159: state.setUIProvider(UIPROVIDER);
bjoern@3936: setStaticState(state);
bjoern@3936: }
bjoern@3936: }