package betsy.bpel.engines.bpelg;
import java.nio.file.Path;
import java.time.LocalDate;
import java.util.LinkedList;
import java.util.List;
import javax.xml.namespace.QName;
import betsy.bpel.engines.AbstractLocalBPELEngine;
import betsy.bpel.model.BPELProcess;
import betsy.common.engines.tomcat.Tomcat;
import betsy.common.model.engine.EngineExtended;
import betsy.common.tasks.FileTasks;
import betsy.common.tasks.XSLTTasks;
import betsy.common.util.ClasspathHelper;
import pebl.ProcessLanguage;
public class BpelgEngine extends AbstractLocalBPELEngine {
public Path getXsltPath() {
return ClasspathHelper.getFilesystemPathFromClasspathPath("/bpel/bpelg");
}
@Override
public EngineExtended getEngineObject() {
// TODO this is the snapshot release, the real 5.3 was released on 2012-12-26
return new EngineExtended(ProcessLanguage.BPEL, "bpelg", "5.3", LocalDate.of(2012, 4, 27), "GPL-2.0+");
}
public Path getDeploymentDir() {
return getTomcat().getTomcatDir().resolve("bpr");
}
@Override
public List<Path> getLogs() {
List<Path> result = new LinkedList<>();
result.addAll(FileTasks.findAllInFolder(getTomcat().getTomcatLogsDir()));
return result;
}
@Override
public boolean isRunning() {
return getTomcat().checkIfIsRunning();
}
@Override
public String getEndpointUrl(String name) {
return getTomcat().getTomcatUrl() + "/bpel-g/services/" + name + "TestInterfaceService";
}
public Tomcat getTomcat() {
return Tomcat.v7(getServerPath());
}
@Override
public void startup() {
getTomcat().startup();
}
@Override
public void shutdown() {
getTomcat().shutdown();
}
@Override
public void install() {
new BpelgInstaller(getServerPath(), "bpel-g-5.3.war").install();
}
@Override
public void deploy(String name, Path path) {
new BpelgDeployer(getDeploymentDir(), getTomcat().getTomcatLogsDir().resolve("bpelg.log"))
.deploy(path, name);
}
@Override public boolean isDeployed(QName process) {
return new BpelgDeployer(getDeploymentDir(), getTomcat().getTomcatLogsDir().resolve("bpelg.log"))
.isDeployed(process.getLocalPart());
}
@Override public void undeploy(QName process) {
new BpelgDeployer(getDeploymentDir(), getTomcat().getTomcatLogsDir().resolve("bpelg.log"))
.undeploy(process.getLocalPart());
}
@Override
public Path buildArchives(final BPELProcess process) {
getPackageBuilder().createFolderAndCopyProcessFilesToTarget(process);
// deployment descriptor
XSLTTasks.transform(getXsltPath().resolve("bpelg_bpel_to_deploy_xml.xsl"), process.getProcess(), process.getTargetProcessPath().resolve("deploy.xml"));
// remove unimplemented methods
for (String pattern : Util.computeMatchingPattern(process)) {
FileTasks.copyFileContentsToNewFile(process.getTargetProcessPath().resolve("TestInterface.wsdl"),
process.getTargetTmpPath().resolve("TestInterface.wsdl.before_removing_" + pattern));
XSLTTasks.transform(getXsltPath().resolve("bpelg_prepare_wsdl.xsl"),
process.getTargetTmpPath().resolve("TestInterface.wsdl.before_removing_" + pattern),
process.getTargetTmpPath().resolve("TestInterface.wsdl.after_removing_" + pattern),
"deletePattern", pattern);
FileTasks.copyFileIntoFolderAndOverwrite(process.getTargetTmpPath().resolve("TestInterface.wsdl.after_removing_" + pattern),
process.getTargetProcessPath());
}
// uniquify service name
FileTasks.replaceTokenInFile(process.getTargetProcessPath().resolve("TestInterface.wsdl"), "TestInterfaceService", process.getName() + "TestInterfaceService");
FileTasks.replaceTokenInFile(process.getTargetProcessPath().resolve("deploy.xml"), "TestInterfaceService", process.getName() + "TestInterfaceService");
getPackageBuilder().replaceEndpointTokenWithValue(process);
getPackageBuilder().replacePartnerTokenWithValue(process);
getPackageBuilder().bpelFolderToZipFile(process);
return process.getTargetPackageFilePath();
}
}