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));
}
}