view gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestCase.java @ 329:42a5269636eb

Added time gap detection to time series charts. gnv-artifacts/trunk@395 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 02 Dec 2009 15:42:46 +0000
parents 37847d724fc9
children
line wrap: on
line source
/**
 *
 */
package de.intevation.gnv.artifacts;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import junit.framework.TestCase;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;

import de.intevation.artifactdatabase.Config;
import de.intevation.artifactdatabase.DefaultCallMeta;
import de.intevation.artifactdatabase.DefaultPreferredLocale;
import de.intevation.artifactdatabase.FactoryBootstrap;
import de.intevation.artifacts.Artifact;
import de.intevation.artifacts.ArtifactFactory;
import de.intevation.artifacts.CallContext;
import de.intevation.artifacts.CallMeta;
import de.intevation.artifacts.PreferredLocale;
import de.intevation.gnv.artifacts.context.GNVArtifactContext;
import de.intevation.gnv.utils.ArtifactXMLUtilities;

/**
 * @author Tim Englich <tim.englich@intevation.de>
 * 
 */
public class GNVArtifactsTestCase extends TestCase {

    /**
     * the logger, used to log exceptions and additonaly information
     */
    private static Logger log = null;

    static {
        BasicConfigurator.configure();
        log = Logger.getLogger(GNVArtifactContext.class);
    }

    private String configurationDir = "doc/conf";

    private FactoryBootstrap bootstrap = null;

    /**
     * Constructor
     * 
     * @param name
     */
    public GNVArtifactsTestCase(String name) {
        super(name);
    }

    /**
     * @see junit.framework.TestCase#setUp()
     */
    protected void setUp() throws Exception {
        log.debug("GNVArtifactsTestCase.setUp");
        super.setUp();
        log.info(Config.CONFIG_DIR + " ==> " + configurationDir);
        System.setProperty(Config.CONFIG_DIR, configurationDir);
        log.info("Bootstrap wird initialisiert.");
        bootstrap = new FactoryBootstrap();
        bootstrap.boot();
    }

    public void testTimeSeriesArtifact() {
        try {
            log.debug("GNVArtifactsTestCase.testTimeSeriesArtifact");
            String artefactName = "fis_marnet";
            ArtifactFactory artifactFactory = this
                    .getArtifactFactory(artefactName);
            assertNotNull(artifactFactory);
            log.debug("TimeSeries-ArtifactFactory is available");
            Artifact artifact = artifactFactory.createArtifact(
                    "" + System.currentTimeMillis(), bootstrap.getContext());
            assertNotNull(artifact);
            log.debug("TimeSeries-Artifact is available");

            CallContext cc = createCallContext();

            // Erster Schritt

            Document describeDocument = this.readDocument("src/test/ressources/timeseries/timeseries_describe.xml");
            
            int steps = 6;
            
            for (int i = 1; i <= steps; i++){
            
                this.doNextStep(
                            artifact,
                            cc,
                            "src/test/ressources/timeseries/" +
                            "timeseries_step_0"+i+"_feed.xml",
                            "src/test/ressources/timeseries/" +
                            "timeseries_step_0"+i+"_advance.xml", 
                            describeDocument);
            }
            
            Document outputData = artifact.describe(describeDocument,cc);
            FileOutputStream fos = null;
            FileOutputStream fos2 = null;
            FileOutputStream fos3 = null;
            FileOutputStream fos4 = null;
            try {
                fos = new FileOutputStream("src/test/results/timeseries"
                                           + System.currentTimeMillis()
                                           + ".png");
                fos2 = new FileOutputStream("src/test/results/timeseries"
                                            + System.currentTimeMillis()
                                            + ".xml");
                fos3 = new FileOutputStream("src/test/results/timeseries"
                                            + System.currentTimeMillis()
                                            + ".csv");
                fos4 = new FileOutputStream("src/test/results/timeseries"
                        + System.currentTimeMillis()
                        + ".odv");
            
                artifact.out(this
                             .readDocument("src/test/ressources/timeseries/timeseries_step_06_out_chart.xml"),
                                           fos, cc);
                artifact.out(this
                        .readDocument("src/test/ressources/timeseries/timeseries_step_06_out_statistics.xml"),
                                      fos2, cc);
                artifact.out(this
                        .readDocument("src/test/ressources/timeseries/timeseries_step_06_out_csv.xml"),
                                      fos3, cc);
                artifact.out(this
                        .readDocument("src/test/ressources/timeseries/timeseries_step_06_out_odv.xml"),
                                      fos4, cc);
            } catch (Exception e) {
                log.error(e, e);
                fail();
            } finally {
                try {
                    fos.flush();
                    fos.close();
                } catch (Exception e) {
                    log.error(e, e);
                }
            }
        } catch (Exception e) {
            log.error(e, e);
            fail();
        }
    }

    /**
     * @return
     */
    private CallContext createCallContext() {
        CallMeta callMeta = new DefaultCallMeta(
                new PreferredLocale[] { new DefaultPreferredLocale("de_DE",
                        1.0f) });
        CallContext cc = new TestCallContext(bootstrap.getContext(), callMeta);
        return cc;
    }

    /**
     * @param artifact
     * @param cc
     * @param describeDocument TODO
     * @throws Exception
     */
    private void doNextStep(Artifact artifact, CallContext cc,
                            String feedDocument, String advanceDocument, Document describeDocument)
                                                                        throws Exception {
        Document outputData = artifact.describe(describeDocument,cc);
//        this.writeDocument2Log(outputData);
        outputData = artifact.feed(this.readDocument(feedDocument), cc);
        this.check4ExceptionReport(outputData);
        outputData = artifact.advance(this.readDocument(advanceDocument), cc);
//        this.writeDocument2Log(outputData);
        this.check4ExceptionReport(outputData);

    }

    public void testTimeSeriesMeshArtifact() {
        try {
            log.debug("GNVArtifactsTestCase.testTimeSeriesMeshArtifact");
            String artefactName = "fis_modeldata";
            ArtifactFactory artifactFactory = this
                    .getArtifactFactory(artefactName);
            assertNotNull(artifactFactory);
            log.debug("TimeSeriesMesh-ArtifactFactory is available");
            Artifact artifact = artifactFactory.createArtifact(
                    "" + System.currentTimeMillis(), bootstrap.getContext());
            assertNotNull(artifact);
            log.debug("TimeSeriesMesh-Artifact is available");

            CallContext cc = createCallContext();

            Document describeDocument = this.readDocument("src/test/ressources/timeseries_mesh/timeseries_describe.xml");
            
            int steps = 8;
            
            for (int i = 1; i <= steps; i++){
                this.doNextStep(
                            artifact,
                            cc,
                            "src/test/ressources/timeseries_mesh/" +
                            "timeseries_step_0"+i+"_feed.xml",
                            "src/test/ressources/timeseries_mesh/" +
                            "timeseries_step_0"+i+"_advance.xml", 
                            describeDocument);
            }
            // Achter Schritt
            Document outputData = artifact.describe(describeDocument,cc);
            FileOutputStream fos = null;
            FileOutputStream fos2 = null;
            FileOutputStream fos3 = null;
            FileOutputStream fos4 = null;
            try {
                fos = new FileOutputStream("src/test/results/timeseries_mesh"
                                           + System.currentTimeMillis()
                                           + ".png");
                fos2 = new FileOutputStream("src/test/results/timeseries_mesh"
                                            + System.currentTimeMillis()
                                            + ".xml");
                fos3 = new FileOutputStream("src/test/results/timeseries_mesh"
                                            + System.currentTimeMillis()
                                            + ".csv");
                fos4 = new FileOutputStream("src/test/results/timeseries_mesh"
                        + System.currentTimeMillis()
                        + ".odv");
                artifact
                        .out(
                                this
                                        .readDocument("src/test/ressources/timeseries_mesh/timeseries_step_08_out_statistics.xml"),
                                fos2, cc);
                artifact
                        .out(
                                this
                                        .readDocument("src/test/ressources/timeseries_mesh/timeseries_step_08_out_chart.xml"),
                                fos, cc);
                artifact
                        .out(
                                this
                                        .readDocument("src/test/ressources/timeseries_mesh/timeseries_step_08_out_csv.xml"),
                                fos3, cc);
                artifact
                .out(
                        this
                                .readDocument("src/test/ressources/timeseries_mesh/timeseries_step_08_out_odv.xml"),
                        fos4, cc);
            } catch (Exception e) {
                log.error(e, e);
                fail();
            } finally {
                try {
                    fos.flush();
                    fos.close();
                    fos2.flush();
                    fos2.close();
                    fos3.flush();
                    fos3.close();
                } catch (Exception e) {
                    log.error(e, e);
                }
            }
        } catch (Exception e) {
            log.error(e, e);
            fail();
        }
    }

    public void testVerticalProfileArtifact() {
        try {
            log.debug("GNVArtifactsTestCase.testVerticalProfileArtifact");
            String artefactName = "fis_marnet";
            ArtifactFactory artifactFactory = this
                    .getArtifactFactory(artefactName);
            assertNotNull(artifactFactory);
            log.debug("VerticalProfile-ArtifactFactory is available");
            Artifact artifact = artifactFactory.createArtifact(
                    "" + System.currentTimeMillis(), bootstrap.getContext());
            assertNotNull(artifact);
            log.debug("VerticalProfile-Artifact is available");

            CallContext cc = createCallContext();

            Document describeDocument = this.readDocument("src/test/ressources/verticalprofile/verticalprofile_describe.xml");
            int steps = 6;
            
            for (int i = 1; i <= steps; i++){
                this.doNextStep(
                            artifact,
                            cc,
                            "src/test/ressources/verticalprofile/" +
                            "verticalprofile_step_0"+i+"_feed.xml",
                            "src/test/ressources/verticalprofile/" +
                            "verticalprofile_step_0"+i+"_advance.xml", 
                            describeDocument);
            }

            // Vierter Schritt
            Document outputData = artifact.describe(describeDocument,cc);
            FileOutputStream fos = null;
            FileOutputStream fos2 = null;
            FileOutputStream fos3 = null;
            FileOutputStream fos4 = null;
            try {
                fos = new FileOutputStream("src/test/results/verticalprofile"
                                           + System.currentTimeMillis()
                                           + ".png");
                fos2 = new FileOutputStream("src/test/results/verticalprofile"
                                            + System.currentTimeMillis()
                                            + ".xml");
                fos3 = new FileOutputStream("src/test/results/verticalprofile"
                                            + System.currentTimeMillis()
                                            + ".csv");
                fos4 = new FileOutputStream("src/test/results/verticalprofile"
                        + System.currentTimeMillis()
                        + ".odv");
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "verticalprofile/" +
                                               "verticalprofile_step_06_out_statistics.xml"),
                             fos2, cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "verticalprofile/" +
                                               "verticalprofile_step_06_out_chart.xml"),
                             fos, cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "verticalprofile/" +
                                               "verticalprofile_step_06_out_csv.xml"),
                             fos3, cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "verticalprofile/" +
                                               "verticalprofile_step_06_out_odv.xml"),
                            fos4, cc);
            } catch (Exception e) {
                log.error(e, e);
                fail();
            } finally {
                try {
                    fos.flush();
                    fos.close();
                    fos2.flush();
                    fos2.close();
                    fos3.flush();
                    fos3.close();
                    fos4.flush();
                    fos4.close();
                } catch (Exception e) {
                    log.error(e, e);
                }
            }
        } catch (Exception e) {
            log.error(e, e);
            fail();
        }
    }

    public void testVerticalProfileMeshArtifact() {
        try {
            log.debug("GNVArtifactsTestCase.testVerticalProfileArtifact");
            String artefactName = "fis_modeldata";
            ArtifactFactory artifactFactory = this
                    .getArtifactFactory(artefactName);
            assertNotNull(artifactFactory);
            log.debug("VerticalProfile-ArtifactFactory is available");
            Artifact artifact = artifactFactory.createArtifact(
                    "" + System.currentTimeMillis(), bootstrap.getContext());
            assertNotNull(artifact);
            log.debug("VerticalProfile-Artifact is available");

            CallContext cc = createCallContext();
            Document describeDocument = this.readDocument("src/test/ressources/" +
                                                          "verticalprofile_mesh/" +
                                                          "verticalprofile_describe.xml");
            
            int steps = 10;
            
            for (int i = 1; i <= steps; i++){
                String number = ""+i;
                if (i < 10){
                    number = "0"+number;
                }
                this.doNextStep(
                            artifact,
                            cc,
                            "src/test/ressources/verticalprofile_mesh/" +
                            "verticalprofile_step_"+number+"_feed.xml",
                            "src/test/ressources/verticalprofile_mesh/" +
                            "verticalprofile_step_"+number+"_advance.xml", 
                            describeDocument);
            }
            // 10. Schritt
            Document outputData = artifact.describe(describeDocument,cc);
            FileOutputStream fos = null;
            FileOutputStream fos2 = null;
            FileOutputStream fos3 = null;
            FileOutputStream fos4 = null;
            try {
                fos = new FileOutputStream(
                        "src/test/results/verticalprofile_mesh"
                                + System.currentTimeMillis() + ".png");
                fos2 = new FileOutputStream(
                        "src/test/results/verticalprofile_mesh"
                                + System.currentTimeMillis() + ".xml");
                fos3 = new FileOutputStream(
                        "src/test/results/verticalprofile_mesh"
                                + System.currentTimeMillis() + ".csv");
                fos4 = new FileOutputStream(
                        "src/test/results/verticalprofile_mesh"
                                + System.currentTimeMillis() + ".odv");
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "verticalprofile_mesh/" +
                                               "verticalprofile_step_10_out_statistics.xml"),
                             fos2, cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "verticalprofile_mesh/" +
                                               "verticalprofile_step_10_out_chart.xml"),
                             fos, cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                              "verticalprofile_mesh/" +
                                              "verticalprofile_step_10_out_csv.xml"),
                             fos3, cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "verticalprofile_mesh/" +
                                               "verticalprofile_step_10_out_odv.xml"),
                             fos4, cc);
            } catch (Exception e) {
                log.error(e, e);
                fail();
            } finally {
                try {
                    fos.flush();
                    fos.close();
                    fos2.flush();
                    fos2.close();
                    fos3.flush();
                    fos3.close();
                    fos4.flush();
                    fos4.close();
                } catch (Exception e) {
                    log.error(e, e);
                }
            }
        } catch (Exception e) {
            log.error(e, e);
            fail();
        }
    }

    public void testVerticalProfileInstantaneousPointArtifact() {
        try {
            log.debug("GNVArtifactsTestCase.testVerticalProfileArtifact");
            String artefactName = "fis_bsh_ctd";
            ArtifactFactory artifactFactory = this
                    .getArtifactFactory(artefactName);
            assertNotNull(artifactFactory);
            log.debug("VerticalProfile-ArtifactFactory is available");
            Artifact artifact = artifactFactory.createArtifact(
                    "" + System.currentTimeMillis(), bootstrap.getContext());
            assertNotNull(artifact);
            log.debug("VerticalProfile-Artifact is available");

            CallContext cc = createCallContext();
            Document describeDocument = this.readDocument("src/test/ressources/verticalprofile_instantaneouspoint/verticalprofile_describe.xml");
            
           int steps = 5;
            
            for (int i = 1; i <= steps; i++){
                this.doNextStep(
                            artifact,
                            cc,
                            "src/test/ressources/verticalprofile_instantaneouspoint/" +
                            "verticalprofile_step_0"+i+"_feed.xml",
                            "src/test/ressources/verticalprofile_instantaneouspoint/" +
                            "verticalprofile_step_0"+i+"_advance.xml", 
                            describeDocument);
            }

            // Vierter Schritt
            Document outputData = artifact.describe(describeDocument,cc);
            FileOutputStream fos = null;
            FileOutputStream fos2 = null;
            FileOutputStream fos3 = null;
            FileOutputStream fos4 = null;
            try {
                fos = new FileOutputStream(
                        "src/test/results/verticalprofile_instantaneouspoint"
                                + System.currentTimeMillis() + ".png");
                fos2 = new FileOutputStream(
                        "src/test/results/verticalprofile_instantaneouspoint"
                                + System.currentTimeMillis() + ".xml");
                fos3 = new FileOutputStream(
                        "src/test/results/verticalprofile_instantaneouspoint"
                                + System.currentTimeMillis() + ".csv");
                fos4 = new FileOutputStream(
                        "src/test/results/verticalprofile_instantaneouspoint"
                                + System.currentTimeMillis() + ".odv");
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "verticalprofile_instantaneouspoint/" +
                                               "verticalprofile_step_05_out_statistics.xml"),
                             fos2, cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "verticalprofile_instantaneouspoint/" +
                                               "verticalprofile_step_05_out_chart.xml"),
                             fos, cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "verticalprofile_instantaneouspoint/" +
                                               "verticalprofile_step_05_out_csv.xml"),
                             fos3, cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "verticalprofile_instantaneouspoint/" +
                                               "verticalprofile_step_05_out_odv.xml"),
                             fos4, cc);
            } catch (Exception e) {
                log.error(e, e);
                fail();
            } finally {
                try {
                    fos.flush();
                    fos.close();
                    fos2.flush();
                    fos2.close();
                    fos3.flush();
                    fos3.close();
                } catch (Exception e) {
                    log.error(e, e);
                }
            }
        } catch (Exception e) {
            log.error(e, e);
            fail();
        }
    }

    public void testHorizontalProfileInstantaneousPointArtifact() {
        try {
            log.debug("GNVArtifactsTestCase." +
                      "testHorizontalProfileInstantaneousPointArtifact");
            String artefactName = "fis_delphin";
            ArtifactFactory artifactFactory = this
                    .getArtifactFactory(artefactName);
            assertNotNull(artifactFactory);
            log.debug("VerticalProfile-ArtifactFactory is available");
            Artifact artifact = artifactFactory.createArtifact(
                    "" + System.currentTimeMillis(), bootstrap.getContext());
            assertNotNull(artifact);
            log.debug("VerticalProfile-Artifact is available");

            CallContext cc = createCallContext();
            Document describeDocument = this.readDocument("src/test/ressources/horizontalProfile_instantaneouspoint/horizontalprofile_describe.xml");
            
            int steps = 9;
            
            for (int i = 0; i < steps; i++){
            
                this.doNextStep(
                            artifact,
                            cc,
                            "src/test/ressources/horizontalProfile_instantaneouspoint/" +
                            "horizontalprofile_step_0"+i+"_feed.xml",
                            "src/test/ressources/horizontalProfile_instantaneouspoint/" +
                            "horizontalprofile_step_0"+i+"_advance.xml", 
                            describeDocument);
            }

            Document outputData = artifact.describe(describeDocument, cc);
            FileOutputStream fos = null;
            FileOutputStream fos2 = null;
            FileOutputStream fos3 = null;
            FileOutputStream fos4 = null;
            try {
                fos = new FileOutputStream(
                        "src/test/results/horizontalprofile_instantaneouspoint"
                                + System.currentTimeMillis() + ".png");
                fos2 = new FileOutputStream(
                        "src/test/results/horizontalprofile_instantaneouspoint"
                                + System.currentTimeMillis() + ".xml");
                fos3 = new FileOutputStream(
                        "src/test/results/horizontalprofile_instantaneouspoint"
                                + System.currentTimeMillis() + ".csv");
                fos4 = new FileOutputStream(
                        "src/test/results/horizontalprofile_instantaneouspoint"
                                + System.currentTimeMillis() + ".odv");
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "horizontalProfile_instantaneouspoint/" +
                                               "horizontalprofile_step_08_out_statistics.xml"),
                             fos2,cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "horizontalProfile_instantaneouspoint/" +
                                               "horizontalprofile_step_08_out_chart.xml"),
                             fos,cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "horizontalProfile_instantaneouspoint/" +
                                               "horizontalprofile_step_08_out_csv.xml"),
                             fos3,cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "horizontalProfile_instantaneouspoint/" +
                                               "horizontalprofile_step_08_out_odv.xml"),
                            fos4,cc);
            } catch (Exception e) {
                log.error(e, e);
                fail();
            } finally {
                try {
                    fos.flush();
                    fos.close();
                    fos2.flush();
                    fos2.close();
                    fos3.flush();
                    fos3.close();
                } catch (Exception e) {
                    log.error(e, e);
                }
            }
        } catch (Exception e) {
            log.error(e, e);
            fail();
        }
    }

    public void testHorizontalProfileMeshPointArtifact() {
        try {
            log.debug("GNVArtifactsTestCase." +
                      "testHorizontalProfileInstantaneousPointArtifact");
            String artefactName = "fis_modeldata";
            ArtifactFactory artifactFactory = this
                    .getArtifactFactory(artefactName);
            assertNotNull(artifactFactory);
            log.debug("VerticalProfile-ArtifactFactory is available");
            Artifact artifact = artifactFactory.createArtifact(
                    "" + System.currentTimeMillis(), bootstrap.getContext());
            assertNotNull(artifact);
            log.debug("VerticalProfile-Artifact is available");

            CallContext cc = createCallContext();
            Document describeDocument = this.readDocument("src/test/ressources/horizontalProfile_mesh/horizontalprofile_describe.xml");
            
            int steps = 10;
            
            for (int i = 1; i <= steps; i++){
                String number = ""+i;
                if (i < 10){
                    number = "0"+number;
                }
                this.doNextStep(
                            artifact,
                            cc,
                            "src/test/ressources/horizontalProfile_mesh/" +
                            "horizontalprofile_step_"+number+"_feed.xml",
                            "src/test/ressources/horizontalProfile_mesh/" +
                            "horizontalprofile_step_"+number+"_advance.xml", 
                            describeDocument);
            }
            
            Document outputData = artifact.describe(describeDocument,cc);
            FileOutputStream fos = null;
            FileOutputStream fos2 = null;
            FileOutputStream fos3 = null;
            FileOutputStream fos4 = null;
            try {
                fos = new FileOutputStream(
                        "src/test/results/horizontalProfile_mesh"
                                + System.currentTimeMillis() + ".png");
                fos2 = new FileOutputStream(
                        "src/test/results/horizontalProfile_mesh"
                                + System.currentTimeMillis() + ".xml");
                fos3 = new FileOutputStream(
                        "src/test/results/horizontalProfile_mesh"
                                + System.currentTimeMillis() + ".csv");
                fos4 = new FileOutputStream(
                        "src/test/results/horizontalProfile_mesh"
                                + System.currentTimeMillis() + ".odv");
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "horizontalProfile_mesh/" +
                                               "horizontalprofile_step_10_out_statistics.xml"),
                             fos2, cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "horizontalProfile_mesh/" +
                                               "horizontalprofile_step_10_out_chart.xml"),
                                fos, cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "horizontalProfile_mesh/" +
                                               "horizontalprofile_step_10_out_csv.xml"),
                             fos3, cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "horizontalProfile_mesh/" +
                                               "horizontalprofile_step_10_out_odv.xml"),
                             fos4, cc);
            } catch (Exception e) {
                log.error(e, e);
                fail();
            } finally {
                try {
                    fos.flush();
                    fos.close();
                    fos2.flush();
                    fos2.close();
                    fos3.flush();
                    fos3.close();
                    fos4.flush();
                    fos4.close();
                } catch (Exception e) {
                    log.error(e, e);
                }
            }
        } catch (Exception e) {
            log.error(e, e);
            fail();
        }
    }
    
    public void testHorizontalCrossSectionMeshArtifact() {
        try {
            log.debug("GNVArtifactsTestCase.testHorizontalCrossSectionMeshArtifact");
            String artefactName = "fis_modeldata";
            ArtifactFactory artifactFactory = this
                    .getArtifactFactory(artefactName);
            assertNotNull(artifactFactory);
            log.debug("HorizontalCrossSectionMesh-ArtifactFactory is available");
            Artifact artifact = artifactFactory.createArtifact(
                    "" + System.currentTimeMillis(), bootstrap.getContext());
            assertNotNull(artifact);
            log.debug("HorizontalCrossSectionMesh-Artifact is available");

            CallContext cc = createCallContext();
            Document describeDocument = this.readDocument("src/test/ressources/horizontalcrosssection_mesh/horizontalcrosssection_describe.xml");
            int steps = 6;
            
            for (int i = 1; i <= steps; i++){
                this.doNextStep(
                            artifact,
                            cc,
                            "src/test/ressources/horizontalcrosssection_mesh/" +
                            "horizontalcrosssection_step_0"+i+"_feed.xml",
                            "src/test/ressources/horizontalcrosssection_mesh/" +
                            "horizontalcrosssection_step_0"+i+"_advance.xml", 
                            describeDocument);
            }
            
            Document outputData = artifact.describe(describeDocument,cc);
            FileOutputStream fos = null;
            FileOutputStream fos2 = null;
            FileOutputStream fos3 = null;
            try {
                fos = new FileOutputStream(
                        "src/test/results/horizontalcrosssection_mesh"
                                + System.currentTimeMillis() + ".png");
                
                fos2 = new FileOutputStream(
                        "src/test/results/horizontalcrosssection_mesh"
                                + System.currentTimeMillis() + ".csv");
                fos3 = new FileOutputStream(
                        "src/test/results/horizontalcrosssection_mesh"
                                + System.currentTimeMillis() + ".odv");
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "horizontalcrosssection_mesh/" +
                                               "horizontalcrosssection_step_06_out_chart.xml"),
                              fos, cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "horizontalcrosssection_mesh/" +
                                               "horizontalcrosssection_step_06_out_csv.xml"),
                             fos2,cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "horizontalcrosssection_mesh/" +
                                               "horizontalcrosssection_step_06_out_odv.xml"),
                              fos3,cc);
            } catch (Exception e) {
                log.error(e, e);
                fail();
            } finally {
                try {
                    fos.flush();
                    fos.close();
                    fos2.flush();
                    fos2.close();
                    fos3.flush();
                    fos3.close();
                } catch (Exception e) {
                    log.error(e, e);
                }
            }
        } catch (Exception e) {
            log.error(e, e);
            fail();
        }
    }
    
    public void testVerticalCrossSectionMeshArtifact() {
        try {
            log.debug("GNVArtifactsTestCase." +
                      "testHVerticalCrossSectionMeshArtifact");
            String artefactName = "fis_modeldata";
            ArtifactFactory artifactFactory = this
                    .getArtifactFactory(artefactName);
            assertNotNull(artifactFactory);
            log.debug("VerticalProfile-ArtifactFactory is available");
            Artifact artifact = artifactFactory.createArtifact(
                    "" + System.currentTimeMillis(), bootstrap.getContext());
            assertNotNull(artifact);
            log.debug("VerticalProfile-Artifact is available");

            CallContext cc = createCallContext();
            Document describeDocument = this.readDocument("src/test/ressources/verticalcrosssection_mesh/verticalcrosssection_describe.xml");
            
            int steps = 8;
            
            for (int i = 1; i <= steps; i++){
            
                this.doNextStep(
                            artifact,
                            cc,
                            "src/test/ressources/verticalcrosssection_mesh/" +
                            "verticalcrosssection_step_0"+i+"_feed.xml",
                            "src/test/ressources/verticalcrosssection_mesh/" +
                            "verticalcrosssection_step_0"+i+"_advance.xml", 
                            describeDocument);
            }
            
            Document outputData = artifact.describe(describeDocument,cc);
            FileOutputStream fos = null;
            FileOutputStream fos2 = null;
            FileOutputStream fos3 = null;
            try {
                fos = new FileOutputStream(
                        "src/test/results/verticalcrosssection_mesh"
                                + System.currentTimeMillis() + ".png");
                
                fos2 = new FileOutputStream(
                        "src/test/results/verticalcrosssection_mesh"
                                + System.currentTimeMillis() + ".csv");
                fos3 = new FileOutputStream(
                        "src/test/results/verticalcrosssection_mesh"
                                + System.currentTimeMillis() + ".odv");
               artifact.out(this.readDocument("src/test/ressources/" +
                                               "verticalcrosssection_mesh/" +
                                               "verticalcrosssection_step_08_out_chart.xml"),
                             fos, cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "verticalcrosssection_mesh/" +
                                               "verticalcrosssection_step_08_out_csv.xml"),
                             fos2,cc);
                artifact.out(this.readDocument("src/test/ressources/" +
                                               "verticalcrosssection_mesh/" +
                                               "verticalcrosssection_step_08_out_odv.xml"),
                             fos3,cc);
                
            } catch (Exception e) {
                log.error(e, e);
                fail();
            } finally {
                try {
                    fos.flush();
                    fos.close();
                    fos2.flush();
                    fos2.close();
                    fos3.flush();
                    fos3.close();
                } catch (Exception e) {
                    log.error(e, e);
                }
            }
        } catch (Exception e) {
            log.error(e, e);
            fail();
        }
    }

    protected void createFile(byte[] content, String fileName) {
        try {
            FileOutputStream fos = new FileOutputStream(new File(fileName));
            ByteArrayInputStream bis = new ByteArrayInputStream(content);
            byte[] buf = new byte[4096];
            while (bis.read(buf) > 0) {
                fos.write(buf);
            }
            fos.flush();
            fos.close();
        } catch (FileNotFoundException e) {
            log.error(e, e);
        } catch (IOException e) {
            log.error(e, e);
        }
    }

    /**
     * @param artefactName
     */
    private ArtifactFactory getArtifactFactory(String artefactName) {
        log.debug("GNVArtifactsTestCase.getArtifactFactory");
        ArtifactFactory[] artifactFactories = bootstrap.getArtifactFactories();
        for (int i = 0; i < artifactFactories.length; i++) {
            if (artifactFactories[i].getName().equals(artefactName)) {
                log.debug("ArtifactFactory wurde gefunden.");
                return artifactFactories[i];
            }
        }
        return null;
    }

    protected void writeDocument2Log(Document document) {
        log.debug(new ArtifactXMLUtilities().writeDocument2String(document));
    }

    protected Document readDocument(String fileName) {
        Document returnValue = null;
        try {
            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
            returnValue = docBuilder.parse(new File(fileName));
        } catch (ParserConfigurationException e) {
            log.error(e, e);
        } catch (SAXException e) {
            log.error(e, e);
        } catch (IOException e) {
            log.error(e, e);
        }
        return returnValue;
    }

    private void check4ExceptionReport(Document document) throws Exception {
        document = new ArtifactXMLUtilities().reInitDocument(document);
        String message = Config.getStringXPath(document,
                "/exceptionreport/exception");
        if (message != null) {
            throw new Exception(message);
        }
    }
}

http://dive4elements.wald.intevation.org