package betsy.bpmn.engines.camunda;
import java.nio.file.Path;
import java.util.Optional;
import betsy.common.config.Configuration;
import betsy.common.tasks.ConsoleTasks;
import betsy.common.tasks.FileTasks;
import betsy.common.tasks.NetworkTasks;
import betsy.common.tasks.ZipTasks;
public class CamundaInstaller {
private Path destinationDir;
private String fileName = "camunda-bpm-tomcat-7.0.0-Final.zip";
private Optional<String> groovyFile = Optional.empty();
private String tomcatName;
public void install() {
FileTasks.deleteDirectory(destinationDir);
FileTasks.mkdirs(destinationDir);
NetworkTasks.downloadFileFromBetsyRepo(fileName);
ZipTasks.unzip(Configuration.getDownloadsDir().resolve(fileName), destinationDir);
if (groovyFile.isPresent()) {
NetworkTasks.downloadFileFromBetsyRepo(groovyFile.get());
FileTasks.copyFileIntoFolder(Configuration.getDownloadsDir().resolve(groovyFile.get()), getTomcatDestinationDir().resolve("lib"));
}
FileTasks.createFile(destinationDir.resolve("camunda_startup.bat"), cdToTomcatBinFolder() + " && call startup.bat");
FileTasks.createFile(destinationDir.resolve("camunda_shutdown.bat"), cdToTomcatBinFolder() + " && call shutdown.bat");
FileTasks.createFile(destinationDir.resolve("camunda_startup.sh"), cdToTomcatBinFolder() + " && ./startup.sh");
Path shutdown = destinationDir.resolve("camunda_shutdown.sh");
FileTasks.createFile(shutdown, cdToTomcatBinFolder() + " && ./shutdown.sh");
ConsoleTasks.executeOnUnix(ConsoleTasks.CliCommand.build("chmod").values("--recursive", "777", destinationDir.toAbsolutePath().toString()));
FileTasks.assertExecutableFile(shutdown);
}
private String cdToTomcatBinFolder() {
return "cd " + getTomcatBinFolder().toAbsolutePath();
}
public Path getTomcatDestinationDir() {
return destinationDir.resolve("server").resolve(tomcatName);
}
public Path getTomcatBinFolder() {
return getTomcatDestinationDir().resolve("bin");
}
@Override
public String toString() {
return "CamundaInstaller{" + "destinationDir=" + destinationDir + ", fileName='" + fileName + "\'" + ", groovyFile='" + groovyFile + "\'" + ", tomcatName='" + tomcatName + "\'" + "} " + super.toString();
}
public void setDestinationDir(Path destinationDir) {
this.destinationDir = destinationDir;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public void setGroovyFile(Optional<String> groovyFile) {
this.groovyFile = groovyFile;
}
public void setTomcatName(String tomcatName) {
this.tomcatName = tomcatName;
}
}