package betsy.bpel.engines.wso2; 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.config.Configuration; import betsy.common.model.engine.EngineExtended; import betsy.common.tasks.ConsoleTasks; import betsy.common.tasks.FileTasks; import betsy.common.tasks.NetworkTasks; import betsy.common.tasks.URLTasks; import betsy.common.tasks.WaitTasks; import betsy.common.tasks.XSLTTasks; import betsy.common.tasks.ZipTasks; import betsy.common.timeouts.timeout.TimeoutRepository; import betsy.common.util.ClasspathHelper; import pebl.ProcessLanguage; public class Wso2Engine_v3_1_0 extends AbstractLocalBPELEngine { public static final String TEST_INTERFACE_SERVICE = "TestInterfaceService"; public static final String CHECK_URL = "https://localhost:9443/carbon"; @Override public Path getXsltPath() { return ClasspathHelper.getFilesystemPathFromClasspathPath("/bpel/ode"); } @Override public EngineExtended getEngineObject() { return new EngineExtended(ProcessLanguage.BPEL, "wso2", "3.1.0", LocalDate.of(2013, 12, 6), "Apache-2.0"); } @Override public void install() { FileTasks.deleteDirectory(getServerPath()); // setup engine folder FileTasks.mkdirs(getServerPath()); String fileName = getZipFileName(); NetworkTasks.downloadFileFromBetsyRepo(fileName); ZipTasks.unzip(Configuration.getDownloadsDir().resolve(fileName), getServerPath()); FileTasks.createFile(getServerPath().resolve("startup.bat"), "start \"" + getName() + "\" /min startup-helper.bat"); FileTasks.createFile(getServerPath().resolve("startup-helper.bat"), "cd " + getBinDir().toAbsolutePath() + " && call wso2server.bat"); ConsoleTasks.executeOnUnix(ConsoleTasks.CliCommand.build("chmod").values("--recursive", "777", getServerPath().toString())); } public String getZipFileName() { return "wso2bps-3.1.0.zip"; } @Override public void startup() { ConsoleTasks.executeOnWindows(ConsoleTasks.CliCommand.build(getServerPath(), "startup.bat")); ConsoleTasks.executeOnUnix(ConsoleTasks.CliCommand.build(getBinDir(), getBinDir().resolve("wso2server.sh")).values("start")); // start wso2 in background WaitTasks.sleep(TimeoutRepository.getTimeout("Wso2.startup.sleep").getTimeoutInMs()); Path logFile = getLogsFolder().resolve("wso2carbon.log"); TimeoutRepository.getTimeout("Wso2.startup").waitForSubstringInFile(getLogsFolder().resolve("wso2carbon.log"), "WSO2 Carbon started in "); } public Path getLogsFolder() { return getCarbonHome().resolve("repository").resolve("logs"); } public Path getBinDir() { return getCarbonHome().resolve("bin"); } public Path getCarbonHome() { return getServerPath().resolve("wso2bps-3.1.0"); } @Override public void shutdown() { ConsoleTasks.executeOnWindowsAndIgnoreError(ConsoleTasks.CliCommand.build("taskkill").values("/FI", "WINDOWTITLE eq " + getName() + "*")); if(Files.exists(getBinDir())) { ConsoleTasks.executeOnUnixAndIgnoreError(ConsoleTasks.CliCommand.build(getBinDir(), getBinDir().resolve("wso2server.sh")).values("stop")); WaitTasks.sleep(5000); // wait some time until it is shut down } } @Override public boolean isRunning() { return URLTasks.isUrlAvailable(CHECK_URL); } @Override public void deploy(String name, Path path) { new Wso2Deployer(getDeploymentDir(), getLogsFolder()) .deploy(path); } @Override public boolean isDeployed(QName process) { return new Wso2Deployer(getDeploymentDir(), getLogsFolder()) .isDeployed(process.getLocalPart()); } @Override public void undeploy(QName process) { new Wso2Deployer(getDeploymentDir(), getLogsFolder()) .undeploy(process); } public Path getDeploymentDir() { return getCarbonHome().resolve("repository").resolve("deployment").resolve("server").resolve("bpel"); } @Override public Path buildArchives(BPELProcess process) { getPackageBuilder().createFolderAndCopyProcessFilesToTarget(process); // engine specific steps XSLTTasks.transform(getXsltPath().resolve("bpel_to_ode_deploy_xml.xsl"), process.getProcess(), process.getTargetProcessPath().resolve("deploy.xml")); FileTasks.replaceTokenInFile(process.getTargetProcessPath().resolve("TestInterface.wsdl"), TEST_INTERFACE_SERVICE, process.getName() + TEST_INTERFACE_SERVICE); FileTasks.replaceTokenInFile(process.getTargetProcessPath().resolve("deploy.xml"), TEST_INTERFACE_SERVICE, process.getName() + TEST_INTERFACE_SERVICE); getPackageBuilder().replaceEndpointTokenWithValue(process); getPackageBuilder().replacePartnerTokenWithValue(process); getPackageBuilder().bpelFolderToZipFile(process); return process.getTargetPackageFilePath(); } @Override public String getEndpointUrl(String name) { return "http://localhost:9763" + "/services/" + name + TEST_INTERFACE_SERVICE; } @Override public List<Path> getLogs() { List<Path> result = new LinkedList<>(); result.addAll(FileTasks.findAllInFolder(getLogsFolder())); return result; } }