1 /* 2 * Copyright (c) 2015, 2016 Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 */ 5 package com.oracle.appbundlers.tests; 6 7 import java.io.File; 8 import java.util.HashMap; 9 import java.util.Map; 10 import java.util.logging.Level; 11 import java.util.logging.Logger; 12 import java.util.stream.Collectors; 13 14 import com.oracle.appbundlers.tests.functionality.parameters.ExplodedModuleParameters; 15 import com.oracle.appbundlers.tests.functionality.parameters.JmodParameters; 16 import com.oracle.appbundlers.tests.functionality.parameters.ModularJarParameters; 17 import com.oracle.appbundlers.tests.functionality.parameters.NormalJarParameters; 18 import com.oracle.appbundlers.utils.AppWrapper; 19 import com.oracle.appbundlers.utils.Constants; 20 import com.oracle.tools.packager.Bundlers; 21 import com.oracle.tools.packager.ConfigException; 22 import com.oracle.tools.packager.UnsupportedPlatformException; 23 import com.sun.javafx.tools.packager.Log; 24 25 import javafx.application.Application; 26 import javafx.application.Platform; 27 import javafx.geometry.Insets; 28 import javafx.scene.Scene; 29 import javafx.scene.control.Button; 30 import javafx.scene.control.CheckBox; 31 import javafx.scene.layout.VBox; 32 import javafx.stage.Stage; 33 34 /** 35 * @author Dmitry Ginzburg <dmitry.x.ginzburg@oracle.com> 36 */ 37 public class AppBundlersSampleGUI extends Application implements Constants { 38 39 private final Logger LOG = Logger 40 .getLogger(AppBundlersSampleGUI.class.getName()); 41 42 private AppWrapper app; 43 44 private Map<String, Object> params; 45 46 @Override 47 public void start(Stage primaryStage) { 48 final CheckBox fxAppCheckBox = new CheckBox("Java App"); 49 final Button buildButton = new Button("Build application"); 50 final CheckBox verbose = new CheckBox("Verbose output/Debug"); 51 52 final VBox root = new VBox(); 53 root.getChildren().addAll(fxAppCheckBox, verbose, buildButton); 54 root.setPadding(new Insets(10, 10, 10, 10)); 55 root.setSpacing(5); 56 57 final Scene scene = new Scene(root); 58 59 buildButton.setOnAction((ev) -> { 60 try { 61 if (verbose.isSelected()) { 62 Log.setLogger(new Log.Logger(true)); 63 Log.setDebug(true); 64 } 65 createParametersAndExecuteAppBundler(new NormalJarParameters()); 66 createParametersAndExecuteAppBundler( 67 new ExplodedModuleParameters()); 68 createParametersAndExecuteAppBundler( 69 new ModularJarParameters()); 70 createParametersAndExecuteAppBundler(new JmodParameters()); 71 } finally { 72 Platform.exit(); 73 } 74 }); 75 76 primaryStage.setTitle("AppBundlers Sample GUI"); 77 primaryStage.setScene(scene); 78 primaryStage.show(); 79 } 80 81 private void executeAppBundler() { 82 Bundlers.createBundlersInstance().getBundlers().stream() 83 .filter((bundler) -> { 84 try { 85 bundler.validate(params); 86 return true; 87 } catch (ConfigException ex) { 88 LOG.log(Level.SEVERE, 89 "Failed to create bundler \"{0}\": {1}.", 90 new Object[] { bundler.getID(), ex }); 91 return false; 92 } catch (UnsupportedPlatformException ex) { 93 LOG.log(Level.INFO, 94 "Current platform is not supported by \"{0}\".", 95 bundler.getID()); 96 return false; 97 } 98 }).forEach((bundler) -> { 99 String paramStr = params.entrySet().stream() 100 .map((e) -> String.format("%s = %s", e.getKey(), 101 e.getValue())) 102 .collect(Collectors.joining("\n")); 103 LOG.log(Level.INFO, "Executing bundler: {0}, params:\n{1}", 104 new Object[] { bundler.getID(), paramStr }); 105 File result = bundler.execute(params, 106 app.getBundlesDir().toFile()); 107 LOG.log(Level.INFO, "Finished with result: {0}", result); 108 }); 109 } 110 111 /** 112 * @param args 113 * the command line arguments 114 */ 115 public static void main(String[] args) { 116 launch(args); 117 } 118 119 private void createParametersAndExecuteAppBundler( 120 com.oracle.appbundlers.tests.functionality.parameters.Parameters parameters) { 121 try { 122 parameters.initializeDefaultApp(); 123 this.app = parameters.getApp(); 124 System.out.println( 125 "Writing app to app directory: " + app.getWorkDir()); 126 this.app.preinstallApp(parameters.getExtension()); 127 this.app.writeSourcesToAppDirectory(); 128 this.app.compileApp(); 129 this.app.jarApp(parameters.getExtension()); 130 } catch (Exception e) { 131 e.printStackTrace(); 132 } 133 134 Map<String, Object> basicParams = null; 135 Map<String, Object> additionalParams = null; 136 try { 137 basicParams = parameters.getBasicParams(); 138 additionalParams = parameters.getAdditionalParams(); 139 } catch (Exception exp) { 140 exp.printStackTrace(); 141 } 142 143 this.params = new HashMap<>(); 144 this.params.putAll(basicParams); 145 this.params.putAll(additionalParams); 146 147 executeAppBundler(); 148 } 149 }