Changeset 17679 in josm


Ignore:
Timestamp:
2021-03-28T14:58:23+02:00 (3 years ago)
Author:
Don-vip
Message:

see #17858 - ask Oracle Java WebStart users to switch to OpenWebStart

Rocket icon from https://github.com/twitter/twemoji/blob/v13.0.2/assets/svg/1f680.svg

Location:
trunk
Files:
1 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java

    r17637 r17679  
    139139            }
    140140            // Add WebStart package details if run from JNLP
    141             if (Utils.isRunningJavaWebStart()) {
     141            if (Utils.isRunningWebStart()) {
    142142                String webStartDetails = platform.getWebStartPackageDetails();
    143143                if (webStartDetails != null) {
  • trunk/src/org/openstreetmap/josm/gui/MainApplication.java

    r17668 r17679  
    342342    }
    343343
    344     /**
    345      * Asks user to update its version of Java.
    346      * @param updVersion target update version
    347      * @param url download URL
    348      * @param major true for a migration towards a major version of Java (8:9), false otherwise
    349      * @param eolDate the EOL/expiration date
    350      * @since 12270
    351      */
    352     public static void askUpdateJava(String updVersion, String url, String eolDate, boolean major) {
    353         ExtendedDialog ed = new ExtendedDialog(
    354                 mainFrame,
    355                 tr("Outdated Java version"),
    356                 tr("OK"), tr("Update Java"), tr("Cancel"));
     344    private static void askUpdate(String title, String update, String property, String icon, StringBuilder content, String url) {
     345        ExtendedDialog ed = new ExtendedDialog(mainFrame, title, tr("OK"), update, tr("Cancel"));
    357346        // Check if the dialog has not already been permanently hidden by user
    358         if (!ed.toggleEnable("askUpdateJava"+updVersion).toggleCheckState()) {
    359             ed.setButtonIcons("ok", "java", "cancel").setCancelButton(3);
     347        if (!ed.toggleEnable(property).toggleCheckState()) {
     348            ed.setButtonIcons("ok", icon, "cancel").setCancelButton(3);
    360349            ed.setMinimumSize(new Dimension(480, 300));
    361350            ed.setIcon(JOptionPane.WARNING_MESSAGE);
    362             StringBuilder content = new StringBuilder(tr("You are running version {0} of Java.",
    363                     "<b>"+getSystemProperty("java.version")+"</b>")).append("<br><br>");
    364             if ("Sun Microsystems Inc.".equals(getSystemProperty("java.vendor")) && !PlatformManager.getPlatform().isOpenJDK()) {
    365                 content.append("<b>").append(tr("This version is no longer supported by {0} since {1} and is not recommended for use.",
    366                         "Oracle", eolDate)).append("</b><br><br>");
    367             }
    368             content.append("<b>")
    369                    .append(major ?
    370                         tr("JOSM will soon stop working with this version; we highly recommend you to update to Java {0}.", updVersion) :
    371                         tr("You may face critical Java bugs; we highly recommend you to update to Java {0}.", updVersion))
    372                    .append("</b><br><br>")
    373                    .append(tr("Would you like to update now ?"));
    374351            ed.setContent(content.toString());
    375352
     
    382359            }
    383360        }
     361    }
     362
     363    /**
     364     * Asks user to update its version of Java.
     365     * @param updVersion target update version
     366     * @param url download URL
     367     * @param major true for a migration towards a major version of Java (8:11), false otherwise
     368     * @param eolDate the EOL/expiration date
     369     * @since 12270
     370     */
     371    public static void askUpdateJava(String updVersion, String url, String eolDate, boolean major) {
     372        StringBuilder content = new StringBuilder(tr("You are running version {0} of Java.",
     373                "<b>"+getSystemProperty("java.version")+"</b>")).append("<br><br>");
     374        if ("Sun Microsystems Inc.".equals(getSystemProperty("java.vendor")) && !PlatformManager.getPlatform().isOpenJDK()) {
     375            content.append("<b>").append(tr("This version is no longer supported by {0} since {1} and is not recommended for use.",
     376                    "Oracle", eolDate)).append("</b><br><br>");
     377        }
     378        content.append("<b>")
     379               .append(major ?
     380                    tr("JOSM will soon stop working with this version; we highly recommend you to update to Java {0}.", updVersion) :
     381                    tr("You may face critical Java bugs; we highly recommend you to update to Java {0}.", updVersion))
     382               .append("</b><br><br>")
     383               .append(tr("Would you like to update now ?"));
     384        askUpdate(tr("Outdated Java version"), tr("Update Java"), "askUpdateJava"+updVersion, "java", content, url);
     385    }
     386
     387    /**
     388     * Asks user to migrate to OpenWebStart
     389     * @param url download URL
     390     * @since 17679
     391     */
     392    public static void askMigrateWebStart(String url) {
     393        // CHECKSTYLE.OFF: LineLength
     394        StringBuilder content = new StringBuilder(tr("You are running an <b>Oracle</b> implementation of Java WebStart."))
     395                .append("<br><br>")
     396                .append(tr("It was for years the recommended way to use JOSM. Oracle removed WebStart from Java 11,<br>but the open source community reimplemented the Java Web Start technology as a new product: <b>OpenWebStart</b>"))
     397                .append("<br><br>")
     398                .append(tr("OpenWebStart is now considered mature enough by JOSM developers to ask everyone to move away from an Oracle implementation,<br>allowing you to benefit from a recent version of Java, and allowing JOSM developers to move forward by planning the Java {0} migration.", "11"))
     399                .append("<br><br>")
     400                .append(tr("Would you like to <b>download OpenWebStart now</b>? (Please do!)"));
     401        askUpdate(tr("Outdated Java WebStart version"), tr("Update to OpenWebStart"), "askUpdateWebStart", "presets/transport/rocket", content, url);
     402        // CHECKSTYLE.ON: LineLength
    384403    }
    385404
  • trunk/src/org/openstreetmap/josm/gui/MainInitialization.java

    r17369 r17679  
    7272            new InitializationTask(tr("Starting file watcher"), FileWatcher.getDefaultInstance()::start),
    7373            new InitializationTask(tr("Executing platform startup hook"),
    74                     () -> PlatformManager.getPlatform().startupHook(MainApplication::askUpdateJava)),
     74                    () -> PlatformManager.getPlatform().startupHook(MainApplication::askUpdateJava, MainApplication::askMigrateWebStart)),
    7575            new InitializationTask(tr("Building main menu"), application::initializeMainWindow),
    7676            new InitializationTask(tr("Updating user interface"), () -> {
  • trunk/src/org/openstreetmap/josm/tools/PlatformHook.java

    r16619 r17679  
    8585      * Reason: On OSX we need to register some callbacks with the
    8686      * OS, so we'll receive events from the system menu.
    87      * @param callback Java expiration callback, providing GUI feedback
    88      * @since 12270 (signature)
    89       */
    90     default void startupHook(JavaExpirationCallback callback) {
     87      * @param javaCallback Java expiration callback, providing GUI feedback
     88      * @param webStartCallback WebStart migration callback, providing GUI feedback
     89      * @since 17679 (signature)
     90      */
     91    default void startupHook(JavaExpirationCallback javaCallback, WebStartMigrationCallback webStartCallback) {
    9192        // Do nothing
    9293    }
     
    262263         */
    263264        void askUpdateJava(String updVersion, String url, String eolDate, boolean major);
     265    }
     266
     267    /**
     268     * Called when Oracle Java WebStart is detected at startup.
     269     * @since 17679
     270     */
     271    @FunctionalInterface
     272    interface WebStartMigrationCallback {
     273        /**
     274         * Asks user to migrate to OpenWebStart.
     275         * @param url download URL
     276         */
     277        void askMigrateWebStart(String url);
    264278    }
    265279
     
    285299
    286300    /**
     301     * Checks if we run Oracle Web Start, proposes to user to migrate to OpenWebStart.
     302     * @param callback WebStart migration callback
     303     * @since 17679
     304     */
     305    default void checkWebStartMigration(WebStartMigrationCallback callback) {
     306        if (Utils.isRunningJavaWebStart()) {
     307            callback.askMigrateWebStart(Config.getPref().get("openwebstart.download.url", "https://openwebstart.com/download/"));
     308        }
     309    }
     310
     311    /**
    287312     * Called when interfacing with native OS functions. Currently only used with macOS.
    288313     * The callback must perform all GUI-related tasks associated to an OS request.
  • trunk/src/org/openstreetmap/josm/tools/PlatformHookOsx.java

    r17676 r17679  
    6060
    6161    @Override
    62     public void startupHook(JavaExpirationCallback callback) {
     62    public void startupHook(JavaExpirationCallback javaCallback, WebStartMigrationCallback webStartCallback) {
    6363        // Here we register callbacks for the menu entries in the system menu and file opening through double-click
    6464        // https://openjdk.java.net/jeps/272
     
    9898            Logging.warn("Failed to register with macOS: " + ex);
    9999        }
    100         checkExpiredJava(callback);
     100        checkExpiredJava(javaCallback);
     101        checkWebStartMigration(webStartCallback);
    101102    }
    102103
  • trunk/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java

    r16924 r17679  
    6161            }
    6262        }
     63    }
     64
     65    @Override
     66    public void startupHook(JavaExpirationCallback javaCallback, WebStartMigrationCallback webStartCallback) {
     67        checkWebStartMigration(webStartCallback);
    6368    }
    6469
  • trunk/src/org/openstreetmap/josm/tools/PlatformHookWindows.java

    r16120 r17679  
    154154
    155155    @Override
    156     public void startupHook(JavaExpirationCallback callback) {
    157         checkExpiredJava(callback);
     156    public void startupHook(JavaExpirationCallback javaCallback, WebStartMigrationCallback webStartCallback) {
     157        checkExpiredJava(javaCallback);
     158        checkWebStartMigration(webStartCallback);
    158159    }
    159160
  • trunk/src/org/openstreetmap/josm/tools/Utils.java

    r17374 r17679  
    6767import java.util.zip.ZipFile;
    6868
     69import org.openstreetmap.josm.spi.preferences.Config;
     70
    6971import com.kitfox.svg.xml.XMLParseUtil;
    70 import org.openstreetmap.josm.spi.preferences.Config;
    7172
    7273/**
     
    17201721
    17211722    /**
    1722      * Determines whether JOSM has been started via Java Web Start.
    1723      * @return true if JOSM has been started via Java Web Start
    1724      * @since 15740
    1725      */
    1726     public static boolean isRunningJavaWebStart() {
     1723     * Determines whether JOSM has been started via Web Start (JNLP).
     1724     * @return true if JOSM has been started via Web Start (JNLP)
     1725     * @since 17679
     1726     */
     1727    public static boolean isRunningWebStart() {
    17271728        try {
    17281729            // See http://stackoverflow.com/a/16200769/2257172
     
    17311732            return false;
    17321733        }
     1734    }
     1735
     1736    /**
     1737     * Determines whether JOSM has been started via Oracle Java Web Start.
     1738     * @return true if JOSM has been started via Oracle Java Web Start
     1739     * @since 15740
     1740     */
     1741    public static boolean isRunningJavaWebStart() {
     1742        return isRunningWebStart() && Package.getPackage("com.sun.javaws") != null;
     1743    }
     1744
     1745    /**
     1746     * Determines whether JOSM has been started via Open Web Start (IcedTea-Web).
     1747     * @return true if JOSM has been started via Open Web Start (IcedTea-Web)
     1748     * @since 17679
     1749     */
     1750    public static boolean isRunningOpenWebStart() {
     1751        return isRunningWebStart() && Package.getPackage("net.adoptopenjdk.icedteaweb") != null;
    17331752    }
    17341753
  • trunk/test/unit/org/openstreetmap/josm/tools/PlatformHookOsxTest.java

    r17275 r17679  
    3737    @Test
    3838    void testStartupHook() {
    39         hook.startupHook((a, b, c, d) -> System.out.println("callback"));
     39        hook.startupHook((a, b, c, d) -> System.out.println("java callback"), u -> System.out.println("webstart callback"));
    4040    }
    4141
  • trunk/test/unit/org/openstreetmap/josm/tools/PlatformHookWindowsTest.java

    r17677 r17679  
    5555    @Test
    5656    void testStartupHook() {
    57         hook.startupHook((a, b, c, d) -> System.out.println("callback"));
     57        hook.startupHook((a, b, c, d) -> System.out.println("java callback"), u -> System.out.println("webstart callback"));
    5858    }
    5959
Note: See TracChangeset for help on using the changeset viewer.