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