Package hu.sztaki.ilab.longneck

Source Code of hu.sztaki.ilab.longneck.BlockTestEnvironment

package hu.sztaki.ilab.longneck;

import hu.sztaki.ilab.longneck.bootstrap.SchemaLoader;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.validation.Schema;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.mapping.MappingException;
import org.exolab.castor.xml.Unmarshaller;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
* Test environment for block tests.
*
* @author Péter Molnár <molnarp@sztaki.mta.hu>
*/
public class BlockTestEnvironment {
    private static boolean logInitialized = false;
   
    /** The unmarshaller to create objects from xml. */
    protected Unmarshaller unmarshaller;
    /** The document builder to instantiate XML documents. */
    protected DocumentBuilder documentBuilder;
    /** The classloader to access files on the classpath. */
    protected ClassLoader classLoader;
    /** Resource loader. */
    protected ResourceLoader resourceLoader;
    /** The Schema loader. */
    protected SchemaLoader schemaLoader;

    public BlockTestEnvironment() throws ParserConfigurationException, SAXException, IOException,
            MappingException {
       
        // Prepare logging
        prepareLogging();
       
        // Assign classloader and resource loader
        classLoader = this.getClass().getClassLoader();
        resourceLoader = new DefaultResourceLoader(classLoader);
       
        // Create document builder factory and set namespace-aware
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        documentBuilderFactory.setNamespaceAware(true);
       
        // Create schema and assign to real document builder
        DocumentBuilder schemaDocBuilder = documentBuilderFactory.newDocumentBuilder();

        schemaLoader = new SchemaLoader();
        List<URL> urlList = new ArrayList<URL>(2);
        urlList.add(resourceLoader.getResource("classpath:META-INF/longneck/schema/longneck.xsd").getURL());
        schemaLoader.setSchemaUrls(urlList);
        Schema schema = schemaLoader.getSchema(
                resourceLoader.getResource("classpath:META-INF/longneck/schema/longneck-process.xsd").getURL());
        documentBuilderFactory.setSchema(schema);
       
        // Create document builder
        documentBuilder = documentBuilderFactory.newDocumentBuilder();
       
        // Assign validator
        documentBuilder.setErrorHandler(new DefaultHandler());
       
        // Load castor mapping and create unmarshaller
        Mapping mapping = new Mapping(this.getClass().getClassLoader());       
        mapping.loadMapping(
                new InputSource(classLoader.getResourceAsStream("META-INF/longneck/schema/longneck.mapping.xml")));
        unmarshaller = new Unmarshaller(mapping);
       
        // Disable validation - it's done using the XML Schema and Castor validation is flawed anyway
        unmarshaller.setValidation(false);       
    }
   
    public static void prepareLogging() throws IOException {
        if (! logInitialized) {
            Logger rootLogger = Logger.getRootLogger();
            rootLogger.removeAllAppenders();
            rootLogger.setLevel(Level.DEBUG);

            FileAppender appender = new FileAppender(new PatternLayout("%-5p [%C line %L] [%t]: %m%n"), "test.log");
            appender.setAppend(false);
           
            rootLogger.addAppender(appender);           
        }
    }
   
   
    public ClassLoader getClassLoader() {
        return classLoader;
    }

    public void setClassLoader(ClassLoader classLoader) {
        this.classLoader = classLoader;
    }

    public DocumentBuilder getDocumentBuilder() {
        return documentBuilder;
    }

    public void setDocumentBuilder(DocumentBuilder documentBuilder) {
        this.documentBuilder = documentBuilder;
    }

    public Unmarshaller getUnmarshaller() {
        return unmarshaller;
    }

    public void setUnmarshaller(Unmarshaller unmarshaller) {
        this.unmarshaller = unmarshaller;
    }

    public ResourceLoader getResourceLoader() {
        return resourceLoader;
    }

    public void setResourceLoader(ResourceLoader resourceLoader) {
        this.resourceLoader = resourceLoader;
    }

    public SchemaLoader getSchemaLoader() {
        return schemaLoader;
    }

    public void setSchemaLoader(SchemaLoader schemaLoader) {
        this.schemaLoader = schemaLoader;
    }
}
TOP

Related Classes of hu.sztaki.ilab.longneck.BlockTestEnvironment

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.