package betsy.bpel.engines.orchestra; import java.io.File; import java.nio.file.Path; import java.util.Date; import java.util.Objects; import javax.xml.namespace.QName; import betsy.common.tasks.FileTasks; import org.apache.tools.ant.Project; import org.apache.tools.ant.ProjectHelper; public class OrchestraDeployer { private final Path orchestraHome; public OrchestraDeployer(Path orchestraHome) { this.orchestraHome = Objects.requireNonNull(orchestraHome); } public void deploy(Path packageFilePath, String processName) { Project p = loadAntBuildFile(); p.setProperty("bar", packageFilePath.toAbsolutePath().toString()); p.executeTarget("deploy"); FileTasks.createFile(getDeploymentMarkerFile(processName), "deployment done at " + new Date()); } private Project loadAntBuildFile() { File buildFile = orchestraHome.resolve("build.xml").toFile(); Project p = new Project(); p.setUserProperty("ant.file", buildFile.getAbsolutePath()); p.init(); ProjectHelper helper = ProjectHelper.getProjectHelper(); p.addReference("ant.projectHelper", helper); helper.parse(p, buildFile); return p; } public void undeploy(QName processQName) { Project p = loadAntBuildFile(); p.setProperty("process", processQName.toString()); p.executeTarget("undeploy"); FileTasks.deleteFile(getDeploymentMarkerFile(processQName.getLocalPart())); } private Path getDeploymentMarkerFile(String processName) { return orchestraHome.resolve(processName + ".deployed"); } public boolean isDeployed(String processName) { return FileTasks.hasFile(getDeploymentMarkerFile(processName)); } }