diff gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestCaseBase.java @ 540:80630520e25a

merged gnv-artifacts/0.4
author Thomas Arendsen Hein <thomas@intevation.de>
date Fri, 28 Sep 2012 12:13:49 +0200
parents 4080b57dcb52
children e0d7b8a0bc42
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestCaseBase.java	Fri Sep 28 12:13:49 2012 +0200
@@ -0,0 +1,177 @@
+/**
+ *
+ */
+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.utils.ArtifactXMLUtilities;
+
+/**
+ * @author Tim Englich <tim.englich@intevation.de>
+ *
+ */
+public abstract class GNVArtifactsTestCaseBase extends TestCase {
+
+    /**
+     * the logger, used to log exceptions and additonaly information
+     */
+    private static Logger log = null;
+
+    static {
+        BasicConfigurator.configure();
+        log = Logger.getLogger(GNVArtifactsTestCaseBase.class);
+    }
+    
+    private String configurationDir = "doc/conf";
+
+    protected FactoryBootstrap bootstrap = null;
+    
+    /**
+     * Constructor
+     */
+    public GNVArtifactsTestCaseBase() {
+    }
+
+    /**
+     * Constructor
+     * @param name
+     */
+    public GNVArtifactsTestCaseBase(String name) {
+        super(name);
+    }
+    
+    public abstract void testArtifact();
+    /**
+     * @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();
+    }
+    
+    protected void writeDocument2Log(Document document) {
+        log.debug(new ArtifactXMLUtilities().writeDocument2String(document));
+    }
+
+    protected Document readDocument(String fileName) {
+        Document returnValue = null;
+        try {
+            DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
+                    .newInstance();
+            docBuilderFactory.setNamespaceAware(true);
+            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;
+    }
+
+    protected 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);
+        }
+    }
+    
+    /**
+     * @return
+     */
+    protected CallContext createCallContext(ArtifactFactory artifactFactory) {
+        CallMeta callMeta = new DefaultCallMeta(
+                new PreferredLocale[] { new DefaultPreferredLocale("de_DE",
+                        1.0f) });
+        CallContext cc = new TestCallContext(bootstrap.getContext(), callMeta,artifactFactory);
+        return cc;
+    }
+
+    /**
+     * @param artifact
+     * @param cc
+     * @param describeDocument TODO
+     * @throws Exception
+     */
+    protected 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);
+
+    }
+    
+    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
+     */
+    protected 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;
+    }
+
+
+
+}

http://dive4elements.wald.intevation.org