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)); + + } }