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 12:21:04 UTC

[cayenne] branch STABLE-4.1 updated: 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 STABLE-4.1
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/STABLE-4.1 by this push:
     new ee64eef  CAY-2618 Unstable property ordering in generated classes
ee64eef is described below

commit ee64eef77334c29081e5d1d38a830b2b87fe6206
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 200e30e..dcbc7fa 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -40,6 +40,7 @@ CAY-2608 Modeler: NPE when reverse engineering with an auto-adapter DataSource
 CAY-2609 Modeler: can't close dbImport result dialog window
 CAY-2614 Modeler: Connection test result window shown under other windows
 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 3f70f53..9b19edf 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.VelocityContext;
 
 /**
@@ -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());
+        }
+    }
 }