This is an automated email from the ASF dual-hosted git repository. ntimofeev pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 5e03fb6f8f04ab7bcff23b7a19fddaded721e6b6 Author: Faizel Dakri <fai...@me.com> AuthorDate: Mon May 11 10:42:13 2020 -0500 Enable cgen task/mojo to specify path to an external velocity tool configuration file via CgenConfiguration parameter (externalToolConfig). Removed older method relying on system property manipulation. --- .../apache/cayenne/tools/CayenneGeneratorTask.java | 16 ++++++++++++++- .../org/apache/cayenne/gen/CgenConfiguration.java | 14 +++++++++++++ .../apache/cayenne/gen/ClassGenerationAction.java | 15 +++++++++++--- .../cayenne/gen/ClientClassGenerationAction.java | 4 ++-- .../gen/DefaultClassGenerationActionFactory.java | 5 ++--- .../gen/mock/TestClassGenerationAction.java | 3 +-- .../apache/cayenne/tools/CayenneGeneratorMojo.java | 23 +++++++++------------- 7 files changed, 55 insertions(+), 25 deletions(-) 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 d6411b0..121b287 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 @@ -88,6 +88,12 @@ public class CayenneGeneratorTask extends CayenneTask { */ protected Boolean createpkproperties; + /** + * Optional path (classpath or filesystem) to external velocity tool configuration file + * @since 4.2 + */ + protected String externaltoolconfig; + public CayenneGeneratorTask() { } @@ -158,7 +164,7 @@ public class CayenneGeneratorTask extends CayenneTask { makepairs != null || mode != null || outputPattern != null || overwrite != null || superpkg != null || supertemplate != null || template != null || embeddabletemplate != null || embeddablesupertemplate != null || usepkgpath != null || createpropertynames != null || querytemplate != null || - querysupertemplate != null || createpkproperties != null || force; + querysupertemplate != null || createpkproperties != null || force || externaltoolconfig != null; } private CgenConfiguration buildConfiguration(DataMap dataMap) { @@ -200,6 +206,7 @@ public class CayenneGeneratorTask extends CayenneTask { cgenConfiguration.setQueryTemplate(querytemplate != null ? querytemplate : cgenConfiguration.getQueryTemplate()); cgenConfiguration.setQuerySuperTemplate(querysupertemplate != null ? querysupertemplate : cgenConfiguration.getQuerySuperTemplate()); cgenConfiguration.setCreatePKProperties(createpkproperties != null ? createpkproperties : cgenConfiguration.isCreatePKProperties()); + cgenConfiguration.setExternalToolConfig(externaltoolconfig != null ? externaltoolconfig : cgenConfiguration.getExternalToolConfig()); if(!cgenConfiguration.isMakePairs()) { if(template == null) { cgenConfiguration.setTemplate(cgenConfiguration.isClient() ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE : ClassGenerationAction.SINGLE_CLASS_TEMPLATE); @@ -394,6 +401,13 @@ public class CayenneGeneratorTask extends CayenneTask { } /** + * @since 4.2 + */ + public void setExternaltoolconfig(String externaltoolconfig) { + this.externaltoolconfig = externaltoolconfig; + } + + /** * Provides a <code>VPPConfig</code> object to configure. (Written with createConfig() * instead of addConfig() to avoid run-time dependency on VPP). */ diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java index 2f6e2e4..cfa7480 100644 --- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java +++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java @@ -81,6 +81,11 @@ public class CgenConfiguration implements Serializable, XMLSerializable { private boolean client; + /** + * @since 4.2 + */ + private String externalToolConfig; + public CgenConfiguration(boolean client) { this.outputPattern = "*.java"; this.timestamp = 0L; @@ -318,6 +323,14 @@ public class CgenConfiguration implements Serializable, XMLSerializable { this.client = client; } + public String getExternalToolConfig() { + return externalToolConfig; + } + + public void setExternalToolConfig(String config) { + this.externalToolConfig = config; + } + void addArtifact(Artifact artifact) { artifacts.add(artifact); } @@ -404,6 +417,7 @@ public class CgenConfiguration implements Serializable, XMLSerializable { .simpleTag("superPkg", this.superPkg) .simpleTag("createPKProperties", Boolean.toString(this.createPKProperties)) .simpleTag("client", Boolean.toString(client)) + .simpleTag("externalToolConfig", this.externalToolConfig) .end(); } 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 85cade1..00a86ec 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,7 +34,6 @@ 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; @@ -43,6 +42,8 @@ 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.apache.velocity.tools.config.ConfigurationUtils; +import org.apache.velocity.tools.config.FactoryConfiguration; import org.slf4j.Logger; public class ClassGenerationAction { @@ -86,9 +87,17 @@ public class ClassGenerationAction { 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() { - if (System.getProperty("org.apache.velocity.tools") != null) { + public ClassGenerationAction(CgenConfiguration cgenConfig) { + this.cgenConfiguration = cgenConfig; + String toolConfigFile = cgenConfig.getExternalToolConfig(); + + if (System.getProperty("org.apache.velocity.tools") != null || toolConfigFile != null) { ToolManager manager = new ToolManager(true, true); + if (toolConfigFile != null) { + logger.info("Adding external tool configuration."); + FactoryConfiguration config = ConfigurationUtils.find(toolConfigFile); + manager.getToolboxFactory().configure(config); + } this.context = manager.createContext(); } else { this.context = new VelocityContext(); diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java index 9e3927b..886383d 100644 --- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java +++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java @@ -41,8 +41,8 @@ public class ClientClassGenerationAction extends ClassGenerationAction { public static final String CLIENT_SUPERCLASS_PREFIX = "_Client"; - public ClientClassGenerationAction() { - super(); + public ClientClassGenerationAction(CgenConfiguration config) { + super(config); } @Override diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DefaultClassGenerationActionFactory.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DefaultClassGenerationActionFactory.java index b561547..d01a98b 100644 --- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DefaultClassGenerationActionFactory.java +++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/DefaultClassGenerationActionFactory.java @@ -32,9 +32,8 @@ public class DefaultClassGenerationActionFactory implements ClassGenerationActio @Override public ClassGenerationAction createAction(CgenConfiguration cgenConfiguration) { ClassGenerationAction classGenerationAction = cgenConfiguration.isClient() ? - new ClientClassGenerationAction() : - new ClassGenerationAction(); - classGenerationAction.setCgenConfiguration(cgenConfiguration); + new ClientClassGenerationAction(cgenConfiguration) : + new ClassGenerationAction(cgenConfiguration); classGenerationAction.setUtilsFactory(utilsFactory); return classGenerationAction; } diff --git a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/mock/TestClassGenerationAction.java b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/mock/TestClassGenerationAction.java index c16aabc..b58b518 100644 --- a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/mock/TestClassGenerationAction.java +++ b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/mock/TestClassGenerationAction.java @@ -33,8 +33,7 @@ public class TestClassGenerationAction extends ClassGenerationAction { private Collection<StringWriter> writers; public TestClassGenerationAction(ClassGenerationAction classGenerationAction, Collection<StringWriter> writers){ - super(); - setCgenConfiguration(classGenerationAction.getCgenConfiguration()); + super(classGenerationAction.getCgenConfiguration()); setUtilsFactory(classGenerationAction.getUtilsFactory()); this.writers = writers; } 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 6ad823c..9ac9329 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 @@ -20,7 +20,6 @@ package org.apache.cayenne.tools; import java.io.File; -import java.util.Map; import org.apache.cayenne.configuration.xml.DataChannelMetaData; import org.apache.cayenne.dbsync.filter.NamePatternMatcher; @@ -58,12 +57,6 @@ public class CayenneGeneratorMojo extends AbstractMojo { @Parameter private File additionalMaps; - /** - * Additional system properties that can be added before execution. - */ - @Parameter - private Map<String,String> systemProperties; - /** * Whether we are generating classes for the client tier in a Remote Object * Persistence application. Default is <code>false</code>. @@ -231,6 +224,13 @@ public class CayenneGeneratorMojo extends AbstractMojo { @Parameter private Boolean createPKProperties; + /** + * Optional path (classpath or filesystem) to external velocity tool configuration file + * @since 4.2 + */ + @Parameter + private String externalToolConfig; + private transient Injector injector; private static final Logger logger = LoggerFactory.getLogger(CayenneGeneratorMojo.class); @@ -246,12 +246,6 @@ public class CayenneGeneratorMojo extends AbstractMojo { .addModule(new ToolsModule(LoggerFactory.getLogger(CayenneGeneratorMojo.class))) .create(); - // load additional system properties early for downstream access - if (systemProperties != null) { - logger.info("Setting system properties from pom.xml"); - systemProperties.forEach((key,value) -> System.setProperty(key, value)); - } - Logger logger = new MavenLogger(this); CayenneGeneratorMapLoaderAction loaderAction = new CayenneGeneratorMapLoaderAction(injector); loaderAction.setMainDataMapFile(map); @@ -310,7 +304,7 @@ public class CayenneGeneratorMojo extends AbstractMojo { makePairs != null || mode != null || outputPattern != null || overwrite != null || superPkg != null || superTemplate != null || template != null || embeddableTemplate != null || embeddableSuperTemplate != null || usePkgPath != null || createPropertyNames != null || force || queryTemplate != null || - querySuperTemplate != null || createPKProperties != null; + querySuperTemplate != null || createPKProperties != null || externalToolConfig != null; } /** @@ -362,6 +356,7 @@ public class CayenneGeneratorMojo extends AbstractMojo { cgenConfiguration.setQueryTemplate(queryTemplate != null ? queryTemplate : cgenConfiguration.getQueryTemplate()); cgenConfiguration.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate : cgenConfiguration.getQuerySuperTemplate()); cgenConfiguration.setCreatePKProperties(createPKProperties != null ? createPKProperties : cgenConfiguration.isCreatePKProperties()); + cgenConfiguration.setExternalToolConfig(externalToolConfig != null ? externalToolConfig : cgenConfiguration.getExternalToolConfig()); if(!cgenConfiguration.isMakePairs()) { if(template == null) { cgenConfiguration.setTemplate(cgenConfiguration.isClient() ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE : ClassGenerationAction.SINGLE_CLASS_TEMPLATE);