# IGNITE-32 WIP: Added constructors generation.

Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/38c721eb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/38c721eb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/38c721eb

Branch: refs/heads/ignite-32
Commit: 38c721ebc63f4b2be189ed41cad66e8357f6177c
Parents: e8acedf
Author: AKuznetsov <akuznet...@gridgain.com>
Authored: Sun Dec 28 11:18:08 2014 +0700
Committer: AKuznetsov <akuznet...@gridgain.com>
Committed: Sun Dec 28 11:18:08 2014 +0700

----------------------------------------------------------------------
 .../ignite/schema/pojo/PojoCodeGenerator.java   | 76 +++++++++++++-------
 1 file changed, 50 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/38c721eb/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java
 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java
index aacdab9..a46b8cd 100644
--- 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java
+++ 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/pojo/PojoCodeGenerator.java
@@ -73,10 +73,11 @@ public class PojoCodeGenerator {
      * @param pkg Package name.
      * @param type Type name.
      * @param descs Type descriptors.
+     * @param constructor If {@code true} then generate empty and full 
constructors.
      * @throws IOException If failed to write generated code into file.
      */
     private static void generateCode(String pkg, String type, 
Collection<GridCacheQueryTypeDescriptor> descs,
-        File pkgFolder) throws IOException {
+        File pkgFolder, boolean constructor) throws IOException {
         if (descs.isEmpty())
             return; // TODO IGNITE-32 UI should pass non metadata.
 
@@ -87,19 +88,49 @@ public class PojoCodeGenerator {
         add0(src, "/** Code generated by Apache Ignite Schema Load utility. 
*/");
         add0(src, "public class " + type + " {");
 
+        // Fields.
         for (GridCacheQueryTypeDescriptor desc : descs) {
             add1(src, "private " + desc.getJavaType().getSimpleName() + " " + 
desc.getJavaName() + ";");
             add0(src, "");
         }
 
+        // Constructors.
+        if (constructor) {
+
+            add1(src, "/** Empty constructor. */");
+            add1(src, "public " + type + "() {");
+            add2(src, "// No-op.");
+            add1(src, "}");
+
+            add0(src, "");
+
+            add1(src, "/** Full constructor. */");
+            add1(src, "public " + type + "(");
+
+            Iterator<GridCacheQueryTypeDescriptor> it = descs.iterator();
+
+            while(it.hasNext()) {
+                GridCacheQueryTypeDescriptor desc = it.next();
+
+                add2(src, desc.getJavaType().getSimpleName() + " " + 
desc.getJavaName() + (it.hasNext() ? "," : ""));
+            }
+            add1(src, ") {");
+
+            for (GridCacheQueryTypeDescriptor desc : descs)
+                add2(src, String.format("this.%1$s = %1$s;", 
desc.getJavaName()));
+
+            add1(src, "}");
+
+            add0(src, "");
+        }
+
+        // Methods.
         for (GridCacheQueryTypeDescriptor desc : descs) {
             String fldName = desc.getJavaName();
             String fldType = desc.getJavaType().getSimpleName();
 
             String mtdName = capitalizeFirst(fldName);
 
-            add0(src, "");
-
             add1(src, "public " + fldType + " get" + mtdName + "() {");
             add2(src, "return " + fldName + ";");
             add1(src, "}");
@@ -109,9 +140,9 @@ public class PojoCodeGenerator {
             add1(src, "public void set" + mtdName + "(" + fldType + " " + 
fldName + ") {");
             add2(src, "this." + fldName + " = " + fldName + ";");
             add1(src, "}");
-        }
 
-        add0(src, "");
+            add0(src, "");
+        }
 
         add1(src, "/** {@inheritDoc} */");
         add1(src, "@Override public boolean equals(Object o) {");
@@ -128,10 +159,8 @@ public class PojoCodeGenerator {
         add2(src, String.format("%1$s that = (%1$s)o;", type));
 
         for (GridCacheQueryTypeDescriptor desc : descs) {
-            String fldName = desc.getJavaName();
-
             add0(src, "");
-            add2(src, String.format("if (%1$s != null ? 
!%1$s.equals(that.%1$s) : that.%1$s != null)", fldName));
+            add2(src, String.format("if (%1$s != null ? 
!%1$s.equals(that.%1$s) : that.%1$s != null)", desc.getJavaName()));
             add3(src, "return false;");
         }
 
@@ -146,16 +175,12 @@ public class PojoCodeGenerator {
 
         Iterator<GridCacheQueryTypeDescriptor> it = descs.iterator();
 
-        GridCacheQueryTypeDescriptor firstFld = it.next();
-
-        add2(src, String.format("int res = %1$s != null ? %1$s.hashCode() : 
0;", firstFld.getJavaName()));
+        add2(src, String.format("int res = %1$s != null ? %1$s.hashCode() : 
0;", it.next().getJavaName()));
 
-        while(it.hasNext()) {
-            String fldName = it.next().getJavaName();
+        add0(src, "");
 
-            add0(src, "");
-            add2(src, String.format("res = 31 * res + (%1$s != null ? 
%1$s.hashCode() : 0);", fldName));
-        }
+        while(it.hasNext())
+            add2(src, String.format("res = 31 * res + (%1$s != null ? 
%1$s.hashCode() : 0);", it.next().getJavaName()));
 
         add0(src, "");
         add2(src, "return res;");
@@ -165,15 +190,12 @@ public class PojoCodeGenerator {
 
         add1(src, "/** {@inheritDoc} */");
         add1(src, "@Override public String toString() {");
-        add2(src, "return \"" + type + " [\"");
+        add2(src, "return \"" + type + " [\" + ");
 
-        for (GridCacheQueryTypeDescriptor desc : descs) {
-            String fldName = desc.getJavaName();
-
-            add3(src, String.format("+ \" %1$s=\" + %1$s", fldName));
-        }
+        for (GridCacheQueryTypeDescriptor desc : descs)
+            add3(src, String.format("\" %1$s=\" + %1$s + ", 
desc.getJavaName()));
 
-        add2(src, " + \"]\";");
+        add2(src, "\"]\";");
         add1(src, "}");
 
         add0(src, "}");
@@ -190,16 +212,18 @@ public class PojoCodeGenerator {
      * @param meta Type metadata.
      * @param outFolder Output folder.
      * @param pkg Types package.
+     * @param constructor If {@code true} then generate empty and full 
constructors.
      * @throws IOException If failed to write generated code into file.
      */
-    public static void generate(GridCacheQueryTypeMetadata meta, String 
outFolder, String pkg) throws IOException {
+    public static void generate(GridCacheQueryTypeMetadata meta, String 
outFolder, String pkg, boolean constructor)
+        throws IOException {
         File pkgFolder = new File(outFolder, pkg.replace('.', 
File.separatorChar));
 
         if (!pkgFolder.exists() && !pkgFolder.mkdirs())
             throw new IOException("Failed to create folders for package: " + 
pkg);
 
-        generateCode(pkg, meta.getKeyType(), meta.getKeyDescriptors(), 
pkgFolder);
+        generateCode(pkg, meta.getKeyType(), meta.getKeyDescriptors(), 
pkgFolder, constructor);
 
-        generateCode(pkg, meta.getType(), meta.getValueDescriptors(), 
pkgFolder);
+        generateCode(pkg, meta.getType(), meta.getValueDescriptors(), 
pkgFolder, constructor);
     }
 }

Reply via email to