8229795: Investigate registry key usage and need for --win-registry-name option. JDK-8200758-branch
authorherrick
Mon, 19 Aug 2019 17:34:40 -0400
branchJDK-8200758-branch
changeset 57806 91f8eec58086
parent 57790 1ea531646100
child 57807 4a15115716ea
8229795: Investigate registry key usage and need for --win-registry-name option. Reviewed-by: kcr, asemenyuk, almatvee
src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java
src/jdk.jpackage/share/classes/jdk/jpackage/internal/ValidOptions.java
src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources.properties
src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources_ja.properties
src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources_zh_CN.properties
src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WinMsiBundler.java
src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WindowsBundlerParam.java
test/jdk/tools/jpackage/linux/base/FileAssociationsBase.java
test/jdk/tools/jpackage/macosx/base/FileAssociationsBase.java
test/jdk/tools/jpackage/windows/base/FileAssociationsBase.java
test/jdk/tools/jpackage/windows/base/WinRegistryNameBase.java
test/jdk/tools/jpackage/windows/exe/WinRegistryNameTest.java
test/jdk/tools/jpackage/windows/msi/WinRegistryNameTest.java
--- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java	Fri Aug 16 18:13:04 2019 -0400
+++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/Arguments.java	Mon Aug 19 17:34:40 2019 -0400
@@ -310,8 +310,6 @@
             setOptionValue("win-dir-chooser", true);
         }),
 
-        WIN_REGISTRY_NAME ("win-registry-name", OptionCategories.PLATFORM_WIN),
-
         WIN_UPGRADE_UUID ("win-upgrade-uuid",
                 OptionCategories.PLATFORM_WIN),
 
--- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/ValidOptions.java	Fri Aug 16 18:13:04 2019 -0400
+++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/ValidOptions.java	Mon Aug 19 17:34:40 2019 -0400
@@ -100,7 +100,6 @@
             options.put(CLIOptions.WIN_MENU_GROUP.getId(), USE.INSTALL);
             options.put(CLIOptions.WIN_SHORTCUT_HINT.getId(), USE.INSTALL);
             options.put(CLIOptions.WIN_DIR_CHOOSER.getId(), USE.INSTALL);
-            options.put(CLIOptions.WIN_REGISTRY_NAME.getId(), USE.INSTALL);
             options.put(CLIOptions.WIN_UPGRADE_UUID.getId(), USE.INSTALL);
             options.put(CLIOptions.WIN_PER_USER_INSTALLATION.getId(),
                         USE.INSTALL);
--- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources.properties	Fri Aug 16 18:13:04 2019 -0400
+++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources.properties	Mon Aug 19 17:34:40 2019 -0400
@@ -207,10 +207,6 @@
 \          Start Menu group this application is placed in\n\
 \  --win-per-user-install\n\
 \          Request to perform an install on a per-user basis\n\
-\  --win-registry-name <registry name>\n\
-\          Name of the application for registry references.\n\
-\          The default is the Application Name with only\n\
-\          alphanumerics, dots, and dashes (no whitespace)\n\
 \  --win-shortcut\n\
 \          Creates a desktop shortcut for the application\n\
 \  --win-upgrade-uuid <id string>\n\
--- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources_ja.properties	Fri Aug 16 18:13:04 2019 -0400
+++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources_ja.properties	Mon Aug 19 17:34:40 2019 -0400
@@ -207,10 +207,6 @@
 \          Start Menu group this application is placed in\n\
 \  --win-per-user-install\n\
 \          Request to perform an install on a per-user basis\n\
-\  --win-registry-name <registry name>\n\
-\          Name of the application for registry references.\n\
-\          The default is the Application Name with only\n\
-\          alphanumerics, dots, and dashes (no whitespace)\n\
 \  --win-shortcut\n\
 \          Creates a desktop shortcut for the application\n\
 \  --win-upgrade-uuid <id string>\n\
--- a/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources_zh_CN.properties	Fri Aug 16 18:13:04 2019 -0400
+++ b/src/jdk.jpackage/share/classes/jdk/jpackage/internal/resources/HelpResources_zh_CN.properties	Mon Aug 19 17:34:40 2019 -0400
@@ -207,10 +207,6 @@
 \          Start Menu group this application is placed in\n\
 \  --win-per-user-install\n\
 \          Request to perform an install on a per-user basis\n\
-\  --win-registry-name <registry name>\n\
-\          Name of the application for registry references.\n\
-\          The default is the Application Name with only\n\
-\          alphanumerics, dots, and dashes (no whitespace)\n\
 \  --win-shortcut\n\
 \          Creates a desktop shortcut for the application\n\
 \  --win-upgrade-uuid <id string>\n\
--- a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WinMsiBundler.java	Fri Aug 16 18:13:04 2019 -0400
+++ b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WinMsiBundler.java	Mon Aug 19 17:34:40 2019 -0400
@@ -810,9 +810,7 @@
         if (launcherSet) {
             List<Map<String, ? super Object>> fileAssociations =
                 FILE_ASSOCIATIONS.fetchFrom(params);
-            String regName = APP_REGISTRY_NAME.fetchFrom(params);
             Set<String> defaultedMimes = new TreeSet<>();
-            int count = 0;
             for (Map<String, ? super Object> fa : fileAssociations) {
                 String description = FA_DESCRIPTION.fetchFrom(fa);
                 List<String> extensions = FA_EXTENSIONS.fetchFrom(fa);
@@ -822,15 +820,12 @@
                 String mime = (mimeTypes == null ||
                     mimeTypes.isEmpty()) ? null : mimeTypes.get(0);
 
+                String entryName = APP_REGISTRY_NAME.fetchFrom(params) + "File";
+
                 if (extensions == null) {
                     Log.verbose(I18N.getString(
                           "message.creating-association-with-null-extension"));
 
-                    String entryName = regName + "File";
-                    if (count > 0) {
-                        entryName += "." + count;
-                    }
-                    count++;
                     out.print(prefix + "   <ProgId Id='" + entryName
                             + "' Description='" + description + "'");
                     if (icon != null && icon.exists()) {
@@ -840,11 +835,8 @@
                     out.println(" />");
                 } else {
                     for (String ext : extensions) {
-                        String entryName = regName + "File";
-                        if (count > 0) {
-                            entryName += "." + count;
-                        }
-                        count++;
+
+                        entryName = ext.toUpperCase() + "File";
 
                         out.print(prefix + "   <ProgId Id='" + entryName
                                 + "' Description='" + description + "'");
@@ -855,29 +847,24 @@
                         }
                         out.println(">");
 
-                        if (extensions == null) {
-                            Log.verbose(I18N.getString(
-                            "message.creating-association-with-null-extension"));
+                        out.print(prefix + "    <Extension Id='"
+                                + ext + "' Advertise='no'");
+                        if (mime == null) {
+                            out.println(">");
                         } else {
-                            out.print(prefix + "    <Extension Id='"
-                                    + ext + "' Advertise='no'");
-                            if (mime == null) {
-                                out.println(">");
-                            } else {
-                                out.println(" ContentType='" + mime + "'>");
-                                if (!defaultedMimes.contains(mime)) {
-                                    out.println(prefix
-                                            + "      <MIME ContentType='"
-                                            + mime + "' Default='yes' />");
-                                    defaultedMimes.add(mime);
-                                }
+                            out.println(" ContentType='" + mime + "'>");
+                            if (!defaultedMimes.contains(mime)) {
+                                out.println(prefix
+                                        + "      <MIME ContentType='"
+                                        + mime + "' Default='yes' />");
+                                defaultedMimes.add(mime);
                             }
-                            out.println(prefix
-                                    + "      <Verb Id='open' Command='Open' "
-                                    + "TargetFile='" + LAUNCHER_ID
-                                    + "' Argument='\"%1\"' />");
-                            out.println(prefix + "    </Extension>");
                         }
+                        out.println(prefix
+                                + "      <Verb Id='open' Command='Open' "
+                                + "TargetFile='" + LAUNCHER_ID
+                                + "' Argument='\"%1\"' />");
+                        out.println(prefix + "    </Extension>");
                         out.println(prefix + "   </ProgId>");
                     }
                 }
--- a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WindowsBundlerParam.java	Fri Aug 16 18:13:04 2019 -0400
+++ b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/WindowsBundlerParam.java	Mon Aug 19 17:34:40 2019 -0400
@@ -62,7 +62,7 @@
 
     static final BundlerParamInfo<String> APP_REGISTRY_NAME =
             new StandardBundlerParam<> (
-            Arguments.CLIOptions.WIN_REGISTRY_NAME.getId(),
+            "win.registryName",
             String.class,
             params -> {
                 String nm = APP_NAME.fetchFrom(params);
--- a/test/jdk/tools/jpackage/linux/base/FileAssociationsBase.java	Fri Aug 16 18:13:04 2019 -0400
+++ b/test/jdk/tools/jpackage/linux/base/FileAssociationsBase.java	Mon Aug 19 17:34:40 2019 -0400
@@ -115,7 +115,7 @@
         try (PrintWriter out = new PrintWriter(new BufferedWriter(
                 new FileWriter("fa.properties")))) {
             out.println("extension=" + TEST_EXT);
-            out.println("mime-type=application/" + TEST_EXT);
+            out.println("mime-type=application/x-jpackage-" + TEST_EXT);
             out.println("description=jpackage test extention");
         }
     }
--- a/test/jdk/tools/jpackage/macosx/base/FileAssociationsBase.java	Fri Aug 16 18:13:04 2019 -0400
+++ b/test/jdk/tools/jpackage/macosx/base/FileAssociationsBase.java	Mon Aug 19 17:34:40 2019 -0400
@@ -113,7 +113,7 @@
         try (PrintWriter out = new PrintWriter(new BufferedWriter(
                 new FileWriter("fa.properties")))) {
             out.println("extension=" + TEST_EXT);
-            out.println("mime-type=application/" + TEST_EXT);
+            out.println("mime-type=application/x-jpackage-" + TEST_EXT);
             out.println("description=jpackage test extention");
         }
     }
--- a/test/jdk/tools/jpackage/windows/base/FileAssociationsBase.java	Fri Aug 16 18:13:04 2019 -0400
+++ b/test/jdk/tools/jpackage/windows/base/FileAssociationsBase.java	Mon Aug 19 17:34:40 2019 -0400
@@ -131,7 +131,7 @@
         try (PrintWriter out = new PrintWriter(new BufferedWriter(
                 new FileWriter("fa.properties")))) {
             out.println("extension=" + TEST_EXT);
-            out.println("mime-type=application/" + TEST_EXT);
+            out.println("mime-type=application/x-jpackage-" + TEST_EXT);
             out.println("description=jpackage test extention");
         }
     }
--- a/test/jdk/tools/jpackage/windows/base/WinRegistryNameBase.java	Fri Aug 16 18:13:04 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,170 +0,0 @@
-/*
- * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.awt.Desktop;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.PrintWriter;
-import java.nio.file.Files;
-import java.util.ArrayList;
-import java.util.List;
-
-public class WinRegistryNameBase {
-
-    private static String TEST_NAME;
-    private static String EXT;
-    private static String TEST_EXT;
-    private static String WIN_REGISTRY_NAME;
-    private static String OUTPUT;
-    private static String[] CMD;
-
-    private static void copyResults() throws Exception {
-        List<String> files = new ArrayList<>();
-        files.add(OUTPUT);
-        JPackageInstallerHelper.copyTestResults(files);
-    }
-
-    private static void testCreateInstaller() throws Exception {
-        JPackageHelper.executeCLI(true, CMD);
-        JPackageInstallerHelper.validateOutput(OUTPUT);
-        copyResults();
-    }
-
-    private static void validateAppOutput() throws Exception {
-        File outFile = new File("appOutput.txt");
-        int count = 10;
-        boolean bOutputCreated = false;
-        while (count > 0) {
-            if (!outFile.exists()) {
-                Thread.sleep(3000);
-                count--;
-            } else {
-                bOutputCreated = true;
-                break;
-            }
-        }
-
-        if (!bOutputCreated) {
-            throw new AssertionError(outFile.getAbsolutePath() + " was not created");
-        }
-
-        String output = Files.readString(outFile.toPath());
-        String[] result = output.split("\n");
-        if (result.length != 3) {
-            System.err.println(output);
-            throw new AssertionError(
-                    "Unexpected number of lines: " + result.length);
-        }
-
-        if (!result[0].trim().equals("jpackage test application")) {
-            throw new AssertionError("Unexpected result[0]: " + result[0]);
-        }
-
-        if (!result[1].trim().equals("args.length: 1")) {
-            throw new AssertionError("Unexpected result[1]: " + result[1]);
-        }
-
-        File faFile = new File(TEST_NAME + "." + TEST_EXT);
-        if (!result[2].trim().equals(faFile.getAbsolutePath())) {
-            throw new AssertionError("Unexpected result[2]: " + result[2]);
-        }
-    }
-
-    private static void verifyInstall() throws Exception {
-        createFileAssociationsTestFile();
-        Desktop.getDesktop().open(new File(TEST_NAME + "." + TEST_EXT));
-        validateAppOutput();
-
-        // Validate start menu
-        JPackageInstallerHelper.validateStartMenu("Unknown", TEST_NAME, true);
-
-        // Validate registry
-        String[] values1 = {WIN_REGISTRY_NAME};
-        JPackageInstallerHelper.validateWinRegistry("HKLM\\Software\\Classes\\." + TEST_EXT, values1, true);
-        String[] values2 = {TEST_EXT};
-        JPackageInstallerHelper.validateWinRegistry("HKLM\\Software\\Classes\\MIME\\Database\\Content Type\\application/" + TEST_EXT, values2, true);
-    }
-
-    private static void verifyUnInstall() throws Exception {
-        String folderPath = JPackagePath.getWinInstallFolder(TEST_NAME);
-        File folder = new File(folderPath);
-        if (folder.exists()) {
-            throw new AssertionError("Error: " + folder.getAbsolutePath() + " exist");
-        }
-
-        // Validate start menu
-        JPackageInstallerHelper.validateStartMenu("Unknown", TEST_NAME, false);
-
-        // Validate registry
-        JPackageInstallerHelper.validateWinRegistry("HKLM\\Software\\Classes\\." + TEST_EXT, null, false);
-        JPackageInstallerHelper.validateWinRegistry("HKLM\\Software\\Classes\\MIME\\Database\\Content Type\\application/" + TEST_EXT, null, false);
-    }
-
-    private static void createFileAssociationsTestFile() throws Exception {
-        try (PrintWriter out = new PrintWriter(new BufferedWriter(
-                new FileWriter(TEST_NAME + "." + TEST_EXT)))) {
-            out.println(TEST_NAME);
-        }
-    }
-
-    private static void createFileAssociationsProperties() throws Exception {
-        try (PrintWriter out = new PrintWriter(new BufferedWriter(
-                new FileWriter("fa.properties")))) {
-            out.println("extension=" + TEST_EXT);
-            out.println("mime-type=application/" + TEST_EXT);
-            out.println("description=jpackage test extention");
-        }
-    }
-
-    private static void init(String name, String ext) {
-        TEST_NAME = name;
-        EXT = ext;
-        TEST_EXT = "jptest2";
-        WIN_REGISTRY_NAME = "JPWINTESTREGISTRYNAME";
-        OUTPUT = "output" + File.separator + TEST_NAME + "-1.0." + EXT;
-        CMD = new String[]{
-            "--package-type", EXT,
-            "--input", "input",
-            "--output", "output",
-            "--name", TEST_NAME,
-            "--main-jar", "hello.jar",
-            "--main-class", "Hello",
-            "--file-associations", "fa.properties",
-            "--win-registry-name", WIN_REGISTRY_NAME};
-    }
-
-    public static void run(String name, String ext) throws Exception {
-        init(name, ext);
-
-        if (JPackageInstallerHelper.isVerifyInstall()) {
-            verifyInstall();
-        } else if (JPackageInstallerHelper.isVerifyUnInstall()) {
-            verifyUnInstall();
-        } else {
-            JPackageHelper.createHelloInstallerJar();
-            createFileAssociationsProperties();
-            testCreateInstaller();
-        }
-    }
-}
--- a/test/jdk/tools/jpackage/windows/exe/WinRegistryNameTest.java	Fri Aug 16 18:13:04 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * Test both --file-associations and --win-registry-name parameters.
- * Output of the test should be WinRegistryNameTest-1.0.exe installer.
- * The output installer should provide the same functionality as 
- * installer from FileAssociationsTest.java test with the following 
- * differences:
- *  - file association should work for files with with ".jptest2" suffix.
- *  - file association config should be saved in Windows Registry 
- *  not under "JPWINTESTREGISTRYNAME" key.
- */
-
-/*
- * @test
- * @summary jpackage create installer test
- * @library ../../helpers
- * @library ../base
- * @build JPackageHelper
- * @build JPackagePath
- * @build JPackageInstallerHelper
- * @build WinRegistryNameBase
- * @requires (os.family == "windows")
- * @modules jdk.jpackage
- * @modules jdk.jpackage/jdk.jpackage.internal
- * @run main/othervm -Xmx512m WinRegistryNameTest
- */
-public class WinRegistryNameTest {
-    private static final String TEST_NAME = "WinRegistryNameTest";
-    private static final String EXT = "exe";
-
-    public static void main(String[] args) throws Exception {
-        if (jdk.jpackage.internal.WinMsiBundler.isSupported()) {
-            WinRegistryNameBase.run(TEST_NAME, EXT);
-        }
-    }
-}
--- a/test/jdk/tools/jpackage/windows/msi/WinRegistryNameTest.java	Fri Aug 16 18:13:04 2019 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @summary jpackage create installer test
- * @library ../../helpers
- * @library ../base
- * @build JPackageHelper
- * @build JPackagePath
- * @build JPackageInstallerHelper
- * @build WinRegistryNameBase
- * @requires (os.family == "windows")
- * @modules jdk.jpackage
- * @modules jdk.jpackage/jdk.jpackage.internal
- * @run main/othervm -Xmx512m WinRegistryNameTest
- */
-public class WinRegistryNameTest {
-    private static final String TEST_NAME = "WinRegistryNameTest";
-    private static final String EXT = "msi";
-
-    public static void main(String[] args) throws Exception {
-        if (jdk.jpackage.internal.WinMsiBundler.isSupported()) {
-            WinRegistryNameBase.run(TEST_NAME, EXT);
-        }
-    }
-}