Package net.windwards.mavendbusplugin

Source Code of net.windwards.mavendbusplugin.DBusXMLMojo$FileStreamFactory

package net.windwards.mavendbusplugin;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.freedesktop.dbus.bin.CreateInterface;
import org.freedesktop.dbus.exceptions.DBusException;
import org.xml.sax.SAXException;

import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.PrintStream;

/**
* Transform a DBus interface XML into Java sources. This maven plugin is an
* interface on CreateInterface from dbus-java. Tested with dbus-java version
* 2.8.
*
* @goal generate
* @phase generate-sources
*/
public class DBusXMLMojo extends AbstractMojo {

    public static class FileStreamFactory extends CreateInterface.PrintStreamFactory {
        File targetdir;

        public FileStreamFactory(String targetdir) {
            this.targetdir = new File(targetdir);
        }

        public void init(String file, String path) {
            new File(targetdir, path).mkdirs();
        }

        public PrintStream createPrintStream(final String file) throws IOException {
            File output = new File(targetdir, file);
            return new PrintStream(new FileOutputStream(output));
        }
    }

    /**
     * @parameter expression="${project}"
     * @required
     * @readonly
     */
    private MavenProject project;

    /**
     * The source directory containing *.xml files.
     *
     * @parameter default-value="${basedir}/src/main/dbus"
     */
    private String interfaces;

    /**
     * The directory to output the generated sources to.
     *
     * @parameter default-value="${project.build.directory}/generated-sources/dbus
     */
    private File output;

    protected FilenameFilter xmlFiles = new FilenameFilter() {
        public boolean accept(File dir, String name) {
            boolean accept = name.toLowerCase().endsWith(".xml");
            if (accept)
                return true;

            getLog().warn("Ignoring non-xml file " + name);
            return false;
        }
    };

    public void execute() throws MojoExecutionException {
        String path = output.getPath();
        this.project.addCompileSourceRoot(path);

        File ifacedir = new File(interfaces);

        if(!ifacedir.exists()) {
            getLog().warn("Directory does not exist: " + interfaces);
            return;
        }
        File[] interfaceFiles = ifacedir.listFiles(xmlFiles);

        if (interfaceFiles.length == 0) {
            getLog().warn("There are no interfaces in " + interfaces);
            return;
        }

        for(File iface : interfaceFiles) {
            FileStreamFactory factory = new FileStreamFactory(path);
            CreateInterface createInterface = new CreateInterface(factory, false);
            FileReader input = null;
            try {
                input = new FileReader(iface);
            } catch (IOException e) {
                throw new MojoExecutionException("Could not read interface " +
                        "XML from " + iface.getPath(), e);
            }
            try {
                createInterface.createInterface(input);
            } catch (ParserConfigurationException e) {
                throw new MojoExecutionException("dbus-java internal error on XML parser", e);
            } catch (SAXException e) {
                throw new MojoExecutionException("Malformatted interface XML", e);
            } catch (IOException e) {
                throw new MojoExecutionException("Failed to write java source", e);
            } catch (DBusException e) {
                throw new MojoExecutionException("DBus error", e);
            }
        }
    }
}
TOP

Related Classes of net.windwards.mavendbusplugin.DBusXMLMojo$FileStreamFactory

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.