diff --git a/common-gui/src/main/java/slash/navigation/gui/OSXHelper.java b/common-gui/src/main/java/slash/navigation/gui/OSXHelper.java index 6c80142621..a143c6413c 100644 --- a/common-gui/src/main/java/slash/navigation/gui/OSXHelper.java +++ b/common-gui/src/main/java/slash/navigation/gui/OSXHelper.java @@ -28,7 +28,6 @@ import java.util.logging.Logger; import static slash.common.helpers.ExceptionHelper.getLocalizedMessage; -import static slash.common.system.Platform.isJava9OrLater; /** * Sets the dock icon for Mac OS X for RouteConverter. @@ -82,7 +81,7 @@ private OSXHandler(String proxySignature, Object target, Method handler) { private static void createProxy(OSXHandler adapter, String handlerClassName, String setMethodName) { try { initializeApplicationObject(); - Class handlerClass = Class.forName((isJava9OrLater() ? "java.awt.desktop." : "com.apple.eawt.") + handlerClassName); + Class handlerClass = Class.forName("java.awt.desktop." + handlerClassName); Method setHandlerMethod = application.getClass().getDeclaredMethod(setMethodName, handlerClass); Object osxAdapterProxy = Proxy.newProxyInstance(OSXHandler.class.getClassLoader(), new Class[]{handlerClass}, adapter); setHandlerMethod.invoke(application, osxAdapterProxy); diff --git a/common/src/main/java/slash/common/io/Transfer.java b/common/src/main/java/slash/common/io/Transfer.java index 6d7a159c8b..83eaf19d56 100644 --- a/common/src/main/java/slash/common/io/Transfer.java +++ b/common/src/main/java/slash/common/io/Transfer.java @@ -41,6 +41,7 @@ import static java.lang.Double.isNaN; import static java.lang.Integer.toHexString; import static java.lang.Math.*; +import static java.nio.charset.StandardCharsets.UTF_8; import static java.text.DateFormat.MEDIUM; import static java.text.DateFormat.SHORT; import static java.util.Calendar.*; @@ -343,12 +344,7 @@ public static Integer[] toArray(int[] ints) { } public static String encodeUri(String uri) { - try { - return URLEncoder.encode(uri, UTF8_ENCODING); - } catch (UnsupportedEncodingException e) { - log.severe("Cannot encode uri " + uri + ": " + e); - return uri; - } + return URLEncoder.encode(uri, UTF_8); } public static String encodeUmlauts(String string) { @@ -366,12 +362,7 @@ public static String encodeUriButKeepSlashes(String uri) { } public static String decodeUri(String uri) { - try { - return URLDecoder.decode(uri, UTF8_ENCODING); - } catch (UnsupportedEncodingException e) { - log.severe("Cannot decode uri " + uri + ": " + e); - return uri; - } + return URLDecoder.decode(uri, UTF_8); } private static final char URI_ESCAPE_CHAR = '%'; diff --git a/common/src/main/java/slash/common/jarinjar/ClassPathURLConnection.java b/common/src/main/java/slash/common/jarinjar/ClassPathURLConnection.java index 23a182bc0c..bd98fc23e2 100644 --- a/common/src/main/java/slash/common/jarinjar/ClassPathURLConnection.java +++ b/common/src/main/java/slash/common/jarinjar/ClassPathURLConnection.java @@ -27,7 +27,7 @@ import java.net.URLConnection; import static java.net.URLDecoder.decode; -import static slash.common.io.Transfer.UTF8_ENCODING; +import static java.nio.charset.StandardCharsets.UTF_8; /** * An {@link URLConnection} that reads URLs from the classpath. @@ -46,11 +46,11 @@ public void connect() { } public InputStream getInputStream() throws IOException { - String file = decode(url.getFile(), UTF8_ENCODING); + String file = decode(url.getFile(), UTF_8); InputStream result = classLoader.getResourceAsStream(file); if (result == null) { throw new MalformedURLException("Could not open InputStream for URL '" + url + "'"); } return result; } -} \ No newline at end of file +} diff --git a/common/src/main/java/slash/common/system/Platform.java b/common/src/main/java/slash/common/system/Platform.java index 31d395db13..0d57a23b24 100644 --- a/common/src/main/java/slash/common/system/Platform.java +++ b/common/src/main/java/slash/common/system/Platform.java @@ -45,29 +45,11 @@ public static String getPlatform() { System.getProperty("os.arch"); } - static boolean hasJavaFX(String vendor, String javaVersion) { - return vendor.contains("Oracle") && - javaVersion.compareTo("1.7.0_40") >= 0 && - !isJavaLaterThan(javaVersion, 11); - } - - public static boolean hasJavaFX() { - return hasJavaFX(System.getProperty("java.vendor"), System.getProperty("java.version")); - } - static boolean isJavaLaterThan(String javaVersion, int version) { String versionString = version < 9 ? "1." + version : Integer.toString(version); return new Version(javaVersion).isLaterOrSameVersionThan(new Version(versionString)); } - public static boolean isJava9OrLater() { - return isJavaLaterThan(System.getProperty("java.version"), 9); - } - - public static boolean isJava15OrLater() { - return isJavaLaterThan(System.getProperty("java.version"), 15); - } - public static String getJava() { return System.getProperty("java.vendor") + " Java " + System.getProperty("java.version") + " (" + getBits() + "-bit)"; } diff --git a/common/src/test/java/slash/common/system/PlatformTest.java b/common/src/test/java/slash/common/system/PlatformTest.java index df007f013e..d6c14d9074 100644 --- a/common/src/test/java/slash/common/system/PlatformTest.java +++ b/common/src/test/java/slash/common/system/PlatformTest.java @@ -77,20 +77,4 @@ public void testIsJavaLaterThan() { assertTrue(isJavaLaterThan("15", 15)); assertTrue(isJavaLaterThan("16", 15)); } - - @Test - public void testHasJavaFX() { - assertFalse(hasJavaFX("Oracle", "1.7.0")); - assertTrue(hasJavaFX("Oracle", "1.8.0")); - assertFalse(hasJavaFX("OpenJDK", "1.8.0")); - assertTrue(hasJavaFX("Oracle", "9")); - assertFalse(hasJavaFX("OpenJDK", "9")); - assertTrue(hasJavaFX("Oracle", "10")); - assertFalse(hasJavaFX("OpenJDK", "10")); - assertTrue(hasJavaFX("Oracle", "10.0.1")); - assertFalse(hasJavaFX("OpenJDK", "10.0.1")); - assertFalse(hasJavaFX("Oracle", "11")); - assertFalse(hasJavaFX("Oracle", "11.0.1")); - assertFalse(hasJavaFX("Oracle", "12")); - } } diff --git a/javafx8-mapview/pom.xml b/javafx8-mapview/pom.xml index 6ba1aa1f4b..0f76c2c088 100644 --- a/javafx8-mapview/pom.xml +++ b/javafx8-mapview/pom.xml @@ -27,11 +27,12 @@ ${project.version} - com.sun - javafx - jdk8 - stripped - provided + org.openjfx + javafx-swing + + + org.openjfx + javafx-web diff --git a/javafx8-mapview/src/main/java/slash/navigation/mapview/browser/JavaFX8WebViewMapView.java b/javafx8-mapview/src/main/java/slash/navigation/mapview/browser/JavaFX8WebViewMapView.java index e2d8e6b612..658a26d2d5 100644 --- a/javafx8-mapview/src/main/java/slash/navigation/mapview/browser/JavaFX8WebViewMapView.java +++ b/javafx8-mapview/src/main/java/slash/navigation/mapview/browser/JavaFX8WebViewMapView.java @@ -37,8 +37,6 @@ import java.awt.*; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URL; import java.util.logging.Logger; diff --git a/mapsforge-mbtiles/pom.xml b/mapsforge-mbtiles/pom.xml index 580403257e..d137b650bd 100644 --- a/mapsforge-mbtiles/pom.xml +++ b/mapsforge-mbtiles/pom.xml @@ -32,7 +32,7 @@ org.xerial sqlite-jdbc - 3.41.2.2 + 3.42.0.0 diff --git a/navigation-formats/pom.xml b/navigation-formats/pom.xml index e55ae6af57..b38101dc92 100644 --- a/navigation-formats/pom.xml +++ b/navigation-formats/pom.xml @@ -132,7 +132,7 @@ org.apache.poi poi-ooxml-schemas - ${poi.version} + 4.1.2 stripped @@ -144,7 +144,7 @@ org.apache.xmlbeans xmlbeans - 3.1.0 + 5.1.1 stripped diff --git a/navigation-formats/src/main/java/slash/navigation/base/BaseUrlParsingFormat.java b/navigation-formats/src/main/java/slash/navigation/base/BaseUrlParsingFormat.java index 5093d5f3af..0350d9af87 100644 --- a/navigation-formats/src/main/java/slash/navigation/base/BaseUrlParsingFormat.java +++ b/navigation-formats/src/main/java/slash/navigation/base/BaseUrlParsingFormat.java @@ -30,7 +30,7 @@ import java.util.Map; import static java.net.URLEncoder.encode; -import static slash.common.io.Transfer.UTF8_ENCODING; +import static java.nio.charset.StandardCharsets.UTF_8; import static slash.navigation.base.RouteCharacteristics.Route; /** @@ -143,22 +143,14 @@ private Map> parseParameters(byte[] data, String encoding) protected String decodeDescription(String description) { if (description == null) return ""; - try { - return URLDecoder.decode(description, UTF8_ENCODING); - } catch (UnsupportedEncodingException e) { - return description; - } + return URLDecoder.decode(description, UTF_8); } protected String encodeDescription(String description) { if (description == null) return ""; - try { - description = encode(description, UTF8_ENCODING); - description = description.replace("%2C", ","); - return description; - } catch (UnsupportedEncodingException e) { - return description; - } + description = encode(description, UTF_8); + description = description.replace("%2C", ","); + return description; } } diff --git a/pom.xml b/pom.xml index 6df1bce3d0..adf80a10b9 100644 --- a/pom.xml +++ b/pom.xml @@ -63,7 +63,8 @@ true - 1.8 + 17 + 20.0.1 [3.5.4,) 0.1.1 @@ -75,7 +76,7 @@ 2.3.1 2.3.1 0.19.0 - 4.1.2 + 5.2.3 2.0.7 @@ -400,6 +401,7 @@ none false + -Xdoclint:none @@ -532,6 +534,16 @@ 1.2 stripped + + org.openjfx + javafx-swing + ${javafx.version} + + + org.openjfx + javafx-web + ${javafx.version} + javax.help javahelp diff --git a/route-catalog/src/main/java/slash/navigation/routes/local/LocalCategory.java b/route-catalog/src/main/java/slash/navigation/routes/local/LocalCategory.java index c4e6e7a1bb..80a897fb1e 100644 --- a/route-catalog/src/main/java/slash/navigation/routes/local/LocalCategory.java +++ b/route-catalog/src/main/java/slash/navigation/routes/local/LocalCategory.java @@ -31,12 +31,14 @@ import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Objects; import static java.io.File.separator; import static java.lang.String.format; +import static java.nio.charset.StandardCharsets.UTF_8; import static org.apache.commons.io.IOUtils.copyLarge; import static slash.common.io.Files.recursiveDelete; import static slash.common.io.Files.removeExtension; @@ -149,7 +151,7 @@ public Route createRoute(String description, File localFile) throws IOException public Route createRoute(String description, String url) throws IOException { File destination = new File(directory, encodeFileName(description)); - try (PrintWriter writer = new PrintWriter(destination, UTF8_ENCODING)) { + try (PrintWriter writer = new PrintWriter(destination, UTF_8)) { writer.println("[InternetShortcut]"); writer.println("URL=" + url); } diff --git a/route-converter-google/src/main/java/slash/navigation/converter/gui/RouteConverterGoogle.java b/route-converter-google/src/main/java/slash/navigation/converter/gui/RouteConverterGoogle.java index f3cea15ed4..a01fb89fc6 100644 --- a/route-converter-google/src/main/java/slash/navigation/converter/gui/RouteConverterGoogle.java +++ b/route-converter-google/src/main/java/slash/navigation/converter/gui/RouteConverterGoogle.java @@ -35,8 +35,7 @@ import static java.util.Arrays.asList; import static javax.swing.JOptionPane.*; import static slash.common.io.Transfer.trim; -import static slash.common.system.Platform.hasJavaFX; -import static slash.common.system.Platform.isWindows; +import static slash.common.system.Platform.*; import static slash.navigation.converter.gui.helpers.ExternalPrograms.startBrowserForGoogleAPIKey; /** @@ -61,16 +60,31 @@ public String getEditionId() { protected void checkJavaPrequisites() { super.checkJavaPrequisites(); - String currentVersion = System.getProperty("java.version"); - if (!hasJavaFX()) { - showMessageDialog(null, "Java " + currentVersion + " does not support JavaFX. Please install a Java 8 from Oracle. Avoid OpenJDK.", "RouteConverter", ERROR_MESSAGE); - System.exit(8); + try { + Class.forName("javafx.embed.swing.JFXPanel"); + } + catch (Exception e) { + showMessageDialog(null, "JavaFX Swing not found. Please install JavaFX 20 or later.", "RouteConverter", ERROR_MESSAGE); + System.exit(9); + } + + try { + Class.forName("javafx.scene.web.WebView"); + } + catch (Exception e) { + showMessageDialog(null, "JavaFX WebView not found. Please install JavaFX 20 or later.", "RouteConverter", ERROR_MESSAGE); + System.exit(10); } - if (isWindows() && (currentVersion.equals("1.8.0_161") || currentVersion.equals("1.8.0_162") || currentVersion.equals("1.8.0_171") || currentVersion.equals("1.8.0_172"))) { - showMessageDialog(null, "Java " + currentVersion + " contains a fatal bug in JavaFX on Windows. Please install Java 8 Update 181 or later.", "RouteConverter", ERROR_MESSAGE); + String currentVersion = System.getProperty("javafx.runtime.version"); + if (currentVersion == null) { + showMessageDialog(null, "JavaFX not found. Please install JavaFX 20 or later.", "RouteConverter", ERROR_MESSAGE); System.exit(9); } + if (!isCurrentAtLeastMinimumVersion(currentVersion, "20")) { + showMessageDialog(null, "JavaFX " + currentVersion + " is too old. Please install JavaFX 20 or later.", "RouteConverter", ERROR_MESSAGE); + System.exit(10); + } } protected void checkForGoogleMapsAPIKey() { diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/RouteConverter.java b/route-converter/src/main/java/slash/navigation/converter/gui/RouteConverter.java index d9f38f58f3..ccec392a80 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/RouteConverter.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/RouteConverter.java @@ -220,25 +220,10 @@ protected void startup() { protected void checkJavaPrequisites() { String currentVersion = System.getProperty("java.version"); - if (!isCurrentAtLeastMinimumVersion(currentVersion, "1.7.0_40")) { - showMessageDialog(null, "Java " + currentVersion + " does not support JavaFX. Please install Java 8 or 10.", "RouteConverter", ERROR_MESSAGE); - System.exit(7); - } - - if (!isCurrentAtLeastMinimumVersion(currentVersion, "1.8.0")) { - showMessageDialog(null, "Java " + currentVersion + " is too old for FIT and EclipseLink. Please install Java 8 or 11.", "RouteConverter", ERROR_MESSAGE); + if (!isCurrentAtLeastMinimumVersion(currentVersion, "17")) { + showMessageDialog(null, "Java " + currentVersion + " is too old for JavaFX 20. Please install Java 17 or later.", "RouteConverter", ERROR_MESSAGE); System.exit(8); } - - if (isWindows() && (currentVersion.equals("1.8.0_161") || currentVersion.equals("1.8.0_162") || currentVersion.equals("1.8.0_171") || currentVersion.equals("1.8.0_172"))) { - showMessageDialog(null, "Java " + currentVersion + " contains a fatal bug in JavaFX on Windows. Please install Java 8 Update 181 or Java 11.", "RouteConverter", ERROR_MESSAGE); - System.exit(9); - } - - if (isJava15OrLater()) { - showMessageDialog(null, "Java " + currentVersion + " contains breaking changes. Please install Java 8 or 11.", "RouteConverter", ERROR_MESSAGE); - System.exit(10); - } } protected abstract void checkForGoogleMapsAPIKey(); @@ -1123,7 +1108,7 @@ private void dividerChanged(int newValue) { this.location = newValue; getMapView().resize(); preferences.putInt(MAP_DIVIDER_LOCATION_PREFERENCE, newValue); - double newRatio = new Integer(newValue).doubleValue() / contentPane.getWidth(); + double newRatio = Integer.valueOf(newValue).doubleValue() / contentPane.getWidth(); preferences.putDouble(MAP_DIVIDER_RATIO_PREFERENCE, newRatio); log.fine("Changed map divider to " + newValue + " and ratio " + newRatio); enableActions(); diff --git a/route-converter/src/main/java/slash/navigation/converter/gui/helpers/ApplicationMenu.java b/route-converter/src/main/java/slash/navigation/converter/gui/helpers/ApplicationMenu.java index c27307a036..c487870069 100644 --- a/route-converter/src/main/java/slash/navigation/converter/gui/helpers/ApplicationMenu.java +++ b/route-converter/src/main/java/slash/navigation/converter/gui/helpers/ApplicationMenu.java @@ -31,7 +31,6 @@ import java.util.logging.Logger; import static slash.common.helpers.ExceptionHelper.getLocalizedMessage; -import static slash.common.system.Platform.isJava9OrLater; import static slash.navigation.gui.OSXHelper.OSXHandler.*; /** @@ -78,7 +77,7 @@ public void about(EventObject event) { @SuppressWarnings("unchecked") private List extractFiles(EventObject eventObject) throws Exception { - Class eventClass = Class.forName((isJava9OrLater() ? "java.awt.desktop." : "com.apple.eawt.AppEvent.") + "OpenFilesEvent"); + Class eventClass = Class.forName("java.awt.desktop." + "OpenFilesEvent"); Method getFilesMethod = eventClass.getMethod("getFiles"); Object result = getFilesMethod.invoke(eventObject); return (List)result; diff --git a/route-converter/src/test/java/slash/navigation/converter/gui/helpers/PositionHelperTest.java b/route-converter/src/test/java/slash/navigation/converter/gui/helpers/PositionHelperTest.java index 4788864c47..0cf310e4fe 100644 --- a/route-converter/src/test/java/slash/navigation/converter/gui/helpers/PositionHelperTest.java +++ b/route-converter/src/test/java/slash/navigation/converter/gui/helpers/PositionHelperTest.java @@ -32,14 +32,12 @@ import static java.util.Locale.GERMAN; import static org.junit.Assert.assertEquals; import static slash.common.TestCase.calendar; -import static slash.common.system.Platform.isJava9OrLater; import static slash.common.type.CompactCalendar.fromDate; public class PositionHelperTest { private String asDefaultLocaleTime(String germanString) throws ParseException { - if(isJava9OrLater()) - germanString = germanString.replace(" ", ", "); + germanString = germanString.replace(" ", ", "); DateFormat germanFormat = getDateTimeInstance(SHORT, MEDIUM, GERMAN); Date date = germanFormat.parse(germanString); DateFormat defaultFormat = getDateTimeInstance(SHORT, MEDIUM);