Package com.envoisolutions.sxc.jaxb

Source Code of com.envoisolutions.sxc.jaxb.JAXBGenerator

package com.envoisolutions.sxc.jaxb;

import java.io.File;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import javax.xml.bind.JAXBException;

import com.envoisolutions.sxc.compiler.JavacCompiler;

public class JAXBGenerator {
    private final Map<String,Object> properties = new LinkedHashMap<String, Object>();
    private final Set<String> classes = new LinkedHashSet<String>();
    private String classesOutputDirectory;
    private ClassLoader classLoader;

    public JAXBGenerator() {
    }

    public JAXBGenerator(String... classes) {
        this.classes.addAll(Arrays.asList(classes));
    }

    public JAXBGenerator(Set<String> classes) {
        this.classes.addAll(classes);
    }

    public Map<String, Object> getProperties() {
        return properties;
    }

    public Set<String> getClasses() {
        return classes;
    }

    public ClassLoader getClassLoader() {
        return classLoader;
    }

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

    public String getSourceOutputDirectory() {
        return (String) properties.get("com.envoisolutions.sxc.output.directory");
    }

    public void setSourceOutputDirectory(String sourceOutputDirectory) {
        properties.put("com.envoisolutions.sxc.output.directory", sourceOutputDirectory);
    }

    public String getClassesOutputDirectory() {
        return classesOutputDirectory;
    }

    public void setClassesOutputDirectory(String classesOutputDirectory) {
        this.classesOutputDirectory = classesOutputDirectory;
    }

    public void generate() throws JAXBException {
        ClassLoader classLoader = this.classLoader;
        if (classLoader == null) classLoader = Thread.currentThread().getContextClassLoader();
        if (classLoader == null) classLoader = getClass().getClassLoader();

        Set<Class> classes = new LinkedHashSet<Class>();
        for (String className : this.classes) {
            try {
                Class<?> clazz = classLoader.loadClass(className);
                classes.add(clazz);
            } catch (ClassNotFoundException e) {
                try {
                    classes.addAll(Arrays.asList(JAXBContextImpl.loadPackageClasses(className, classLoader)));
                } catch (JAXBException e1) {
                    throw new JAXBException(className + " is not a class or a package containing a jaxb.index file or ObjectFactory class");
                }
            }
        }

        BuilderContext builderContext = new BuilderContext(properties, classes.toArray(new Class[classes.size()]));

        // generate the sources
        Map<String, File> sources = builderContext.getSources();

        // compile the generated code
        JavacCompiler javacCompiler = new JavacCompiler();
        javacCompiler.compile(sources, new File(classesOutputDirectory), classLoader);

    }
}
TOP

Related Classes of com.envoisolutions.sxc.jaxb.JAXBGenerator

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.