diff --git a/uicdm/build.gradle b/uicdm/build.gradle
index d651eba700..f460100e07 100644
--- a/uicdm/build.gradle
+++ b/uicdm/build.gradle
@@ -52,3 +52,14 @@ application {
}
jar.manifest.attributes 'Main-Class': 'ucar.nc2.ui.ToolsUI'
+
+def genBuildInfo = tasks.register("generateBuildInfo", WriteProperties) {
+ destinationFile = getLayout().buildDirectory.file("resources/main/toolsui.properties")
+ comment = "Application configuration generated by Gradle"
+ encoding = "UTF-8"
+
+ property("toolsui.version", project.version)
+ property("toolsui.buildTimestamp", project.buildTimestamp) // Defined in root project.
+}
+
+processResources.dependsOn(genBuildInfo)
diff --git a/uicdm/src/main/java/ucar/nc2/ui/BuildInfo.java b/uicdm/src/main/java/ucar/nc2/ui/BuildInfo.java
new file mode 100644
index 0000000000..3b9e633af5
--- /dev/null
+++ b/uicdm/src/main/java/ucar/nc2/ui/BuildInfo.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2025 University Corporation for Atmospheric Research/Unidata
+ * See LICENSE for license information.
+ */
+
+package ucar.nc2.ui;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+public class BuildInfo {
+
+ private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(BuildInfo.class);
+
+ private final String version, timestamp;
+
+ BuildInfo(String version, String timestamp) {
+ this.version = version;
+ this.timestamp = timestamp;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public String getTimestamp() {
+ return timestamp;
+ }
+
+ static BuildInfo getToolsUIBuildInfo() {
+ Properties buildProps = new Properties();
+ try (InputStream stream = ToolsUI.class.getClassLoader().getResourceAsStream("toolsui.properties")) {
+ buildProps.load(stream);
+ } catch (IOException e) {
+ log.error("Error reading build properties");
+ }
+ return new BuildInfo(buildProps.getProperty("toolsui.version", "Unknown"),
+ buildProps.getProperty("toolsui.buildTimestamp", "Unknown"));
+ }
+
+}
diff --git a/uicdm/src/main/java/ucar/nc2/ui/ToolsAboutWindow.java b/uicdm/src/main/java/ucar/nc2/ui/ToolsAboutWindow.java
index 725d72e5cd..f246931b84 100644
--- a/uicdm/src/main/java/ucar/nc2/ui/ToolsAboutWindow.java
+++ b/uicdm/src/main/java/ucar/nc2/ui/ToolsAboutWindow.java
@@ -1,11 +1,10 @@
/*
- * Copyright (c) 1998-2019 University Corporation for Atmospheric Research/Unidata
+ * Copyright (c) 1998-2025 University Corporation for Atmospheric Research/Unidata
* See LICENSE for license information.
*/
package ucar.nc2.ui;
-import java.nio.charset.StandardCharsets;
import ucar.ui.util.Resource;
import ucar.ui.widget.BAMutil;
import java.awt.BorderLayout;
@@ -19,10 +18,6 @@
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
@@ -42,7 +37,8 @@ public ToolsAboutWindow(JFrame parent) {
super(parent);
JLabel lab1 = new JLabel("
"
- + "Netcdf Tools User Interface (ToolsUI)
" + "" + getVersion() + ""
+ + "Netcdf Tools User Interface (ToolsUI)
" + "" + BuildInfo.getToolsUIBuildInfo().getVersion()
+ + "" + "
Build Date: " + "" + BuildInfo.getToolsUIBuildInfo().getTimestamp() + ""
+ "
https://www.unidata.ucar.edu/software/netcdf-java/"
+ "
Developers: John Caron, Sean Arms, Dennis Heimbinger, Ryan May, Christian Ward-Garrison"
+ "" + "
With thanks to these Open Source contributors:" + ""
@@ -120,23 +116,6 @@ public void mousePressed(MouseEvent e) {
*
*/
private String getVersion() {
- String version;
- try (InputStream is = Resource.getFileResource("/README")) {
- if (is == null) {
- return "5.0";
- }
- BufferedReader dataIS = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
- StringBuilder sbuff = new StringBuilder();
- for (int i = 0; i < 3; i++) {
- sbuff.append(dataIS.readLine());
- sbuff.append("
");
- }
- version = sbuff.toString();
- } catch (IOException ioe) {
- ioe.printStackTrace();
- version = "version unknown";
- }
-
- return version;
+ return BuildInfo.getToolsUIBuildInfo().getVersion();
}
}
diff --git a/uicdm/src/main/java/ucar/nc2/ui/ToolsSplashScreen.java b/uicdm/src/main/java/ucar/nc2/ui/ToolsSplashScreen.java
index abc4c7d035..0f94828f79 100644
--- a/uicdm/src/main/java/ucar/nc2/ui/ToolsSplashScreen.java
+++ b/uicdm/src/main/java/ucar/nc2/ui/ToolsSplashScreen.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998-2019 University Corporation for Atmospheric Research/Unidata
+ * Copyright (c) 1998-2025 University Corporation for Atmospheric Research/Unidata
* See LICENSE for license information.
*/
diff --git a/uicdm/src/main/java/ucar/nc2/ui/ToolsUI.java b/uicdm/src/main/java/ucar/nc2/ui/ToolsUI.java
index aacde4acc0..6a02447f19 100644
--- a/uicdm/src/main/java/ucar/nc2/ui/ToolsUI.java
+++ b/uicdm/src/main/java/ucar/nc2/ui/ToolsUI.java
@@ -59,7 +59,7 @@
public class ToolsUI extends JPanel {
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
- private static final String DIALOG_VERSION = "5.0";
+ private static final String DIALOG_VERSION = BuildInfo.getToolsUIBuildInfo().getVersion();
public static final String WORLD_DETAIL_MAP = "/resources/ui/maps/Countries.shp";
public static final String US_MAP = "/resources/ui/maps/us_state.shp";
@@ -1524,11 +1524,14 @@ public void setMessage(SocketMessage.Event event) {
}
if (!configRead) {
+ // if System.getProperty("user.home") is set, look under user_home/.unidata for nj22Config.xml,
+ // otherwise look under the relative directory .unidata
String filename = XMLStore.makeStandardFilename(".unidata", "nj22Config.xml");
File f = new File(filename);
if (f.exists()) {
try (FileInputStream fis = new FileInputStream(filename)) {
StringBuilder errlog = new StringBuilder();
+ RuntimeConfigParser.read(fis, errlog);
System.out.println(errlog);
} catch (IOException ioe) {
log.warn("Error reading {} = {}", filename, ioe.getMessage());
@@ -1600,7 +1603,7 @@ public void setMessage(SocketMessage.Event event) {
} catch (HTTPException e) {
log.error("Failed to set global credentials");
}
- HTTPSession.setGlobalUserAgent("ToolsUI v5.0");
+ HTTPSession.setGlobalUserAgent(String.format("ToolsUI v%s", BuildInfo.getToolsUIBuildInfo().getVersion()));
java.net.Authenticator.setDefault(provider);
});