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 }