This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits 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 366a0a48b Modeler cleanup - taking PlatformInitializer out of DI
366a0a48b is described below
commit 366a0a48b61f371d7b3c263aee503f3ba2e1a712
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sun May 17 13:01:31 2026 -0400
Modeler cleanup - taking PlatformInitializer out of DI
---
.../generic/GenericCayenneModelerModule.java | 30 --------
.../cayenne/modeler/generic/GenericMain.java | 29 +-------
.../generic/GenericPlatformInitializer.java | 23 +++---
.../modeler/osx/OSXCayenneModelerModule.java | 30 --------
.../org/apache/cayenne/modeler/osx/OSXMain.java | 32 +--------
.../modeler/osx/OSXPlatformInitializer.java | 41 +++++------
.../modeler/win/WinCayenneModelerModule.java | 30 --------
.../org/apache/cayenne/modeler/win/WinMain.java | 28 +-------
.../modeler/win/WinPlatformInitializer.java | 18 ++---
.../org/apache/cayenne/modeler/Application.java | 60 ++++++++++++++--
.../main/java/org/apache/cayenne/modeler/Main.java | 83 +---------------------
.../org/apache/cayenne/modeler/ModelerModule.java | 3 -
.../platform/DefaultPlatformInitializer.java | 38 ----------
.../org/apache/cayenne/modeler/ui/MainFrame.java | 2 +-
.../UIPlatformInitializer.java} | 14 ++--
.../ui/preferences/more/MorePrefsPanel.java | 2 +-
.../modeler/CayenneModelerValidationIT.java | 11 +--
17 files changed, 117 insertions(+), 357 deletions(-)
diff --git
a/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericCayenneModelerModule.java
b/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericCayenneModelerModule.java
deleted file mode 100644
index 7fa1aca65..000000000
---
a/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericCayenneModelerModule.java
+++ /dev/null
@@ -1,30 +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.generic;
-
-import org.apache.cayenne.di.Binder;
-import org.apache.cayenne.di.Module;
-import org.apache.cayenne.modeler.service.platform.PlatformInitializer;
-
-public class GenericCayenneModelerModule implements Module {
-
- public void configure(Binder binder) {
-
binder.bind(PlatformInitializer.class).to(GenericPlatformInitializer.class);
- }
-}
diff --git
a/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericMain.java
b/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericMain.java
index 13ca6e966..abdb0c40f 100644
---
a/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericMain.java
+++
b/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericMain.java
@@ -18,34 +18,11 @@
****************************************************************/
package org.apache.cayenne.modeler.generic;
-import java.util.Collection;
+import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.di.Module;
-import org.apache.cayenne.modeler.Main;
+public final class GenericMain {
-public class GenericMain extends Main {
-
- /**
- * Main method that starts the CayenneModeler.
- */
public static void main(String[] args) {
- try {
- new GenericMain(args).launch();
- }
- catch (Exception e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
-
- protected GenericMain(String[] args) {
- super(args);
- }
-
- @Override
- protected Collection<Module> appendModules(Collection<Module> modules) {
- modules = super.appendModules(modules);
- modules.add(new GenericCayenneModelerModule());
- return modules;
+ Application.launch(args, new GenericPlatformInitializer());
}
}
diff --git
a/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericPlatformInitializer.java
b/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericPlatformInitializer.java
index 717cf6e9c..5c52ab7b7 100644
---
a/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericPlatformInitializer.java
+++
b/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericPlatformInitializer.java
@@ -21,7 +21,7 @@ package org.apache.cayenne.modeler.generic;
import com.jgoodies.looks.plastic.PlasticLookAndFeel;
import com.jgoodies.looks.plastic.PlasticTheme;
import com.jgoodies.looks.plastic.PlasticXPLookAndFeel;
-import org.apache.cayenne.modeler.service.platform.PlatformInitializer;
+import org.apache.cayenne.modeler.ui.UIPlatformInitializer;
import org.apache.cayenne.modeler.toolkit.icon.IconFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -29,20 +29,16 @@ import org.slf4j.LoggerFactory;
import javax.swing.*;
import java.awt.*;
-public class GenericPlatformInitializer implements PlatformInitializer {
+public class GenericPlatformInitializer implements UIPlatformInitializer {
- private static Logger logger =
LoggerFactory.getLogger(GenericPlatformInitializer.class);
+ private static final Logger LOGGER =
LoggerFactory.getLogger(GenericPlatformInitializer.class);
- static final String DEFAULT_LAF_NAME =
PlasticXPLookAndFeel.class.getName();
+ private static final String DEFAULT_LAF_NAME =
PlasticXPLookAndFeel.class.getName();
- // note that another theme - "Desert Blue" doesn't support Chinese and
- // Japanese chars
- static final String DEFAULT_THEME_NAME = "Sky Bluer";
-
- public void setupMenus(JFrame frame) {
- // noop - default menus are fine
- }
+ // note that another theme - "Desert Blue" doesn't support Chinese and
Japanese chars
+ private static final String DEFAULT_THEME_NAME = "Sky Bluer";
+ @Override
public void initLookAndFeel() {
PlasticTheme theme = findTheme();
@@ -56,7 +52,7 @@ public class GenericPlatformInitializer implements
PlatformInitializer {
// override some default styles and colors
overrideUIDefaults();
} catch (Exception e) {
- logger.warn("Error installing L&F: " + DEFAULT_LAF_NAME, e);
+ LOGGER.warn("Error installing L&F: " + DEFAULT_LAF_NAME, e);
}
}
@@ -89,7 +85,7 @@ public class GenericPlatformInitializer implements
PlatformInitializer {
UIManager.put("MainToolBar.border",
BorderFactory.createLineBorder(Color.GRAY));
}
- protected PlasticTheme findTheme() {
+ private PlasticTheme findTheme() {
for (Object object : PlasticLookAndFeel.getInstalledThemes()) {
PlasticTheme theme = (PlasticTheme) object;
@@ -99,5 +95,4 @@ public class GenericPlatformInitializer implements
PlatformInitializer {
}
return null;
}
-
}
diff --git
a/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXCayenneModelerModule.java
b/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXCayenneModelerModule.java
deleted file mode 100644
index 4be3efc55..000000000
---
a/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXCayenneModelerModule.java
+++ /dev/null
@@ -1,30 +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 org.apache.cayenne.di.Binder;
-import org.apache.cayenne.di.Module;
-import org.apache.cayenne.modeler.service.platform.PlatformInitializer;
-
-public class OSXCayenneModelerModule implements Module {
-
- public void configure(Binder binder) {
-
binder.bind(PlatformInitializer.class).to(OSXPlatformInitializer.class);
- }
-}
diff --git
a/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXMain.java
b/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXMain.java
index af777bb28..27288d881 100644
---
a/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXMain.java
+++
b/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXMain.java
@@ -19,37 +19,11 @@
package org.apache.cayenne.modeler.osx;
-import java.util.Collection;
+import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.di.Module;
-import org.apache.cayenne.modeler.Main;
+public final class OSXMain {
-/**
- * Main class to start CayenneModeler on MacOSX.
- */
-public class OSXMain extends Main {
-
- /**
- * Main method that starts the CayenneModeler.
- */
public static void main(String[] args) {
- try {
- new OSXMain(args).launch();
- }
- catch (Exception e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
-
- protected OSXMain(String[] args) {
- super(args);
- }
-
- @Override
- protected Collection<Module> appendModules(Collection<Module> modules) {
- modules = super.appendModules(modules);
- modules.add(new OSXCayenneModelerModule());
- return modules;
+ Application.launch(args, new OSXPlatformInitializer());
}
}
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 e455a0771..fb2af6e9d 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
@@ -18,9 +18,9 @@
****************************************************************/
package org.apache.cayenne.modeler.osx;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.modeler.service.platform.PlatformInitializer;
+import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.service.action.GlobalActions;
+import org.apache.cayenne.modeler.ui.UIPlatformInitializer;
import org.apache.cayenne.modeler.ui.action.AboutAction;
import org.apache.cayenne.modeler.ui.action.ConfigurePreferencesAction;
import org.apache.cayenne.modeler.ui.action.ExitAction;
@@ -32,31 +32,12 @@ import java.awt.*;
import java.util.HashSet;
import java.util.Set;
-public class OSXPlatformInitializer implements PlatformInitializer {
-
- @Inject
- protected GlobalActions globalActions;
+public class OSXPlatformInitializer implements UIPlatformInitializer {
@Override
public void initLookAndFeel() {
-
// override some default styles and colors, assuming that Aqua theme
will be used
- overrideUIDefaults();
-
- Desktop desktop = Desktop.getDesktop();
-
- desktop.setAboutHandler(e ->
globalActions.getAction(AboutAction.class).showAboutDialog());
- desktop.setPreferencesHandler(e ->
globalActions.getAction(ConfigurePreferencesAction.class).showPreferencesDialog());
- desktop.setQuitHandler((e, r) -> {
- if (!globalActions.getAction(ExitAction.class).exit()) {
- r.cancelQuit();
- } else {
- r.performQuit();
- }
- });
- }
- private void overrideUIDefaults() {
Color lightGrey = new Color(0xEEEEEE);
Color darkGrey = new Color(225, 225, 225);
Border darkBorder = BorderFactory.createLineBorder(darkGrey);
@@ -108,7 +89,21 @@ public class OSXPlatformInitializer implements
PlatformInitializer {
}
@Override
- public void setupMenus(JFrame frame) {
+ public void setupMenus(Application app, JFrame frame) {
+
+ GlobalActions globalActions = app.getActionManager();
+
+ Desktop desktop = Desktop.getDesktop();
+ desktop.setAboutHandler(e ->
globalActions.getAction(AboutAction.class).showAboutDialog());
+ desktop.setPreferencesHandler(e ->
globalActions.getAction(ConfigurePreferencesAction.class).showPreferencesDialog());
+ desktop.setQuitHandler((e, r) -> {
+ if (!globalActions.getAction(ExitAction.class).exit()) {
+ r.cancelQuit();
+ } else {
+ r.performQuit();
+ }
+ });
+
// set additional look and feel for the window
frame.getRootPane().putClientProperty("apple.awt.brushMetalLook",
Boolean.TRUE);
diff --git
a/modeler/cayenne-modeler-win-ext/src/main/java/org/apache/cayenne/modeler/win/WinCayenneModelerModule.java
b/modeler/cayenne-modeler-win-ext/src/main/java/org/apache/cayenne/modeler/win/WinCayenneModelerModule.java
deleted file mode 100644
index 6c31d16b0..000000000
---
a/modeler/cayenne-modeler-win-ext/src/main/java/org/apache/cayenne/modeler/win/WinCayenneModelerModule.java
+++ /dev/null
@@ -1,30 +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.win;
-
-import org.apache.cayenne.di.Binder;
-import org.apache.cayenne.di.Module;
-import org.apache.cayenne.modeler.service.platform.PlatformInitializer;
-
-public class WinCayenneModelerModule implements Module {
-
- public void configure(Binder binder) {
-
binder.bind(PlatformInitializer.class).to(WinPlatformInitializer.class);
- }
-}
diff --git
a/modeler/cayenne-modeler-win-ext/src/main/java/org/apache/cayenne/modeler/win/WinMain.java
b/modeler/cayenne-modeler-win-ext/src/main/java/org/apache/cayenne/modeler/win/WinMain.java
index 629bc6054..d5feccc7a 100644
---
a/modeler/cayenne-modeler-win-ext/src/main/java/org/apache/cayenne/modeler/win/WinMain.java
+++
b/modeler/cayenne-modeler-win-ext/src/main/java/org/apache/cayenne/modeler/win/WinMain.java
@@ -18,33 +18,11 @@
****************************************************************/
package org.apache.cayenne.modeler.win;
-import org.apache.cayenne.di.Module;
-import org.apache.cayenne.modeler.Main;
+import org.apache.cayenne.modeler.Application;
-import java.util.Collection;
+public final class WinMain {
-public class WinMain extends Main {
-
- /**
- * Main method that starts the CayenneModeler.
- */
public static void main(String[] args) {
- try {
- new WinMain(args).launch();
- } catch (Exception e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
-
- protected WinMain(String[] args) {
- super(args);
- }
-
- @Override
- protected Collection<Module> appendModules(Collection<Module> modules) {
- modules = super.appendModules(modules);
- modules.add(new WinCayenneModelerModule());
- return modules;
+ Application.launch(args, new WinPlatformInitializer());
}
}
diff --git
a/modeler/cayenne-modeler-win-ext/src/main/java/org/apache/cayenne/modeler/win/WinPlatformInitializer.java
b/modeler/cayenne-modeler-win-ext/src/main/java/org/apache/cayenne/modeler/win/WinPlatformInitializer.java
index b0e5749f4..b995808d3 100644
---
a/modeler/cayenne-modeler-win-ext/src/main/java/org/apache/cayenne/modeler/win/WinPlatformInitializer.java
+++
b/modeler/cayenne-modeler-win-ext/src/main/java/org/apache/cayenne/modeler/win/WinPlatformInitializer.java
@@ -19,23 +19,17 @@
package org.apache.cayenne.modeler.win;
import com.jgoodies.looks.windows.WindowsLookAndFeel;
-import org.apache.cayenne.modeler.service.platform.PlatformInitializer;
+import org.apache.cayenne.modeler.ui.UIPlatformInitializer;
import org.apache.cayenne.modeler.toolkit.icon.IconFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.JFrame;
-import javax.swing.UIManager;
-import javax.swing.BorderFactory;
-import java.awt.Color;
+import javax.swing.*;
+import java.awt.*;
-public class WinPlatformInitializer implements PlatformInitializer {
+public class WinPlatformInitializer implements UIPlatformInitializer {
- private static Logger logger =
LoggerFactory.getLogger(WinPlatformInitializer.class);
-
- @Override
- public void setupMenus(JFrame frame) {
- }
+ private static final Logger LOGGER =
LoggerFactory.getLogger(WinPlatformInitializer.class);
@Override
public void initLookAndFeel() {
@@ -44,7 +38,7 @@ public class WinPlatformInitializer implements
PlatformInitializer {
// override some default styles and colors
overrideUIDefaults();
} catch (Exception e) {
- logger.warn("Error installing L&F: " +
WindowsLookAndFeel.class.getName(), e);
+ LOGGER.warn("Error installing L&F: " +
WindowsLookAndFeel.class.getName(), e);
}
}
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
index 30fa5faba..93e6eb4e0 100644
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
+++
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Application.java
@@ -21,9 +21,12 @@ package org.apache.cayenne.modeler;
import org.apache.cayenne.configuration.ConfigurationNameMapper;
import org.apache.cayenne.configuration.DataMapLoader;
+import org.apache.cayenne.configuration.runtime.CoreModule;
import org.apache.cayenne.configuration.runtime.DbAdapterFactory;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
+import org.apache.cayenne.dbsync.DbSyncModule;
import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
+import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.modeler.dbconnector.DBConnectors;
import org.apache.cayenne.modeler.log.ModelerLogFactory;
@@ -34,7 +37,7 @@ import org.apache.cayenne.modeler.pref.PreferencesRepository;
import org.apache.cayenne.modeler.pref.RecentProjectsPrefs;
import org.apache.cayenne.modeler.service.action.GlobalActions;
import org.apache.cayenne.modeler.service.classloader.ModelerClassLoader;
-import org.apache.cayenne.modeler.service.platform.PlatformInitializer;
+import org.apache.cayenne.modeler.ui.UIPlatformInitializer;
import
org.apache.cayenne.modeler.service.validator.ConfigurableProjectValidator;
import org.apache.cayenne.modeler.ui.MainFrame;
import org.apache.cayenne.modeler.ui.action.OpenProjectAction;
@@ -42,9 +45,12 @@ import org.apache.cayenne.modeler.ui.logconsole.LogConsole;
import org.apache.cayenne.modeler.undo.CayenneUndoManager;
import org.apache.cayenne.project.ConfigurationNodeParentGetter;
import org.apache.cayenne.project.ProjectLoader;
+import org.apache.cayenne.project.ProjectModule;
import org.apache.cayenne.project.ProjectSaver;
import org.apache.cayenne.project.upgrade.UpgradeService;
import org.apache.cayenne.project.validation.ProjectValidator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import javax.swing.*;
import java.io.File;
@@ -56,7 +62,47 @@ import java.util.stream.Collectors;
*/
public class Application {
+ private static final Logger LOGGER =
LoggerFactory.getLogger(Application.class);
+
+ public static void launch(String[] args, UIPlatformInitializer
platformInitializer) {
+ try {
+ // logger should go after Look And Feel or Logger Console will be
without style
+ LOGGER.info("Starting CayenneModeler.");
+ LOGGER.info("JRE v.{} at {}", System.getProperty("java.version"),
System.getProperty("java.home"));
+
+ // TODO: this is dirty... CoreModule is out of place inside the
Modeler...
+ // If we need CayenneRuntime for certain operations, those should
start their own stack...
+ Injector injector = DIBootstrap.createInjector(
+ new CoreModule(),
+ new ProjectModule(),
+ new DbSyncModule(),
+ new ModelerModule());
+
+ SwingUtilities.invokeLater(() -> {
+ new Application(injector,
platformInitializer).launch(initialProjectFromArgs(args));
+ });
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+ }
+
+ private static File initialProjectFromArgs(String[] args) {
+ if (args != null && args.length == 1) {
+ File f = new File(args[0]);
+
+ if (f.isFile()
+ && f.getName().startsWith("cayenne")
+ && f.getName().endsWith(".xml")) {
+ return f;
+ }
+ }
+
+ return null;
+ }
+
private final Injector injector;
+ private final UIPlatformInitializer platformInitializer;
private final ModelerClassLoader classLoader;
private final PreferencesRepository preferencesRepository;
private final GlobalActions actionManager;
@@ -66,8 +112,9 @@ public class Application {
private CayenneUndoManager undoManager;
private DBConnectors dbConnectors;
- public Application(Injector injector) {
+ public Application(Injector injector, UIPlatformInitializer
platformInitializer) {
this.injector = injector;
+ this.platformInitializer = platformInitializer;
this.classLoader = new ModelerClassLoader();
this.preferencesRepository = new
PreferencesRepository(injector.getInstance(ConfigurationNameMapper.class));
@@ -78,6 +125,7 @@ public class Application {
this.projectValidator = new ConfigurableProjectValidator(this);
}
+
public ModelerClassLoader getClassLoader() {
return classLoader;
}
@@ -106,8 +154,8 @@ public class Application {
return injector.getInstance(UpgradeService.class);
}
- public PlatformInitializer getPlatformInitializer() {
- return injector.getInstance(PlatformInitializer.class);
+ public UIPlatformInitializer getPlatformInitializer() {
+ return platformInitializer;
}
public ConfigurationNodeParentGetter getConfigurationNodeParentGetter() {
@@ -138,7 +186,9 @@ public class Application {
return logConsole;
}
- public void startup(File initialProject) {
+ public void launch(File initialProject) {
+ platformInitializer.initLookAndFeel();
+
this.logConsole = new LogConsole(this);
ModelerLogFactory.setAppender(logConsole);
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java
index 3def30a94..7be3e3f15 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java
@@ -19,89 +19,12 @@
package org.apache.cayenne.modeler;
-import org.apache.cayenne.configuration.runtime.CoreModule;
-import org.apache.cayenne.dbsync.DbSyncModule;
-import org.apache.cayenne.di.DIBootstrap;
-import org.apache.cayenne.di.Injector;
-import org.apache.cayenne.di.Module;
-import org.apache.cayenne.modeler.service.platform.PlatformInitializer;
-import org.apache.cayenne.project.ProjectModule;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.cayenne.modeler.ui.UIPlatformInitializer;
-import javax.swing.*;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
+public final class Main {
-/**
- * Main class responsible for starting CayenneModeler.
- */
-public class Main {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(Main.class);
-
- protected String[] args;
-
- /**
- * Main method that starts the CayenneModeler.
- */
public static void main(String[] args) {
- try {
- new Main(args).launch();
- } catch (Exception e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
-
- protected Main(String[] args) {
- this.args = args;
- }
-
- protected void launch() {
-
- // TODO: use module auto-loading...
- Injector injector = DIBootstrap.createInjector(appendModules(new
ArrayList<>()));
-
- // init look and feel before using any Swing classes...
- injector.getInstance(PlatformInitializer.class).initLookAndFeel();
-
- // logger should go after Look And Feel or Logger Console will be
without style
- LOGGER.info("Starting CayenneModeler.");
- LOGGER.info("JRE v.{} at {}", System.getProperty("java.version"),
System.getProperty("java.home"));
-
- SwingUtilities.invokeLater(() -> {
- Application application = new Application(injector);
- application.startup(initialProjectFromArgs());
+ Application.launch(args, new UIPlatformInitializer() {
});
-
- }
-
- protected Collection<Module> appendModules(Collection<Module> modules) {
-
- // TODO: this is dirty... CoreModule is out of place inside the
Modeler...
- // If we need CayenneRuntime for certain operations, those should
start their own stack...
- modules.add(new CoreModule());
-
- modules.add(new ProjectModule());
- modules.add(new DbSyncModule());
- modules.add(new ModelerModule());
-
- return modules;
- }
-
- protected File initialProjectFromArgs() {
- if (args != null && args.length == 1) {
- File f = new File(args[0]);
-
- if (f.isFile()
- && f.getName().startsWith("cayenne")
- && f.getName().endsWith(".xml")) {
- return f;
- }
- }
-
- return null;
}
}
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ModelerModule.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ModelerModule.java
index bebd9e39f..efe30d2f3 100644
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ModelerModule.java
+++
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ModelerModule.java
@@ -26,8 +26,6 @@ import org.apache.cayenne.dbsync.xml.DbImportExtension;
import org.apache.cayenne.di.Binder;
import org.apache.cayenne.di.Module;
import org.apache.cayenne.gen.xml.CgenExtension;
-import org.apache.cayenne.modeler.service.platform.DefaultPlatformInitializer;
-import org.apache.cayenne.modeler.service.platform.PlatformInitializer;
import
org.apache.cayenne.modeler.service.validator.extension.ValidationExtension;
import org.apache.cayenne.project.ProjectModule;
import org.apache.cayenne.project.extension.ExtensionAwareHandlerFactory;
@@ -41,7 +39,6 @@ public class ModelerModule implements Module {
public void configure(Binder binder) {
-
binder.bind(PlatformInitializer.class).to(DefaultPlatformInitializer.class);
binder.bind(HandlerFactory.class).to(ExtensionAwareHandlerFactory.class);
binder.bind(DataChannelMetaData.class).to(DefaultDataChannelMetaData.class);
binder.bind(XMLReader.class).toProviderInstance(new
XMLReaderProvider(true)).withoutScope();
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/service/platform/DefaultPlatformInitializer.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/service/platform/DefaultPlatformInitializer.java
deleted file mode 100644
index a2ae1b3a3..000000000
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/service/platform/DefaultPlatformInitializer.java
+++ /dev/null
@@ -1,38 +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.service.platform;
-
-import javax.swing.JFrame;
-
-public class DefaultPlatformInitializer implements PlatformInitializer {
-
- /**
- * Does nothing, leaving unchanged the default platform Look and Feel.
- */
- public void initLookAndFeel() {
- // noop
- }
-
- /**
- * Does nothing, leaving unchanged the default frame menus.
- */
- public void setupMenus(JFrame frame) {
- // noop - keep all the default menus...
- }
-}
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainFrame.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainFrame.java
index 548e26712..d86d84824 100644
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainFrame.java
+++
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/MainFrame.java
@@ -134,7 +134,7 @@ public class MainFrame extends AppFrame {
setProjectView(null);
- this.app.getPlatformInitializer().setupMenus(this);
+ this.app.getPlatformInitializer().setupMenus(this.app, this);
this.session = new ProjectSession(this.app);
this.session.addDirtyListener((wasDirty, isDirty) -> {
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/service/platform/PlatformInitializer.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/UIPlatformInitializer.java
similarity index 79%
rename from
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/service/platform/PlatformInitializer.java
rename to
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/UIPlatformInitializer.java
index 2234a11ef..3cfe0f554 100644
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/service/platform/PlatformInitializer.java
+++
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/UIPlatformInitializer.java
@@ -16,22 +16,26 @@
* specific language governing permissions and limitations
* under the License.
****************************************************************/
-package org.apache.cayenne.modeler.service.platform;
+package org.apache.cayenne.modeler.ui;
+
+import org.apache.cayenne.modeler.Application;
import javax.swing.JFrame;
/**
- * An interface that provides methods for platform-specific Modeler
initialization.
+ * A base callback for platform-specific Modeler initialization.
*/
-public interface PlatformInitializer {
+public interface UIPlatformInitializer {
/**
* Initializes application look and feel.
*/
- void initLookAndFeel();
+ default void initLookAndFeel() {
+ }
/**
* Updates default frame menus according to the platform specifics.
*/
- void setupMenus(JFrame frame);
+ default void setupMenus(Application app, JFrame frame) {
+ }
}
diff --git
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/more/MorePrefsPanel.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/more/MorePrefsPanel.java
index 498bb1409..727106b80 100644
---
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/more/MorePrefsPanel.java
+++
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/preferences/more/MorePrefsPanel.java
@@ -117,6 +117,6 @@ public class MorePrefsPanel extends AppPanel {
// Defer the rebuild to a later EDT tick so the in-flight action
handler
// (and any pending dispose events) drain first.
- SwingUtilities.invokeLater(() -> app.startup(null));
+ SwingUtilities.invokeLater(() -> app.launch(null));
}
}
diff --git
a/modeler/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/CayenneModelerValidationIT.java
b/modeler/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/CayenneModelerValidationIT.java
index 40f0e6a2e..269aa56ca 100644
---
a/modeler/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/CayenneModelerValidationIT.java
+++
b/modeler/cayenne-modeler/src/test/java/org/apache/cayenne/modeler/CayenneModelerValidationIT.java
@@ -22,6 +22,7 @@ import org.apache.cayenne.configuration.DataChannelDescriptor;
import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
+import org.apache.cayenne.modeler.ui.UIPlatformInitializer;
import
org.apache.cayenne.modeler.service.validator.ConfigurableProjectValidator;
import org.apache.cayenne.project.Project;
import org.apache.cayenne.project.ProjectLoader;
@@ -37,9 +38,7 @@ import org.slf4j.LoggerFactory;
import java.util.EnumSet;
import java.util.List;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.*;
public class CayenneModelerValidationIT {
@@ -59,14 +58,16 @@ public class CayenneModelerValidationIT {
@Test
public void validatorProvided() {
- Application application = new Application(injector);
+ Application application = new Application(injector, new
UIPlatformInitializer() {
+ });
assertTrue(application.getProjectValidator() instanceof
ConfigurableProjectValidator);
}
@Test
public void configLoaded() {
URLResource projectResource = new
URLResource(getClass().getResource(CAYENNE_CONFIGURED_VALIDATION_PROJECT));
- Application application = new Application(injector);
+ Application application = new Application(injector, new
UIPlatformInitializer() {
+ });
ProjectLoader projectLoader =
injector.getInstance(ProjectLoader.class);
Project project = projectLoader.loadProject(projectResource);