src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WinMsiBundler.java
branchJDK-8200758-branch
changeset 57438 4a31db8d42bd
parent 57414 6eda749d3117
child 57473 3ef9726d7eec
--- a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WinMsiBundler.java	Fri Jun 21 10:14:49 2019 -0400
+++ b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WinMsiBundler.java	Thu Jun 27 17:44:18 2019 -0400
@@ -167,37 +167,28 @@
             + "C:\\Program Files (x86)\\WiX Toolset v3.7\\bin;"
             + "C:\\Program Files\\WiX Toolset v3.7\\bin";
 
-    public static final BundlerParamInfo<String> TOOL_CANDLE_EXECUTABLE =
-            new WindowsBundlerParam<>(
-            "win.msi.candle.exe",
-            String.class,
-            params -> {
-                for (String dirString : (System.getenv("PATH") +
-                        AUTODETECT_DIRS).split(";")) {
-                    File f = new File(dirString.replace("\"", ""), TOOL_CANDLE);
-                    if (f.isFile()) {
-                        return f.toString();
-                    }
-                }
-                return null;
-            },
-            null);
+    private static String getCandlePath() {
+        for (String dirString : (System.getenv("PATH")
+                + AUTODETECT_DIRS).split(";")) {
+            File f = new File(dirString.replace("\"", ""), TOOL_CANDLE);
+            if (f.isFile()) {
+                return f.toString();
+            }
+        }
+        return null;
+    }
 
-    public static final BundlerParamInfo<String> TOOL_LIGHT_EXECUTABLE =
-            new WindowsBundlerParam<>(
-            "win.msi.light.exe",
-            String.class,
-            params -> {
-                for (String dirString : (System.getenv("PATH") +
-                        AUTODETECT_DIRS).split(";")) {
-                    File f = new File(dirString.replace("\"", ""), TOOL_LIGHT);
-                    if (f.isFile()) {
-                        return f.toString();
-                    }
-                }
-                return null;
-            },
-            null);
+    private static String getLightPath() {
+        for (String dirString : (System.getenv("PATH")
+                + AUTODETECT_DIRS).split(";")) {
+            File f = new File(dirString.replace("\"", ""), TOOL_LIGHT);
+            if (f.isFile()) {
+                return f.toString();
+            }
+        }
+        return null;
+    }
+        
 
     public static final StandardBundlerParam<Boolean> MENU_HINT =
         new WindowsBundlerParam<>(
@@ -227,11 +218,6 @@
     }
 
     @Override
-    public String getDescription() {
-        return I18N.getString("msi.bundler.description");
-    }
-
-    @Override
     public String getID() {
         return "msi";
     }
@@ -242,28 +228,6 @@
     }
 
     @Override
-    public Collection<BundlerParamInfo<?>> getBundleParameters() {
-        Collection<BundlerParamInfo<?>> results = new LinkedHashSet<>();
-        results.addAll(WinAppBundler.getAppBundleParameters());
-        results.addAll(getMsiBundleParameters());
-        return results;
-    }
-
-    public static Collection<BundlerParamInfo<?>> getMsiBundleParameters() {
-        return Arrays.asList(
-                DESCRIPTION,
-                MENU_GROUP,
-                MENU_HINT,
-                PRODUCT_VERSION,
-                SHORTCUT_HINT,
-                MSI_SYSTEM_WIDE,
-                VENDOR,
-                LICENSE_FILE,
-                INSTALLDIR_CHOOSER
-        );
-    }
-
-    @Override
     public File execute(Map<String, ? super Object> params,
             File outputParentDir) throws PackagerException {
         return bundle(params, outputParentDir);
@@ -271,7 +235,15 @@
 
     @Override
     public boolean supported(boolean platformInstaller) {
-        return (Platform.getPlatform() == Platform.WINDOWS);
+        return isSupported();
+    }
+
+    public static boolean isSupported() {
+        try {
+            return validateWixTools();
+        } catch (Exception e) {
+            return false;
+        }
     }
 
     private static String findToolVersion(String toolName) {
@@ -297,9 +269,31 @@
         }
     }
 
+    public static boolean validateWixTools() {
+        String candleVersion = findToolVersion(getCandlePath());
+        String lightVersion = findToolVersion(getLightPath());
+
+        // WiX 3.0+ is required
+        String minVersion = "3.0";
+
+        if (VersionExtractor.isLessThan(candleVersion, minVersion)) {
+            Log.verbose(MessageFormat.format(
+                    I18N.getString("message.wrong-tool-version"),
+                    TOOL_CANDLE, candleVersion, minVersion));
+            return false;
+        }
+        if (VersionExtractor.isLessThan(lightVersion, minVersion)) {
+            Log.verbose(MessageFormat.format(
+                    I18N.getString("message.wrong-tool-version"),
+                    TOOL_LIGHT, lightVersion, minVersion));
+            return false;
+        }
+        return true;
+    }
+
     @Override
     public boolean validate(Map<String, ? super Object> params)
-            throws UnsupportedPlatformException, ConfigException {
+            throws ConfigException {
         try {
             if (params == null) throw new ConfigException(
                     I18N.getString("error.parameters-null"),
@@ -307,36 +301,13 @@
 
             // run basic validation to ensure requirements are met
             // we are not interested in return code, only possible exception
-            APP_BUNDLER.fetchFrom(params).validate(params);
-
-            String candleVersion =
-                    findToolVersion(TOOL_CANDLE_EXECUTABLE.fetchFrom(params));
-            String lightVersion =
-                    findToolVersion(TOOL_LIGHT_EXECUTABLE.fetchFrom(params));
-
-            // WiX 3.0+ is required
-            String minVersion = "3.0";
-            boolean bad = false;
-
-            if (VersionExtractor.isLessThan(candleVersion, minVersion)) {
-                Log.verbose(MessageFormat.format(
-                        I18N.getString("message.wrong-tool-version"),
-                        TOOL_CANDLE, candleVersion, minVersion));
-                bad = true;
-            }
-            if (VersionExtractor.isLessThan(lightVersion, minVersion)) {
-                Log.verbose(MessageFormat.format(
-                        I18N.getString("message.wrong-tool-version"),
-                        TOOL_LIGHT, lightVersion, minVersion));
-                bad = true;
-            }
-
-            if (bad){
+            if (!validateWixTools()){
                 throw new ConfigException(
                         I18N.getString("error.no-wix-tools"),
                         I18N.getString("error.no-wix-tools.advice"));
             }
 
+            String lightVersion = findToolVersion(getLightPath());
             if (!VersionExtractor.isLessThan(lightVersion, "3.6")) {
                 Log.verbose(I18N.getString("message.use-wix36-features"));
                 params.put(CAN_USE_WIX36.getID(), Boolean.TRUE);
@@ -491,8 +462,8 @@
         IOUtils.writableOutputDir(outdir.toPath());
 
         // validate we have valid tools before continuing
-        String light = TOOL_LIGHT_EXECUTABLE.fetchFrom(params);
-        String candle = TOOL_CANDLE_EXECUTABLE.fetchFrom(params);
+        String light = getLightPath();
+        String candle = getCandlePath();
         if (light == null || !new File(light).isFile() ||
             candle == null || !new File(candle).isFile()) {
             Log.verbose(MessageFormat.format(
@@ -1043,7 +1014,7 @@
         msiOut.getParentFile().mkdirs();
 
         List<String> commandLine = new ArrayList<>(Arrays.asList(
-                TOOL_CANDLE_EXECUTABLE.fetchFrom(params),
+                getCandlePath(),
                 "-nologo",
                 getConfig_ProjectFile(params).getAbsolutePath(),
                 "-ext", "WixUtilExtension",
@@ -1064,7 +1035,7 @@
 
         commandLine = new ArrayList<>();
 
-        commandLine.add(TOOL_LIGHT_EXECUTABLE.fetchFrom(params));
+        commandLine.add(getLightPath());
 
         commandLine.add("-nologo");
         commandLine.add("-spdb");