Added method to EntityUtil which checks is Object entity contain db attribute 
path. Refactor templates.


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/9f9cfd4b
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/9f9cfd4b
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/9f9cfd4b

Branch: refs/heads/master
Commit: 9f9cfd4b4390ed506471f365839366e7771e6b80
Parents: 3124d17
Author: kkomyak <const1...@gmail.com>
Authored: Tue Sep 25 17:16:53 2018 +0300
Committer: kkomyak <const1...@gmail.com>
Committed: Tue Sep 25 17:16:53 2018 +0300

----------------------------------------------------------------------
 .../java/org/apache/cayenne/gen/EntityUtils.java | 10 ++++++++++
 .../main/resources/templates/v4_1/singleclass.vm |  2 +-
 .../main/resources/templates/v4_1/superclass.vm  |  2 +-
 .../org/apache/cayenne/gen/EntityUtilsTest.java  | 19 +++++++++++++++++++
 4 files changed, 31 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/9f9cfd4b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityUtils.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityUtils.java 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityUtils.java
index cd814db..51eefdc 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityUtils.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityUtils.java
@@ -20,6 +20,7 @@
 package org.apache.cayenne.gen;
 
 import java.util.Collection;
+import java.util.Objects;
 
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.ObjectId;
@@ -264,6 +265,15 @@ public class EntityUtils {
     }
 
     /**
+     * @since 4.1
+     * Checks is the db attribute declared for some object attribute.
+     * @param id - db attribute
+     */
+    public boolean declaresDbAttribute(String id) {
+        return 
objEntity.getAttributes().stream().filter(Objects::nonNull).anyMatch(a -> 
id.equals(a.getDbAttributePath()));
+    }
+
+    /**
      * @return the list of all callback names registered for the entity.
      * @since 3.0
      */

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9f9cfd4b/cayenne-cgen/src/main/resources/templates/v4_1/singleclass.vm
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/resources/templates/v4_1/singleclass.vm 
b/cayenne-cgen/src/main/resources/templates/v4_1/singleclass.vm
index e586651..d2ce30a 100644
--- a/cayenne-cgen/src/main/resources/templates/v4_1/singleclass.vm
+++ b/cayenne-cgen/src/main/resources/templates/v4_1/singleclass.vm
@@ -74,7 +74,7 @@ public#if("true" == "${object.isAbstract()}") abstract#end 
class ${subClassName}
 #end
 #if( $object.DbEntity )
 #foreach( $idAttr in ${object.DbEntity.PrimaryKeys} )
-    #if(!$object.DeclaredAttributes.toString().contains($idAttr.Name))
+    #if(!${entityUtils.declaresDbAttribute($idAttr.Name)})
     public static final Property<Integer> 
${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_COLUMN = 
Property.create(ExpressionFactory.dbPathExp("db:${idAttr.Name}"), 
Integer.class);
     #end
 #end

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9f9cfd4b/cayenne-cgen/src/main/resources/templates/v4_1/superclass.vm
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/resources/templates/v4_1/superclass.vm 
b/cayenne-cgen/src/main/resources/templates/v4_1/superclass.vm
index ab67534..df3d656 100644
--- a/cayenne-cgen/src/main/resources/templates/v4_1/superclass.vm
+++ b/cayenne-cgen/src/main/resources/templates/v4_1/superclass.vm
@@ -82,7 +82,7 @@ public abstract class ${superClassName} extends 
${baseClassName} {
 #end
 #if( $object.DbEntity )
 #foreach( $idAttr in ${object.DbEntity.PrimaryKeys} )
-    #if(!$object.DeclaredAttributes.toString().contains($idAttr.Name))
+    #if(!${entityUtils.declaresDbAttribute($idAttr.Name)})
     public static final Property<Integer> 
${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_COLUMN = 
Property.create(ExpressionFactory.dbPathExp("db:${idAttr.Name}"), 
Integer.class);
     #end
 #end

http://git-wip-us.apache.org/repos/asf/cayenne/blob/9f9cfd4b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/EntityUtilsTest.java
----------------------------------------------------------------------
diff --git 
a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/EntityUtilsTest.java 
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/EntityUtilsTest.java
index 21d7162..6bb87dd 100644
--- a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/EntityUtilsTest.java
+++ b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/EntityUtilsTest.java
@@ -21,6 +21,7 @@ package org.apache.cayenne.gen;
 
 import org.apache.cayenne.map.CallbackDescriptor;
 import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.map.ObjEntity;
 import org.junit.After;
 import org.junit.Before;
@@ -29,6 +30,7 @@ import org.junit.Test;
 import java.util.LinkedHashSet;
 import java.util.Set;
 
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 
@@ -72,4 +74,21 @@ public class EntityUtilsTest {
         
         assertTrue("Contains duplicate callback names.", hasNoDuplicates);
     }
+
+    @Test
+    public void testDeclaresDbAttribute() throws Exception {
+
+        String existKey = "testKey";
+        String notExistKey = "testKey1";
+
+        ObjAttribute attribute = new ObjAttribute(existKey);
+        attribute.setDbAttributePath(existKey);
+        objEntity.addAttribute(attribute);
+
+        entityUtils = new EntityUtils(dataMap, objEntity, "TestBaseClass", 
"TestSuperClass", "TestSubClass");
+
+        assertTrue(entityUtils.declaresDbAttribute(existKey));
+        assertFalse(entityUtils.declaresDbAttribute(notExistKey));
+
+    }
 }

Reply via email to