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 <stari...@gmail.com> 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; } }