You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by sk...@apache.org on 2016/11/24 14:32:17 UTC

[1/3] cayenne git commit: CAY-2150 UI bug: PK generation custom sequence is getting reset Fix: UI is updated correctly + added undo support for generator type change

Repository: cayenne
Updated Branches:
  refs/heads/master 2bf86e9fa -> ac1c8c5d7


CAY-2150
UI bug: PK generation custom sequence is getting reset
Fix: UI is updated correctly + added undo support for generator type change


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/17da69bc
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/17da69bc
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/17da69bc

Branch: refs/heads/master
Commit: 17da69bc3e59d72b14ae379222e4cb6735e4c0ea
Parents: f527275
Author: Nikita Timofeev <st...@gmail.com>
Authored: Wed Nov 23 12:20:56 2016 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Wed Nov 23 12:20:56 2016 +0300

----------------------------------------------------------------------
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |   1 +
 .../modeler/editor/dbentity/DbEntityTab.java    |   8 +-
 .../PKCustomSequenceGeneratorPanel.java         |  13 +-
 .../editor/dbentity/PKDBGeneratorPanel.java     |   3 +-
 .../dbentity/PKDefaultGeneratorPanel.java       |   2 +-
 .../editor/dbentity/PKGeneratorPanel.java       |  17 ++-
 .../undo/ChangePKGeneratorUndoableEdit.java     | 132 +++++++++++++++++++
 7 files changed, 159 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/17da69bc/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index b6e2f8b..3eddba9 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -69,6 +69,7 @@ CAY-2131 Modeler NullPointerException in reverse engineering when importing diff
 CAY-2138 NVARCHAR, LONGNVARCHAR and NCLOB types are missing from Firebird types.xml
 CAY-2143 NPE in BaseSchemaUpdateStrategy
 CAY-2144 cdbimport always fails for databases which don't support catalogs
+CAY-2150 UI bug: PK generation custom sequence is getting reset
 
 ----------------------------------
 Release: 4.0.M3

http://git-wip-us.apache.org/repos/asf/cayenne/blob/17da69bc/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
index 097ec8b..1d7be0d 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
@@ -213,10 +213,10 @@ public class DbEntityTab extends JPanel implements ExistingSelectionProcessor, D
             ((PKGeneratorPanel) pkGeneratorDetail.getComponent(i)).setDbEntity(entity);
         }
 
-        if (!e.isEntityChanged()) {
-            // name.getComponent().requestFocusInWindow();
-            return;
-        }
+//        if (!e.isEntityChanged()) {
+//            // name.getComponent().requestFocusInWindow();
+//            return;
+//        }
 
         name.setText(entity.getName());
         catalog.setText(entity.getCatalog());

http://git-wip-us.apache.org/repos/asf/cayenne/blob/17da69bc/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKCustomSequenceGeneratorPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKCustomSequenceGeneratorPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKCustomSequenceGeneratorPanel.java
index 269f567..f603ffd 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKCustomSequenceGeneratorPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKCustomSequenceGeneratorPanel.java
@@ -82,14 +82,15 @@ public class PKCustomSequenceGeneratorPanel extends PKGeneratorPanel {
         add(builder.getPanel(), BorderLayout.CENTER);
     }
 
-    public void onInit(DbEntity entity) {
-
+    protected void onInitInternal(DbEntity entity) {
         resetStrategy(entity, false, true);
 
         if (entity.getPrimaryKeyGenerator() == null) {
             DbKeyGenerator generator = new DbKeyGenerator();
             generator.setGeneratorType(DbKeyGenerator.ORACLE_TYPE);
             entity.setPrimaryKeyGenerator(generator);
+        } else {
+            setDbEntity(entity);
         }
     }
 
@@ -98,11 +99,9 @@ public class PKCustomSequenceGeneratorPanel extends PKGeneratorPanel {
 
         if (generator != null) {
             customPKName.setText(generator.getGeneratorName());
-            customPKSize.setText(generator.getKeyCacheSize() != null ? generator
-                    .getKeyCacheSize()
-                    .toString() : "0");
-        }
-        else {
+            customPKSize.setText(generator.getKeyCacheSize() != null ?
+                    generator.getKeyCacheSize().toString() : "0");
+        } else {
             customPKName.setText(null);
             customPKSize.setText(null);
         }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/17da69bc/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKDBGeneratorPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKDBGeneratorPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKDBGeneratorPanel.java
index 845c623..a523a73 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKDBGeneratorPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKDBGeneratorPanel.java
@@ -24,7 +24,6 @@ import java.awt.Component;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 import java.util.Collection;
-import java.util.Iterator;
 
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.JComboBox;
@@ -73,7 +72,7 @@ public class PKDBGeneratorPanel extends PKGeneratorPanel {
         }
     }
 
-    public void onInit(DbEntity entity) {
+    protected void onInitInternal(DbEntity entity) {
         resetStrategy(entity, true, false);
 
         Collection pkAttributes = entity.getPrimaryKeys();

http://git-wip-us.apache.org/repos/asf/cayenne/blob/17da69bc/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKDefaultGeneratorPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKDefaultGeneratorPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKDefaultGeneratorPanel.java
index d28e8b8..76a65ae 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKDefaultGeneratorPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKDefaultGeneratorPanel.java
@@ -32,7 +32,7 @@ public class PKDefaultGeneratorPanel extends PKGeneratorPanel {
         // noop
     }
 
-    public void onInit(DbEntity entity) {
+    protected void onInitInternal(DbEntity entity) {
         resetStrategy(entity, true, true);
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/17da69bc/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKGeneratorPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKGeneratorPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKGeneratorPanel.java
index 5253df8..bb6d20e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKGeneratorPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/PKGeneratorPanel.java
@@ -19,14 +19,13 @@
 
 package org.apache.cayenne.modeler.editor.dbentity;
 
-import java.util.Iterator;
-
 import javax.swing.JPanel;
 
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.event.EntityEvent;
 import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.undo.ChangePKGeneratorUndoableEdit;
 
 public abstract class PKGeneratorPanel extends JPanel {
 
@@ -46,7 +45,19 @@ public abstract class PKGeneratorPanel extends JPanel {
     /**
      * Called by parent when the panel becomes visible.
      */
-    public abstract void onInit(DbEntity entity);
+    public void onInit(DbEntity entity) {
+        ChangePKGeneratorUndoableEdit edit = new ChangePKGeneratorUndoableEdit(entity);
+        edit.captureOldState();
+
+        onInitInternal(entity);
+
+        edit.captureNewState();
+        if(edit.hasRealChange()) {
+            mediator.getApplication().getUndoManager().addEdit(edit);
+        }
+    }
+
+    protected abstract void onInitInternal(DbEntity entity);
 
     protected void resetStrategy(
             DbEntity entity,

http://git-wip-us.apache.org/repos/asf/cayenne/blob/17da69bc/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/ChangePKGeneratorUndoableEdit.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/ChangePKGeneratorUndoableEdit.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/ChangePKGeneratorUndoableEdit.java
new file mode 100644
index 0000000..9b41d7c
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/ChangePKGeneratorUndoableEdit.java
@@ -0,0 +1,132 @@
+/*****************************************************************
+ *   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
+ *
+ *    http://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.undo;
+
+import org.apache.cayenne.map.DbAttribute;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.DbKeyGenerator;
+import org.apache.cayenne.map.event.EntityEvent;
+import org.apache.cayenne.modeler.event.EntityDisplayEvent;
+
+import javax.swing.undo.CannotRedoException;
+import javax.swing.undo.CannotUndoException;
+
+public class ChangePKGeneratorUndoableEdit extends CayenneUndoableEdit {
+
+    private DbEntity dbEntity;
+
+    private PkGeneratorState oldState;
+
+    private PkGeneratorState newState;
+
+    public ChangePKGeneratorUndoableEdit(DbEntity dbEntity) {
+        this.dbEntity = dbEntity;
+    }
+
+    public void captureOldState() {
+        oldState = captureState();
+    }
+
+    public void captureNewState() {
+        newState = captureState();
+    }
+
+    private PkGeneratorState captureState() {
+        return new PkGeneratorState(dbEntity.getPrimaryKeyGenerator(), findGeneratedAttribute());
+    }
+
+    private DbAttribute findGeneratedAttribute() {
+        for (DbAttribute attribute : dbEntity.getPrimaryKeys()) {
+            if(attribute.isGenerated()) {
+                return attribute;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public void redo() throws CannotRedoException {
+        newState.apply();
+        fireEvents();
+    }
+
+    @Override
+    public void undo() throws CannotUndoException {
+        oldState.apply();
+        fireEvents();
+    }
+
+    private void fireEvents() {
+        controller.fireDbEntityEvent(new EntityEvent(this, dbEntity));
+        controller.fireDbEntityDisplayEvent(new EntityDisplayEvent(this, dbEntity));
+    }
+
+    public boolean hasRealChange() {
+        return !oldState.equals(newState);
+    }
+
+    private class PkGeneratorState {
+        private DbKeyGenerator generator;
+        private DbAttribute generatedAttribute;
+        private PkGeneratorState(DbKeyGenerator generator, DbAttribute generatedAttribute) {
+            this.generator = generator;
+            this.generatedAttribute = generatedAttribute;
+        }
+
+        private void resetState() {
+            DbAttribute oldAttribute = findGeneratedAttribute();
+            if(oldAttribute != null) {
+                oldAttribute.setGenerated(false);
+            }
+            dbEntity.setPrimaryKeyGenerator(null);
+        }
+
+        private void apply() {
+            resetState();
+
+            if(generator != null) {
+                dbEntity.setPrimaryKeyGenerator(generator);
+            }
+            if(generatedAttribute != null) {
+                generatedAttribute.setGenerated(true);
+            }
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+
+            PkGeneratorState that = (PkGeneratorState) o;
+
+            if (generator != null ? !generator.equals(that.generator) : that.generator != null) return false;
+            return generatedAttribute != null ? generatedAttribute.equals(that.generatedAttribute) : that.generatedAttribute == null;
+
+        }
+
+        @Override
+        public int hashCode() {
+            int result = generator != null ? generator.hashCode() : 0;
+            result = 31 * result + (generatedAttribute != null ? generatedAttribute.hashCode() : 0);
+            return result;
+        }
+    }
+
+}


[3/3] cayenne git commit: cleanup DbEntityTab

Posted by sk...@apache.org.
cleanup DbEntityTab


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/ac1c8c5d
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/ac1c8c5d
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/ac1c8c5d

Branch: refs/heads/master
Commit: ac1c8c5d7492e72842a97e06a0f19c2bd16a5448
Parents: 1282049
Author: Savva Kolbachev <s....@gmail.com>
Authored: Thu Nov 24 17:31:50 2016 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Thu Nov 24 17:31:50 2016 +0300

----------------------------------------------------------------------
 .../cayenne/modeler/editor/dbentity/DbEntityTab.java     | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/ac1c8c5d/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
index 1d7be0d..197c773 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
@@ -24,7 +24,6 @@ import java.awt.CardLayout;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
 import java.util.EventObject;
-
 import javax.swing.DefaultComboBoxModel;
 import javax.swing.JComboBox;
 import javax.swing.JLabel;
@@ -32,6 +31,8 @@ import javax.swing.JPanel;
 import javax.swing.JTextField;
 import javax.swing.JToolBar;
 
+import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.layout.FormLayout;
 import org.apache.cayenne.configuration.DataChannelDescriptor;
 import org.apache.cayenne.exp.Expression;
 import org.apache.cayenne.map.DbAttribute;
@@ -54,9 +55,6 @@ import org.apache.cayenne.modeler.util.TextAdapter;
 import org.apache.cayenne.util.Util;
 import org.apache.cayenne.validation.ValidationException;
 
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-
 /**
  * Detail view of the DbEntity properties.
  * 
@@ -213,11 +211,6 @@ public class DbEntityTab extends JPanel implements ExistingSelectionProcessor, D
             ((PKGeneratorPanel) pkGeneratorDetail.getComponent(i)).setDbEntity(entity);
         }
 
-//        if (!e.isEntityChanged()) {
-//            // name.getComponent().requestFocusInWindow();
-//            return;
-//        }
-
         name.setText(entity.getName());
         catalog.setText(entity.getCatalog());
         schema.setText(entity.getSchema());


[2/3] cayenne git commit: Merge branch '139'

Posted by sk...@apache.org.
Merge branch '139'


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/12820498
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/12820498
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/12820498

Branch: refs/heads/master
Commit: 12820498ebd83fc330dc899007958cdf01dfda62
Parents: 2bf86e9 17da69b
Author: Savva Kolbachev <s....@gmail.com>
Authored: Thu Nov 24 17:25:08 2016 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Thu Nov 24 17:25:08 2016 +0300

----------------------------------------------------------------------
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |   1 +
 .../modeler/editor/dbentity/DbEntityTab.java    |   8 +-
 .../PKCustomSequenceGeneratorPanel.java         |  13 +-
 .../editor/dbentity/PKDBGeneratorPanel.java     |   3 +-
 .../dbentity/PKDefaultGeneratorPanel.java       |   2 +-
 .../editor/dbentity/PKGeneratorPanel.java       |  17 ++-
 .../undo/ChangePKGeneratorUndoableEdit.java     | 132 +++++++++++++++++++
 7 files changed, 159 insertions(+), 17 deletions(-)
----------------------------------------------------------------------