You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by sk...@apache.org on 2015/03/16 14:53:58 UTC

cayenne git commit: CAY-1991 | More control over generated String property names

Repository: cayenne
Updated Branches:
  refs/heads/master 4ff768966 -> 5bbbd9217


CAY-1991 | More control over generated String property names


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

Branch: refs/heads/master
Commit: 5bbbd9217ecf51d277906469d68e4974f0d8b3ab
Parents: 4ff7689
Author: Savva Kolbachev <s....@gmail.com>
Authored: Mon Mar 16 16:52:45 2015 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Mon Mar 16 16:52:45 2015 +0300

----------------------------------------------------------------------
 .../java/org/apache/cayenne/gen/Artifact.java   |  1 +
 .../cayenne/gen/ClassGenerationAction.java      | 32 +++++++++++++-------
 .../cayenne/tools/CayenneGeneratorTask.java     | 14 +++++++--
 .../templates/v1_2/client-superclass.vm         |  4 +--
 .../templates/v1_2/embeddable-singleclass.vm    |  3 +-
 .../templates/v1_2/embeddable-superclass.vm     |  3 +-
 .../resources/templates/v1_2/singleclass.vm     |  4 +--
 .../main/resources/templates/v1_2/superclass.vm |  4 +--
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |  4 +++
 .../src/docbkx/including-cayenne-in-project.xml |  6 ++++
 .../dialog/codegen/CustomModeController.java    |  6 ++++
 .../modeler/dialog/codegen/CustomModePanel.java | 10 +++++-
 .../codegen/CustomPreferencesUpdater.java       | 17 ++++++++++-
 .../cayenne/tools/CayenneGeneratorMojo.java     |  9 ++++++
 14 files changed, 93 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/5bbbd921/cayenne-tools/src/main/java/org/apache/cayenne/gen/Artifact.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/Artifact.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/Artifact.java
index b73e3c8..fcd9118 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/Artifact.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/gen/Artifact.java
@@ -41,6 +41,7 @@ public interface Artifact {
     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";
 
     TemplateType[] getTemplateTypes(ArtifactGenerationMode mode);
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5bbbd921/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java b/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
index 0d97aa9..ce0c1c9 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
@@ -18,22 +18,12 @@
  ****************************************************************/
 package org.apache.cayenne.gen;
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
 import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.access.loader.NamePatternMatcher;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.Embeddable;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.query.Query;
-import org.apache.cayenne.access.loader.NamePatternMatcher;
 import org.apache.commons.logging.Log;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
@@ -41,6 +31,16 @@ import org.apache.velocity.app.VelocityEngine;
 import org.apache.velocity.runtime.RuntimeConstants;
 import org.apache.velocity.runtime.log.NullLogSystem;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
 public class ClassGenerationAction {
     static final String TEMPLATES_DIR_NAME = "templates/v1_2/";
 
@@ -81,6 +81,7 @@ public class ClassGenerationAction {
     protected long timestamp;
     protected String outputPattern;
     protected String encoding;
+    protected boolean createPropertyNames;
 
     // runtime ivars
     protected VelocityContext context;
@@ -186,6 +187,8 @@ public class ClassGenerationAction {
 
         context.put(Artifact.OBJECT_KEY, artifact.getObject());
         context.put(Artifact.STRING_UTILS_KEY, stringUtils);
+
+        context.put(Artifact.CREATE_PROPERTY_NAMES, createPropertyNames);
     }
 
     /**
@@ -354,6 +357,13 @@ public class ClassGenerationAction {
     }
 
     /**
+     * Sets <code>createPropertyNames</code> property.
+     */
+    public void setCreatePropertyNames(boolean createPropertyNames) {
+        this.createPropertyNames = createPropertyNames;
+    }
+
+    /**
      * Opens a Writer to write generated output. Returned Writer is mapped to a filesystem
      * file (although subclasses may override that). File location is determined from the
      * current state of VelocityContext and the TemplateType passed as a parameter. Writer

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5bbbd921/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
index 26ae00d..11a0370 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
@@ -18,8 +18,7 @@
  ****************************************************************/
 package org.apache.cayenne.tools;
 
-import java.io.File;
-
+import foundrylogic.vpp.VPPConfig;
 import org.apache.cayenne.access.loader.NamePatternMatcher;
 import org.apache.cayenne.gen.ArtifactsGenerationMode;
 import org.apache.cayenne.gen.ClassGenerationAction;
@@ -29,7 +28,7 @@ import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.Path;
 import org.apache.velocity.VelocityContext;
 
-import foundrylogic.vpp.VPPConfig;
+import java.io.File;
 
 /**
  * An Ant task to perform class generation based on CayenneDataMap.
@@ -59,6 +58,7 @@ public class CayenneGeneratorTask extends CayenneTask {
     protected String querytemplate;
     protected String querysupertemplate;
     protected boolean usepkgpath;
+    protected boolean createpropertynames;
 
     public CayenneGeneratorTask() {
         this.makepairs = true;
@@ -90,6 +90,7 @@ public class CayenneGeneratorTask extends CayenneTask {
         action.setQueryTemplate(querytemplate);
         action.setQuerySuperTemplate(querysupertemplate);
         action.setUsePkgPath(usepkgpath);
+        action.setCreatePropertyNames(createpropertynames);
 
         return action;
     }
@@ -268,6 +269,13 @@ public class CayenneGeneratorTask extends CayenneTask {
         this.mode = mode;
     }
 
+    /**
+     * Sets <code>createpropertynames</code> property.
+     */
+    public void setCreatepropertynames(boolean createpropertynames) {
+        this.createpropertynames = createpropertynames;
+    }
+
     public void setEmbeddabletemplate(String embeddabletemplate) {
         this.embeddabletemplate = embeddabletemplate;
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5bbbd921/cayenne-tools/src/main/resources/templates/v1_2/client-superclass.vm
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/resources/templates/v1_2/client-superclass.vm b/cayenne-tools/src/main/resources/templates/v1_2/client-superclass.vm
index 2077924..da0b527 100644
--- a/cayenne-tools/src/main/resources/templates/v1_2/client-superclass.vm
+++ b/cayenne-tools/src/main/resources/templates/v1_2/client-superclass.vm
@@ -63,15 +63,15 @@ ${importUtils.generate()}
 public abstract class ${superClassName} extends ${baseClassName} {
 
 ## Create ivars names
+#if( $createPropertyNames )
 #foreach( $attr in ${object.DeclaredAttributes} )
-    @Deprecated
     public static final String ${stringUtils.capitalizedAsConstant($attr.Name)}_PROPERTY = "${attr.Name}";
 #end
 #foreach( $rel in ${object.DeclaredRelationships} )
-    @Deprecated
     public static final String ${stringUtils.capitalizedAsConstant($rel.Name)}_PROPERTY = "${rel.Name}";
 #end
 
+#end
 ## Create Properties
 #foreach( $attr in ${object.DeclaredAttributes} )
     public static final Property<$importUtils.formatJavaType(${attr.Type}, false)> ${stringUtils.capitalizedAsConstant($attr.Name)} = new Property<$importUtils.formatJavaType(${attr.Type}, false)>("${attr.Name}");

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5bbbd921/cayenne-tools/src/main/resources/templates/v1_2/embeddable-singleclass.vm
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/resources/templates/v1_2/embeddable-singleclass.vm b/cayenne-tools/src/main/resources/templates/v1_2/embeddable-singleclass.vm
index 2442a4a..c5d6c89 100644
--- a/cayenne-tools/src/main/resources/templates/v1_2/embeddable-singleclass.vm
+++ b/cayenne-tools/src/main/resources/templates/v1_2/embeddable-singleclass.vm
@@ -47,11 +47,12 @@ ${importUtils.generate()}
 public abstract class ${subClassName} extends ${baseClassName} {
 
 ## Create property names
+#if( $createPropertyNames )
 #foreach( $attr in ${object.Attributes} )
-    @Deprecated
     public static final String ${stringUtils.capitalizedAsConstant($attr.Name)}_PROPERTY = "${attr.Name}";
 #end
 
+#end
 ## Create Properties
 #foreach( $attr in ${object.Attributes} )
     public static final Property<$importUtils.formatJavaType(${attr.Type}, false)> ${stringUtils.capitalizedAsConstant($attr.Name)} = new Property<$importUtils.formatJavaType(${attr.Type}, false)>("${attr.Name}");

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5bbbd921/cayenne-tools/src/main/resources/templates/v1_2/embeddable-superclass.vm
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/resources/templates/v1_2/embeddable-superclass.vm b/cayenne-tools/src/main/resources/templates/v1_2/embeddable-superclass.vm
index cea415f..be1b829 100644
--- a/cayenne-tools/src/main/resources/templates/v1_2/embeddable-superclass.vm
+++ b/cayenne-tools/src/main/resources/templates/v1_2/embeddable-superclass.vm
@@ -53,11 +53,12 @@ ${importUtils.generate()}
 public abstract class ${superClassName} extends ${baseClassName} {
 
 ## Create property names
+#if( $createPropertyNames )
 #foreach( $attr in ${object.Attributes} )
-    @Deprecated
     public static final String ${stringUtils.capitalizedAsConstant($attr.Name)}_PROPERTY = "${attr.Name}";
 #end
 
+#end
 ## Create Properties
 #foreach( $attr in ${object.Attributes} )
     public static final Property<$importUtils.formatJavaType(${attr.Type}, false)> ${stringUtils.capitalizedAsConstant($attr.Name)} = new Property<$importUtils.formatJavaType(${attr.Type}, false)>("${attr.Name}");

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5bbbd921/cayenne-tools/src/main/resources/templates/v1_2/singleclass.vm
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/resources/templates/v1_2/singleclass.vm b/cayenne-tools/src/main/resources/templates/v1_2/singleclass.vm
index 4dc46cf..01206d3 100644
--- a/cayenne-tools/src/main/resources/templates/v1_2/singleclass.vm
+++ b/cayenne-tools/src/main/resources/templates/v1_2/singleclass.vm
@@ -53,15 +53,15 @@ public#if("true" == "${object.getIsAbstract()}") abstract#end class ${subClassNa
     private static final long serialVersionUID = 1L; 
      
 ## Create property names
+#if( $createPropertyNames )
 #foreach( $attr in ${object.DeclaredAttributes} )
-    @Deprecated
     public static final String ${stringUtils.capitalizedAsConstant($attr.Name)}_PROPERTY = "${attr.Name}";
 #end
 #foreach( $rel in ${object.DeclaredRelationships} )
-    @Deprecated
     public static final String ${stringUtils.capitalizedAsConstant($rel.Name)}_PROPERTY = "${rel.Name}";
 #end
 
+#end
 #if( $object.DbEntity )
 #foreach( $idAttr in ${object.DbEntity.PrimaryKeys} )
     public static final String ${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_COLUMN = "${idAttr.Name}";

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5bbbd921/cayenne-tools/src/main/resources/templates/v1_2/superclass.vm
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/resources/templates/v1_2/superclass.vm b/cayenne-tools/src/main/resources/templates/v1_2/superclass.vm
index 8253be6..013e8db 100644
--- a/cayenne-tools/src/main/resources/templates/v1_2/superclass.vm
+++ b/cayenne-tools/src/main/resources/templates/v1_2/superclass.vm
@@ -58,15 +58,15 @@ public abstract class ${superClassName} extends ${baseClassName} {
     private static final long serialVersionUID = 1L; 
 
 ## Create property names
+#if( $createPropertyNames )
 #foreach( $attr in ${object.DeclaredAttributes} )
-    @Deprecated
     public static final String ${stringUtils.capitalizedAsConstant($attr.Name)}_PROPERTY = "${attr.Name}";
 #end
 #foreach( $rel in ${object.DeclaredRelationships} )
-    @Deprecated
     public static final String ${stringUtils.capitalizedAsConstant($rel.Name)}_PROPERTY = "${rel.Name}";
 #end
 
+#end
 #if( $object.DbEntity )
 #foreach( $idAttr in ${object.DbEntity.PrimaryKeys} )
     public static final String ${stringUtils.capitalizedAsConstant($idAttr.Name)}_PK_COLUMN = "${idAttr.Name}";

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5bbbd921/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index 6296a67..6fbefd9 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -12,6 +12,10 @@ Changes/New Features:
 Release: 4.0.M3
 Date:
 ----------------------------------
+Changes/New Features:
+
+CAY-1991 More control over generated String property names
+
 Bug Fixes:
 
 CAY-1990 Incorrect display of the raw SQL query in Modeler

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5bbbd921/docs/docbook/cayenne-guide/src/docbkx/including-cayenne-in-project.xml
----------------------------------------------------------------------
diff --git a/docs/docbook/cayenne-guide/src/docbkx/including-cayenne-in-project.xml b/docs/docbook/cayenne-guide/src/docbkx/including-cayenne-in-project.xml
index 561a44f..7b1358d 100644
--- a/docs/docbook/cayenne-guide/src/docbkx/including-cayenne-in-project.xml
+++ b/docs/docbook/cayenne-guide/src/docbkx/including-cayenne-in-project.xml
@@ -223,6 +223,12 @@
                                 "false", classes will be generated in "destDir" ignoring their
                                 package.</td>
                         </tr>
+                        <tr>
+                            <td><code>createPropertyNames</code></td>
+                            <td>boolean</td>
+                            <td>If set to "true", will generate String Property names.
+                                Default is "false"</td>
+                        </tr>
                     </tbody>
                 </table> Example - a typical class generation scenario, where pairs of classes are
                 generated with default Maven source destination and superclass

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5bbbd921/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 73a649f..3de74ae 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
@@ -156,6 +156,11 @@ public class CustomModeController extends GeneratorController {
                 "customPreferencesUpdater.outputPattern").
                 updateView();
 
+        builder.bindToStateChange(
+                view.getCreatePropertyNames(),
+                "customPreferencesUpdater.createPropertyNames").
+                updateView();
+
         updateTemplates();
     }
 
@@ -255,6 +260,7 @@ public class CustomModeController extends GeneratorController {
             generator.setOverwrite(view.getOverwrite().isSelected());
             generator.setUsePkgPath(view.getUsePackagePath().isSelected());
             generator.setMakePairs(view.getPairs().isSelected());
+            generator.setCreatePropertyNames(view.getCreatePropertyNames().isSelected());
 
             if (!Util.isEmptyString(view.getOutputPattern().getText())) {
                 generator.setOutputPattern(view.getOutputPattern().getText());

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5bbbd921/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 f94458e..8998e09 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
@@ -41,6 +41,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
     protected JCheckBox overwrite;
     protected JCheckBox usePackagePath;
     protected JTextField outputPattern;
+    protected JCheckBox createPropertyNames;
 
     private DefaultFormBuilder builder;
 
@@ -55,6 +56,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
         this.overwrite = new JCheckBox();
         this.usePackagePath = new JCheckBox();
         this.outputPattern = new JTextField();
+        this.createPropertyNames = new JCheckBox();
         this.manageTemplatesLink = new ActionLink("Customize Templates...");
         manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
 
@@ -90,10 +92,13 @@ public class CustomModePanel extends GeneratorControllerPanel {
         builder.append("Make Pairs:", pairs);
         builder.nextLine();
 
+        builder.append("Use Package Path:", usePackagePath);
+        builder.nextLine();
+
         builder.append("Overwrite Subclasses:", overwrite);
         builder.nextLine();
 
-        builder.append("Use Package Path:", usePackagePath);
+        builder.append("Create Property Names:", createPropertyNames);
         builder.nextLine();
 
         setLayout(new BorderLayout());
@@ -144,4 +149,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
         return outputPattern;
     }
 
+    public JCheckBox getCreatePropertyNames() {
+        return createPropertyNames;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5bbbd921/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 043770c..6764a97 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
@@ -35,7 +35,8 @@ public class CustomPreferencesUpdater {
         PAIRS,
         USE_PACKAGE_PATH,
         MODE,
-        OUTPUT_PATTERN
+        OUTPUT_PATTERN,
+        CREATE_PROPERTY_NAMES
     }
 
     private static final String OVERWRITE = "overwrite";
@@ -43,6 +44,7 @@ public class CustomPreferencesUpdater {
     private static final String USE_PACKAGE_PATH = "usePackagePath";
     private static final String MODE = "mode";
     private static final String OUTPUT_PATTERN = "outputPattern";
+    private static final String CREATE_PROPERTY_NAMES = "createPropertyNames";
 
     private Map<DataMap, DataMapDefaults> mapPreferences;
 
@@ -107,6 +109,13 @@ public class CustomPreferencesUpdater {
         updatePreferences(Property.OUTPUT_PATTERN, outputPattern);
     }
 
+    public Boolean getCreatePropertyNames() {
+        return (Boolean) getProperty(Property.CREATE_PROPERTY_NAMES);
+    }
+
+    public void setCreatePropertyNames(Boolean createPropertyNames) {
+        updatePreferences(Property.CREATE_PROPERTY_NAMES, createPropertyNames);
+    }
 
     private Object getProperty(Property property) {
         Object obj = null;
@@ -136,6 +145,9 @@ public class CustomPreferencesUpdater {
                 case USE_PACKAGE_PATH:
                     obj = entry.getValue().getBooleanProperty(USE_PACKAGE_PATH);
                     break;
+                case CREATE_PROPERTY_NAMES:
+                    obj = entry.getValue().getBooleanProperty(CREATE_PROPERTY_NAMES);
+                    break;
                 default:
                     throw new IllegalArgumentException("Bad type property: " + property);
             }
@@ -170,6 +182,9 @@ public class CustomPreferencesUpdater {
                 case USE_PACKAGE_PATH:
                     entry.getValue().setBooleanProperty(USE_PACKAGE_PATH, (Boolean) value);
                     break;
+                case CREATE_PROPERTY_NAMES:
+                    entry.getValue().setBooleanProperty(CREATE_PROPERTY_NAMES, (Boolean) value);
+                    break;
                 default:
                     throw new IllegalArgumentException("Bad type property: " + property);
             }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/5bbbd921/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
----------------------------------------------------------------------
diff --git a/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java b/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
index 658762e..8e683c1 100644
--- a/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
+++ b/plugins/maven-cayenne-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
@@ -191,6 +191,14 @@ public class CayenneGeneratorMojo extends AbstractMojo {
 	 */
 	private boolean usePkgPath;
 
+    /**
+     * If set to <code>true</code>, will generate String Property names.
+     * Default is <code>false</code>.
+     *
+     * @parameter createPropertyNames="createPropertyNames" default-value="false"
+     */
+    private boolean createPropertyNames;
+
 	public void execute() throws MojoExecutionException, MojoFailureException {
 		// Create the destination directory if necessary.
 		// TODO: (KJM 11/2/06) The destDir really should be added as a
@@ -278,6 +286,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
 		action.setEmbeddableSuperTemplate(embeddableSuperTemplate);
 		action.setEmbeddableTemplate(embeddableTemplate);
 		action.setUsePkgPath(usePkgPath);
+        action.setCreatePropertyNames(createPropertyNames);
 
 		return action;
 	}