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
commit 9443f33e63c87e61e2c7359b172d8a52f53df772 Author: Andrus Adamchik <[email protected]> AuthorDate: Tue May 5 18:08:01 2026 -0400 Modeler cleanup --- .../apache/cayenne/modeler/toolkit/AppAction.java | 23 +-- .../modeler/toolkit/table/CMTableModel.java | 10 -- .../modeler/ui/action/ImportEOModelAction.java | 4 +- .../modeler/ui/action/OpenProjectAction.java | 6 +- .../cayenne/modeler/ui/action/PasteAction.java | 16 +- .../cayenne/modeler/ui/errors/ErrorDialog.java | 165 ++++++--------------- .../modeler/ui/errors/ErrorsController.java | 32 ---- .../cayenne/modeler/ui/errors/WarningDialog.java | 38 ----- 8 files changed, 76 insertions(+), 218 deletions(-) diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/AppAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/AppAction.java index 06598128f..57e18a6cf 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/AppAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/AppAction.java @@ -22,11 +22,13 @@ package org.apache.cayenne.modeler.toolkit; import org.apache.cayenne.configuration.ConfigurationNode; import org.apache.cayenne.modeler.Application; -import org.apache.cayenne.modeler.toolkit.icon.IconFactory; -import org.apache.cayenne.modeler.ui.errors.ErrorsController; import org.apache.cayenne.modeler.project.ProjectSession; +import org.apache.cayenne.modeler.toolkit.icon.IconFactory; +import org.apache.cayenne.modeler.ui.errors.ErrorDialog; import org.apache.cayenne.project.Project; import org.apache.cayenne.util.Util; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.swing.*; import java.awt.event.ActionEvent; @@ -37,6 +39,8 @@ import java.awt.event.ActionEvent; */ public abstract class AppAction extends AbstractAction { + private static final Logger LOGGER = LoggerFactory.getLogger(AppAction.class); + protected final Application app; protected boolean alwaysOn; @@ -59,7 +63,7 @@ public abstract class AppAction extends AbstractAction { if (accelerator != null) { super.putValue(Action.ACCELERATOR_KEY, accelerator); } - + if (shortDescription != null && !shortDescription.isEmpty()) { super.putValue(Action.SHORT_DESCRIPTION, shortDescription); } @@ -119,6 +123,7 @@ public abstract class AppAction extends AbstractAction { * Subclasses must implement this method instead of <code>actionPerformed</code> to * allow for exception handling. */ + // TODO: make protected, don't call directly public abstract void performAction(ActionEvent e); /** @@ -141,9 +146,9 @@ public abstract class AppAction extends AbstractAction { public void actionPerformed(ActionEvent e) { try { performAction(e); - } - catch (Throwable th) { - ErrorsController.guiException(app, th); + } catch (Throwable th) { + LOGGER.info("Action Exception: " + getValue(Action.DEFAULT), th); + new ErrorDialog(app, "CayenneModeler Error", th).open(); } } @@ -153,7 +158,7 @@ public abstract class AppAction extends AbstractAction { public JMenuItem buildMenu() { return new JMenuItem(this); } - + /** * Factory method that creates a checkbox menu item hooked up to this action. */ @@ -174,7 +179,7 @@ public abstract class AppAction extends AbstractAction { /** * Returns true if this action is always enabled. - * + * * @return boolean */ public boolean isAlwaysOn() { @@ -183,7 +188,7 @@ public abstract class AppAction extends AbstractAction { /** * Sets the alwaysOn. - * + * * @param alwaysOn The alwaysOn to set */ public void setAlwaysOn(boolean alwaysOn) { diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMTableModel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMTableModel.java index 01ca00ab1..efb3af888 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMTableModel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/toolkit/table/CMTableModel.java @@ -94,16 +94,6 @@ public abstract class CMTableModel<T> extends AbstractTableModel { return objectList.size(); } - /** - * Returns EventController object. - */ - public ProjectSession getSession() { - return session; - } - - /** - * Returns internal object list. - */ public List<T> getObjectList() { return objectList; } diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ImportEOModelAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ImportEOModelAction.java index eec84b13e..6ce4070e6 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ImportEOModelAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/ImportEOModelAction.java @@ -54,7 +54,7 @@ import org.apache.cayenne.modeler.event.model.QueryEvent; import org.apache.cayenne.modeler.project.ProjectSession; import org.apache.cayenne.modeler.toolkit.AppAction; import org.apache.cayenne.modeler.toolkit.filechooser.CMFileChooserPrefs; -import org.apache.cayenne.modeler.ui.errors.ErrorsController; +import org.apache.cayenne.modeler.ui.errors.ErrorDialog; import org.apache.cayenne.wocompat.EOModelProcessor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -152,7 +152,7 @@ public class ImportEOModelAction extends AppAction { } catch (Exception ex) { LOGGER.info("EOModel Loading Exception", ex); - ErrorsController.guiException(app, ex); + new ErrorDialog(app, "Import EOModel Error", ex).open(); } } diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/OpenProjectAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/OpenProjectAction.java index 5cae3f7a9..07f8753d5 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/OpenProjectAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/OpenProjectAction.java @@ -22,7 +22,7 @@ package org.apache.cayenne.modeler.ui.action; import org.apache.cayenne.modeler.Application; import org.apache.cayenne.modeler.toolkit.AppAction; import org.apache.cayenne.modeler.ui.MainFrame; -import org.apache.cayenne.modeler.ui.errors.ErrorsController; +import org.apache.cayenne.modeler.ui.errors.ErrorDialog; import org.apache.cayenne.project.Project; import org.apache.cayenne.project.upgrade.UpgradeMetaData; import org.apache.cayenne.project.upgrade.UpgradeService; @@ -179,9 +179,11 @@ public class OpenProjectAction extends AppAction { } openProjectResourse(rootSource, controller); + + } catch (Exception ex) { LOGGER.warn("Error loading project file.", ex); - ErrorsController.guiWarning(app, ex, "Error loading project"); + new ErrorDialog(app, "Error loading project", ex).open(); } } diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/PasteAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/PasteAction.java index 6bee4c6cd..7b55fb226 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/PasteAction.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/action/PasteAction.java @@ -37,20 +37,20 @@ import org.apache.cayenne.map.Procedure; import org.apache.cayenne.map.ProcedureParameter; import org.apache.cayenne.map.QueryDescriptor; import org.apache.cayenne.modeler.Application; -import org.apache.cayenne.modeler.toolkit.AppAction; -import org.apache.cayenne.modeler.ui.errors.ErrorsController; +import org.apache.cayenne.modeler.event.model.CallbackMethodEvent; import org.apache.cayenne.modeler.project.ProjectSession; -import org.apache.cayenne.modeler.ui.project.querytype.QueryTypeDialog; +import org.apache.cayenne.modeler.toolkit.AppAction; +import org.apache.cayenne.modeler.toolkit.copypaste.CMTransferable; +import org.apache.cayenne.modeler.ui.errors.ErrorDialog; import org.apache.cayenne.modeler.ui.project.editor.objentity.callbacks.ObjCallbackMethod; -import org.apache.cayenne.modeler.event.model.CallbackMethodEvent; +import org.apache.cayenne.modeler.ui.project.querytype.QueryTypeDialog; import org.apache.cayenne.modeler.undo.PasteCompoundUndoableEdit; import org.apache.cayenne.modeler.undo.PasteUndoableEdit; -import org.apache.cayenne.modeler.toolkit.copypaste.CMTransferable; import org.apache.cayenne.query.Query; -import javax.swing.KeyStroke; +import javax.swing.*; import javax.swing.undo.UndoableEdit; -import java.awt.Toolkit; +import java.awt.*; import java.awt.datatransfer.FlavorEvent; import java.awt.datatransfer.FlavorListener; import java.awt.datatransfer.UnsupportedFlavorException; @@ -131,7 +131,7 @@ public class PasteAction extends AppAction implements FlavorListener { } catch (UnsupportedFlavorException ufe) { // do nothing } catch (Exception ex) { - ErrorsController.guiException(app, ex); + new ErrorDialog(app, "Paste Error", ex).open(); } } diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/errors/ErrorDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/errors/ErrorDialog.java index c2572e095..d71c829ac 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/errors/ErrorDialog.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/errors/ErrorDialog.java @@ -21,47 +21,31 @@ package org.apache.cayenne.modeler.ui.errors; import org.apache.cayenne.modeler.Application; -import org.apache.cayenne.modeler.toolkit.url.UrlOpener; -import org.apache.cayenne.modeler.toolkit.buttons.CMButtonPanel; import org.apache.cayenne.modeler.toolkit.AppDialog; +import org.apache.cayenne.modeler.toolkit.buttons.CMButtonPanel; +import org.apache.cayenne.modeler.toolkit.url.UrlOpener; import org.apache.cayenne.util.LocalizedStringsHandler; import org.apache.cayenne.util.Util; import javax.swing.*; import javax.swing.event.HyperlinkEvent; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; -class ErrorDialog extends AppDialog implements ActionListener { +public class ErrorDialog extends AppDialog { private static final String BUGREPORT_URL = "https://issues.apache.org/jira/browse/CAY"; - protected JButton close; - protected JButton showHide; - protected JTextArea exText = new JTextArea(); - protected JPanel exPanel; - protected Throwable throwable; - protected boolean detailed; - - public ErrorDialog( - Application application, - String title, - Throwable throwable, - boolean detailed, - boolean modal) - throws HeadlessException { - - super(application, - application.getFrame(), - title, - modal ? ModalityType.APPLICATION_MODAL : ModalityType.MODELESS); - - setThrowable(Util.unwindException(throwable)); - setDetailed(detailed); + private final JButton close; + + public ErrorDialog(Application app, String title, Throwable throwable) { + + super(app, app.getFrame(), title, ModalityType.MODELESS); + + close = new JButton("Close"); + close.addActionListener(e -> dispose()); setResizable(false); @@ -69,7 +53,7 @@ class ErrorDialog extends AppDialog implements ActionListener { pane.setLayout(new BorderLayout()); // info area - JEditorPane infoText = new JEditorPane("text/html", infoHTML(application)); + JEditorPane infoText = new JEditorPane("text/html", infoHTML(app)); infoText.setBackground(pane.getBackground()); infoText.setEditable(false); // popup hyperlinks @@ -84,41 +68,33 @@ class ErrorDialog extends AppDialog implements ActionListener { infoPanel.add(infoText); pane.add(infoPanel, BorderLayout.NORTH); - // exception area + if (throwable != null) { + JTextArea exText = new JTextArea(); + + exText.setText(throwableText(throwable)); + exText.setEditable(false); exText.setLineWrap(true); exText.setWrapStyleWord(true); exText.setRows(16); exText.setColumns(40); + JScrollPane exScroll = new JScrollPane( exText, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); - exPanel = new JPanel(); + + JPanel exPanel = new JPanel(); exPanel.setLayout(new BorderLayout()); exPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); exPanel.add(exScroll, BorderLayout.CENTER); - - // buttons - showHide = new JButton(""); - showHide.addActionListener(this); - if (isDetailed()) { - showDetails(); - } else { - hideDetails(); - } + getContentPane().add(exPanel, BorderLayout.CENTER); } - close = new JButton("Close"); - close.addActionListener(this); - - getRootPane().setDefaultButton(showHide); - - JButton[] buttons = (showHide != null) ? new JButton[]{close, showHide} - : new JButton[]{close}; - pane.add(new CMButtonPanel(buttons), BorderLayout.SOUTH); + getRootPane().setDefaultButton(close); + pane.add(new CMButtonPanel(close), BorderLayout.SOUTH); } protected String infoHTML(Application application) { @@ -134,36 +110,36 @@ class ErrorDialog extends AppDialog implements ActionListener { + "</a></font>"; } - protected void setThrowable(Throwable throwable) { - this.throwable = throwable; + private static String throwableText(Throwable throwable) { - String text = null; - if (throwable != null) { - StringWriter str = new StringWriter(); - PrintWriter out = new PrintWriter(str); - - // first add extra diagnostics - - out.println("CayenneModeler Info"); - out.println("Version: " + LocalizedStringsHandler.getString("cayenne.version")); - out.println("Build Date: " + LocalizedStringsHandler.getString("cayenne.build.date")); - out.println("Exception: "); - out.println("================================="); - buildStackTrace(out, throwable); - - try { - out.close(); - str.close(); - } catch (IOException ioex) { - // this should never happen - } - text = str.getBuffer().toString(); + if (throwable == null) { + return null; } - exText.setText(text); + throwable = Util.unwindException(throwable); + + StringWriter str = new StringWriter(); + PrintWriter out = new PrintWriter(str); + + // first add extra diagnostics + + out.println("CayenneModeler Info"); + out.println("Version: " + LocalizedStringsHandler.getString("cayenne.version")); + out.println("Build Date: " + LocalizedStringsHandler.getString("cayenne.build.date")); + out.println("Exception: "); + out.println("================================="); + buildStackTrace(out, throwable); + + try { + out.close(); + str.close(); + } catch (IOException ioex) { + // this should never happen + } + return str.getBuffer().toString(); } - protected void buildStackTrace(PrintWriter out, Throwable th) { + private static void buildStackTrace(PrintWriter out, Throwable th) { if (th == null) { return; } @@ -176,49 +152,4 @@ class ErrorDialog extends AppDialog implements ActionListener { buildStackTrace(out, cause); } } - - @Override - public void actionPerformed(ActionEvent e) { - if (e.getSource() == close) { - this.dispose(); - } else if (e.getSource() == showHide) { - if (isDetailed()) { - hideDetails(); - } else { - showDetails(); - } - this.pack(); - this.centerOnOwner(); - } - } - - protected void hideDetails() { - getContentPane().remove(exPanel); - showHide.setText("Show Details"); - setDetailed(false); - } - - protected void showDetails() { - getContentPane().add(exPanel, BorderLayout.CENTER); - showHide.setText("Hide Details"); - setDetailed(true); - } - - /** - * Returns the detailed. - * - * @return boolean - */ - public boolean isDetailed() { - return detailed; - } - - /** - * Sets the detailed. - * - * @param detailed The detailed to set - */ - public void setDetailed(boolean detailed) { - this.detailed = detailed; - } } diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/errors/ErrorsController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/errors/ErrorsController.java deleted file mode 100644 index 8bb94a241..000000000 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/errors/ErrorsController.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.apache.cayenne.modeler.ui.errors; - -import org.apache.cayenne.modeler.Application; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class ErrorsController { - - private static final Logger LOGGER = LoggerFactory.getLogger(ErrorsController.class); - - /** - * Shows an error dialog with stack trace - */ - public static void guiException(Application application, Throwable th) { - if (th != null) { - LOGGER.error("CayenneModeler Error", th); - } - - new ErrorDialog(application, "CayenneModeler Error", th, true, false).open(); - } - - /** - * Shows a warning dialog with stack trace - */ - public static void guiWarning(Application application, Throwable th, String message) { - if (th != null) { - LOGGER.warn("CayenneModeler Warning", th); - } - - new WarningDialog(application, message, th, false, false).setDetailed(true); - } -} diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/errors/WarningDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/errors/WarningDialog.java deleted file mode 100644 index 380ab18c2..000000000 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/errors/WarningDialog.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.ui.errors; - -import org.apache.cayenne.modeler.Application; - -import java.awt.*; - -class WarningDialog extends ErrorDialog { - - public WarningDialog(Application application, String title, Throwable throwable, boolean detailed, boolean modal) throws HeadlessException { - super(application, title, throwable, detailed, modal); - } - - @Override - protected String infoHTML(Application application) { - return "<font face='Arial,Helvetica' size='+1' color='blue'>" - + getTitle() - + "</font>"; - } -}
