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()); 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 05f88cd6b7..9614611f4d 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; }