This is an automated email from the ASF dual-hosted git repository.
ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push:
new 31271ed15 CAY-2872 CayenneModeler "Documentation" link is broken
31271ed15 is described below
commit 31271ed159620877f7c2e041066d532ff8887bee
Author: Nikita Timofeev <[email protected]>
AuthorDate: Thu Oct 31 17:38:38 2024 +0400
CAY-2872 CayenneModeler "Documentation" link is broken
---
RELEASE-NOTES.txt | 1 +
.../modeler/action/DocumentationAction.java | 32 ++++++++++++---
.../cayenne/modeler/util/BrowserControl.java | 45 +++++++++-------------
.../cayenne/modeler/util/OperatingSystem.java | 11 ++----
4 files changed, 51 insertions(+), 38 deletions(-)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 3fdddfe2d..27fac82bf 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -13,6 +13,7 @@ Date:
----------------------------------
Changes/New Features:
+CAY-2872 CayenneModeler "Documentation" link is broken
CAY-2873 Change Orderings.orderedList() to accept a Collection rather than a
List
Bug Fixes:
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DocumentationAction.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DocumentationAction.java
index 7c01a3e2c..a691398e3 100644
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DocumentationAction.java
+++
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DocumentationAction.java
@@ -38,12 +38,34 @@ public class DocumentationAction extends CayenneAction {
@Override
public void performAction(ActionEvent e) {
- String version = LocalizedStringsHandler.getString("cayenne.version");
- String url = "https://cayenne.apache.org";
- if(!"".equals(version)) {
- String majorVersion = version.substring(0,
version.lastIndexOf('.'));
- url = url + "/docs/" + majorVersion + "/cayenne-guide/";
+ String url = "https://cayenne.apache.org/docs/";
+ String majorVersion = getMajorVersion();
+ if(!majorVersion.isEmpty()) {
+ url = url + majorVersion + "/cayenne-guide/";
}
BrowserControl.displayURL(url);
}
+
+ private static String getMajorVersion() {
+ String version = LocalizedStringsHandler.getString("cayenne.version");
+ if(version.isEmpty()) {
+ return "";
+ }
+ String majorVersion = version;
+ int dash = version.indexOf('-');
+ if (dash != -1) {
+ // trim down snapshot part
+ majorVersion = version.substring(0, dash);
+ }
+ // build a major version in form of 'X.Y'
+ String[] components = majorVersion.split("\\.");
+ switch (components.length) {
+ case 0:
+ return "";
+ case 1:
+ return components[0] + ".0";
+ default:
+ return String.join(".", components[0], components[1]);
+ }
+ }
}
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/BrowserControl.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/BrowserControl.java
index aed20761a..1936e36a8 100644
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/BrowserControl.java
+++
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/BrowserControl.java
@@ -19,54 +19,47 @@
package org.apache.cayenne.modeler.util;
-import java.lang.reflect.Method;
+import java.awt.Desktop;
+import java.net.URI;
/**
* Opens a URL in the system default browser.
*/
public class BrowserControl {
-
- private static final String WIN_PATH = "rundll32";
- private static final String WIN_FLAG = "url.dll,FileProtocolHandler";
-
/**
* Display a file in the system browser. If you want to display a file,
you must
* include the absolute path name.
- *
+ *
* @param url the file's url (the url must start with either "http://" or
"file://").
*/
// see public domain code at
// http://www.centerkey.com/java/browser/myapp/BareBonesBrowserLaunch.java
public static void displayURL(String url) {
try {
- if (OperatingSystem.getOS() == OperatingSystem.WINDOWS) {
- // cmd = 'rundll32 url.dll,FileProtocolHandler http://...'
- String cmd = WIN_PATH + " " + WIN_FLAG + " " + url;
+ // use direct Java support for the Desktop if available
+ if (Desktop.isDesktopSupported() &&
Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
+ Desktop.getDesktop().browse(new URI(url));
+ // failover to a platform-specific hacks
+ } else if (OperatingSystem.getOS() == OperatingSystem.WINDOWS) {
+ String cmd = "rundll32 url.dll,FileProtocolHandler " + url;
Runtime.getRuntime().exec(cmd);
- }
- else if (OperatingSystem.getOS() == OperatingSystem.MAC_OS_X) {
- Class<?> fileManager =
Class.forName("com.apple.eio.FileManager");
- Method openURL = fileManager.getDeclaredMethod("openURL",
String.class);
- openURL.invoke(null, url);
- }
- else { // assume Unix or Linux
+ } else if (OperatingSystem.getOS() == OperatingSystem.MAC_OS_X) {
+ String cmd = "open " + url;
+ Runtime.getRuntime().exec(cmd);
+ } else { // assume Unix or Linux
String[] browsers = {
- "firefox", "opera", "konqueror", "epiphany", "mozilla",
- "netscape"
+ "google-chrome", "firefox", "mozilla",
+ "epiphany", "konqueror", "netscape",
+ "opera", "links", "lynx"
};
for (String browser : browsers) {
- if (Runtime.getRuntime().exec(new String[] {
- "which", browser
- }).waitFor() == 0) {
- Runtime.getRuntime().exec(new String[] {
- browser, url
- });
+ if (Runtime.getRuntime().exec(new String[]{"which",
browser}).waitFor() == 0) {
+ Runtime.getRuntime().exec(new String[]{browser, url});
break;
}
}
}
- }
- catch (Exception ex) {
+ } catch (Exception ex) {
// could not open browser. Fail silently.
}
}
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/OperatingSystem.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/OperatingSystem.java
index 66704623b..e0503a5ca 100644
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/OperatingSystem.java
+++
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/OperatingSystem.java
@@ -16,6 +16,7 @@
* specific language governing permissions and limitations
* under the License.
****************************************************************/
+
package org.apache.cayenne.modeler.util;
/**
@@ -26,21 +27,17 @@ public enum OperatingSystem {
MAC_OS_X, WINDOWS, OTHER;
private static final OperatingSystem os;
-
static {
String osName = System.getProperty("os.name");
if (osName == null) {
os = OTHER;
- }
- else {
+ } else {
if (osName.startsWith("Windows")) {
os = WINDOWS;
- }
- else if (osName.startsWith("Mac OS X")) {
+ } else if (osName.startsWith("Mac OS X")) {
os = MAC_OS_X;
- }
- else {
+ } else {
os = OTHER;
}
}