You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/03/04 09:32:23 UTC

[40/50] [abbrv] incubator-ignite git commit: # IGNITE-380 Added snippet generation.

# IGNITE-380 Added snippet 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/7488eddd
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/7488eddd
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/7488eddd

Branch: refs/heads/ignite-51
Commit: 7488eddd6e0224d18ecdd9b7fb51566e926ead5d
Parents: b2675bc
Author: AKuznetsov <ak...@gridgain.com>
Authored: Tue Mar 3 14:49:27 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Tue Mar 3 14:49:27 2015 +0700

----------------------------------------------------------------------
 .../ignite/cache/CacheTypeFieldMetadata.java    |   2 +-
 .../apache/ignite/cache/CacheTypeMetadata.java  |  18 +--
 .../ignite/schema/generator/PojoGenerator.java  |   3 +-
 .../schema/generator/SnippetGenerator.java      | 138 +++++++++++++++++++
 .../apache/ignite/schema/ui/SchemaLoadApp.java  |   2 +
 5 files changed, 151 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7488eddd/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeFieldMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeFieldMetadata.java b/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeFieldMetadata.java
index 0041f10..625873b 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeFieldMetadata.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeFieldMetadata.java
@@ -50,7 +50,7 @@ public class CacheTypeFieldMetadata {
      * @param javaName Field name in java object.
      * @param javaType Field java type.
      */
-    public CacheTypeFieldMetadata(String javaName, Class<?> javaType, String dbName, int dbType) {
+    public CacheTypeFieldMetadata(String dbName, int dbType, String javaName, Class<?> javaType) {
         this.dbName = dbName;
         this.dbType = dbType;
         this.javaName = javaName;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7488eddd/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java b/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java
index 1e502c9..f25d9f4 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/CacheTypeMetadata.java
@@ -230,6 +230,15 @@ public class CacheTypeMetadata {
     }
 
     /**
+     * Sets value fields.
+     *
+     * @param valFields New value fields.
+     */
+    public void setValueFields(Collection<CacheTypeFieldMetadata> valFields) {
+        this.valFields = valFields;
+    }
+
+    /**
      * Gets query-enabled fields.
      *
      * @return Collection of fields available for query.
@@ -318,13 +327,4 @@ public class CacheTypeMetadata {
     public void setGroups(Map<String, LinkedHashMap<String, IgniteBiTuple<Class<?>, Boolean>>> grps) {
         this.grps = grps;
     }
-
-    /**
-     * Sets value fields.
-     *
-     * @param valFields New value fields.
-     */
-    public void setValueFields(Collection<CacheTypeFieldMetadata> valFields) {
-        this.valFields = valFields;
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7488eddd/modules/schema-load/src/main/java/org/apache/ignite/schema/generator/PojoGenerator.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/generator/PojoGenerator.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/generator/PojoGenerator.java
index 7d12e2c..500aa9a 100644
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/generator/PojoGenerator.java
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/generator/PojoGenerator.java
@@ -401,8 +401,7 @@ public class PojoGenerator {
      * @throws IOException If failed to write generated code into file.
      */
     public static void generate(PojoDescriptor pojo, String outFolder, String pkg, boolean constructor,
-        boolean includeKeys, ConfirmCallable askOverwrite)
-        throws IOException {
+        boolean includeKeys, ConfirmCallable askOverwrite) throws IOException {
         File pkgFolder = new File(outFolder, pkg.replace('.', File.separatorChar));
 
         if (!pkgFolder.exists() && !pkgFolder.mkdirs())

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7488eddd/modules/schema-load/src/main/java/org/apache/ignite/schema/generator/SnippetGenerator.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/generator/SnippetGenerator.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/generator/SnippetGenerator.java
new file mode 100644
index 0000000..e54c019
--- /dev/null
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/generator/SnippetGenerator.java
@@ -0,0 +1,138 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.schema.generator;
+
+import org.apache.ignite.schema.model.*;
+import org.apache.ignite.schema.ui.*;
+
+import java.io.*;
+import java.util.*;
+
+import static org.apache.ignite.schema.ui.MessageBox.Result.*;
+
+/**
+ * Cache configuration snippet generator.
+ */
+public class SnippetGenerator {
+    /**
+     * Add type fields.
+     *
+     * @param src Source code lines.
+     * @param owner Fields owner collection.
+     * @param fields Fields metadata.
+     */
+    private static void addFields(Collection<String> src, String owner, Collection<PojoField> fields) {
+        for (PojoField field : fields) {
+            String javaTypeName = field.javaTypeName();
+
+            if (javaTypeName.startsWith("java.lang."))
+                javaTypeName = javaTypeName.substring(10);
+
+            src.add(owner + ".add(new CacheTypeFieldMetadata(\"" + field.dbName() + "\", " +
+                "java.sql.Types." + field.dbTypeName() + ",\"" +
+                field.javaName() + "\", " + javaTypeName + ".class));");
+        }
+    }
+
+    /**
+     * Generate java snippet for cache configuration with JDBC store.
+     *
+     * @param pojos POJO descriptors.
+     * @param pkg Types package.
+     * @param includeKeys {@code true} if key fields should be included into value class.
+     * @param out File to output snippet.
+     * @param askOverwrite Callback to ask user to confirm file overwrite.
+     * @throws IOException If generation failed.
+     */
+    public static void generate(Collection<PojoDescriptor> pojos, String pkg, boolean includeKeys, File out,
+        ConfirmCallable askOverwrite) throws IOException {
+        if (out.exists()) {
+            MessageBox.Result choice = askOverwrite.confirm(out.getName());
+
+            if (CANCEL == choice)
+                throw new IllegalStateException("Java configuration snippet generation was canceled!");
+
+            if (NO == choice || NO_TO_ALL == choice)
+                return;
+        }
+
+        Collection<String> src = new ArrayList<>(256);
+
+        src.add("// Code snippet for cache configuration.");
+        src.add("");
+        src.add("IgniteConfiguration cfg = new IgniteConfiguration();");
+        src.add("");
+        src.add("CacheConfiguration ccfg = new CacheConfiguration<>();");
+        src.add("");
+        src.add("DataSource dataSource = null; // TODO: Create data source for your database.");
+        src.add("");
+        src.add("// Create store. ");
+        src.add("CacheJdbcPojoStore store = new CacheJdbcPojoStore();");
+        src.add("store.setDataSource(dataSource);");
+        src.add("");
+        src.add("// Create store factory. ");
+        src.add("ccfg.setCacheStoreFactory(new FactoryBuilder.SingletonFactory<>(store));");
+        src.add("");
+        src.add("// Configure cache to use store. ");
+        src.add("ccfg.setReadThrough(true);");
+        src.add("ccfg.setWriteThrough(true);");
+        src.add("");
+        src.add("cfg.setCacheConfiguration(ccfg);");
+        src.add("");
+        src.add("// Configure cache types. ");
+        src.add("Collection<CacheTypeMetadata> meta = new ArrayList<>();");
+        src.add("");
+
+        boolean first = true;
+
+        for (PojoDescriptor pojo : pojos) {
+            String tbl = pojo.table();
+
+            src.add("// " + tbl + ".");
+            src.add((first ? "CacheTypeMetadata " : "") +  "type = new CacheTypeMetadata();");
+            src.add("type.setDatabaseSchema(\"" + pojo.schema() + "\");");
+            src.add("type.setDatabaseTable(\"" + tbl + "\");");
+            src.add("type.setKeyType(\"" + pkg + "." + pojo.keyClassName() + "\");");
+            src.add("type.setValueType(\"" +  pkg + "." + pojo.valueClassName() + "\");");
+            src.add("");
+
+            src.add("// Key fields for " + tbl + ".");
+            src.add((first ? "Collection<CacheTypeFieldMetadata> " : "") + "keys = new ArrayList<>();");
+            addFields(src, "keys", pojo.valueFields(includeKeys));
+            src.add("type.setKeyFields(keys);");
+            src.add("");
+
+            src.add("// Value fields for " + tbl + ".");
+            src.add((first ? "Collection<CacheTypeFieldMetadata> " : "") + "vals = new ArrayList<>();");
+            addFields(src, "vals", pojo.valueFields(includeKeys));
+            src.add("type.setValueFields(vals);");
+            src.add("");
+
+            first = false;
+        }
+
+        src.add("// Start Ignite node.");
+        src.add("Ignition.start(cfg);");
+
+        // Write generated code to file.
+        try (Writer writer = new BufferedWriter(new FileWriter(out))) {
+            for (String line : src)
+                writer.write(line + '\n');
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7488eddd/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
index 9c88624..f43c5ca 100644
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/SchemaLoadApp.java
@@ -435,6 +435,8 @@ public class SchemaLoadApp extends Application {
                 if (singleXml)
                     XmlGenerator.generate(pkg, all, includeKeys, new File(outFolder, "Ignite.xml"), askOverwrite);
 
+                SnippetGenerator.generate(all, pkg, includeKeys, new File(outFolder, "Ignite.snippet"), askOverwrite);
+
                 perceptualDelay(started);
 
                 return null;