CAY-2338 Support comments in cgen and default templates
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 f3b57d8..9b8f0c3 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
@@ -44,6 +44,7 @@
String CREATE_PROPERTY_NAMES = "createPropertyNames";
String CREATE_PK_PROPERTIES = "createPKProperties";
String PROPERTY_UTILS_KEY = "propertyUtils";
+ String METADATA_UTILS_KEY = "metadataUtils";
TemplateType[] getTemplateTypes(ArtifactGenerationMode mode);
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenModule.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenModule.java
index 42391c8..bf0552e 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenModule.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenModule.java
@@ -36,7 +36,7 @@
/**
* @since 4.1
*/
-public class CgenModule implements Module{
+public class CgenModule implements Module {
@Override
public void configure(Binder binder) {
@@ -44,6 +44,8 @@
binder.bind(ClassGenerationActionFactory.class).to(DefaultClassGenerationActionFactory.class);
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(ToolsUtilsFactory.class).to(DefaultToolsUtilsFactory.class);
+ binder.bind(MetadataUtils.class).to(MetadataUtils.class);
+
ProjectModule.contributeExtensions(binder).add(CgenExtension.class);
contributeUserProperties(binder)
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..e04ad54 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
@@ -75,6 +75,7 @@
protected Map<String, Template> templateCache;
private ToolsUtilsFactory utilsFactory;
+ private MetadataUtils metadataUtils;
/**
Optionally allows user-defined tools besides {@link ImportUtils} for working with velocity templates.<br/>
@@ -191,6 +192,7 @@
ImportUtils importUtils = utilsFactory.createImportUtils();
context.put(Artifact.IMPORT_UTILS_KEY, importUtils);
context.put(Artifact.PROPERTY_UTILS_KEY, utilsFactory.createPropertyUtils(logger, importUtils));
+ context.put(Artifact.METADATA_UTILS_KEY, metadataUtils);
artifact.postInitContext(context);
}
@@ -502,4 +504,12 @@
public void setUtilsFactory(ToolsUtilsFactory utilsFactory) {
this.utilsFactory = utilsFactory;
}
+
+ public void setMetadataUtils(MetadataUtils metadataUtils) {
+ this.metadataUtils = metadataUtils;
+ }
+
+ public MetadataUtils getMetadataUtils() {
+ return metadataUtils;
+ }
}
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..3a7754c 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
@@ -29,6 +29,9 @@
@Inject
private ToolsUtilsFactory utilsFactory;
+ @Inject
+ private MetadataUtils metadataUtils;
+
@Override
public ClassGenerationAction createAction(CgenConfiguration cgenConfiguration) {
ClassGenerationAction classGenerationAction = cgenConfiguration.isClient() ?
@@ -36,6 +39,7 @@
new ClassGenerationAction();
classGenerationAction.setCgenConfiguration(cgenConfiguration);
classGenerationAction.setUtilsFactory(utilsFactory);
+ classGenerationAction.setMetadataUtils(metadataUtils);
return classGenerationAction;
}
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 24d8b91..2e3bbb0 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
@@ -36,11 +36,11 @@
*/
public class ImportUtils {
- public static final String importOrdering[] = { "java.", "javax.", "org.", "com." };
+ public static final String[] importOrdering = { "java.", "javax.", "org.", "com." };
- static final String primitives[] = { "long", "double", "byte", "boolean", "float", "short", "int", "char" };
+ static final String[] primitives = { "long", "double", "byte", "boolean", "float", "short", "int", "char" };
- static final String primitiveClasses[] = new String[] { Long.class.getName(), Double.class.getName(),
+ static final String[] primitiveClasses = new String[] { Long.class.getName(), Double.class.getName(),
Byte.class.getName(), Boolean.class.getName(), Float.class.getName(), Short.class.getName(),
Integer.class.getName(), Character.class.getName() };
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/MetadataUtils.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/MetadataUtils.java
new file mode 100644
index 0000000..c9a1626
--- /dev/null
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/MetadataUtils.java
@@ -0,0 +1,20 @@
+package org.apache.cayenne.gen;
+
+import org.apache.cayenne.configuration.ConfigurationNode;
+import org.apache.cayenne.configuration.xml.DataChannelMetaData;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.project.extension.info.ObjectInfo;
+
+public class MetadataUtils {
+
+ @Inject
+ private DataChannelMetaData metaData;
+
+ public String getComment(ConfigurationNode node) {
+ return getInfo(node, ObjectInfo.COMMENT);
+ }
+
+ public String getInfo(ConfigurationNode node, String key) {
+ return ObjectInfo.getFromMetaData(metaData, node, key);
+ }
+}
diff --git a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/CgenCase.java b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/CgenCase.java
index 5514945..b8f773a 100644
--- a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/CgenCase.java
+++ b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/CgenCase.java
@@ -19,21 +19,26 @@
package org.apache.cayenne.gen;
+import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule;
import org.apache.cayenne.di.DIBootstrap;
import org.apache.cayenne.di.Injector;
import org.apache.cayenne.di.spi.DefaultScope;
import org.apache.cayenne.unit.di.DICase;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* @since 4.2
*/
public class CgenCase extends DICase {
+ private final static Logger LOGGER = LoggerFactory.getLogger(CgenCase.class);
+
private static final Injector injector;
static {
DefaultScope testScope = new DefaultScope();
- injector = DIBootstrap.createInjector(new CgenCaseModule(testScope), new CgenModule());
+ injector = DIBootstrap.createInjector(new CgenCaseModule(testScope), new CgenModule(), new ToolsModule(LOGGER));
}
@Override