You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2018/11/14 14:28:00 UTC
[29/32] cayenne git commit: Selection bug fix
Selection bug fix
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/5128e66e
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/5128e66e
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/5128e66e
Branch: refs/heads/master
Commit: 5128e66e36433839ec288296b8cb22d80cb90845
Parents: c19f235
Author: Arseni Bulatski <an...@gmail.com>
Authored: Wed Nov 14 16:07:07 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Wed Nov 14 16:07:07 2018 +0300
----------------------------------------------------------------------
.../apache/cayenne/gen/CgenConfiguration.java | 34 +++++---
.../dialog/db/load/ModelerDbImportAction.java | 3 +
.../editor/cgen/CodeGeneratorController.java | 75 ++++++++++++++--
.../cgen/CodeGeneratorControllerBase.java | 91 ++++++++++++--------
4 files changed, 150 insertions(+), 53 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/5128e66e/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
----------------------------------------------------------------------
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 1277baa..e03598e 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
@@ -30,9 +30,7 @@ import org.apache.cayenne.util.XMLSerializable;
import java.io.Serializable;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -45,9 +43,9 @@ import java.util.stream.Collectors;
public class CgenConfiguration implements Serializable, XMLSerializable {
private Collection<Artifact> artifacts;
- private Collection<String> entityArtifacts;
+ private Set<String> entityArtifacts;
private Collection<String> excludeEntityArtifacts;
- private Collection<String> embeddableArtifacts;
+ private Set<String> embeddableArtifacts;
private Collection<String> excludeEmbeddableArtifacts;
private String superPkg;
@@ -87,9 +85,9 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
setArtifactsGenerationMode("entity");
this.artifacts = new ArrayList<>();
- this.entityArtifacts = new ArrayList<>();
+ this.entityArtifacts = new HashSet<>();
this.excludeEntityArtifacts = new ArrayList<>();
- this.embeddableArtifacts = new ArrayList<>();
+ this.embeddableArtifacts = new HashSet<>();
this.excludeEmbeddableArtifacts = new ArrayList<>();
this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
@@ -286,11 +284,11 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
return artifacts;
}
- public Collection<String> getEntities() {
+ public Set<String> getEntities() {
return entityArtifacts;
}
- public Collection<String> getEmbeddables() {
+ public Set<String> getEmbeddables() {
return embeddableArtifacts;
}
@@ -310,8 +308,10 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
return rootPath != null ? relPath != null ? rootPath.resolve(relPath).toAbsolutePath().normalize() : rootPath : relPath;
}
- public void loadEntity(String name) {
- entityArtifacts.add(name);
+ public void loadEntity(ObjEntity entity) {
+ if(!entity.isGeneric()) {
+ entityArtifacts.add(entity.getName());
+ }
}
public void loadEmbeddable(String name) {
@@ -349,7 +349,7 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
.stream()
.filter(entity -> !excludeEntityArtifacts.contains(entity.getName()))
.map(ObjEntity::getName)
- .collect(Collectors.toList());
+ .collect(Collectors.toSet());
}
public void resolveExcludeEmbeddables() {
@@ -357,9 +357,17 @@ public class CgenConfiguration implements Serializable, XMLSerializable {
.stream()
.filter(embeddable -> !excludeEmbeddableArtifacts.contains(embeddable.getClassName()))
.map(Embeddable::getClassName)
- .collect(Collectors.toList());
+ .collect(Collectors.toSet());
}
+ public Collection<String> getExcludeEntityArtifacts() {
+ return excludeEntityArtifacts;
+ }
+
+ public Collection<String> getExcludeEmbeddableArtifacts() {
+ return excludeEmbeddableArtifacts;
+ }
+
@Override
public void encodeAsXML(XMLEncoder encoder, ConfigurationNodeVisitor delegate) {
encoder.start("cgen")
http://git-wip-us.apache.org/repos/asf/cayenne/blob/5128e66e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
index 0c5c729..e0f01e3 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/db/load/ModelerDbImportAction.java
@@ -22,6 +22,7 @@ package org.apache.cayenne.modeler.dialog.db.load;
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.configuration.DataChannelDescriptorLoader;
import org.apache.cayenne.configuration.DataMapLoader;
+import org.apache.cayenne.configuration.event.DataMapEvent;
import org.apache.cayenne.configuration.server.DataSourceFactory;
import org.apache.cayenne.configuration.server.DbAdapterFactory;
import org.apache.cayenne.configuration.xml.DataChannelMetaData;
@@ -29,6 +30,7 @@ import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
import org.apache.cayenne.dbsync.merge.token.MergerToken;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.project.ProjectSaver;
import org.apache.cayenne.dbsync.reverse.dbimport.DbImportConfiguration;
import org.apache.cayenne.dbsync.reverse.dbimport.DefaultDbImportAction;
@@ -73,6 +75,7 @@ public class ModelerDbImportAction extends DefaultDbImportAction {
public void commit() throws Exception {
commit(config, sourceDataMap);
+ Application.getInstance().getFrameController().getProjectController().fireDataMapEvent(new DataMapEvent(this, targetMap));
}
@Override
http://git-wip-us.apache.org/repos/asf/cayenne/blob/5128e66e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
index 0785820..9db6135 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
@@ -19,20 +19,27 @@
package org.apache.cayenne.modeler.editor.cgen;
+import org.apache.cayenne.configuration.event.DataMapEvent;
+import org.apache.cayenne.configuration.event.DataMapListener;
import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.ClassGenerationAction;
import org.apache.cayenne.gen.ClientClassGenerationAction;
import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.event.EmbeddableEvent;
+import org.apache.cayenne.map.event.EmbeddableListener;
+import org.apache.cayenne.map.event.EntityEvent;
+import org.apache.cayenne.map.event.ObjEntityListener;
import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.dialog.ErrorDebugDialog;
+import org.apache.cayenne.modeler.dialog.db.load.ModelerDbImportAction;
import org.apache.cayenne.modeler.util.CayenneController;
import org.apache.cayenne.swing.BindingBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.swing.JOptionPane;
-import java.awt.Component;
-import java.util.Collections;
+import javax.swing.*;
+import java.awt.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.function.Predicate;
@@ -41,7 +48,7 @@ import java.util.function.Predicate;
* @since 4.1
* A controller for the class generator dialog.
*/
-public class CodeGeneratorController extends CodeGeneratorControllerBase {
+public class CodeGeneratorController extends CodeGeneratorControllerBase implements ObjEntityListener, EmbeddableListener, DataMapListener {
/**
* Logger to print stack traces
*/
@@ -86,8 +93,9 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
}
private void initListeners(){
- projectController.addObjEntityDisplayListener(e -> super.addToSelectedEntities(e.getEntity().getDataMap(), Collections.singleton(e.getEntity().getName())));
- projectController.addEmbeddableDisplayListener(e -> super.addToSelectedEmbeddables(e.getEmbeddable().getDataMap(), Collections.singleton(e.getEmbeddable().getClassName())));
+ projectController.addObjEntityListener(this);
+ projectController.addEmbeddableListener(this);
+ projectController.addDataMapListener(this);
}
@Override
@@ -189,4 +197,59 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
public void enableGenerateButton(boolean enable) {
((GeneratorTabPanel)generatorSelector.getView()).getGenerateButton().setEnabled(enable);
}
+
+ @Override
+ public void objEntityChanged(EntityEvent e) {}
+
+ @Override
+ public void objEntityAdded(EntityEvent e) {
+ super.addEntity(e.getEntity().getDataMap(), (ObjEntity) e.getEntity());
+ }
+
+ @Override
+ public void objEntityRemoved(EntityEvent e) {
+ super.removeFromSelectedEntities((ObjEntity) e.getEntity());
+ DataMap map = e.getEntity().getDataMap();
+ CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
+ if(cgenConfiguration != null) {
+ cgenConfiguration.getEntities().remove(e.getEntity().getName());
+ }
+ }
+
+ @Override
+ public void embeddableChanged(EmbeddableEvent e, DataMap map) {}
+
+ @Override
+ public void embeddableAdded(EmbeddableEvent e, DataMap map) {
+ super.addEmbeddable(e.getEmbeddable().getDataMap(), e.getEmbeddable());
+ }
+
+ @Override
+ public void embeddableRemoved(EmbeddableEvent e, DataMap map) {
+ super.removeFromSelectedEmbeddables(e.getEmbeddable());
+ CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
+ if(cgenConfiguration != null) {
+ cgenConfiguration.getEmbeddables().remove(e.getEmbeddable().getClassName());
+ }
+ }
+
+ @Override
+ public void dataMapChanged(DataMapEvent e) {
+ if(e.getSource() instanceof ModelerDbImportAction) {
+ CgenConfiguration cgenConfiguration = getCurrentConfiguration();
+ if(cgenConfiguration != null) {
+ for(ObjEntity objEntity : dataMap.getObjEntities()) {
+ if(!cgenConfiguration.getExcludeEntityArtifacts().contains(objEntity.getName())) {
+ addEntity(cgenConfiguration.getDataMap(), objEntity);
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public void dataMapAdded(DataMapEvent e) {}
+
+ @Override
+ public void dataMapRemoved(DataMapEvent e) {}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/5128e66e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
index 21a3736..1c41cb8 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
@@ -32,20 +32,13 @@ import org.apache.cayenne.modeler.util.ModelerUtil;
import org.apache.cayenne.validation.ValidationFailure;
import org.apache.cayenne.validation.ValidationResult;
-import javax.swing.Icon;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import java.awt.Component;
+import javax.swing.*;
+import java.awt.*;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.List;
import java.util.function.Predicate;
import java.util.prefs.Preferences;
@@ -114,8 +107,8 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
DataMap map = projectController.getCurrentDataMap();
CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
if(cgenConfiguration != null){
- addToSelectedEntities(cgenConfiguration.getDataMap(), cgenConfiguration.getEntities());
- addToSelectedEmbeddables(cgenConfiguration.getDataMap(), cgenConfiguration.getEmbeddables());
+ addToSelectedEntities(cgenConfiguration.getEntities());
+ addToSelectedEmbeddables(cgenConfiguration.getEmbeddables());
cgenConfiguration.setForce(true);
return cgenConfiguration;
}
@@ -149,11 +142,11 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
if (preferences != null) {
cgenConfiguration.setEncoding(preferences.get(GeneralPreferences.ENCODING_PREFERENCE, null));
}
- addToSelectedEntities(map, map.getObjEntities()
+ addToSelectedEntities(map.getObjEntities()
.stream()
.map(Entity::getName)
.collect(Collectors.toList()));
- addToSelectedEmbeddables(map, map.getEmbeddables()
+ addToSelectedEmbeddables(map.getEmbeddables()
.stream()
.map(Embeddable::getClassName)
.collect(Collectors.toList()));
@@ -247,25 +240,28 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
return modified;
}
- public List<Embeddable> getSelectedEmbeddables() {
+ private List<Embeddable> getSelectedEmbeddables() {
List<Embeddable> selected = new ArrayList<>(selectedEmbeddables.size());
for (Object classObj : classes) {
- if (classObj instanceof Embeddable
- && selectedEmbeddables.contains(((Embeddable) classObj)
- .getClassName())) {
- selected.add((Embeddable) classObj);
+ if(classObj instanceof Embeddable) {
+ String name = ((Embeddable) classObj).getClassName();
+ if(selectedEmbeddables.contains(name)) {
+ selected.add((Embeddable) classObj);
+ }
}
}
return selected;
}
- public List<ObjEntity> getSelectedEntities() {
+ private List<ObjEntity> getSelectedEntities() {
List<ObjEntity> selected = new ArrayList<>(selectedEntities.size());
for (Object classObj : classes) {
- if (classObj instanceof ObjEntity
- && selectedEntities.contains(((ObjEntity) classObj).getName())) {
- selected.add(((ObjEntity) classObj));
+ if(classObj instanceof ObjEntity) {
+ String name = ((ObjEntity) classObj).getName();
+ if(selectedEntities.contains(name)) {
+ selected.add(((ObjEntity) classObj));
+ }
}
}
@@ -392,22 +388,23 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
updateEmbeddables();
}
- public void updateEntities() {
+ CgenConfiguration getCurrentConfiguration() {
DataMap map = getProjectController().getCurrentDataMap();
- CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
+ return projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
+ }
+
+ private void updateEntities() {
+ CgenConfiguration cgenConfiguration = getCurrentConfiguration();
if(cgenConfiguration != null) {
cgenConfiguration.getEntities().clear();
for(ObjEntity entity: getSelectedEntities()) {
- if(!entity.isGeneric()) {
- cgenConfiguration.loadEntity(entity.getName());
- }
+ cgenConfiguration.loadEntity(entity);
}
}
}
- public void updateEmbeddables() {
- DataMap map = getProjectController().getCurrentDataMap();
- CgenConfiguration cgenConfiguration = projectController.getApplication().getMetaData().get(map, CgenConfiguration.class);
+ private void updateEmbeddables() {
+ CgenConfiguration cgenConfiguration = getCurrentConfiguration();
if(cgenConfiguration != null) {
cgenConfiguration.getEmbeddables().clear();
for(Embeddable embeddable : getSelectedEmbeddables()) {
@@ -416,18 +413,34 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
}
}
- void addToSelectedEntities(DataMap dataMap, Collection<String> entities) {
- prepareClasses(dataMap);
+ private void addToSelectedEntities(Collection<String> entities) {
selectedEntities.addAll(entities);
updateEntities();
}
- void addToSelectedEmbeddables(DataMap dataMap, Collection<String> embeddables) {
+ void addEntity(DataMap dataMap, ObjEntity objEntity) {
prepareClasses(dataMap);
+ selectedEntities.add(objEntity.getName());
+ CgenConfiguration cgenConfiguration = getCurrentConfiguration();
+ if(cgenConfiguration != null) {
+ cgenConfiguration.loadEntity(objEntity);
+ }
+ }
+
+ private void addToSelectedEmbeddables(Collection<String> embeddables) {
selectedEmbeddables.addAll(embeddables);
updateEmbeddables();
}
+ void addEmbeddable(DataMap dataMap, Embeddable embeddable) {
+ prepareClasses(dataMap);
+ selectedEmbeddables.add(embeddable.getClassName());
+ CgenConfiguration cgenConfiguration = getCurrentConfiguration();
+ if(cgenConfiguration != null) {
+ cgenConfiguration.loadEmbeddable(embeddable.getClassName());
+ }
+ }
+
public int getSelectedEntitiesSize() {
return selectedEntities != null ? selectedEntities.size() : 0;
}
@@ -466,4 +479,14 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
public abstract void enableGenerateButton(boolean enabled);
+
+ void removeFromSelectedEntities(ObjEntity objEntity) {
+ initCollectionsForSelection(objEntity.getDataMap());
+ selectedEntities.remove(objEntity.getName());
+ }
+
+ void removeFromSelectedEmbeddables(Embeddable embeddable) {
+ initCollectionsForSelection(embeddable.getDataMap());
+ selectedEmbeddables.remove(embeddable.getClassName());
+ }
}