Java tutorial
/* * VersionUpdater.java - Copyright(c) 2014 Joe Pasqua * Provided under the MIT License. See the LICENSE file for details. * Created: Aug 14, 2014 */ package org.noroomattheinn.visibletesla.dialogs; import java.net.URL; import java.util.List; import javafx.application.HostServices; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.control.Dialogs; import javafx.scene.control.Hyperlink; import javafx.scene.control.Label; import javafx.scene.layout.VBox; import javafx.stage.Stage; import org.apache.commons.lang3.SystemUtils; import org.noroomattheinn.utils.Utils; import org.noroomattheinn.utils.Versions; import org.noroomattheinn.utils.Versions.Release; /** * VersionUpdater: Check for, offer, and download new versions of the fxApp * * @author Joe Pasqua <joe at NoRoomAtTheInn dot org> */ public class VersionUpdater { /*------------------------------------------------------------------------------ * * Constants and Enums * *----------------------------------------------------------------------------*/ private static final String VersionsFile = "https://dl.dropboxusercontent.com/u/7045813/VT2/versions.xml"; //"https://dl.dropboxusercontent.com/u/7045813/VTExtras/test_versions.xml"; /*============================================================================== * ------- ------- * ------- Public Interface To This Class ------- * ------- ------- *============================================================================*/ public static boolean checkForNewerVersion(String thisVersion, Stage stage, final HostServices svcs, boolean experimentalOK) { final Versions versions = Versions.getVersionInfo(VersionsFile); if (versions == null) return false; // Missing, empty, or corrupt versions file List<Release> releases = versions.getReleases(); if (releases != null && !releases.isEmpty()) { Release lastRelease = null; for (Release cur : releases) { if (cur.getInvisible()) continue; if (cur.getExperimental() && !experimentalOK) continue; lastRelease = cur; break; } if (lastRelease == null) return false; String releaseNumber = lastRelease.getReleaseNumber(); if (Utils.compareVersions(thisVersion, releaseNumber) < 0) { VBox customPane = new VBox(); String msgText = String.format( "A newer version of VisibleTesla is available:\n" + "Version: %s, Date: %tD", releaseNumber, lastRelease.getReleaseDate()); Label msg = new Label(msgText); Hyperlink platformLink = null; final URL platformURL; final String linkText; if (SystemUtils.IS_OS_MAC) { linkText = "Download the latest Mac version"; platformURL = lastRelease.getMacURL(); } else if (SystemUtils.IS_OS_WINDOWS) { linkText = "Download the latest Windows version"; platformURL = lastRelease.getWindowsURL(); } else { linkText = "Download the latest Generic version"; platformURL = lastRelease.getReleaseURL(); } if (platformURL != null) { platformLink = new Hyperlink(linkText); platformLink.setStyle("-fx-color: blue; -fx-text-fill: blue;"); platformLink.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent t) { svcs.showDocument(platformURL.toExternalForm()); } }); } Hyperlink rnLink = new Hyperlink("Click to view the release notes"); rnLink.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent t) { svcs.showDocument(versions.getReleaseNotes().toExternalForm()); } }); customPane.getChildren().addAll(msg, rnLink); customPane.getChildren().add(platformLink); Dialogs.showCustomDialog(stage, customPane, "Newer Version Available", "Checking for Updates", Dialogs.DialogOptions.OK, null); return true; } } return false; } }