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

commit 2ce7f826a40894332a6e7ffe813e7ec09df80abb
Author: Andrus Adamchik <[email protected]>
AuthorDate: Sun May 24 16:29:32 2026 -0400

    Newly reverse-engineered entities are excluded from CGen | CAY-2951
---
 RELEASE-NOTES.txt                                  |  1 +
 .../org/apache/cayenne/gen/CgenConfiguration.java  | 16 ++++----
 .../ui/project/editor/datamap/DataMapView.java     |  1 -
 .../ui/project/editor/datamap/cgen/CgenPanel.java  | 46 ++++++++++++++++------
 4 files changed, 42 insertions(+), 22 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 03c7bba2c..c94bd087c 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -77,6 +77,7 @@ CAY-2926 Modeler: renaming an ObjEntity adds it to cgen 
excludeEntities
 CAY-2931 Modeler: default encoding detected as UTF8, should be UTF-8
 CAY-2934 Modeler: dropdown data trunction
 CAY-2944 MergerTokenFactoryProvider does not resolve adapter subclasses
+CAY-2951 Newly reverse-engineered entities are excluded from CGen
 
 ----------------------------------
 Release: 5.0-M1
diff --git 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
index a5d763fa0..3529859ab 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
@@ -414,10 +414,10 @@ public class CgenConfiguration implements Serializable, 
XMLSerializable {
     }
 
     private String getExcludedEntities() {
-        return dataMap.getObjEntities()
-                .stream()
-                .map(ObjEntity::getName)
-                .filter(name -> !entityArtifacts.contains(name))
+        Set<String> existing = dataMap.getObjEntityMap().keySet();
+        return excludedEntityArtifacts.stream()
+                .filter(existing::contains)
+                .sorted()
                 .collect(Collectors.joining(","));
     }
 
@@ -430,10 +430,10 @@ public class CgenConfiguration implements Serializable, 
XMLSerializable {
     }
 
     private String getExcludedEmbeddables() {
-        return dataMap.getEmbeddables()
-                .stream()
-                .map(Embeddable::getClassName)
-                .filter(className -> !embeddableArtifacts.contains(className))
+        Set<String> existing = dataMap.getEmbeddableMap().keySet();
+        return excludedEmbeddableArtifacts.stream()
+                .filter(existing::contains)
+                .sorted()
                 .collect(Collectors.joining(","));
     }
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/DataMapView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/DataMapView.java
index fc21c1b4a..3559a7924 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/DataMapView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/DataMapView.java
@@ -48,7 +48,6 @@ public class DataMapView extends ProjectTabbedPane {
     }
 
     private void currentDataMapChanged(DataMapDisplayEvent e) {
-
         if (e.isMainTabFocus()) {
             setSelectedIndex(0);
         }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
index 6551f19de..b1b147830 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/cgen/CgenPanel.java
@@ -48,7 +48,6 @@ import org.apache.cayenne.modeler.project.CgenOps;
 import org.apache.cayenne.modeler.project.ProjectSession;
 import org.apache.cayenne.modeler.toolkit.ProjectPanel;
 import org.apache.cayenne.modeler.toolkit.icon.IconFactory;
-import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.DbImportResultDialog;
 import org.apache.cayenne.tools.ToolsInjectorBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -68,8 +67,7 @@ import java.util.stream.Collectors;
  * the body splits into the per-class artefact selector (left) and the cgen 
options form (right).
  * Subscribes to project events to keep its model snapshot in sync with 
mapping edits.
  */
-public class CgenPanel extends ProjectPanel
-        implements ObjEntityListener, EmbeddableListener, DataMapListener {
+public class CgenPanel extends ProjectPanel implements ObjEntityListener, 
EmbeddableListener, DataMapListener {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(CgenPanel.class);
 
@@ -246,6 +244,10 @@ public class CgenPanel extends ProjectPanel
     private void setConfiguration(String selectedConfig) {
         cgenConfiguration = cgenConfigList.getByName(selectedConfig);
         if (cgenConfiguration != null) {
+            // Refresh entityArtifacts from the DataMap so any entities added 
since the config
+            // was last loaded (e.g. by a dbimport run) are treated as 
included by default.
+            cgenConfiguration.resolveExcludedEntities();
+            cgenConfiguration.resolveExcludedEmbeddables();
             addToSelectedEntities(cgenConfiguration.getEntities());
             addToSelectedEmbeddables(cgenConfiguration.getEmbeddables());
             cgenConfiguration.setForce(true);
@@ -462,6 +464,17 @@ public class CgenPanel extends ProjectPanel
             for (ObjEntity entity : 
selectionModel.getSelectedEntities(classes)) {
                 cgenConfiguration.loadEntity(entity);
             }
+            // Keep excludedEntityArtifacts in sync so XML serialization stays 
correct
+            Collection<String> excluded = 
cgenConfiguration.getExcludedEntityArtifacts();
+            excluded.clear();
+            DataMap dataMap = cgenConfiguration.getDataMap();
+            if (dataMap != null) {
+                Set<String> selected = cgenConfiguration.getEntities();
+                dataMap.getObjEntities().stream()
+                        .map(ObjEntity::getName)
+                        .filter(name -> !selected.contains(name))
+                        .forEach(excluded::add);
+            }
         }
         checkCgenConfigDirty();
     }
@@ -472,6 +485,17 @@ public class CgenPanel extends ProjectPanel
             for (Embeddable embeddable : 
selectionModel.getSelectedEmbeddables(classes)) {
                 cgenConfiguration.loadEmbeddable(embeddable);
             }
+            // Keep excludedEmbeddableArtifacts in sync so XML serialization 
stays correct
+            Collection<String> excluded = 
cgenConfiguration.getExcludedEmbeddableArtifacts();
+            excluded.clear();
+            DataMap dataMap = cgenConfiguration.getDataMap();
+            if (dataMap != null) {
+                Set<String> selected = cgenConfiguration.getEmbeddables();
+                dataMap.getEmbeddables().stream()
+                        .map(Embeddable::getClassName)
+                        .filter(name -> !selected.contains(name))
+                        .forEach(excluded::add);
+            }
         }
         checkCgenConfigDirty();
     }
@@ -565,20 +589,16 @@ public class CgenPanel extends ProjectPanel
 
     @Override
     public void dataMapChanged(DataMapEvent e) {
-        if (e.getSource() instanceof DbImportResultDialog) {
-            if (cgenConfiguration != null) {
-                for (ObjEntity objEntity : e.getDataMap().getObjEntities()) {
-                    if 
(!cgenConfiguration.getExcludedEntityArtifacts().contains(objEntity.getName())) 
{
-                        addEntity(cgenConfiguration.getDataMap(), objEntity);
-                    }
-                }
-            }
-            checkCgenConfigDirty();
-        }
     }
 
     @Override
     public void dataMapAdded(DataMapEvent e) {
+        // DbImportProjectSaver fires a pair of REMOVE / ADD events after 
merging new entities into a DataMap.
+        // Re-initialize the panel so newly imported entities appear as 
included.
+        DataMap map = e.getDataMap();
+        if (map != null && cgenConfiguration != null && map == 
cgenConfiguration.getDataMap()) {
+            initFromModel(map);
+        }
     }
 
     @Override

Reply via email to