Package betsy.bpmn.engines.camunda

Source Code of betsy.bpmn.engines.camunda.CamundaResourcesGenerator

package betsy.bpmn.engines.camunda;

import ant.tasks.AntUtil;
import betsy.bpmn.engines.BPMNTester;
import betsy.common.config.Configuration;
import betsy.common.tasks.FileTasks;
import betsy.common.tasks.NetworkTasks;
import betsy.common.util.ClasspathHelper;
import org.apache.tools.ant.taskdefs.Javac;
import org.apache.tools.ant.taskdefs.War;
import org.apache.tools.ant.types.FileSet;

import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;

public class CamundaResourcesGenerator {
    private Path srcDir;
    private Path destDir;
    private String processName;
    private String groupId;
    private String version;

    public void generateWar() {
        //directory structure
        Path pomDir = destDir.resolve("META-INF/maven").resolve(groupId).resolve(processName);
        Path classesDir = destDir.resolve("WEB-INF/classes");
        Path srcDestDir = destDir.resolve("../src").normalize().toAbsolutePath();

        //setup infrastructure
        FileTasks.mkdirs(pomDir);
        FileTasks.mkdirs(classesDir);
        FileTasks.mkdirs(srcDestDir);

        //generate pom.properties
        FileTasks.createFile(pomDir.resolve("pom.properties"), "version=" + version + "\ngroupId=" + groupId + "\nartifactId=" + processName);

        //generate pom
        generatePom(pomDir);
        generateProcessesXml(classesDir);

        // dirty hack - as this has to be done once for the whole system
        new BPMNTester().setupPathToToolsJarForJavacAntTask();

        NetworkTasks.downloadFileFromBetsyRepo("javaee-api-7.0.jar");
        NetworkTasks.downloadFileFromBetsyRepo("camunda-engine-7.0.0-Final.jar");

        // generate and compile sources
        generateServletProcessApplication(srcDestDir);
        compileServletProcessApplication(srcDestDir, classesDir);

        createWar();
    }

    private void createWar() {
        War war = new War();
        war.setDestFile(destDir.resolve(processName + ".war").toFile());
        war.setNeedxmlfile(false);

        FileSet set = new FileSet();
        set.setDir(destDir.toFile());
        war.add(set);

        war.setTaskName("war");
        war.setProject(AntUtil.builder().getProject());

        war.execute();
    }

    private void compileServletProcessApplication(Path srcDestDir, Path classesDir) {
        Javac javac = new Javac();

        org.apache.tools.ant.types.Path sourceDirPath = new org.apache.tools.ant.types.Path(AntUtil.builder().getProject());
        sourceDirPath.setLocation(srcDestDir.toFile());

        javac.setSrcdir(sourceDirPath);
        javac.setDestdir(classesDir.toFile());
        javac.setIncludeantruntime(false);
        javac.setSource("1.7");
        javac.setTarget("1.7");

        org.apache.tools.ant.types.Path path = new org.apache.tools.ant.types.Path(AntUtil.builder().getProject());
        org.apache.tools.ant.types.Path camunda = new org.apache.tools.ant.types.Path(AntUtil.builder().getProject());
        camunda.setLocation(Configuration.getDownloadsDir().resolve("camunda-engine-7.0.0-Final.jar").toFile());
        org.apache.tools.ant.types.Path jee = new org.apache.tools.ant.types.Path(AntUtil.builder().getProject());
        jee.setLocation(Configuration.getDownloadsDir().resolve("javaee-api-7.0.jar").toFile());
        path.add(camunda);
        path.add(jee);
        javac.setClasspath(path);

        javac.setTaskName("javac");
        javac.setProject(AntUtil.builder().getProject());

        javac.execute();
    }

    private void generatePom(Path pomDir) {
        FileTasks.copyFileIntoFolder(ClasspathHelper.getFilesystemPathFromClasspathPath("/bpmn/camunda/pom.xml"), pomDir);
        Map<String, String> replacements = new HashMap<>();
        replacements.put("GROUP_ID", groupId);
        replacements.put("PROCESS_NAME", processName);
        replacements.put("_VERSION_", version);
        FileTasks.replaceTokensInFile(pomDir.resolve("pom.xml"), replacements);
    }

    private void generateProcessesXml(Path classesDir) {
        Path processesDir = classesDir.resolve("META-INF");
        FileTasks.mkdirs(processesDir);
        FileTasks.copyFileIntoFolder(ClasspathHelper.getFilesystemPathFromClasspathPath("/bpmn/camunda/processes.xml"), processesDir);
        FileTasks.replaceTokenInFile(processesDir.resolve("processes.xml"), "PROCESS_NAME", processName);
    }

    private void generateServletProcessApplication(Path srcDestDir) {
        Path processApplication = srcDestDir.resolve(getGroupIdAsPathValues()).resolve("ProcessTestApplication.java");
        FileTasks.copyFileContentsToNewFile(ClasspathHelper.getFilesystemPathFromClasspathPath("/bpmn/camunda/ProcessApplication.template"), processApplication);
        Map<String, String> replacements = new HashMap<>();
        replacements.put("GROUP_ID", groupId);
        replacements.put("PROCESS_NAME", processName);
        FileTasks.replaceTokensInFile(processApplication, replacements);
    }

    private String getGroupIdAsPathValues() {
        return groupId.replaceAll("\\.", "/");
    }

    public Path getSrcDir() {
        return srcDir;
    }

    public void setSrcDir(Path srcDir) {
        this.srcDir = srcDir;
    }

    public Path getDestDir() {
        return destDir;
    }

    public void setDestDir(Path destDir) {
        this.destDir = destDir;
    }

    public String getProcessName() {
        return processName;
    }

    public void setProcessName(String processName) {
        this.processName = processName;
    }

    public String getGroupId() {
        return groupId;
    }

    public void setGroupId(String groupId) {
        this.groupId = groupId;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }
}
TOP

Related Classes of betsy.bpmn.engines.camunda.CamundaResourcesGenerator

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.