package betsy.bpmn; import java.awt.Desktop; import java.nio.file.Paths; import java.util.List; import java.util.stream.Collectors; import betsy.bpmn.cli.BPMNCliParameter; import betsy.bpmn.cli.BPMNCliParser; import betsy.bpmn.engines.AbstractBPMNEngine; import betsy.bpmn.model.BPMNProcess; import betsy.common.timeouts.calibration.CalibrationTimeoutRepository; import org.apache.log4j.Logger; import org.apache.log4j.xml.DOMConfigurator; import org.codehaus.groovy.runtime.StackTraceUtils; import pebl.benchmark.test.Test; public class BPMNMain { private static final Logger LOGGER = Logger.getLogger(BPMNMain.class); public static void main(String... args) { activateLogging(); // parsing cli params BPMNCliParser parser = new BPMNCliParser(args); BPMNCliParameter params = parser.parse(); // usage information if required if (params.showHelp()) { parser.printUsage(); return; } try { printSelectedEnginesAndProcesses(params.getEngines(), params.getProcesses()); BPMNBetsy betsy = new BPMNBetsy(); onlyBuildSteps(params, betsy); betsy.setEngines(params.getEngines()); betsy.setProcesses(params.getProcesses()); betsy.setTestFolder(params.getTestFolderName()); if (params.keepEngineRunning() && params.useInstalledEngine()) { betsy.setComposite(new BPMNComposite() { @Override protected void shutdown(BPMNProcess process) { // keep engine running - no shutdown! } @Override protected void install(BPMNProcess process) { // is already installed - use existing installation } }); } else if (params.keepEngineRunning() && params.useRunningEngine()) { betsy.setComposite(new BPMNComposite() { @Override protected void checkRunning(AbstractBPMNEngine engine) { // no checks as the engine should be running } @Override protected void start(BPMNProcess process) { // already started } @Override protected void shutdown(BPMNProcess process) { // keep engine running - no shutdown! } @Override protected void install(BPMNProcess process) { // is already installed - use existing installation } }); } else if (params.useInstalledEngine()) { betsy.setComposite(new BPMNComposite() { @Override protected void install(BPMNProcess process) { // is already installed - use existing installation } }); } else if (params.keepEngineRunning()) { betsy.setComposite(new BPMNComposite() { @Override protected void shutdown(BPMNProcess process) { // keep engine running - no shutdown! } }); } // execute try { betsy.execute(); } catch (Exception e) { Throwable cleanedException = StackTraceUtils.deepSanitize(e); LOGGER.error("something went wrong during execution", cleanedException); } // open results in browser if (params.openResultsInBrowser()) { try { Desktop.getDesktop().browse(Paths.get("test/reports/results.html").toUri()); } catch (Exception ignore) { // ignore any exceptions } } if(params.saveTimeouts()){ CalibrationTimeoutRepository.writeToCSV(); } } catch (Exception e) { Throwable cleanedException = StackTraceUtils.deepSanitize(e); LOGGER.error(cleanedException.getMessage(), cleanedException); } } protected static void activateLogging() { // activate log4j logging DOMConfigurator.configure(BPMNMain.class.getResource("/log4j.xml")); // set log4j property to avoid conflicts with soapUIs -> effectly disabling soapUI's own logging System.setProperty("soapui.log4j.config", "src/main/resources/soapui-log4j.xml"); } protected static void printSelectedEnginesAndProcesses(List<AbstractBPMNEngine> engines, List<Test> processes) { // print selection of engines and processes LOGGER.info("Engines (" + engines.size() + "): " + ((List<? extends pebl.HasName>) engines).stream().map(pebl.HasName::getName).collect(Collectors.toList())); LOGGER.info("Processes (" + processes.size() + "): " + ((List<? extends pebl.HasName>) processes).stream().map(pebl.HasName::getName).collect(Collectors.toList()).stream().limit(10).collect(Collectors.toList())); } public static void onlyBuildSteps(BPMNCliParameter params, BPMNBetsy betsy) { if (params.buildArtifactsOnly()) { betsy.setComposite(new BPMNComposite() { @Override protected void collect(BPMNProcess process) { } @Override protected void test(BPMNProcess process) { } @Override protected void start(BPMNProcess process) { } @Override protected void deploy(BPMNProcess process) { } @Override protected void shutdown(BPMNProcess process) { } @Override protected void createReports() { } }); } } }