src/jdk.packager/windows/classes/jdk/packager/internal/windows/WinAppBundler.java
branchJDK-8200758-branch
changeset 56902 6972c0e75e23
parent 56869 41e17fe9fbeb
child 56933 9f59eeb3cc0f
--- a/src/jdk.packager/windows/classes/jdk/packager/internal/windows/WinAppBundler.java	Fri Sep 21 09:30:03 2018 -0400
+++ b/src/jdk.packager/windows/classes/jdk/packager/internal/windows/WinAppBundler.java	Fri Sep 21 09:32:02 2018 -0400
@@ -51,6 +51,7 @@
 
 import static jdk.packager.internal.windows.WindowsBundlerParam.*;
 import jdk.packager.internal.builders.AbstractAppImageBuilder;
+import static jdk.packager.internal.windows.WinMsiBundler.WIN_APP_IMAGE;
 
 public class WinAppBundler extends AbstractImageBundler {
 
@@ -153,18 +154,52 @@
         return new File(outDir, APP_NAME.fetchFrom(p));
     }
 
+    private static boolean usePredefineAppName(Map<String, ? super Object> p) {
+        return (PREDEFINED_APP_IMAGE.fetchFrom(p) != null);
+    }
+
+    private static String appName;
+    private synchronized static String getAppName(Map<String, ? super Object> p) {
+        // If we building from predefined app image, then we should use names
+        // from image and not from CLI.
+        if (usePredefineAppName(p)) {
+            if (appName == null) {
+                // Use WIN_APP_IMAGE here, since we already copy pre-defined image to WIN_APP_IMAGE
+                File appImageDir = new File(WIN_APP_IMAGE.fetchFrom(p).toString() + "\\app");
+                File [] files = appImageDir.listFiles((File dir, String name) -> name.endsWith(".cfg"));
+                if (files == null || files.length != 1) {
+                    throw new RuntimeException(MessageFormat.format(
+                        I18N.getString("error.cannot-find-cfg"),
+                        appImageDir));
+                } else {
+                    appName = files[0].getName();
+                    int index = appName.indexOf(".");
+                    if (index != -1) {
+                        appName = appName.substring(0, index);
+                    }
+                }
+
+                return appName;
+            } else {
+                return appName;
+            }
+        }
+
+        return APP_NAME.fetchFrom(p);
+    }
+
     public static String getLauncherName(Map<String, ? super Object> p) {
-        return APP_NAME.fetchFrom(p) +".exe";
+        return getAppName(p) + ".exe";
     }
 
     public static String getLauncherCfgName(Map<String, ? super Object> p) {
-        return "app\\" + APP_NAME.fetchFrom(p) +".cfg";
+        return "app\\" + getAppName(p) +".cfg";
     }
 
     public boolean bundle(Map<String, ? super Object> p, File outputDirectory) {
         return doBundle(p, outputDirectory, false) != null;
     }
-    
+
     private File createRoot(Map<String, ? super Object> p,
             File outputDirectory, boolean dependentTask) throws IOException {
         if (!outputDirectory.isDirectory() && !outputDirectory.mkdirs()) {
@@ -338,8 +373,8 @@
             Map<String, ? super Object> params, File outputParentDir) {
         return doBundle(params, outputParentDir, false);
     }
-    
-    @Override    
+
+    @Override
     public boolean supported() {
         return (Platform.getPlatform() == Platform.WINDOWS);
     }