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:26 UTC
[4/7] cayenne git commit: CAY-2478 cgen: Generate properties for PK
optional PK properties generation
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);
}