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
