This is an automated email from the ASF dual-hosted git repository.

johnthuss pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/master by this push:
     new 9e489dd  Cgen - optionally allow user-defined tools besides 
ImportUtils for working with velocity templates.
9e489dd is described below

commit 9e489dded596ee10e1ef32ba8124c06d456bc212
Author: John Huss <johnth...@apache.org>
AuthorDate: Fri May 31 16:59:17 2019 -0500

    Cgen - optionally allow user-defined tools besides ImportUtils for working 
with velocity templates.
    
    This restores an ability that was present before upgrading to velocity 2.0.
---
 cayenne-cgen/pom.xml                               |  6 ++++++
 .../main/java/org/apache/cayenne/gen/Artifact.java |  4 ++--
 .../apache/cayenne/gen/ClassGenerationAction.java  | 24 +++++++++++++++++++---
 .../org/apache/cayenne/gen/DataMapArtifact.java    |  4 ++--
 .../org/apache/cayenne/gen/EmbeddableArtifact.java |  4 ++--
 .../org/apache/cayenne/gen/EntityArtifact.java     |  4 ++--
 pom.xml                                            |  5 +++++
 7 files changed, 40 insertions(+), 11 deletions(-)

diff --git a/cayenne-cgen/pom.xml b/cayenne-cgen/pom.xml
index a332842..718a76f 100644
--- a/cayenne-cgen/pom.xml
+++ b/cayenne-cgen/pom.xml
@@ -55,6 +55,12 @@
         </dependency>
 
         <dependency>
+            <groupId>org.apache.velocity.tools</groupId>
+            <artifactId>velocity-tools-generic</artifactId>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
             <groupId>org.apache.cayenne</groupId>
             <artifactId>cayenne-server</artifactId>
             <version>${project.version}</version>
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 b04c9a3..f3b57d8 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
@@ -18,7 +18,7 @@
  ****************************************************************/
 package org.apache.cayenne.gen;
 
-import org.apache.velocity.VelocityContext;
+import org.apache.velocity.context.Context;
 
 /**
  * Represents a class generation "artifact" which is a facade to a metadata 
object used
@@ -63,5 +63,5 @@ public interface Artifact {
      * after the context is initialized by code generator, so this method can 
use
      * predefined keys from the context.
      */
-    void postInitContext(VelocityContext context);
+    void postInitContext(Context context);
 }
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 1363685..89f7660 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
@@ -34,12 +34,15 @@ import java.util.Properties;
 import java.util.stream.Collectors;
 
 import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.gen.ImportUtils;
 import org.apache.cayenne.map.Embeddable;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.QueryDescriptor;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.context.Context;
+import org.apache.velocity.tools.ToolManager;
 import org.slf4j.Logger;
 
 public class ClassGenerationAction {
@@ -68,13 +71,28 @@ public class ClassGenerationAction {
        protected Logger logger;
 
     // runtime ivars
-    protected VelocityContext context;
+    protected Context context;
     protected Map<String, Template> templateCache;
 
     private ToolsUtilsFactory utilsFactory;
 
+       /**
+       Optionally allows user-defined tools besides {@link ImportUtils} for 
working with velocity templates.<br/>
+       To use this feature, set the java system property {@code 
-Dorg.apache.velocity.tools=tools.properties}
+       And create the file "tools.properties" in the working directory or in 
the 
+       root of the classpath with content like this: 
+       <pre>
+       tools.toolbox = application
+       tools.application.myTool = com.mycompany.MyTool</pre>
+       Then the methods in the MyTool class will be available for use in the 
template like ${myTool.myMethod(arg)}
+        */
        public ClassGenerationAction() {
-               this.context = new VelocityContext();
+               if (System.getProperty("org.apache.velocity.tools") != null) {
+                       ToolManager manager = new ToolManager(true, true);
+                       this.context = manager.createContext();
+               } else {
+                       this.context = new VelocityContext();
+               }
                this.templateCache = new HashMap<>(5);
        }
 
@@ -467,7 +485,7 @@ public class ClassGenerationAction {
         * Sets an optional shared VelocityContext. Useful with tools like VPP 
that
         * can set custom values in the context, not known to Cayenne.
         */
-       public void setContext(VelocityContext context) {
+       public void setContext(Context context) {
                this.context = context;
        }
 
diff --git 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java
index 46fcaa6..119b18b 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DataMapArtifact.java
@@ -22,7 +22,7 @@ package org.apache.cayenne.gen;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.QueryDescriptor;
 import org.apache.cayenne.util.Util;
-import org.apache.velocity.VelocityContext;
+import org.apache.velocity.context.Context;
 
 import java.util.Collection;
 import java.util.LinkedList;
@@ -62,7 +62,7 @@ public class DataMapArtifact implements Artifact {
         return this;
     }
 
-    public void postInitContext(VelocityContext context) {
+    public void postInitContext(Context context) {
         DataMapUtils dataMapUtils = new DataMapUtils();
         context.put(DATAMAP_UTILS_KEY, dataMapUtils);
     }
diff --git 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java
index 0dc24db..7d3308e 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EmbeddableArtifact.java
@@ -19,7 +19,7 @@
 package org.apache.cayenne.gen;
 
 import org.apache.cayenne.map.Embeddable;
-import org.apache.velocity.VelocityContext;
+import org.apache.velocity.context.Context;
 
 /**
  * {@link Artifact} facade for an {@link Embeddable}.
@@ -62,7 +62,7 @@ public class EmbeddableArtifact implements Artifact {
         }
     }
 
-    public void postInitContext(VelocityContext context) {
+    public void postInitContext(Context context) {
         // noop - no special keys...
     }
 }
diff --git 
a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java 
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
index 241b5b3..5875d32 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
@@ -20,7 +20,7 @@ package org.apache.cayenne.gen;
 
 import org.apache.cayenne.BaseDataObject;
 import org.apache.cayenne.map.ObjEntity;
-import org.apache.velocity.VelocityContext;
+import org.apache.velocity.context.Context;
 
 /**
  * {@link Artifact} facade for an ObjEntity.
@@ -81,7 +81,7 @@ public class EntityArtifact implements Artifact {
         }
     }
 
-    public void postInitContext(VelocityContext context) {
+    public void postInitContext(Context context) {
         EntityUtils metadata = new EntityUtils(
                 entity.getDataMap(),
                 entity,
diff --git a/pom.xml b/pom.xml
index 7bf76fe..70e68e5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -406,6 +406,11 @@
                                <version>2.0</version>
                        </dependency>
                        <dependency>
+                               <groupId>org.apache.velocity.tools</groupId>
+                               <artifactId>velocity-tools-generic</artifactId>
+                               <version>3.0</version>
+                       </dependency>
+                       <dependency>
                                <groupId>foundrylogic.vpp</groupId>
                                <artifactId>vpp</artifactId>
                                <version>2.2.1</version>

Reply via email to