Skip to content

Commit a2a0248

Browse files
committed
Added client prerequisite check
Signed-off-by: Mitch Gaffigan <mitch.gaffigan@comcast.net>
1 parent bfe3348 commit a2a0248

3 files changed

Lines changed: 57 additions & 0 deletions

File tree

client/src/com/mirth/connect/client/ui/BrandingConstants.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ public class BrandingConstants {
3030
// The URL that is opened when clicking "Help" button in Administrator
3131
public static String HELP_URL_LOCATION = "https://github.com/OpenIntegrationEngine/engine/discussions";
3232

33+
// The URL that is opened when clicking "System Requirements" button in the error dialog when an unsupported Java version is detected
34+
public static final String SYSTEM_REQUIREMENTS_URL = "https://docs.openintegrationengine.org/engine/getting_started.html#system-requirements";
35+
3336
// The "More info" in Server settings "Provide usage statistics"
3437
public static final String PRIVACY_URL = "https://github.com/openintegrationengine";
3538
public static final String PRIVACY_TOOLTIP = "Privacy Information";
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// SPDX-License-Identifier: MPL-2.0
2+
// SPDX-FileCopyrightText: Mitch Gaffigan <mitch@gaffigan.net>
3+
4+
package com.mirth.connect.client.ui;
5+
6+
/** Utility class to check if the client prerequisites are met. */
7+
public class ClientPrerequisites {
8+
9+
private ClientPrerequisites() {
10+
}
11+
12+
/** Checks if the client prerequisites are met. */
13+
public static String getMissing() {
14+
// Can't meaningfully check for Java 17 since the entrypoint is compiled with
15+
// class file version 61, which will fail to load on Java 8.
16+
if (!hasJavaFx()) {
17+
return "JavaFX";
18+
}
19+
20+
return null;
21+
}
22+
23+
private static boolean hasJavaFx() {
24+
// Use JPMS to check for JavaFX - the classes are on the classpath
25+
// even in Java SE, but the module will not be present except in FX
26+
return ModuleLayer.boot().findModule("javafx.graphics").isPresent();
27+
}
28+
}

client/src/com/mirth/connect/client/ui/Mirth.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77
import java.awt.Toolkit;
88
import java.awt.event.InputEvent;
99
import java.awt.event.KeyEvent;
10+
import java.awt.Desktop;
1011
import java.io.IOException;
1112
import java.util.prefs.Preferences;
1213

1314
import javax.imageio.ImageIO;
1415
import javax.swing.ImageIcon;
1516
import javax.swing.InputMap;
17+
import javax.swing.JOptionPane;
1618
import javax.swing.KeyStroke;
1719
import javax.swing.SwingUtilities;
1820
import javax.swing.ToolTipManager;
@@ -253,6 +255,13 @@ public static void initUIManager() {
253255
* String[]
254256
*/
255257
public static void main(String[] args) {
258+
var missingPrerequisite = ClientPrerequisites.getMissing();
259+
if (missingPrerequisite != null) {
260+
showUnsupportedJreDialog(missingPrerequisite);
261+
System.exit(1);
262+
return;
263+
}
264+
256265
CommandLineOptions opts = new CommandLineOptions(args);
257266

258267
if (StringUtils.isNotBlank(opts.getProtocols())) {
@@ -267,6 +276,23 @@ public static void main(String[] args) {
267276
start(opts.getServer(), opts.getVersion(), opts.getUsername(), opts.getPassword());
268277
}
269278

279+
private static void showUnsupportedJreDialog(String missingPrerequisite) {
280+
try {
281+
var message = String.format(
282+
"%s Client requires %s%nPlease review the system requirements and try again.",
283+
BrandingConstants.PRODUCT_NAME, missingPrerequisite);
284+
var options = new Object[] { "View System Requirements", "Exit" };
285+
var result = JOptionPane.showOptionDialog(
286+
null, message, "Unsupported Java Runtime", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE, null, options, options[0]);
287+
288+
if (result == 0) {
289+
Desktop.getDesktop().browse(java.net.URI.create(BrandingConstants.SYSTEM_REQUIREMENTS_URL));
290+
}
291+
} catch (Throwable t) {
292+
System.err.println(String.format("Missing prerequisite: %s", missingPrerequisite));
293+
}
294+
}
295+
270296
private static void start(final String server, final String version, final String username, final String password) {
271297
// disable the velocity logging
272298
Logger velocityLogger = LogManager.getLogger(RuntimeConstants.DEFAULT_RUNTIME_LOG_NAME);

0 commit comments

Comments
 (0)