package betsy.bpel.engines.activebpel;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
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 org.apache.log4j.Logger;
import pebl.ProcessLanguage;
public class ActiveBpelEngine extends AbstractLocalBPELEngine {
private static final Logger log = Logger.getLogger(ActiveBpelEngine.class);
@Override
public EngineExtended getEngineObject() {
return new EngineExtended(ProcessLanguage.BPEL, "activebpel", "5.0.2", LocalDate.of(2008, 5, 9), "GPL-2.0+");
}
public Path getXsltPath() {
return ClasspathHelper.getFilesystemPathFromClasspathPath("/bpel/active-bpel");
}
@Override
public String getEndpointUrl(String name) {
return getTomcat().getTomcatUrl() + "/active-bpel/services/" + name + "TestInterfaceService";
}
public Tomcat getTomcat() {
return Tomcat.v5(getServerPath());
}
public Path getDeploymentDir() {
return getTomcat().getTomcatDir().resolve("bpr");
}
@Override
public List<Path> getLogs() {
List<Path> result = new LinkedList<>();
result.addAll(FileTasks.findAllInFolder(getTomcat().getTomcatLogsDir()));
result.add(getAeDeploymentLog());
return result;
}
private static Path getAeDeploymentLog() {
String homeDir = System.getProperty("user.home");
// ensure that homeDir ends with File.separator
homeDir = homeDir.endsWith(File.separator) ? homeDir : homeDir + File.separator;
Path homeDirPath = Paths.get(homeDir);
return homeDirPath.resolve("AeBpelEngine/deployment-logs/aeDeployment.log");
}
@Override
public void startup() {
Tomcat tomcat = getTomcat();
tomcat.setJavaVersion(Tomcat.JavaVersion.V7);
tomcat.startup();
}
@Override
public void shutdown() {
getTomcat().shutdown();
}
@Override
public boolean isRunning() {
return getTomcat().checkIfIsRunning();
}
@Override
public void install() {
new ActiveBpelInstaller(getServerPath()).install();
}
@Override
public void deploy(String name, Path path) {
new ActiveBpelDeployer(getDeploymentDir(), getAeDeploymentLog()).
deploy(path, name);
}
@Override
public boolean isDeployed(QName process) {
return new ActiveBpelDeployer(getDeploymentDir(), getAeDeploymentLog())
.isDeployed(process);
}
@Override
public void undeploy(QName process) {
new ActiveBpelDeployer(getDeploymentDir(), getAeDeploymentLog())
.undeploy(process);
}
public Path buildArchives(BPELProcess process) {
getPackageBuilder().createFolderAndCopyProcessFilesToTarget(process);
// create deployment descriptor
Path metaDir = process.getTargetProcessPath().resolve("META-INF");
FileTasks.createFile(metaDir.resolve("MANIFEST.MF"), "Manifest-Version: 1.0");
XSLTTasks.transform(getXsltPath().resolve("active-bpel_to_deploy_xml.xsl"), process.getProcess(), metaDir.resolve(process.getName() + ".pdd"));
XSLTTasks.transform(getXsltPath().resolve("active-bpel_to_catalog.xsl"), process.getProcess(), metaDir.resolve("catalog.xml"));
getPackageBuilder().replaceEndpointTokenWithValue(process);
getPackageBuilder().replacePartnerTokenWithValue(process);
getPackageBuilder().bpelFolderToZipFile(process);
// create bpr file
FileTasks.move(process.getTargetPackageFilePath(), process.getTargetPackageFilePath("bpr"));
return process.getTargetPackageFilePath("bpr");
}
}