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/10/19 12:23:23 UTC

[1/7] cayenne git commit: Generate is as properties.

Repository: cayenne
Updated Branches:
  refs/heads/master 7694a64d3 -> 7b5d73e4e


Generate is as properties.


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

Branch: refs/heads/master
Commit: 3124d1717f72d39868f13931c815fdafb9c6f0f0
Parents: adcbf13
Author: kkomyak <co...@gmail.com>
Authored: Mon Sep 17 14:54:48 2018 +0300
Committer: kkomyak <co...@gmail.com>
Committed: Wed Sep 19 14:44:22 2018 +0300

----------------------------------------------------------------------
 cayenne-cgen/src/main/resources/templates/v4_1/singleclass.vm | 7 ++++++-
 cayenne-cgen/src/main/resources/templates/v4_1/superclass.vm  | 7 ++++++-
 2 files changed, 12 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/3124d171/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 b9285a8..e586651 100644
--- a/cayenne-cgen/src/main/resources/templates/v4_1/singleclass.vm
+++ b/cayenne-cgen/src/main/resources/templates/v4_1/singleclass.vm
@@ -39,6 +39,9 @@ ${importUtils.addType("${basePackageName}.${baseClassName}")}##
 ${importUtils.addType("java.io.IOException")}##
 ${importUtils.addType("java.io.ObjectInputStream")}##
 ${importUtils.addType("java.io.ObjectOutputStream")}##
+#if( $object.DbEntity )
+${importUtils.addType("org.apache.cayenne.exp.ExpressionFactory")}##
+#end
 #if((${object.DeclaredAttributes} && !${object.DeclaredAttributes.isEmpty()}) || (${object.DeclaredRelationships} && !${object.DeclaredRelationships.isEmpty()}))
 ${importUtils.addType('org.apache.cayenne.exp.Property')}##
 #end
@@ -71,7 +74,9 @@ public#if("true" == "${object.isAbstract()}") abstract#end class ${subClassName}
 #end
 #if( $object.DbEntity )
 #foreach( $idAttr in ${object.DbEntity.PrimaryKeys} )
-    public static final String ${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_COLUMN = "${idAttr.Name}";
+    #if(!$object.DeclaredAttributes.toString().contains($idAttr.Name))
+    public static final Property<Integer> ${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_COLUMN = Property.create(ExpressionFactory.dbPathExp("db:${idAttr.Name}"), Integer.class);
+    #end
 #end
 #end
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/3124d171/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 91152d7..ab67534 100644
--- a/cayenne-cgen/src/main/resources/templates/v4_1/superclass.vm
+++ b/cayenne-cgen/src/main/resources/templates/v4_1/superclass.vm
@@ -41,6 +41,9 @@ ${importUtils.addType("${basePackageName}.${baseClassName}")}##
 ${importUtils.addType("java.io.IOException")}##
 ${importUtils.addType("java.io.ObjectInputStream")}##
 ${importUtils.addType("java.io.ObjectOutputStream")}##
+#if( $object.DbEntity )
+${importUtils.addType("org.apache.cayenne.exp.ExpressionFactory")}##
+#end
 #if((${object.DeclaredAttributes} && !${object.DeclaredAttributes.isEmpty()}) || (${object.DeclaredRelationships} && !${object.DeclaredRelationships.isEmpty()}))
 ${importUtils.addType('org.apache.cayenne.exp.Property')}##
 #end
@@ -79,7 +82,9 @@ public abstract class ${superClassName} extends ${baseClassName} {
 #end
 #if( $object.DbEntity )
 #foreach( $idAttr in ${object.DbEntity.PrimaryKeys} )
-    public static final String ${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_COLUMN = "${idAttr.Name}";
+    #if(!$object.DeclaredAttributes.toString().contains($idAttr.Name))
+    public static final Property<Integer> ${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_COLUMN = Property.create(ExpressionFactory.dbPathExp("db:${idAttr.Name}"), Integer.class);
+    #end
 #end
 #end
 


[3/7] cayenne git commit: Merge PR #319

Posted by nt...@apache.org.
Merge PR #319


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

Branch: refs/heads/master
Commit: c0a619004720a1126ceb226d11433edd221ca66d
Parents: 7694a64 9f9cfd4
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Oct 19 11:31:43 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Oct 19 11:31:43 2018 +0300

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



[5/7] cayenne git commit: CAY-2478 cgen: Generate properties for PK support in ant, maven and gradle

Posted by nt...@apache.org.
CAY-2478 cgen: Generate properties for PK
  support in ant, maven and gradle


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

Branch: refs/heads/master
Commit: 0420a2a592b4b29069a13884e251115c1e3a86a1
Parents: 8e75733
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Oct 19 15:10:29 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Oct 19 15:10:29 2018 +0300

----------------------------------------------------------------------
 .../apache/cayenne/tools/CayenneGeneratorTask.java  | 15 +++++++++++++++
 .../java/org/apache/cayenne/tools/CgenTask.java     | 16 ++++++++++++++++
 .../apache/cayenne/tools/CayenneGeneratorMojo.java  | 11 ++++++++++-
 3 files changed, 41 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/0420a2a5/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
----------------------------------------------------------------------
diff --git a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
index d468cc9..3d600b1 100644
--- a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
+++ b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
@@ -64,6 +64,13 @@ public class CayenneGeneratorTask extends CayenneTask {
     protected boolean usepkgpath;
     protected boolean createpropertynames;
 
+    /**
+     * Create PK attributes as Properties
+     *
+     * @since 4.1
+     */
+    protected boolean createpkproperties;
+
     public CayenneGeneratorTask() {
         this.makepairs = true;
         this.mode = ArtifactsGenerationMode.ENTITY.getLabel();
@@ -95,6 +102,7 @@ public class CayenneGeneratorTask extends CayenneTask {
         action.setQuerySuperTemplate(querysupertemplate);
         action.setUsePkgPath(usepkgpath);
         action.setCreatePropertyNames(createpropertynames);
+        action.setCreatePKProperties(createpkproperties);
 
         return action;
     }
@@ -291,6 +299,13 @@ public class CayenneGeneratorTask extends CayenneTask {
     }
 
     /**
+     * @since 4.1
+     */
+    public void setCreatepkproperties(boolean createpkproperties) {
+        this.createpkproperties = createpkproperties;
+    }
+
+    /**
      * Provides a <code>VPPConfig</code> object to configure. (Written with createConfig()
      * instead of addConfig() to avoid run-time dependency on VPP).
      */

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0420a2a5/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
----------------------------------------------------------------------
diff --git a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
index fe3892b..eae85b8 100644
--- a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
+++ b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
@@ -114,6 +114,13 @@ public class CgenTask extends BaseCayenneTask {
     @Input
     private boolean force;
 
+    /**
+     * If set to <code>true</code>, will generate PK attributes as Properties.
+     * Default is <code>false</code>.
+     * @since 4.1
+     */
+    private boolean createPKProperties;
+
     private String destDirName;
 
     @TaskAction
@@ -185,6 +192,7 @@ public class CgenTask extends BaseCayenneTask {
         action.setEmbeddableTemplate(embeddableTemplate);
         action.setUsePkgPath(usePkgPath);
         action.setCreatePropertyNames(createPropertyNames);
+        action.setCreatePKProperties(createPKProperties);
 
         return action;
     }
@@ -465,4 +473,12 @@ public class CgenTask extends BaseCayenneTask {
         setForce(force);
     }
 
+    public void setCreatePKProperties(boolean createPKProperties) {
+        this.createPKProperties = createPKProperties;
+    }
+
+    public void createPKProperties(boolean createPKProperties) {
+        setCreatePKProperties(createPKProperties);
+    }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/0420a2a5/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
index 72c39b4..10cd860 100644
--- a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
+++ b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
@@ -193,7 +193,15 @@ public class CayenneGeneratorMojo extends AbstractMojo {
 	@Parameter(defaultValue = "false", property = "force")
 	private boolean force;
 
-    private transient Injector injector;
+	/**
+	 * If set to <code>true</code>, will generate PK attributes as Properties.
+	 * Default is <code>false</code>.
+	 * @since 4.1
+	 */
+	@Parameter(defaultValue = "false")
+	private boolean createPKProperties;
+
+	private transient Injector injector;
 
 	public void execute() throws MojoExecutionException, MojoFailureException {
 		// Create the destination directory if necessary.
@@ -281,6 +289,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
 		action.setEmbeddableTemplate(embeddableTemplate);
 		action.setUsePkgPath(usePkgPath);
         action.setCreatePropertyNames(createPropertyNames);
+        action.setCreatePKProperties(createPKProperties);
 
 		return action;
 	}


[6/7] cayenne git commit: CAY-2478 cgen: Generate properties for PK release notes

Posted by nt...@apache.org.
CAY-2478 cgen: Generate properties for PK
  release notes


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

Branch: refs/heads/master
Commit: 904753b8a0ee62e926de30f2655ac6847bdeef89
Parents: 0420a2a
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Oct 19 15:10:55 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Oct 19 15:10:55 2018 +0300

----------------------------------------------------------------------
 RELEASE-NOTES.txt | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/904753b8/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index dce64ec..052e27c 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -19,6 +19,7 @@ CAY-2471 Support multiple XML project versions
 CAY-2473 Modeler: cleanup attributes and relationship editors
 CAY-2474 Modeler: swap buttons in dialog toolbar
 CAY-2475 Modeler: move inheritance icon to name column in objAttr table and objRel table
+CAY-2478 cgen: Generate properties for PK
 CAY-2481 Support for Object[] as return type in SQLTemplate and SQLExec
 CAY-2485 Compact Slf4j Logger
 CAY-2487 Removed usage of CayenneException.


[2/7] cayenne git commit: Added method to EntityUtil which checks is Object entity contain db attribute path. Refactor templates.

Posted by nt...@apache.org.
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 <co...@gmail.com>
Authored: Tue Sep 25 17:16:53 2018 +0300
Committer: kkomyak <co...@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));
+
+    }
 }


[7/7] cayenne git commit: CAY-2478 cgen: Generate properties for PK refactor meaningful PK check

Posted by nt...@apache.org.
CAY-2478 cgen: Generate properties for PK
  refactor meaningful PK check


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

Branch: refs/heads/master
Commit: 7b5d73e4e92f2eae5230b87142c4ae4e5a0a6b9c
Parents: 904753b
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Oct 19 15:23:10 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Oct 19 15:23:10 2018 +0300

----------------------------------------------------------------------
 .../src/main/java/org/apache/cayenne/gen/EntityUtils.java    | 8 +++-----
 .../src/main/resources/templates/v4_1/singleclass.vm         | 2 +-
 cayenne-cgen/src/main/resources/templates/v4_1/superclass.vm | 2 +-
 3 files changed, 5 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/7b5d73e4/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 e5ea590..2923b98 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,11 +20,9 @@
 package org.apache.cayenne.gen;
 
 import java.util.Collection;
-import java.util.Objects;
 
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.ObjectId;
-import org.apache.cayenne.dba.TypesMapping;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
@@ -268,12 +266,12 @@ public class EntityUtils {
 
     /**
      * Checks is the db attribute declared for some object attribute.
-     * @param id - db attribute
+     * @param pkAttribute - db attribute for PK
      *
      * @since 4.1
      */
-    public boolean declaresDbAttribute(String id) {
-        return objEntity.getAttributes().stream().filter(Objects::nonNull).anyMatch(a -> id.equals(a.getDbAttributePath()));
+    public boolean declaresDbAttribute(DbAttribute pkAttribute) {
+        return objEntity.getAttributeForDbAttribute(pkAttribute) != null;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7b5d73e4/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 db9fb36..32ae64a 100644
--- a/cayenne-cgen/src/main/resources/templates/v4_1/singleclass.vm
+++ b/cayenne-cgen/src/main/resources/templates/v4_1/singleclass.vm
@@ -77,7 +77,7 @@ public#if("true" == "${object.isAbstract()}") abstract#end class ${subClassName}
 ###########################
 #if( $object.DbEntity )
     #foreach( $idAttr in ${object.DbEntity.PrimaryKeys} )
-        #if( $createPKProperties && !${importUtils.declaresDbAttribute($idAttr.Name)})
+        #if( $createPKProperties && !${entityUtils.declaresDbAttribute($idAttr)})
             #set ( $type = "$importUtils.dbAttributeToJavaType($idAttr)")
     public static final Property<$type> ${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_COLUMN = Property.create(ExpressionFactory.dbPathExp("db:${idAttr.Name}"), ${type}.class});
         #else

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7b5d73e4/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 559c89d..6f8449d 100644
--- a/cayenne-cgen/src/main/resources/templates/v4_1/superclass.vm
+++ b/cayenne-cgen/src/main/resources/templates/v4_1/superclass.vm
@@ -85,7 +85,7 @@ public abstract class ${superClassName} extends ${baseClassName} {
 ###########################
 #if( $object.DbEntity )
     #foreach( $idAttr in ${object.DbEntity.PrimaryKeys} )
-        #if( $createPKProperties && !${importUtils.declaresDbAttribute($idAttr.Name)})
+        #if( $createPKProperties && !${entityUtils.declaresDbAttribute($idAttr)})
             #set ( $type = "$importUtils.dbAttributeToJavaType($idAttr)")
     public static final Property<$type> ${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_PROPERTY = Property.create(ExpressionFactory.dbPathExp("db:${idAttr.Name}"), ${type}.class);
         #end


[4/7] cayenne git commit: CAY-2478 cgen: Generate properties for PK optional PK properties generation

Posted by nt...@apache.org.
CAY-2478 cgen: Generate properties for PK
  optional PK properties generation


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

Branch: refs/heads/master
Commit: 8e75733bf652c5d2d59c7532c3ebabd2d89bcc3e
Parents: c0a6190
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Oct 19 14:58:23 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Oct 19 14:58:23 2018 +0300

----------------------------------------------------------------------
 .../java/org/apache/cayenne/gen/Artifact.java   | 21 ++++++++++----------
 .../cayenne/gen/ClassGenerationAction.java      | 20 +++++++++++++++++++
 .../org/apache/cayenne/gen/EntityUtils.java     |  5 ++++-
 .../org/apache/cayenne/gen/ImportUtils.java     | 13 ++++++++++++
 .../resources/templates/v4_1/singleclass.vm     | 16 ++++++++++-----
 .../main/resources/templates/v4_1/superclass.vm | 15 +++++++++-----
 .../dialog/codegen/CustomModeController.java    |  4 ++++
 .../modeler/dialog/codegen/CustomModePanel.java |  8 ++++++++
 .../codegen/CustomPreferencesUpdater.java       | 18 ++++++++++++++++-
 9 files changed, 98 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/8e75733b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/Artifact.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/Artifact.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/Artifact.java
index fcd9118..d16bf6e 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/Artifact.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/Artifact.java
@@ -28,20 +28,21 @@ import org.apache.velocity.VelocityContext;
  */
 public interface Artifact {
 
-    public static String STRING_UTILS_KEY = "stringUtils";
-    public static String IMPORT_UTILS_KEY = "importUtils";
+    String STRING_UTILS_KEY = "stringUtils";
+    String IMPORT_UTILS_KEY = "importUtils";
 
     /**
      * Root object, such as ObjEntity or Embeddable, etc.
      */
-    public static String OBJECT_KEY = "object";
-    public static String SUPER_CLASS_KEY = "superClassName";
-    public static String SUPER_PACKAGE_KEY = "superPackageName";
-    public static String SUB_CLASS_KEY = "subClassName";
-    public static String SUB_PACKAGE_KEY = "subPackageName";
-    public static String BASE_CLASS_KEY = "baseClassName";
-    public static String BASE_PACKAGE_KEY = "basePackageName";
-    public static String CREATE_PROPERTY_NAMES = "createPropertyNames";
+    String OBJECT_KEY = "object";
+    String SUPER_CLASS_KEY = "superClassName";
+    String SUPER_PACKAGE_KEY = "superPackageName";
+    String SUB_CLASS_KEY = "subClassName";
+    String SUB_PACKAGE_KEY = "subPackageName";
+    String BASE_CLASS_KEY = "baseClassName";
+    String BASE_PACKAGE_KEY = "basePackageName";
+    String CREATE_PROPERTY_NAMES = "createPropertyNames";
+    String CREATE_PK_PROPERTIES = "createPKProperties";
 
     TemplateType[] getTemplateTypes(ArtifactGenerationMode mode);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/8e75733b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
index ecaddac..0eaf66b 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
@@ -82,6 +82,11 @@ public class ClassGenerationAction {
 	protected boolean createPropertyNames;
 	protected boolean force; // force run generator
 
+	/**
+	 * @since 4.1
+	 */
+	protected boolean createPKProperties;
+
 	// runtime ivars
 	protected VelocityContext context;
 	protected Map<String, Template> templateCache;
@@ -189,6 +194,7 @@ public class ClassGenerationAction {
 		context.put(Artifact.STRING_UTILS_KEY, stringUtils);
 
 		context.put(Artifact.CREATE_PROPERTY_NAMES, createPropertyNames);
+		context.put(Artifact.CREATE_PK_PROPERTIES, createPKProperties);
 	}
 
 	/**
@@ -585,4 +591,18 @@ public class ClassGenerationAction {
 	public void setForce(boolean force) {
 		this.force = force;
 	}
+
+	/**
+	 * @since 4.1
+	 */
+	public boolean isCreatePKProperties() {
+		return createPKProperties;
+	}
+
+	/**
+	 * @since 4.1
+	 */
+	public void setCreatePKProperties(boolean createPKProperties) {
+		this.createPKProperties = createPKProperties;
+	}
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/8e75733b/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 51eefdc..e5ea590 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
@@ -24,7 +24,9 @@ import java.util.Objects;
 
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.ObjectId;
+import org.apache.cayenne.dba.TypesMapping;
 import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.MappingNamespace;
 import org.apache.cayenne.map.ObjAttribute;
@@ -265,9 +267,10 @@ public class EntityUtils {
     }
 
     /**
-     * @since 4.1
      * Checks is the db attribute declared for some object attribute.
      * @param id - db attribute
+     *
+     * @since 4.1
      */
     public boolean declaresDbAttribute(String id) {
         return objEntity.getAttributes().stream().filter(Objects::nonNull).anyMatch(a -> id.equals(a.getDbAttributePath()));

http://git-wip-us.apache.org/repos/asf/cayenne/blob/8e75733b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ImportUtils.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ImportUtils.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ImportUtils.java
index 275a535..6072356 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ImportUtils.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ImportUtils.java
@@ -19,6 +19,8 @@
 
 package org.apache.cayenne.gen;
 
+import org.apache.cayenne.dba.TypesMapping;
+import org.apache.cayenne.map.DbAttribute;
 import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.util.Util;
 
@@ -277,4 +279,15 @@ public class ImportUtils {
 
 		return outputBuffer.toString();
 	}
+
+	/**
+	 * @param attribute db attribute
+	 * @return name of the java type
+	 *
+	 * @since 4.1
+	 */
+	public String dbAttributeToJavaType(DbAttribute attribute) {
+		String javaTypeName = TypesMapping.getJavaBySqlType(attribute.getType());
+		return formatJavaType(javaTypeName);
+	}
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/8e75733b/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 d2ce30a..db9fb36 100644
--- a/cayenne-cgen/src/main/resources/templates/v4_1/singleclass.vm
+++ b/cayenne-cgen/src/main/resources/templates/v4_1/singleclass.vm
@@ -39,7 +39,7 @@ ${importUtils.addType("${basePackageName}.${baseClassName}")}##
 ${importUtils.addType("java.io.IOException")}##
 ${importUtils.addType("java.io.ObjectInputStream")}##
 ${importUtils.addType("java.io.ObjectOutputStream")}##
-#if( $object.DbEntity )
+#if( $createPKProperties )
 ${importUtils.addType("org.apache.cayenne.exp.ExpressionFactory")}##
 #end
 #if((${object.DeclaredAttributes} && !${object.DeclaredAttributes.isEmpty()}) || (${object.DeclaredRelationships} && !${object.DeclaredRelationships.isEmpty()}))
@@ -72,13 +72,19 @@ public#if("true" == "${object.isAbstract()}") abstract#end class ${subClassName}
 #end
 
 #end
+###########################
+## Create PK properties  ##
+###########################
 #if( $object.DbEntity )
-#foreach( $idAttr in ${object.DbEntity.PrimaryKeys} )
-    #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);
+    #foreach( $idAttr in ${object.DbEntity.PrimaryKeys} )
+        #if( $createPKProperties && !${importUtils.declaresDbAttribute($idAttr.Name)})
+            #set ( $type = "$importUtils.dbAttributeToJavaType($idAttr)")
+    public static final Property<$type> ${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_COLUMN = Property.create(ExpressionFactory.dbPathExp("db:${idAttr.Name}"), ${type}.class});
+        #else
+    public static final String ${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_COLUMN = "${idAttr.Name}";
+        #end
     #end
 #end
-#end
 
 #######################
 ## Create Properties ##

http://git-wip-us.apache.org/repos/asf/cayenne/blob/8e75733b/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 df3d656..559c89d 100644
--- a/cayenne-cgen/src/main/resources/templates/v4_1/superclass.vm
+++ b/cayenne-cgen/src/main/resources/templates/v4_1/superclass.vm
@@ -41,7 +41,7 @@ ${importUtils.addType("${basePackageName}.${baseClassName}")}##
 ${importUtils.addType("java.io.IOException")}##
 ${importUtils.addType("java.io.ObjectInputStream")}##
 ${importUtils.addType("java.io.ObjectOutputStream")}##
-#if( $object.DbEntity )
+#if( $createPKProperties )
 ${importUtils.addType("org.apache.cayenne.exp.ExpressionFactory")}##
 #end
 #if((${object.DeclaredAttributes} && !${object.DeclaredAttributes.isEmpty()}) || (${object.DeclaredRelationships} && !${object.DeclaredRelationships.isEmpty()}))
@@ -80,13 +80,18 @@ public abstract class ${superClassName} extends ${baseClassName} {
 #end
 
 #end
+###########################
+## Create PK properties  ##
+###########################
 #if( $object.DbEntity )
-#foreach( $idAttr in ${object.DbEntity.PrimaryKeys} )
-    #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);
+    #foreach( $idAttr in ${object.DbEntity.PrimaryKeys} )
+        #if( $createPKProperties && !${importUtils.declaresDbAttribute($idAttr.Name)})
+            #set ( $type = "$importUtils.dbAttributeToJavaType($idAttr)")
+    public static final Property<$type> ${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_PROPERTY = Property.create(ExpressionFactory.dbPathExp("db:${idAttr.Name}"), ${type}.class);
+        #end
+    public static final String ${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_COLUMN = "${idAttr.Name}";
     #end
 #end
-#end
 
 #######################
 ## Create Properties ##

http://git-wip-us.apache.org/repos/asf/cayenne/blob/8e75733b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
index 67df44b..3ec4778 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
@@ -125,6 +125,9 @@ public class CustomModeController extends GeneratorController {
 		builder.bindToStateChange(view.getCreatePropertyNames(), "customPreferencesUpdater.createPropertyNames")
 				.updateView();
 
+		builder.bindToStateChange(view.getCreatePKProperties(), "customPreferencesUpdater.createPKProperties")
+				.updateView();
+
 		updateTemplates();
 	}
 
@@ -208,6 +211,7 @@ public class CustomModeController extends GeneratorController {
 			generator.setUsePkgPath(view.getUsePackagePath().isSelected());
 			generator.setMakePairs(view.getPairs().isSelected());
 			generator.setCreatePropertyNames(view.getCreatePropertyNames().isSelected());
+			generator.setCreatePKProperties(view.getCreatePKProperties().isSelected());
 
 			if (!Util.isEmptyString(view.getOutputPattern().getText())) {
 				generator.setOutputPattern(view.getOutputPattern().getText());

http://git-wip-us.apache.org/repos/asf/cayenne/blob/8e75733b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
index b020a2e..7dd2e79 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
@@ -39,6 +39,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
     private JCheckBox usePackagePath;
     private JTextField outputPattern;
     private JCheckBox createPropertyNames;
+    private JCheckBox createPKProperties;
 
     private ActionLink manageTemplatesLink;
 
@@ -51,6 +52,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
         this.usePackagePath = new JCheckBox();
         this.outputPattern = new JTextField();
         this.createPropertyNames = new JCheckBox();
+        this.createPKProperties = new JCheckBox();
         this.manageTemplatesLink = new ActionLink("Customize Templates...");
         manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
 
@@ -84,6 +86,9 @@ public class CustomModePanel extends GeneratorControllerPanel {
         builder.append("Create Property Names:", createPropertyNames);
         builder.nextLine();
 
+        builder.append("Create PK Properties:", createPKProperties);
+        builder.nextLine();
+
         setLayout(new BorderLayout());
         add(builder.getPanel(), BorderLayout.CENTER);
 
@@ -126,4 +131,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
         return createPropertyNames;
     }
 
+    public JCheckBox getCreatePKProperties() {
+        return createPKProperties;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/8e75733b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomPreferencesUpdater.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomPreferencesUpdater.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomPreferencesUpdater.java
index 6764a97..1d8d4f9 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomPreferencesUpdater.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomPreferencesUpdater.java
@@ -36,7 +36,8 @@ public class CustomPreferencesUpdater {
         USE_PACKAGE_PATH,
         MODE,
         OUTPUT_PATTERN,
-        CREATE_PROPERTY_NAMES
+        CREATE_PROPERTY_NAMES,
+        CREATE_PK_PROPERTIES
     }
 
     private static final String OVERWRITE = "overwrite";
@@ -45,6 +46,7 @@ public class CustomPreferencesUpdater {
     private static final String MODE = "mode";
     private static final String OUTPUT_PATTERN = "outputPattern";
     private static final String CREATE_PROPERTY_NAMES = "createPropertyNames";
+    private static final String CREATE_PK_PROPERTIES = "createPKProperties";
 
     private Map<DataMap, DataMapDefaults> mapPreferences;
 
@@ -117,6 +119,14 @@ public class CustomPreferencesUpdater {
         updatePreferences(Property.CREATE_PROPERTY_NAMES, createPropertyNames);
     }
 
+    public Boolean getCreatePKProperties() {
+        return (Boolean) getProperty(Property.CREATE_PK_PROPERTIES);
+    }
+
+    public void setCreatePKProperties(Boolean createPKProperties) {
+        updatePreferences(Property.CREATE_PK_PROPERTIES, createPKProperties);
+    }
+
     private Object getProperty(Property property) {
         Object obj = null;
 
@@ -148,6 +158,9 @@ public class CustomPreferencesUpdater {
                 case CREATE_PROPERTY_NAMES:
                     obj = entry.getValue().getBooleanProperty(CREATE_PROPERTY_NAMES);
                     break;
+                case CREATE_PK_PROPERTIES:
+                    obj = entry.getValue().getBooleanProperty(CREATE_PK_PROPERTIES);
+                    break;
                 default:
                     throw new IllegalArgumentException("Bad type property: " + property);
             }
@@ -185,6 +198,9 @@ public class CustomPreferencesUpdater {
                 case CREATE_PROPERTY_NAMES:
                     entry.getValue().setBooleanProperty(CREATE_PROPERTY_NAMES, (Boolean) value);
                     break;
+                case CREATE_PK_PROPERTIES:
+                    entry.getValue().setBooleanProperty(CREATE_PK_PROPERTIES, (Boolean) value);
+                    break;
                 default:
                     throw new IllegalArgumentException("Bad type property: " + property);
             }