sascha@730: package de.intevation.flys.exports;
sascha@730:
sascha@730: import java.io.OutputStream;
sascha@730: import java.io.OutputStreamWriter;
sascha@730: import java.io.IOException;
sascha@730:
sascha@730: import org.w3c.dom.Document;
sascha@730:
sascha@730: import org.apache.log4j.Logger;
sascha@730:
sascha@730: import de.intevation.artifacts.Artifact;
sascha@730: import de.intevation.artifacts.CallContext;
sascha@730:
ingo@1979: import de.intevation.artifactdatabase.state.ArtifactAndFacet;
ingo@1979: import de.intevation.artifactdatabase.state.Settings;
ingo@1979:
sascha@730: import de.intevation.flys.artifacts.FLYSArtifact;
sascha@730:
sascha@730: import de.intevation.flys.artifacts.model.WQ;
ingo@3422: import de.intevation.flys.collections.FLYSArtifactCollection;
sascha@730:
rrenkert@4938: import de.intevation.flys.model.Gauge;
rrenkert@4938: import de.intevation.flys.model.River;
rrenkert@4938: import de.intevation.flys.model.TimeInterval;
ingo@1658: import de.intevation.flys.utils.FLYSUtils;
felix@4849: import de.intevation.flys.artifacts.access.RangeAccess;
ingo@1658:
sascha@730: public class ATExporter
sascha@730: implements OutGenerator
sascha@730: {
sascha@730: private static Logger logger = Logger.getLogger(ATExporter.class);
sascha@730:
sascha@730: public static final String DEFAULT_ENCODING = "UTF-8";
sascha@730:
sascha@730: protected WQ data;
sascha@730: protected CallContext context;
sascha@730: protected OutputStream out;
ingo@1658: protected FLYSArtifact master;
sascha@730:
ingo@3422: protected FLYSArtifactCollection collection;
ingo@3422:
ingo@3422:
sascha@730: public ATExporter() {
sascha@730: }
sascha@730:
sascha@730: @Override
sascha@730: public void init(Document request, OutputStream out, CallContext context) {
sascha@730: this.context = context;
sascha@730: this.out = out;
sascha@730: }
sascha@730:
ingo@3422:
sascha@730: @Override
sascha@730: public void setMasterArtifact(Artifact master) {
ingo@1658: this.master = (FLYSArtifact) master;
sascha@730: }
sascha@730:
sascha@730: @Override
ingo@3422: public void setCollection(FLYSArtifactCollection collection) {
ingo@3422: this.collection = collection;
ingo@3422: }
ingo@3422:
ingo@3422: @Override
ingo@1684: public void doOut(
felix@1944: ArtifactAndFacet artifactf,
ingo@1684: Document attr,
ingo@1684: boolean visible
ingo@1684: ) {
felix@1944: data = (WQ)artifactf.getData(context);
sascha@730: }
sascha@730:
sascha@730: @Override
sascha@730: public void generate() throws IOException {
sascha@730:
sascha@730: if (data == null) {
sascha@730: logger.debug("no W/Q data");
sascha@730: return;
sascha@730: }
sascha@730:
sascha@730: ATWriter at;
sascha@730: try {
sascha@730: at = new ATWriter(data);
sascha@730: }
sascha@730: catch (IllegalArgumentException iae) {
sascha@730: logger.error("creating ATWriter failed", iae);
sascha@730: throw new IOException(iae);
sascha@730: }
sascha@730:
rrenkert@4938: River river = FLYSUtils.getRiver(master);
felix@4849: RangeAccess rangeAccess = new RangeAccess(master, context);
felix@4849: double[] kms = rangeAccess.getLocations();
ingo@1658:
rrenkert@4938: Gauge gauge = river.determineGaugeByPosition(kms[0]);
teichmann@4948: if (Math.abs(kms[0] - gauge.getStation().doubleValue()) < 1e-4) {
rrenkert@4941: // at gauge.
rrenkert@4941: TimeInterval interval =
rrenkert@4941: gauge.fetchMasterDischargeTable().getTimeInterval();
rrenkert@4941: at.write(
rrenkert@4941: new OutputStreamWriter(out, DEFAULT_ENCODING),
rrenkert@4941: context.getMeta(),
rrenkert@4941: river.getName(),
rrenkert@4941: kms[0],
rrenkert@4941: gauge.getName(),
rrenkert@4941: gauge.getDatum(),
rrenkert@4941: interval.getStartTime(),
rrenkert@4941: 100d);
rrenkert@4941: }
rrenkert@4941: else {
rrenkert@4941: // at km
rrenkert@4941: at.write(
rrenkert@4941: new OutputStreamWriter(out),
rrenkert@4941: context.getMeta(),
rrenkert@4941: river.getName(),
rrenkert@4941: kms[0],
rrenkert@4941: null,
rrenkert@4941: null,
rrenkert@4941: null,
rrenkert@4941: 0d);
rrenkert@4941: }
rrenkert@4941:
sascha@730: }
ingo@1979:
ingo@1979:
ingo@1979: /**
ingo@1979: * Returns an instance of EmptySettings currently!
ingo@1979: *
ingo@1979: * @return an instance of EmptySettings.
ingo@1979: */
ingo@2047: @Override
ingo@1979: public Settings getSettings() {
ingo@1979: return new EmptySettings();
ingo@1979: }
ingo@2047:
ingo@2047:
ingo@2047: /**
ingo@2047: * This method is not implemented!
ingo@2047: *
ingo@2047: * @param settings A settings object.
ingo@2047: */
ingo@2047: @Override
ingo@2047: public void setSettings(Settings settings) {
ingo@2047: // do nothing here
ingo@2047: }
sascha@730: }
sascha@730: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :