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 cf65b8d75 CAY-3001 Modeler: Auto-increment attribute is not picked up
cf65b8d75 is described below

commit cf65b8d750e08e71621efc3f15b3cc291b448783
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sat Aug 29 17:38:01 2026 -0400

    CAY-3001 Modeler: Auto-increment attribute is not picked up
---
 RELEASE-NOTES.txt                                  |  1 +
 .../editor/dbentity/main/DbEntityMainView.java     | 62 +++++++++++++++++++---
 2 files changed, 55 insertions(+), 8 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 18403d18a..9b335e461 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -16,6 +16,7 @@ Changes/New Features:
 CAY-2998 Modeler: clickabe "Target" column to navigate relationships
 CAY-2999 Modeler: A restricted method in java.lang.System has been called
 CAY-3000 Modeler: unifying the main views of all model objects
+CAY-3001 Modeler: Auto-increment attribute is not picked up
 
 ----------------------------------
 Release: 5.0-M3
diff --git 
a/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/DbEntityMainView.java
 
b/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/DbEntityMainView.java
index 280d7f080..2f7d7d0b7 100644
--- 
a/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/DbEntityMainView.java
+++ 
b/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/dbentity/main/DbEntityMainView.java
@@ -26,6 +26,8 @@ import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.modeler.event.display.DbEntityDisplayEvent;
 import org.apache.cayenne.modeler.event.display.DbEntityDisplayListener;
+import org.apache.cayenne.modeler.event.model.DbAttributeEvent;
+import org.apache.cayenne.modeler.event.model.DbAttributeListener;
 import org.apache.cayenne.modeler.event.model.DbEntityEvent;
 import org.apache.cayenne.modeler.project.ProjectSession;
 import org.apache.cayenne.modeler.service.action.GlobalActions;
@@ -47,7 +49,8 @@ import java.awt.*;
 import java.util.EventObject;
 import java.util.Objects;
 
-public class DbEntityMainView extends ProjectPanel implements 
ExistingSelectionProcessor, DbEntityDisplayListener {
+public class DbEntityMainView extends ProjectPanel
+        implements ExistingSelectionProcessor, DbEntityDisplayListener, 
DbAttributeListener {
 
     static final String PK_DEFAULT_GENERATOR = "Cayenne-Generated (Default)";
     static final String PK_DB_GENERATOR = "Database-Generated";
@@ -145,6 +148,18 @@ public class DbEntityMainView extends ProjectPanel 
implements ExistingSelectionP
         add(mainPanel, BorderLayout.CENTER);
     }
 
+    /**
+     * Returns the PK generator card currently in front of the CardLayout, or 
null if none is showing.
+     */
+    private PKGeneratorPanel visiblePKGeneratorPanel() {
+        for (Component card : pkGeneratorDetail.getComponents()) {
+            if (card.isVisible()) {
+                return (PKGeneratorPanel) card;
+            }
+        }
+        return null;
+    }
+
     private void showPKGeneratorDetail(String type) {
         pkGeneratorDetailLayout.show(pkGeneratorDetail, type);
         // cards differ in height, so the panels below have to be laid out 
again
@@ -158,15 +173,12 @@ public class DbEntityMainView extends ProjectPanel 
implements ExistingSelectionP
         qualifier.addCommitListener(this::setQualifier);
         comment.addCommitListener(this::setComment);
         session.addDbEntityDisplayListener(this);
+        session.addDbAttributeListener(this);
         pkGeneratorType.addItemListener(e -> {
             showPKGeneratorDetail((String) pkGeneratorType.getSelectedItem());
-            for (int i = 0; i < pkGeneratorDetail.getComponentCount(); i++) {
-                if (pkGeneratorDetail.getComponent(i).isVisible()) {
-                    DbEntity entity = session.getSelectedDbEntity();
-                    PKGeneratorPanel panel = (PKGeneratorPanel) 
pkGeneratorDetail.getComponent(i);
-                    panel.onInit(entity);
-                    break;
-                }
+            PKGeneratorPanel panel = visiblePKGeneratorPanel();
+            if (panel != null) {
+                panel.onInit(session.getSelectedDbEntity());
             }
         });
     }
@@ -230,6 +242,40 @@ public class DbEntityMainView extends ProjectPanel 
implements ExistingSelectionP
         }
     }
 
+    @Override
+    public void dbAttributeAdded(DbAttributeEvent e) {
+        refreshPKGenerator(e);
+    }
+
+    @Override
+    public void dbAttributeChanged(DbAttributeEvent e) {
+        refreshPKGenerator(e);
+    }
+
+    @Override
+    public void dbAttributeRemoved(DbAttributeEvent e) {
+        refreshPKGenerator(e);
+    }
+
+    /**
+     * The PK generator panels are driven by the entity attributes, so they 
must be resynced whenever
+     * attributes change, and not just on entity selection. Without this the 
"Auto Increment" column
+     * list goes stale as soon as PKs are added or removed from the Properties 
tab.
+     */
+    private void refreshPKGenerator(DbAttributeEvent e) {
+        DbEntity entity = session.getSelectedDbEntity();
+
+        // attributes of some other entity, or a non-DbEntity node is selected
+        if (entity == null || e.getEntity() != entity) {
+            return;
+        }
+
+        PKGeneratorPanel panel = visiblePKGeneratorPanel();
+        if (panel != null) {
+            panel.onInit(entity);
+        }
+    }
+
     void setEntityName(String newName) {
         if (newName != null && newName.trim().isEmpty()) {
             newName = null;

Reply via email to