package betsy.bpel.engines.openesb; import java.io.IOException; import java.nio.file.Files; 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.model.engine.EngineExtended; import betsy.common.tasks.FileTasks; import betsy.common.tasks.URLTasks; import betsy.common.tasks.XSLTTasks; import betsy.common.timeouts.timeout.TimeoutRepository; import betsy.common.util.ClasspathHelper; import betsy.common.util.OperatingSystem; import pebl.ProcessLanguage; public class OpenEsbEngine extends AbstractLocalBPELEngine { private static final String CHECK_URL = "http://localhost:18181"; private static final String CHECK_WHETHER_RUNNING_URL = "http://localhost:8383"; public Path getXsltPath() { return ClasspathHelper.getFilesystemPathFromClasspathPath("/bpel/openesb"); } @Override public EngineExtended getEngineObject() { return new EngineExtended(ProcessLanguage.BPEL, "openesb", "2.2", LocalDate.of(2009, 12, 1), "CDDL-1.0"); } @Override public String getEndpointUrl(String name) { return CHECK_URL + "/" + name + "TestInterface"; } @Override public List<Path> getLogs() { List<Path> result = new LinkedList<>(); result.addAll(FileTasks.findAllInFolder(getGlassfishHome().resolve("domains/domain1/logs/"), "*.log")); return result; } public OpenEsbCLI getCli() { return new OpenEsbCLI(getGlassfishHome()); } protected Path getGlassfishHome() { return getServerPath().resolve("glassfish"); } @Override public void startup() { getCli().startDomain(); TimeoutRepository.getTimeout("OpenEsb.startup").waitForAvailabilityOfUrl(CHECK_WHETHER_RUNNING_URL); } @Override public void shutdown() { getCli().stopDomain(); } @Override public void install() { if (OperatingSystem.WINDOWS) { new OpenEsbInstaller(getServerPath(), "glassfishesb-v2.2-full-installer-windows.exe", ClasspathHelper.getFilesystemPathFromClasspathPath("/bpel/openesb/windows_state.xml.template")).install(); } else { new OpenEsbInstaller(getServerPath(), "glassfishesb-v2.2-full-installer-linux.sh", ClasspathHelper.getFilesystemPathFromClasspathPath("/bpel/openesb/state.xml.template")).install(); } } @Override public void deploy(String name, Path path) { OpenEsbDeployer deployer = new OpenEsbDeployer(getCli()); Path tmpfolder = path.getParent().resolve("TMPFOLDER"); FileTasks.mkdirs(tmpfolder); deployer.deploy(name, path, tmpfolder); } @Override public boolean isDeployed(QName process) { return Files.exists(getGlassfishHome().resolve("domains/domain1").resolve("jbi").resolve("service-assemblies").resolve(process.getLocalPart()+ "Application")); } @Override public void undeploy(QName process) { OpenEsbDeployer deployer = new OpenEsbDeployer(getCli()); Path tmpfolder = null; try { tmpfolder = Files.createTempDirectory("betsy-openesb-2").resolve("TMPFOLDER"); } catch (IOException e) { throw new RuntimeException(e); } FileTasks.mkdirs(tmpfolder); deployer.undeploy(process.getLocalPart(), tmpfolder); } @Override public Path buildArchives(BPELProcess process) { getPackageBuilder().createFolderAndCopyProcessFilesToTarget(process); // engine specific steps buildDeploymentDescriptor(process); FileTasks.replaceTokenInFile(process.getTargetProcessPath().resolve("TestInterface.wsdl"), "TestInterfaceService", process.getName() + "TestInterfaceService"); getPackageBuilder().replaceEndpointTokenWithValue(process); getPackageBuilder().replacePartnerTokenWithValue(process); getPackageBuilder().bpelFolderToZipFile(process); new OpenEsbCompositePackager(process).build(); return process.getTargetPackageCompositeFilePath(); } public void buildDeploymentDescriptor(BPELProcess process) { Path metaDir = process.getTargetProcessPath().resolve("META-INF"); Path catalogFile = metaDir.resolve("catalog.xml"); FileTasks.mkdirs(metaDir); FileTasks.createFile(catalogFile, "<?xml version='1.0' encoding='UTF-8' standalone='no'?>\n<catalog xmlns='urn:oasis:names:tc:entity:xmlns:xml:catalog' prefer='system'>\n</catalog>"); FileTasks.createFile(metaDir.resolve("MANIFEST.MF"), "Manifest-Version: 1.0"); XSLTTasks.transform(getXsltPath().resolve("create_jbi_from_bpel.xsl"), process.getTargetProcessFilePath(), metaDir.resolve("jbi.xml")); } @Override public boolean isRunning() { return URLTasks.isUrlAvailable(CHECK_WHETHER_RUNNING_URL); } }