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;