From 878f4e7260269b53c82b74a563bbc06207de9647 Mon Sep 17 00:00:00 2001 From: andreykravchenko Date: Fri, 7 Feb 2020 12:49:31 +0300 Subject: [PATCH 1/2] Class generation only after saving --- .../modeler/editor/DataMapTabbedView.java | 39 +++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java index e949078d19..11271b9f08 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/DataMapTabbedView.java @@ -20,13 +20,16 @@ import org.apache.cayenne.modeler.Application; import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.action.SaveAction; import org.apache.cayenne.modeler.editor.cgen.CodeGeneratorController; +import org.apache.cayenne.modeler.editor.cgen.CodeGeneratorPane; import org.apache.cayenne.modeler.editor.cgen.domain.CgenTab; import org.apache.cayenne.modeler.editor.dbimport.DbImportView; import org.apache.cayenne.modeler.editor.dbimport.domain.DbImportTab; -import javax.swing.JScrollPane; -import javax.swing.JTabbedPane; + +import javax.swing.*; +import java.awt.*; /** * Data map editing tabs container @@ -50,6 +53,11 @@ public DataMapTabbedView(ProjectController mediator) { initView(); } + protected CodeGeneratorPane view; + + public CodeGeneratorPane getView() { + return view; + } /** * create tabs */ @@ -71,7 +79,7 @@ private void initView() { addChangeListener(tab -> { if(isCgenTabActive()) { - codeGeneratorController.initFromModel(); + checkProjectSave(mediator); } else if(isDbImportTabActive()) { dbImportView.initFromModel(); } @@ -87,6 +95,31 @@ private void initView() { }); } + private void checkProjectSave(ProjectController mediator) { + if (mediator.getProject().getConfigurationResource() == null) { + int input = JOptionPane.showConfirmDialog(getView(), "You should save", null, JOptionPane.OK_CANCEL_OPTION); + if (input == 0) { + Application.getInstance().getActionManager().getAction(SaveAction.class).performAction(); + } + if (mediator.isDirty()) { + enableComponents(cgenView, false); + return; + } + } + enableComponents(cgenView, true); + codeGeneratorController.initFromModel(); + } + + public void enableComponents(Container container, boolean enable) { + Component[] components = container.getComponents(); + for (Component component : components) { + component.setEnabled(enable); + if (component instanceof Container) { + enableComponents((Container)component, enable); + } + } + } + private boolean isCgenTabActive() { return getSelectedComponent() == cgenView; } From 24f61af9b96b4052c7abdb81665320f2404a78de Mon Sep 17 00:00:00 2001 From: andreykravchenko Date: Tue, 3 Nov 2020 18:11:22 +0300 Subject: [PATCH 2/2] fixed return of statement when using FrontBase DB --- .../org/apache/cayenne/access/jdbc/SQLTemplateAction.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java index 118cdd60e8..07e6353008 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/access/jdbc/SQLTemplateAction.java @@ -41,6 +41,7 @@ import org.apache.cayenne.access.types.ExtendedTypeMap; import org.apache.cayenne.dba.DbAdapter; import org.apache.cayenne.dba.TypesMapping; +import org.apache.cayenne.dba.frontbase.FrontBaseAdapter; import org.apache.cayenne.map.DbAttribute; import org.apache.cayenne.map.DbEntity; import org.apache.cayenne.map.DefaultScalarResultSegment; @@ -188,6 +189,9 @@ protected void execute(Connection connection, OperationObserver callback, SQLSta boolean iteratedResult = callback.isIteratedResult(); int generatedKeys = query.isReturnGeneratedKeys() ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS; PreparedStatement statement = connection.prepareStatement(compiled.getSql(), generatedKeys); + if (statement == null && this.dbAdapter instanceof FrontBaseAdapter) { + statement = connection.prepareStatement(compiled.getSql()); + } try { bind(statement, compiled.getBindings());