neembuu.uploader.zip.generator.NUCompiler.java Source code

Java tutorial

Introduction

Here is the source code for neembuu.uploader.zip.generator.NUCompiler.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package neembuu.uploader.zip.generator;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import javax.tools.Diagnostic;
import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import neembuu.uploader.zip.generator.utils.CompilerUtils;
import neembuu.uploader.zip.generator.utils.NUFileUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.TrueFileFilter;

/**
 * Compiler class. It compiles files from the packages.
 *
 * @author davidepastore
 */
public class NUCompiler {

    private File gitDirectory;

    /**
     * The directory for the api project.
     */
    public static final String API_DIRECTORY = "\\modules\\neembuu-uploader-api\\src";

    /**
     * The directory for the interface abstractimpl project.
     */
    public static final String INTERFACE_ABSTRACT_IMPL_DIRECTORY = "\\modules\\neembuu-uploader-interfaces-abstractimpl\\src";

    /**
     * The directory for the plugins project.
     */
    public static final String UPLOADERS_DIRECTORY = "\\modules\\neembuu-uploader-uploaders\\src";

    /**
     * The directory for the utils project.
     */
    public static final String UTILS_DIRECTORY = "\\modules\\neembuu-uploader-utils\\src";

    /**
     * The classpath.
     */
    private String classPath = "";

    /**
     * Constructor of the NUCompiler class.
     *
     * @param gitDirectory The git directory.
     */
    public NUCompiler(File gitDirectory) {
        this.gitDirectory = gitDirectory;
        addJarToClasspath();
    }

    /**
     * Compile all the api.
     *
     * @throws IOException
     */
    public void compileApi() throws IOException {
        File srcDir = new File(gitDirectory.getAbsolutePath() + API_DIRECTORY);
        compileFiles(NUFileUtils.listAllJavaFiles(srcDir));
    }

    /**
     * Compile all the interfaces and the abstract implementations.
     *
     * @throws IOException
     */
    public void compileIntAbsImpl() throws IOException {
        File srcDir = new File(gitDirectory.getAbsolutePath() + INTERFACE_ABSTRACT_IMPL_DIRECTORY);
        compileFiles(NUFileUtils.listAllJavaFiles(srcDir));
    }

    /**
     * Compile all the uploaders/accounts.
     *
     * @throws java.io.IOException
     */
    public void compileUploaders() throws IOException {
        File srcDir = new File(gitDirectory.getAbsolutePath() + UPLOADERS_DIRECTORY);
        compileFiles(NUFileUtils.listAllJavaFiles(srcDir));
    }

    /**
     * Compile all the utils.
     *
     * @throws IOException
     */
    public void compileUtils() throws IOException {
        File srcDir = new File(gitDirectory.getAbsolutePath() + UTILS_DIRECTORY);
        compileFiles(NUFileUtils.listAllJavaFiles(srcDir));
    }

    /**
     * Compile all the given files.
     *
     * @param files All the files.
     */
    private void compileFiles(Collection files) throws IOException {
        File[] resultFiles = (File[]) files.toArray(new File[files.size()]);
        File buildDir = CompilerUtils.getBuildDirectory(resultFiles[0]);
        compileFiles(resultFiles, buildDir);

        //Add to the classpath
        classPath += buildDir.getAbsolutePath() + ";";
    }

    /**
     * Compile all the given files in the given build directory.
     *
     * @param files The array of files to compiles.
     * @param buildDirectory The build directory in which put all the compiled
     * files.
     * @throws FileNotFoundException
     * @throws IOException
     */
    private void compileFiles(File[] files, File buildDirectory) throws FileNotFoundException, IOException {
        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        buildDirectory.mkdir();

        /**/
        List<String> optionList = new ArrayList<String>();
        // set compiler's classpath to be same as the runtime's
        //optionList.addAll(Arrays.asList("-classpath", "C:\\neembuuuploader\\modules\\libs\\jsoup-1.7.2.jar;C:\\neembuuuploader\\modules\\libs\\ApacheHttpComponent-4.2.5\\commons-codec-1.6.jar;C:\\neembuuuploader\\modules\\libs\\ApacheHttpComponent-4.2.5\\commons-logging-1.1.1.jar;C:\\neembuuuploader\\modules\\libs\\ApacheHttpComponent-4.2.5\\httpclient-4.2.5.jar;C:\\neembuuuploader\\modules\\libs\\ApacheHttpComponent-4.2.5\\httpclient-cache-4.2.5.jar;C:\\neembuuuploader\\modules\\libs\\ApacheHttpComponent-4.2.5\\httpcore-4.2.4.jar;C:\\neembuuuploader\\modules\\libs\\ApacheHttpComponent-4.2.5\\httpmime-4.2.5.jar;C:\\neembuuuploader\\modules\\libs\\json-java.jar;C:\\neembuuuploader\\modules\\neembuu-uploader-utils\\build\\classes;C:\\neembuuuploader\\modules\\neembuu-uploader-api\\build\\classes;C:\\neembuuuploader\\modules\\neembuu-uploader-interfaces-abstractimpl\\build\\classes;C:\\neembuuuploader\\modules\\libs\\neembuu-now-api-ui.jar;C:\\neembuuuploader\\modules\\libs\\neembuu-release1-ui-mc.jar;C:\\neembuuuploader\\modules\\neembuu-uploader-uploaders\\build\\classes;C:\\neembuuuploader\\modules\\NeembuuUploader\\build\\classes"));
        optionList.addAll(Arrays.asList("-classpath", classPath));
        optionList.addAll(Arrays.asList("-d", buildDirectory.getAbsolutePath()));

        StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
        Iterable<? extends JavaFileObject> compilationUnits = fileManager
                .getJavaFileObjectsFromFiles(Arrays.asList(files));

        DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();

        JavaCompiler.CompilationTask task = compiler.getTask(null, null, diagnostics, optionList, null,
                compilationUnits);
        boolean result = task.call();

        if (result) {
            System.out.println("Compilation was successful");
        } else {
            System.out.println("Compilation failed");

            for (Diagnostic diagnostic : diagnostics.getDiagnostics()) {
                System.out.format("Error on line %d in %s", diagnostic.getLineNumber(), diagnostic);
            }
        }
    }

    /**
     * Add all the jar to the classpath.
     */
    private void addJarToClasspath() {
        Collection<File> filesList = NUFileUtils.listAllFilesWithExt(gitDirectory, "jar");

        for (File file : filesList) {
            classPath += file.getAbsolutePath() + ";";
        }

        System.out.println("Classpath: " + classPath);
    }

}