You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by jo...@apache.org on 2019/06/11 16:11:47 UTC
[cayenne] branch master updated: Cgen - optionally allow
user-defined tools besides ImportUtils for working with velocity templates.
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 <jo...@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>