package betsy.bpel.engines.openesb; import java.nio.file.Path; import java.util.HashMap; import java.util.Map; import java.util.Objects; import betsy.common.config.Configuration; import betsy.common.tasks.ConsoleTasks; import betsy.common.tasks.FileTasks; import betsy.common.tasks.NetworkTasks; import betsy.common.util.ClasspathHelper; public class OpenEsbInstaller { private final Path path; private final String fileName; private final Path stateXmlTemplate; public OpenEsbInstaller(Path path, String fileName, Path stateXmlTemplate) { this.path = Objects.requireNonNull(path); this.fileName = Objects.requireNonNull(fileName); this.stateXmlTemplate = Objects.requireNonNull(stateXmlTemplate); } public void install() { // setup engine folder FileTasks.mkdirs(path); NetworkTasks.downloadFileFromBetsyRepo(fileName); FileTasks.deleteDirectory(path); FileTasks.mkdirs(path); Path stateXmlPath = path.resolve("state.xml").toAbsolutePath(); FileTasks.copyFileContentsToNewFile(stateXmlTemplate, stateXmlPath); Map<String, Object> replacements = new HashMap<>(); replacements.put("@INSTALL_PATH@", path.toAbsolutePath()); replacements.put("@JDK_LOCATION@", Configuration.getJava7Home()); replacements.put("@HTTP_PORT@", 8383); replacements.put("@HTTPS_PORT@", 8384); FileTasks.replaceTokensInFile(stateXmlPath, replacements); Path reinstallGlassFishBatPath = path.resolve("reinstallGlassFish.bat"); FileTasks.copyFileContentsToNewFile(ClasspathHelper.getFilesystemPathFromClasspathPath("/bpel/openesb/reinstallGlassFish.bat"), reinstallGlassFishBatPath); Path installationScript = Configuration.getDownloadsDir().resolve(fileName).toAbsolutePath(); ConsoleTasks.executeOnWindowsAndIgnoreError(ConsoleTasks.CliCommand.build(reinstallGlassFishBatPath). values(installationScript.toString(), stateXmlPath.toString())); ConsoleTasks.executeOnUnix(ConsoleTasks.CliCommand.build("chmod").values("+x", installationScript.toString())); ConsoleTasks.executeOnUnix(ConsoleTasks.CliCommand.build("sync")); ConsoleTasks.executeOnUnix( ConsoleTasks.CliCommand.build(path, installationScript). values("--silent", "--state", stateXmlPath.toString())); } }