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 dc23c4525 CAY-2742 Switch minimum required Java version to 11 - drop
code that handled incompatibility between Java 8 and 9 in the MacOS version
dc23c4525 is described below
commit dc23c45256fded9a6db038912c27b65ef8a5759d
Author: Nikita Timofeev <[email protected]>
AuthorDate: Thu Jul 7 17:34:44 2022 +0300
CAY-2742 Switch minimum required Java version to 11
- drop code that handled incompatibility between Java 8 and 9 in the MacOS
version
---
.../cayenne/modeler/osx/OSXApplicationWrapper.java | 149 ---------------------
.../modeler/osx/OSXPlatformInitializer.java | 15 +--
.../modeler/osx/OSXQuitResponseWrapper.java | 73 ----------
3 files changed, 5 insertions(+), 232 deletions(-)
diff --git
a/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXApplicationWrapper.java
b/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXApplicationWrapper.java
deleted file mode 100644
index 34ad852fa..000000000
---
a/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXApplicationWrapper.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.osx;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.util.function.Consumer;
-
-import com.apple.eawt.Application;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * This class wraps apple {@link com.apple.eawt.Application} class and
dynamically
- * proxying it's lifecycle handlers setup.
- * <p>
- * This code exists to support both Java 8 and 9, as handler interfaces where
incompatibly moved
- * to other package between these versions.
- * <p>
- * See <a href="https://bugs.openjdk.java.net/browse/JDK-8160437">JDK-8160437
issue</a> for details.
- *
- * @see #setAboutHandler(Runnable) run action on "About App" menu item select
- * @see #setPreferencesHandler(Runnable) run action on "Preferences..." menu
item select
- * @see #setQuitHandler(Consumer) run action on "Quit App" menu item select
- *
- * @see OSXQuitResponseWrapper
- *
- * @since 4.1
- */
-public class OSXApplicationWrapper {
-
- private static final Logger logger =
LoggerFactory.getLogger(OSXApplicationWrapper.class);
-
- // package for handler classes for Java 8 and older
- private static final String JAVA8_PACKAGE = "com.apple.eawt.";
-
- // package for handler classes for Java 9 and newer
- private static final String JAVA9_PACKAGE = "java.awt.desktop.";
-
- private final Application application;
-
- private Class<?> aboutHandlerClass;
- private Method setAboutHandler;
-
- private Class<?> preferencesHandlerClass;
- private Method setPreferencesHandler;
-
- private Class<?> quitHandlerClass;
- private Method setQuitHandler;
-
- public OSXApplicationWrapper(Application application) {
- this.application = application;
- initMethods();
- }
-
- public void setPreferencesHandler(Runnable action) {
- setHandler(setPreferencesHandler, preferencesHandlerClass, action);
- }
-
- public void setAboutHandler(Runnable action) {
- setHandler(setAboutHandler, aboutHandlerClass, action);
- }
-
- public void setQuitHandler(Consumer<OSXQuitResponseWrapper> action) {
- InvocationHandler handler = (proxy, method, args) -> {
- // args: 0 - event, 1 - quitResponse
- action.accept(new OSXQuitResponseWrapper(args[1]));
- return null;
- };
- Object proxy = createProxy(quitHandlerClass, handler);
- try {
- setQuitHandler.invoke(application, proxy);
- } catch (IllegalAccessException | InvocationTargetException ex) {
- logger.warn("Unable to call " + setQuitHandler.getName(), ex);
- }
- }
-
- /**
- * Find required handlers' methods and classes
- */
- private void initMethods() {
- aboutHandlerClass = getHandlerClass("AboutHandler");
- setAboutHandler = getMethod("setAboutHandler", aboutHandlerClass);
-
- preferencesHandlerClass = getHandlerClass("PreferencesHandler");
- setPreferencesHandler = getMethod("setPreferencesHandler",
preferencesHandlerClass);
-
- quitHandlerClass = getHandlerClass("QuitHandler");
- setQuitHandler = getMethod("setQuitHandler", quitHandlerClass);
- }
-
- private void setHandler(Method setMethod, Class<?> handlerClass, Runnable
action) {
- InvocationHandler handler = (proxy, method, args) -> {
- action.run();
- return null;
- };
- Object proxy = createProxy(handlerClass, handler);
- try {
- setMethod.invoke(application, proxy);
- } catch (IllegalAccessException | InvocationTargetException ex) {
- logger.warn("Unable to call " + setMethod.getName(), ex);
- }
- }
-
- private Object createProxy(Class<?> handlerClass, InvocationHandler
handler) {
- return
Proxy.newProxyInstance(OSXApplicationWrapper.class.getClassLoader(), new
Class<?>[]{handlerClass}, handler);
- }
-
- private Method getMethod(String name, Class<?> ... parameters) {
- try {
- return application.getClass().getMethod(name, parameters);
- } catch (NoSuchMethodException ex) {
- logger.warn("Unable to find method " + name, ex);
- return null;
- }
- }
-
- private Class<?> getHandlerClass(String className) {
- try {
- return Class.forName(JAVA8_PACKAGE + className);
- } catch (ClassNotFoundException ex) {
- try {
- return Class.forName(JAVA9_PACKAGE + className);
- } catch (ClassNotFoundException ex2) {
- return null;
- }
- }
- }
-
-}
diff --git
a/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXPlatformInitializer.java
b/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXPlatformInitializer.java
index 6651e96d6..0ee1cc110 100644
---
a/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXPlatformInitializer.java
+++
b/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXPlatformInitializer.java
@@ -20,6 +20,7 @@ package org.apache.cayenne.modeler.osx;
import java.awt.Color;
import java.awt.Component;
+import java.awt.Desktop;
import java.awt.Graphics;
import java.util.HashSet;
import java.util.Set;
@@ -42,8 +43,6 @@ import
org.apache.cayenne.modeler.action.ConfigurePreferencesAction;
import org.apache.cayenne.modeler.action.ExitAction;
import org.apache.cayenne.modeler.init.platform.PlatformInitializer;
-import com.apple.eawt.Application;
-
public class OSXPlatformInitializer implements PlatformInitializer {
@Inject
@@ -54,15 +53,11 @@ public class OSXPlatformInitializer implements
PlatformInitializer {
// override some default styles and colors, assuming that Aqua theme
will be used
overrideUIDefaults();
- // configure special Mac menu handlers
- OSXApplicationWrapper wrapper = new
OSXApplicationWrapper(Application.getApplication());
- wrapper.setAboutHandler(()
- ->
actionManager.getAction(AboutAction.class).showAboutDialog());
-
- wrapper.setPreferencesHandler(()
- ->
actionManager.getAction(ConfigurePreferencesAction.class).showPreferencesDialog());
+ Desktop desktop = Desktop.getDesktop();
- wrapper.setQuitHandler(r -> {
+ desktop.setAboutHandler(e ->
actionManager.getAction(AboutAction.class).showAboutDialog());
+ desktop.setPreferencesHandler(e ->
actionManager.getAction(ConfigurePreferencesAction.class).showPreferencesDialog());
+ desktop.setQuitHandler((e, r) -> {
if(!actionManager.getAction(ExitAction.class).exit()) {
r.cancelQuit();
} else {
diff --git
a/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXQuitResponseWrapper.java
b/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXQuitResponseWrapper.java
deleted file mode 100644
index 815a11c62..000000000
---
a/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXQuitResponseWrapper.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.osx;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Small wrapper around QuitResponse class that can reside in different
packages:
- * com.apple.eawt.QuitResponse in JDK 8 and java.awt.desktop.QuitResponse in
JDK 9.
- * Luckily it has same signature so we can dynamically resolve it's methods.
- *
- * @since 4.1
- */
-public class OSXQuitResponseWrapper {
-
- private static final Logger logger =
LoggerFactory.getLogger(OSXQuitResponseWrapper.class);
-
- private Method performQuit;
-
- private Method cancelQuit;
-
- private final Object quitResponse;
-
- public OSXQuitResponseWrapper(Object quitResponse) {
- this.quitResponse = quitResponse;
- try {
- performQuit = quitResponse.getClass().getMethod("performQuit");
- cancelQuit = quitResponse.getClass().getMethod("cancelQuit");
- } catch (NoSuchMethodException ex) {
- logger.warn("Unable to find methods for quit response", ex);
- }
- }
-
- public void performQuit() {
- safePerform(performQuit);
- }
-
- public void cancelQuit() {
- safePerform(cancelQuit);
- }
-
- private void safePerform(Method method) {
- if(method == null) {
- return;
- }
- try {
- method.invoke(quitResponse);
- } catch (IllegalAccessException | InvocationTargetException ex) {
- logger.warn("Unable to call " + method.getName(), ex);
- }
- }
-}