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 2019/09/17 19:42:22 UTC

[cayenne] 02/02: CAY-2618 Unstable property ordering in generated classes

This is an automated email from the ASF dual-hosted git repository.

ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit b1fd084ddd096e20f9ba7ff2c160ba874051af42
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Tue Sep 17 15:14:02 2019 +0300

    CAY-2618 Unstable property ordering in generated classes
---
 RELEASE-NOTES.txt                                  |  1 +
 .../org/apache/cayenne/gen/EntityArtifact.java     | 24 ++++++++++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index ed95910..bb8994b 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -96,6 +96,7 @@ CAY-2606 Can't resolve obj path with embeddable component
 CAY-2608 CayenneModeler: NPE when reverse engineering with an auto-adapter DataSource
 CAY-2609 Modeler: can't close dbImport result dialog window
 CAY-2616 Modeler: Wrong handling of path with spaces
+CAY-2618 Unstable property ordering in generated classes
 CAY-2619 "to-dep PK" related dbimport delta confuses the Modeler
 
 ----------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
index 5875d32..c0d3a82 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
@@ -18,8 +18,13 @@
  ****************************************************************/
 package org.apache.cayenne.gen;
 
+import java.util.Map;
+import java.util.TreeMap;
+
 import org.apache.cayenne.BaseDataObject;
+import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.ObjRelationship;
 import org.apache.velocity.context.Context;
 
 /**
@@ -35,6 +40,9 @@ public class EntityArtifact implements Artifact {
 
     public EntityArtifact(ObjEntity entity) {
         this.entity = entity;
+        // make sure we have attributes and relationships in order
+        sortAttributes();
+        sortRelationships();
     }
 
     /**
@@ -94,4 +102,20 @@ public class EntityArtifact implements Artifact {
 
         context.put(ENTITY_UTILS_KEY, metadata);
     }
+
+    private void sortAttributes() {
+        Map<String, ObjAttribute> attributeMap = new TreeMap<>(entity.getAttributeMap());
+        for(Map.Entry<String, ObjAttribute> entry : attributeMap.entrySet()) {
+            entity.removeAttribute(entry.getKey());
+            entity.addAttribute(entry.getValue());
+        }
+    }
+
+    private void sortRelationships() {
+        Map<String, ObjRelationship> relationshipMap = new TreeMap<>(entity.getRelationshipMap());
+        for(Map.Entry<String, ObjRelationship> entry : relationshipMap.entrySet()) {
+            entity.removeRelationship(entry.getKey());
+            entity.addRelationship(entry.getValue());
+        }
+    }
 }