ingo@1115: /* ingo@1115: * Copyright (c) 2010 by Intevation GmbH ingo@1115: * ingo@1115: * This program is free software under the LGPL (>=v2.1) ingo@1115: * Read the file LGPL.txt coming with the software for details ingo@1115: * or visit http://www.gnu.org/licenses/ if it does not exist. ingo@1115: */ ingo@1115: tim@345: package de.intevation.gnv.artifacts; tim@345: sascha@779: import de.intevation.artifactdatabase.Config; sascha@779: import de.intevation.artifactdatabase.DefaultCallMeta; sascha@779: import de.intevation.artifactdatabase.DefaultPreferredLocale; sascha@779: import de.intevation.artifactdatabase.FactoryBootstrap; sascha@779: sascha@779: import de.intevation.artifacts.Artifact; sascha@779: import de.intevation.artifacts.ArtifactFactory; sascha@779: import de.intevation.artifacts.CallContext; sascha@779: import de.intevation.artifacts.CallMeta; sascha@779: import de.intevation.artifacts.PreferredLocale; sascha@779: sascha@779: import de.intevation.gnv.utils.ArtifactXMLUtilities; sascha@779: tim@345: import java.io.ByteArrayInputStream; tim@345: import java.io.File; tim@345: import java.io.FileNotFoundException; tim@345: import java.io.FileOutputStream; tim@345: import java.io.IOException; tim@345: tim@345: import javax.xml.parsers.DocumentBuilder; tim@345: import javax.xml.parsers.DocumentBuilderFactory; tim@345: import javax.xml.parsers.ParserConfigurationException; tim@345: tim@345: import junit.framework.TestCase; tim@345: tim@345: import org.apache.log4j.BasicConfigurator; tim@345: import org.apache.log4j.Logger; tim@345: sascha@779: import org.w3c.dom.Document; sascha@779: sascha@779: import org.xml.sax.SAXException; tim@345: tim@345: /** sascha@780: * @author Tim Englich tim@345: * tim@345: */ tim@345: public abstract class GNVArtifactsTestCaseBase extends TestCase { tim@345: tim@345: /** tim@345: * the logger, used to log exceptions and additonaly information tim@345: */ tim@345: private static Logger log = null; tim@345: tim@345: static { tim@345: BasicConfigurator.configure(); tim@345: log = Logger.getLogger(GNVArtifactsTestCaseBase.class); tim@345: } sascha@778: tim@345: private String configurationDir = "doc/conf"; tim@345: tim@345: protected FactoryBootstrap bootstrap = null; sascha@778: tim@345: /** tim@345: * Constructor tim@345: */ tim@345: public GNVArtifactsTestCaseBase() { tim@345: } tim@345: tim@345: /** tim@345: * Constructor tim@345: * @param name tim@345: */ tim@345: public GNVArtifactsTestCaseBase(String name) { tim@345: super(name); tim@345: } sascha@778: tim@345: public abstract void testArtifact(); tim@345: /** tim@345: * @see junit.framework.TestCase#setUp() tim@345: */ tim@345: protected void setUp() throws Exception { tim@345: log.debug("GNVArtifactsTestCase.setUp"); tim@345: super.setUp(); tim@345: log.info(Config.CONFIG_DIR + " ==> " + configurationDir); tim@345: System.setProperty(Config.CONFIG_DIR, configurationDir); tim@345: log.info("Bootstrap wird initialisiert."); tim@345: bootstrap = new FactoryBootstrap(); tim@345: bootstrap.boot(); tim@345: } sascha@778: tim@345: protected void writeDocument2Log(Document document) { tim@345: log.debug(new ArtifactXMLUtilities().writeDocument2String(document)); tim@345: } tim@345: tim@345: protected Document readDocument(String fileName) { tim@345: Document returnValue = null; tim@345: try { tim@345: DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory tim@345: .newInstance(); tim@466: docBuilderFactory.setNamespaceAware(true); tim@345: DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); tim@345: returnValue = docBuilder.parse(new File(fileName)); tim@345: } catch (ParserConfigurationException e) { tim@345: log.error(e, e); tim@345: } catch (SAXException e) { tim@345: log.error(e, e); tim@345: } catch (IOException e) { tim@345: log.error(e, e); tim@345: } tim@345: return returnValue; tim@345: } tim@345: tim@345: protected void check4ExceptionReport(Document document) throws Exception { tim@345: document = new ArtifactXMLUtilities().reInitDocument(document); tim@345: String message = Config.getStringXPath(document, tim@345: "/exceptionreport/exception"); tim@345: if (message != null) { tim@345: throw new Exception(message); tim@345: } tim@345: } sascha@778: tim@345: /** tim@345: * @return tim@345: */ tim@485: protected CallContext createCallContext(ArtifactFactory artifactFactory) { tim@345: CallMeta callMeta = new DefaultCallMeta( tim@345: new PreferredLocale[] { new DefaultPreferredLocale("de_DE", tim@345: 1.0f) }); tim@485: CallContext cc = new TestCallContext(bootstrap.getContext(), callMeta,artifactFactory); tim@345: return cc; tim@345: } tim@345: tim@345: /** tim@345: * @param artifact tim@345: * @param cc tim@345: * @param describeDocument TODO tim@345: * @throws Exception tim@345: */ tim@345: protected void doNextStep(Artifact artifact, CallContext cc, tim@345: String feedDocument, String advanceDocument, Document describeDocument) tim@345: throws Exception { tim@345: Document outputData = artifact.describe(describeDocument,cc); tim@466: // this.writeDocument2Log(outputData); tim@345: outputData = artifact.feed(this.readDocument(feedDocument), cc); tim@345: this.check4ExceptionReport(outputData); tim@345: outputData = artifact.advance(this.readDocument(advanceDocument), cc); tim@345: // this.writeDocument2Log(outputData); tim@345: this.check4ExceptionReport(outputData); tim@345: tim@345: } sascha@778: tim@345: protected void createFile(byte[] content, String fileName) { tim@345: try { tim@345: FileOutputStream fos = new FileOutputStream(new File(fileName)); tim@345: ByteArrayInputStream bis = new ByteArrayInputStream(content); tim@345: byte[] buf = new byte[4096]; tim@345: while (bis.read(buf) > 0) { tim@345: fos.write(buf); tim@345: } tim@345: fos.flush(); tim@345: fos.close(); tim@345: } catch (FileNotFoundException e) { tim@345: log.error(e, e); tim@345: } catch (IOException e) { tim@345: log.error(e, e); tim@345: } tim@345: } tim@345: tim@345: /** tim@345: * @param artefactName tim@345: */ tim@345: protected ArtifactFactory getArtifactFactory(String artefactName) { tim@345: log.debug("GNVArtifactsTestCase.getArtifactFactory"); tim@345: ArtifactFactory[] artifactFactories = bootstrap.getArtifactFactories(); tim@345: for (int i = 0; i < artifactFactories.length; i++) { tim@345: if (artifactFactories[i].getName().equals(artefactName)) { tim@345: log.debug("ArtifactFactory wurde gefunden."); tim@345: return artifactFactories[i]; tim@345: } tim@345: } tim@345: return null; tim@345: } tim@345: tim@595: /** tim@595: * @param artifactFactory tim@595: * @return tim@595: */ tim@595: protected Artifact createArtifact(ArtifactFactory artifactFactory) { tim@595: Document setupData = null; tim@595: Artifact artifact = artifactFactory.createArtifact( sascha@778: "" + System.currentTimeMillis(), tim@595: bootstrap.getContext(), tim@595: setupData); tim@595: assertNotNull(artifact); tim@595: log.debug("Artifact is available"); tim@595: return artifact; tim@595: } tim@345: tim@345: tim@345: }