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 2014/12/24 10:19:12 UTC

[1/2] incubator-ignite git commit: # ignite-32 WIP: Generation of key type.

Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-32 5eb96c399 -> 55370e2e1


# ignite-32 WIP: Generation of key type.


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

Branch: refs/heads/ignite-32
Commit: 7619eeddac39686ce180c9a441b7d4dcf146ca5e
Parents: 5eb96c3
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Dec 24 16:18:12 2014 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Dec 24 16:18:12 2014 +0700

----------------------------------------------------------------------
 .../query/GridCacheQueryTypeDescriptor.java     |  77 +++++++-----
 .../cache/query/GridCacheQueryTypeMetadata.java |  84 +++++++++----
 .../ignite/schema/db/DbMetadataParser.java      |  38 +++---
 .../ignite/schema/pojo/PojoCodeGenerator.java   | 117 ++++++++++++-------
 .../ignite/schema/xml/XmlTransformer.java       |  34 +++---
 5 files changed, 230 insertions(+), 120 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7619eedd/modules/core/src/main/java/org/gridgain/grid/cache/query/GridCacheQueryTypeDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/cache/query/GridCacheQueryTypeDescriptor.java b/modules/core/src/main/java/org/gridgain/grid/cache/query/GridCacheQueryTypeDescriptor.java
index fb1e6de..675795d 100644
--- a/modules/core/src/main/java/org/gridgain/grid/cache/query/GridCacheQueryTypeDescriptor.java
+++ b/modules/core/src/main/java/org/gridgain/grid/cache/query/GridCacheQueryTypeDescriptor.java
@@ -10,68 +10,87 @@
 package org.gridgain.grid.cache.query;
 
 /**
- * Type descriptor for field in database
+ * Type descriptor for field in java and database.
  */
 public class GridCacheQueryTypeDescriptor {
     /** Column name in database. */
-    private String colName;
-
-    /** Column JDBC type in database. */
-    private int colJdbcType;
+    private String javaName;
 
     /** Corresponding java type. */
     private Class<?> javaType;
 
+    /** Column name in database. */
+    private String dbName;
+
+    /** Column JDBC type in database. */
+    private int dbType;
+
     /**
-     * @param colName Column name in database.
-     * @param colJdbcType Column JDBC type in database.
-     * @param javaType Corresponding java type.
+     * @param javaName Field name in java object.
+     * @param javaType Field java type.
+     * @param dbName Column name in database.
+     * @param dbType Column JDBC type in database.
      */
-    public GridCacheQueryTypeDescriptor(String colName, int colJdbcType, Class<?> javaType) {
-        this.colName = colName;
-        this.colJdbcType = colJdbcType;
+    public GridCacheQueryTypeDescriptor(String javaName, Class<?> javaType, String dbName, int dbType) {
+        this.javaName = javaName;
         this.javaType = javaType;
+        this.dbName = dbName;
+        this.dbType = dbType;
     }
 
     /**
-     * @return Column name in database.
+     * @return Field name in java object.
      */
-    public String getColumnName() {
-        return colName;
+    public String getJavaName() {
+        return javaName;
     }
 
     /**
-     * @param colName Column name in database.
+     * @param javaName Field name in java object.
      */
-    public void setColumnName(String colName) {
-        this.colName = colName;
+    public void setJavaName(String javaName) {
+        this.javaName = javaName;
     }
 
     /**
-     * @return Column JDBC type in database.
+     * @return Field java type.
      */
-    public int getColumnJdbcType() {
-        return colJdbcType;
+    public Class<?> getJavaType() {
+        return javaType;
     }
 
     /**
-     * @param colJdbcType Column JDBC type in database.
+     * @param javaType Corresponding java type.
      */
-    public void setColumnJdbcType(int colJdbcType) {
-        this.colJdbcType = colJdbcType;
+    public void setJavaType(Class<?> javaType) {
+        this.javaType = javaType;
     }
 
     /**
-     * @return Corresponding java type.
+     * @return Column name in database.
      */
-    public Class<?> getJavaType() {
-        return javaType;
+    public String getDbName() {
+        return dbName;
     }
 
     /**
-     * @param javaType Corresponding java type.
+     * @param dbName Column name in database.
      */
-    public void setJavaType(Class<?> javaType) {
-        this.javaType = javaType;
+    public void setDbName(String dbName) {
+        this.dbName = dbName;
+    }
+
+    /**
+     * @return Column JDBC type in database.
+     */
+    public int getDbType() {
+        return dbType;
+    }
+
+    /**
+     * @param dbType Column JDBC type in database.
+     */
+    public void setDbType(int dbType) {
+        this.dbType = dbType;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7619eedd/modules/core/src/main/java/org/gridgain/grid/cache/query/GridCacheQueryTypeMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/gridgain/grid/cache/query/GridCacheQueryTypeMetadata.java b/modules/core/src/main/java/org/gridgain/grid/cache/query/GridCacheQueryTypeMetadata.java
index f8e8374..ea86574 100644
--- a/modules/core/src/main/java/org/gridgain/grid/cache/query/GridCacheQueryTypeMetadata.java
+++ b/modules/core/src/main/java/org/gridgain/grid/cache/query/GridCacheQueryTypeMetadata.java
@@ -28,16 +28,20 @@ public class GridCacheQueryTypeMetadata {
     /** Table name in database. */
     private String tbl;
 
-    /** Fields to be queried, in addition to indexed fields. */
-    @GridToStringInclude
-    private Map<String, Class<?>> qryFlds;
+    /** Key class. */
+    private String keyType;
 
-    /** Key name. */
-    private String key;
+    /** Type descriptors. */
+    @GridToStringInclude
+    private Collection<GridCacheQueryTypeDescriptor> keyDescs;
 
     /** Type descriptors. */
     @GridToStringInclude
-    private Map<String, GridCacheQueryTypeDescriptor> typeDescs;
+    private Collection<GridCacheQueryTypeDescriptor> valDescs;
+
+    /** Fields to be queried, in addition to indexed fields. */
+    @GridToStringInclude
+    private Map<String, Class<?>> qryFlds;
 
     /** Fields to index in ascending order. */
     @GridToStringInclude
@@ -59,11 +63,18 @@ public class GridCacheQueryTypeMetadata {
      * Default constructor.
      */
     public GridCacheQueryTypeMetadata() {
+        keyDescs = new ArrayList<>();
+
+        valDescs = new ArrayList<>();
+
         qryFlds = new LinkedHashMap<>();
-        typeDescs = new LinkedHashMap<>();
+
         ascFlds = new LinkedHashMap<>();
+
         descFlds = new LinkedHashMap<>();
+
         txtFlds = new LinkedHashSet<>();
+
         grps = new LinkedHashMap<>();
     }
 
@@ -72,12 +83,15 @@ public class GridCacheQueryTypeMetadata {
      */
     public GridCacheQueryTypeMetadata(GridCacheQueryTypeMetadata src) {
         type = src.getType();
+        keyType = src.getKeyType();
+
         schema = src.getSchema();
         tbl = src.getTableName();
-        key = src.getKey();
+
+        keyDescs = new ArrayList<>(src.getKeyDescriptors());
+        valDescs = new ArrayList<>(src.getValueDescriptors());
 
         qryFlds = new LinkedHashMap<>(src.getQueryFields());
-        typeDescs = new LinkedHashMap<>(src.getTypeDescriptors());
         ascFlds = new LinkedHashMap<>(src.getAscendingFields());
         descFlds = new LinkedHashMap<>(src.getDescendingFields());
         txtFlds = new LinkedHashSet<>(src.getTextFields());
@@ -148,30 +162,58 @@ public class GridCacheQueryTypeMetadata {
         this.tbl = tbl;
     }
 
-    public String getKey() {
-        return key;
+    /**
+     * Gets key type.
+     *
+     * @return Key type.
+     */
+    public String getKeyType() {
+        return keyType;
+    }
+
+    /**
+     * Sets key type.
+     *
+     * @param keyType Key type.
+     */
+    public void setKeyType(String keyType) {
+        this.keyType = keyType;
     }
 
-    public void setKey(String key) {
-        this.key = key;
+    /**
+     * Gets key fields type descriptors.
+     *
+     * @return Key fields type descriptors.
+     */
+    public Collection<GridCacheQueryTypeDescriptor> getKeyDescriptors() {
+        return keyDescs;
+    }
+
+    /**
+     * Sets key fields type descriptors.
+     *
+     * @param keyDescs Key fields type descriptors.
+     */
+    public void setKeyDescriptors(Collection<GridCacheQueryTypeDescriptor> keyDescs) {
+        this.keyDescs = keyDescs;
     }
 
     /**
-     * Gets database type descriptors.
+     * Gets value fields type descriptors.
      *
-     * @return Map of type descriptors.
+     * @return Key value type descriptors.
      */
-    public Map<String, GridCacheQueryTypeDescriptor> getTypeDescriptors() {
-        return typeDescs;
+    public Collection<GridCacheQueryTypeDescriptor> getValueDescriptors() {
+        return valDescs;
     }
 
     /**
-     * Sets database types descriptors.
+     * Sets value fields type descriptors.
      *
-     * @param typeDescs Map of type descriptors.
+     * @param valDescs Value fields type descriptors.
      */
-    public void setTypeDescriptors(Map<String, GridCacheQueryTypeDescriptor> typeDescs) {
-        this.typeDescs = typeDescs;
+    public void setValueDescriptors(Collection<GridCacheQueryTypeDescriptor> valDescs) {
+        this.valDescs = valDescs;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7619eedd/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbMetadataParser.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbMetadataParser.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbMetadataParser.java
index 1d95176..c27d200 100644
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbMetadataParser.java
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbMetadataParser.java
@@ -138,29 +138,41 @@ public class DbMetadataParser {
         res.setSchema(schema);
         res.setTableName(tbl);
 
+        res.setType(toJavaClassName(tbl));
+        res.setKeyType(res.getType() + "Key");
+
+        Collection<GridCacheQueryTypeDescriptor> keyDescs = res.getKeyDescriptors();
+        Collection<GridCacheQueryTypeDescriptor> valDescs = res.getValueDescriptors();
+
         Map<String, Class<?>> qryFields = res.getQueryFields();
-        Map<String, GridCacheQueryTypeDescriptor> typeDescs = res.getTypeDescriptors();
         Map<String, Class<?>> ascFields = res.getAscendingFields();
         Map<String, Class<?>> descFields = res.getDescendingFields();
         Map<String, LinkedHashMap<String, IgniteBiTuple<Class<?>, Boolean>>> groups = res.getGroups();
 
-        res.setType(toJavaClassName(tbl));
+        Set<String> pkFlds = new LinkedHashSet<>();
 
-        ResultSet flds = meta.getColumns(catalog, schema, tbl, null);
+        try (ResultSet pk = meta.getPrimaryKeys(catalog, schema, tbl)) {
+            while (pk.next())
+                pkFlds.add(pk.getString(4));
+        }
+
+        try (ResultSet flds = meta.getColumns(catalog, schema, tbl, null)) {
+            while (flds.next()) {
+                String dbName = flds.getString(4);
+                int dbType = flds.getInt(5);
 
-        while (flds.next()) {
-            String dbName = flds.getString(4);
-            int jdbcType = flds.getInt(5);
+                String javaName = toJavaFieldName(dbName);
+                Class<?> javaType = dataType(dbType);
 
-            String col = toJavaFieldName(dbName);
-            Class<?> type = dataType(jdbcType);
+                GridCacheQueryTypeDescriptor desc = new GridCacheQueryTypeDescriptor(javaName, javaType, dbName, dbType);
 
-            // TODO: IGNITE-32 Get real key.
-            if (res.getKey() == null)
-                res.setKey(col);
+                if (pkFlds.contains(dbName))
+                    keyDescs.add(desc);
 
-            qryFields.put(col, type);
-            typeDescs.put(col, new GridCacheQueryTypeDescriptor(dbName, jdbcType, type));
+                valDescs.add(desc);
+
+                qryFields.put(javaName, javaType);
+            }
         }
 
         ResultSet idxs = meta.getIndexInfo(catalog, schema, tbl, false, true);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7619eedd/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 fbb5c42..963306c 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
@@ -24,11 +24,18 @@ public class PojoCodeGenerator {
     private static final String TAB = "    ";
 
     /** */
-    private final Collection<String> src = new ArrayList<>(256);
+    private final Collection<String> srcKey = new ArrayList<>(256);
 
     /** */
-    private int indent = 0;
+    private final Collection<String> srcVal = new ArrayList<>(256);
 
+    /** */
+    private int indent;
+
+    /**
+     *
+     * @return
+     */
     private String indent() {
         switch (indent) {
             case 0: return "";
@@ -43,71 +50,101 @@ public class PojoCodeGenerator {
         }
     }
 
-    private void line(String s) {
+    private void line(Collection<String> src, String s) {
         src.add(indent() + s);
     }
 
-    private void empty() {
+    private void empty(Collection<String> src) {
         src.add("");
     }
 
-    private void newLine(String s) {
-        empty();
-        line(s);
+    private void newLine(Collection<String> src, String s) {
+        empty(src);
+        line(src, s);
     }
 
-    public void generate(GridCacheQueryTypeMetadata meta, String outFolder, String pkg) throws IOException {
-        src.clear();
+    /**
+     * Generate key declarations.
+     *
+     * @param src Source code.
+     * @param descs Type descriptor.
+     */
+    private void generateFields(Collection<String> src, Collection<GridCacheQueryTypeDescriptor> descs) {
+        for(GridCacheQueryTypeDescriptor desc : descs)
+            line(src, "private " + desc.getJavaType().getSimpleName() + " " + desc.getJavaName() + ";");
+    }
 
-        File res = new File(outFolder, pkg.replace('.', File.separatorChar));
+    /**
+     * Generate key declarations.
+     *
+     * @param src Source code.
+     * @param descs Type descriptor.
+     */
+    private void generateMethods(Collection<String> src, Collection<GridCacheQueryTypeDescriptor> descs) {
+        for(GridCacheQueryTypeDescriptor desc : descs) {
+            String fldName = desc.getJavaName();
+            String fldType = desc.getJavaType().getSimpleName();
 
-        res.mkdirs();
+            String mtdName = capitalize(fldName);
 
-        res = new File(res, meta.getType() + ".java");
+            newLine(src, "public " + fldType + " get" + mtdName + "() {");
 
-        line(pkg + ";");
+            indent++;
+            line(src, "return " + fldName + ";");
+            indent--;
 
-        newLine("public class " + meta.getType() + " {");
+            line(src, "}");
 
-        Set<Map.Entry<String, Class<?>>> fields = meta.getQueryFields().entrySet();
+            newLine(src, "public void set" + mtdName + "(" + fldName + ": " + fldType+ ") {");
 
-        indent++;
+            indent++;
+            line(src, "this." + fldName + " = " + fldName + ";");
+            indent--;
 
-        // Generate declarations.
-        for(Map.Entry<String, Class<?>> field : fields)
-            line("private " + field.getValue().getSimpleName() + " " + field.getKey() + ";");
+            line(src, "}");
+        }
+    }
 
-        // Generate getters and setters.
-        for(Map.Entry<String, Class<?>> field : fields) {
-            String fldType = field.getValue().getSimpleName();
-            String fldName = field.getKey();
-            String mtdName = capitalize(fldName);
+    private void write(Collection<String> src, File res) throws IOException {
+        try (Writer writer = new BufferedWriter(new FileWriter(res))) {
+            for (String line : src)
+                writer.write(line + '\n');
+        }
+    }
 
-            newLine("public " + fldType + " get" + mtdName + "() {");
+    public void generate(GridCacheQueryTypeMetadata meta, String outFolder, String pkg) throws IOException {
+        srcKey.clear();
+        srcVal.clear();
 
-            indent++;
-            line("return " + fldName + ";");
-            indent--;
+        File res = new File(outFolder, pkg.replace('.', File.separatorChar));
 
-            line("}");
+        res.mkdirs();
 
-            newLine("public void set" + mtdName + "(" + fldName + ": " + fldType+ ") {");
+        String keyType =  meta.getKeyType();
+        String valType =  meta.getType();
 
-            indent++;
-            line("this." + fldName + " = " + fldName + ";");
-            indent--;
+        line(srcKey, pkg + ";");
+        line(srcVal, pkg + ";");
 
-            line("}");
-        }
+        newLine(srcKey, "public class " + keyType + " {");
+        newLine(srcVal, "public class " + valType + " {");
 
+        indent++;
+
+        generateFields(srcKey, meta.getKeyDescriptors());
+
+        generateFields(srcVal, meta.getValueDescriptors());
+
+        generateMethods(srcKey, meta.getKeyDescriptors());
+
+        generateMethods(srcVal, meta.getValueDescriptors());
 
         indent--;
 
-        line("}");
+        line(srcKey, "}");
+        line(srcVal, "}");
 
-        try (Writer writer = new BufferedWriter(new FileWriter(res))) {
-            for (String line : src)
-                writer.write(line + '\n');
-        }
+        write(srcKey, new File(res, keyType + ".java"));
+        write(srcVal, new File(res, valType + ".java"));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7619eedd/modules/schema-load/src/main/java/org/apache/ignite/schema/xml/XmlTransformer.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/xml/XmlTransformer.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/xml/XmlTransformer.java
index 4075c7b..994d554 100644
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/xml/XmlTransformer.java
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/xml/XmlTransformer.java
@@ -159,24 +159,22 @@ public class XmlTransformer {
      * Add type descriptors to XML document.
      *
      * @param parent Parent XML node.
-     * @param typeDescs Map with type descriptors.
+     * @param name Property name.
+     * @param descs Map with type descriptors.
      */
-    private void addTypeDescriptors(Node parent, Map<String, GridCacheQueryTypeDescriptor> typeDescs) {
-        if (!typeDescs.isEmpty()) {
-            Element prop = addProperty(parent, "typeDescriptors");
-
-            Element map = addElement(prop, "map");
-
-            for (Map.Entry<String, GridCacheQueryTypeDescriptor> typeDesc : typeDescs.entrySet()) {
-                Element entry = addElement(map, "entry", typeDesc.getKey(), null);
+    private void addTypeDescriptors(Node parent, String name, Collection<GridCacheQueryTypeDescriptor> descs) {
+        if (!descs.isEmpty()) {
+            Element prop = addProperty(parent, name);
 
-                Element val = addBean(entry, GridCacheQueryTypeDescriptor.class);
+            Element list = addElement(prop, "list");
 
-                GridCacheQueryTypeDescriptor desc = typeDesc.getValue();
+            for (GridCacheQueryTypeDescriptor desc : descs) {
+                Element item = addBean(list, GridCacheQueryTypeDescriptor.class);
 
-                addProperty(val, "columnName", desc.getColumnName());
-                addProperty(val, "columnJdbcType", String.valueOf(desc.getColumnJdbcType()));
-                addProperty(val, "javaType", desc.getJavaType().getName());
+                addProperty(item, "javaName", desc.getJavaName());
+                addProperty(item, "javaType", desc.getJavaType().getName());
+                addProperty(item, "dbName", desc.getDbName());
+                addProperty(item, "dbType", String.valueOf(desc.getDbType()));
             }
         }
     }
@@ -242,15 +240,17 @@ public class XmlTransformer {
 
         addProperty(bean, "type", meta.getType());
 
+        addProperty(bean, "keyType", meta.getKeyType());
+
         addProperty(bean, "schema", meta.getSchema());
 
         addProperty(bean, "tableName", meta.getTableName());
 
-        addProperty(bean, "key", meta.getKey());
+        addTypeDescriptors(bean, "keyDescriptors", meta.getKeyDescriptors());
 
-        addFields(bean, "queryFields", meta.getQueryFields());
+        addTypeDescriptors(bean, "valueDescriptors", meta.getValueDescriptors());
 
-        addTypeDescriptors(bean, meta.getTypeDescriptors());
+        addFields(bean, "queryFields", meta.getQueryFields());
 
         addFields(bean, "ascendingFields", meta.getAscendingFields());
 


[2/2] incubator-ignite git commit: # ignite-32 WIP: Working on UI.

Posted by sb...@apache.org.
# ignite-32 WIP: Working on UI.


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

Branch: refs/heads/ignite-32
Commit: 55370e2e1b546e4970bf55d154b49659d49ab5fc
Parents: 7619eed
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Dec 24 16:19:09 2014 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Dec 24 16:19:09 2014 +0700

----------------------------------------------------------------------
 .../src/main/java/media/branch_128x128.png      | Bin 0 -> 3766 bytes
 .../src/main/java/media/branch_16x16.png        | Bin 0 -> 411 bytes
 .../src/main/java/media/branch_32x32.png        | Bin 0 -> 775 bytes
 .../src/main/java/media/branch_48x48.png        | Bin 0 -> 1139 bytes
 .../src/main/java/media/error_48x48.png         | Bin 0 -> 4349 bytes
 .../src/main/java/media/information_48x48.png   | Bin 0 -> 4102 bytes
 .../src/main/java/media/question_48x48.png      | Bin 0 -> 3857 bytes
 .../apache/ignite/schema/db/DbConnection.java   |   4 +-
 .../org/apache/ignite/schema/ui/MessageBox.java | 128 ++++++++++++++++++
 .../apache/ignite/schema/ui/SchemaLoadApp.java  | 129 ++++++++++++-------
 .../ignite/schema/ui/media/branch_128x128.png   | Bin 3766 -> 0 bytes
 .../ignite/schema/ui/media/branch_16x16.png     | Bin 411 -> 0 bytes
 .../ignite/schema/ui/media/branch_32x32.png     | Bin 775 -> 0 bytes
 .../ignite/schema/ui/media/branch_48x48.png     | Bin 1139 -> 0 bytes
 .../apache/ignite/schema/util/SchemaUtils.java  |  46 +++++++
 15 files changed, 256 insertions(+), 51 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/modules/schema-load/src/main/java/media/branch_128x128.png
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/media/branch_128x128.png b/modules/schema-load/src/main/java/media/branch_128x128.png
new file mode 100644
index 0000000..dacee19
Binary files /dev/null and b/modules/schema-load/src/main/java/media/branch_128x128.png differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/modules/schema-load/src/main/java/media/branch_16x16.png
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/media/branch_16x16.png b/modules/schema-load/src/main/java/media/branch_16x16.png
new file mode 100644
index 0000000..9764668
Binary files /dev/null and b/modules/schema-load/src/main/java/media/branch_16x16.png differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/modules/schema-load/src/main/java/media/branch_32x32.png
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/media/branch_32x32.png b/modules/schema-load/src/main/java/media/branch_32x32.png
new file mode 100644
index 0000000..8f39620
Binary files /dev/null and b/modules/schema-load/src/main/java/media/branch_32x32.png differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/modules/schema-load/src/main/java/media/branch_48x48.png
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/media/branch_48x48.png b/modules/schema-load/src/main/java/media/branch_48x48.png
new file mode 100644
index 0000000..a956f2c
Binary files /dev/null and b/modules/schema-load/src/main/java/media/branch_48x48.png differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/modules/schema-load/src/main/java/media/error_48x48.png
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/media/error_48x48.png b/modules/schema-load/src/main/java/media/error_48x48.png
new file mode 100644
index 0000000..e341b8a
Binary files /dev/null and b/modules/schema-load/src/main/java/media/error_48x48.png differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/modules/schema-load/src/main/java/media/information_48x48.png
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/media/information_48x48.png b/modules/schema-load/src/main/java/media/information_48x48.png
new file mode 100644
index 0000000..8712a1b
Binary files /dev/null and b/modules/schema-load/src/main/java/media/information_48x48.png differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/modules/schema-load/src/main/java/media/question_48x48.png
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/media/question_48x48.png b/modules/schema-load/src/main/java/media/question_48x48.png
new file mode 100644
index 0000000..84683f9
Binary files /dev/null and b/modules/schema-load/src/main/java/media/question_48x48.png differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbConnection.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbConnection.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbConnection.java
index 86c7f2d..d62f98d 100644
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbConnection.java
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/db/DbConnection.java
@@ -35,8 +35,8 @@ public class DbConnection {
 
             Statement stmt = conn.createStatement();
 
-            stmt.executeUpdate("CREATE TABLE Organization (id integer, name varchar(50), city varchar(50))");
-            stmt.executeUpdate("CREATE TABLE Person (id integer, org_id integer, name varchar(50))");
+            stmt.executeUpdate("CREATE TABLE Organization (id integer PRIMARY KEY, name varchar(50), city varchar(50))");
+            stmt.executeUpdate("CREATE TABLE Person (id integer PRIMARY KEY, org_id integer, name varchar(50))");
 
             stmt.executeUpdate("CREATE INDEX Org_Name_IDX On Organization (name)");
             stmt.executeUpdate("CREATE INDEX Org_Name_City_IDX On Organization (name, city)");

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/MessageBox.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/MessageBox.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/MessageBox.java
new file mode 100644
index 0000000..5d58e22
--- /dev/null
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/MessageBox.java
@@ -0,0 +1,128 @@
+/* @java.file.header */
+
+/*  _________        _____ __________________        _____
+ *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
+ *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
+ *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
+ *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
+ */
+
+package org.apache.ignite.schema.ui;
+
+import javafx.event.*;
+import javafx.geometry.*;
+import javafx.scene.*;
+import javafx.scene.control.*;
+import javafx.scene.image.*;
+import javafx.scene.layout.*;
+import javafx.scene.text.*;
+import javafx.stage.*;
+
+import static org.apache.ignite.schema.util.SchemaUtils.*;
+
+/**
+ * TODO: Add class description.
+ */
+public class MessageBox {
+
+    public enum Option {NO, YES, CANCEL}
+
+    private static Option result = Option.CANCEL;
+
+    private static ImageView icon = new ImageView();
+
+    static class Dialog extends Stage {
+        public Dialog(String title, Stage owner, Scene scene, String iconFile) {
+            setTitle(title);
+            initStyle(StageStyle.UTILITY);
+            initModality(Modality.APPLICATION_MODAL);
+            initOwner(owner);
+            setResizable(false);
+            setScene(scene);
+            icon.setImage(image(iconFile, 48));
+        }
+
+        public void showDialog() {
+            sizeToScene();
+            centerOnScreen();
+            showAndWait();
+        }
+    }
+
+    static class Message extends Text {
+        public Message(String msg) {
+            super(msg);
+            setWrappingWidth(250);
+        }
+    }
+
+    public static Option showConfirmDialog(Stage owner, String message, String title) {
+        VBox vb = newVBox(10);
+
+        Scene scene = new Scene(vb);
+
+        final Dialog dial = new Dialog(title, owner, scene, "question");
+
+        Button yesButton = new Button("Yes");
+        yesButton.setOnAction(new EventHandler<ActionEvent>() {
+            @Override public void handle(ActionEvent e) {
+                dial.close();
+                result = Option.YES;
+            }
+        });
+
+        Button noButton = new Button("No");
+        noButton.setOnAction(new EventHandler<ActionEvent>() {
+            @Override public void handle(ActionEvent e) {
+                dial.close();
+                result = Option.NO;
+            }
+        });
+
+        BorderPane bp = new BorderPane();
+        HBox buttons = new HBox();
+        buttons.setAlignment(Pos.CENTER);
+        buttons.setSpacing(10);
+        buttons.getChildren().addAll(yesButton, noButton);
+        bp.setCenter(buttons);
+        HBox msg = new HBox();
+        msg.setSpacing(5);
+        msg.getChildren().addAll(icon, new Message(message));
+        vb.getChildren().addAll(msg, bp);
+        dial.showDialog();
+
+        return result;
+    }
+
+    private static void showDialog(Stage owner, String title, String message, String iconFile) {
+        VBox vb = newVBox(10);
+        Scene scene = new Scene(vb);
+
+        final Dialog dial = new Dialog(title, owner, scene, iconFile);
+
+        Button okButton = new Button("OK");
+        okButton.setAlignment(Pos.CENTER);
+        okButton.setOnAction(new EventHandler<ActionEvent>() {
+            @Override public void handle(ActionEvent e) {
+                dial.close();
+            }
+        });
+
+        BorderPane bp = new BorderPane();
+        bp.setCenter(okButton);
+        HBox msg = new HBox();
+        msg.setSpacing(5);
+        msg.getChildren().addAll(icon, new Message(message));
+        vb.getChildren().addAll(msg, bp);
+
+        dial.showDialog();
+    }
+
+    public static void showInformationDialog(Stage owner, String title, String message) {
+        showDialog(owner, title, message, "information");
+    }
+
+    public static void showErrorDialog(Stage owner, String title, String message) {
+        showDialog(owner, title, message, "error");
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/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 e53bd56..7d429e8 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
@@ -10,29 +10,27 @@
 package org.apache.ignite.schema.ui;
 
 import javafx.application.*;
-import javafx.collections.*;
 import javafx.event.*;
 import javafx.geometry.*;
 import javafx.scene.*;
 import javafx.scene.control.*;
 import javafx.scene.control.cell.*;
-import javafx.scene.image.*;
 import javafx.scene.layout.*;
 import javafx.scene.text.*;
 import javafx.stage.*;
 import org.apache.ignite.schema.db.*;
 
 import java.io.*;
+import java.sql.*;
 import java.util.*;
 
+import static org.apache.ignite.schema.util.SchemaUtils.*;
+
 /**
  * Schema load application.
  */
 public class SchemaLoadApp extends Application {
     /** */
-    private static final Insets DFLT_PADDING = new Insets(10, 10, 10, 10);
-
-    /** */
     private int step;
 
     /** */
@@ -51,19 +49,6 @@ public class SchemaLoadApp extends Application {
     private List<WizardPage> pages;
 
     /**
-     * Create new {@code HBox} with default padding.
-     * @param spacing Amount of horizontal space between each child.
-     * @return New {@code HBox} instance.
-     */
-    private static HBox newHBox(int spacing) {
-        HBox hb = new HBox(spacing);
-
-        hb.setPadding(DFLT_PADDING);
-
-        return hb;
-    }
-
-    /**
      * Base class for wizard pages.
      */
     private abstract static class WizardPage {
@@ -102,12 +87,26 @@ public class SchemaLoadApp extends Application {
             return contentPane;
         }
 
+        /**
+         * @return {@code true} if wizard page complete.
+         */
+        public boolean complete() {
+            return true;
+        }
     }
 
     /**
      * Wizard page for selecting DB settings.
      */
     private static class DbChooserPage extends WizardPage {
+        private TextField jdbcTf;
+
+        private TextField urlTf;
+
+        private TextField userTf;
+
+        private PasswordField pwdTf;
+
         /**
          * Create page.
          */
@@ -121,23 +120,26 @@ public class SchemaLoadApp extends Application {
 
             gp.addPercentColumns(30, 70);
 
-            gp.addLabel("Alias:", 0, 0);
-
-            ObservableList<String> options = FXCollections.observableArrayList("My Settings");
-            ComboBox<String> aliasCb = new ComboBox<>(options);
-            aliasCb.setPromptText("Schema load settings");
-            aliasCb.setEditable(true);
-            aliasCb.setMaxWidth(Double.MAX_VALUE);
-
-            gp.add(aliasCb, 1, 0);
+//            gp.addLabel("Alias:", 0, 0);
+//
+//            ObservableList<String> options = FXCollections.observableArrayList("My Settings");
+//            ComboBox<String> aliasCb = new ComboBox<>(options);
+//            aliasCb.setPromptText("Schema load settings");
+//            aliasCb.setEditable(true);
+//            aliasCb.setMaxWidth(Double.MAX_VALUE);
+//
+//            gp.add(aliasCb, 1, 0);
 
-            TextField jdbcTf = gp.addTextField("JDBC Driver:", 0, 2);
+            jdbcTf = gp.addTextField("JDBC Driver:", 0, 2);
+            jdbcTf.setText("org.h2.Driver");
 
-            TextField urlTf = gp.addTextField("URL:", 0, 3);
+            urlTf = gp.addTextField("URL:", 0, 3);
+            urlTf.setText("jdbc:h2:mem:test");
 
-            TextField userTf = gp.addTextField("User:", 0, 4);
+            userTf = gp.addTextField("User:", 0, 4);
+            userTf.setText("sa");
 
-            PasswordField pwdTf = gp.addLabeled("Password:", new PasswordField(), 0, 5);
+            pwdTf = gp.addLabeled("Password:", new PasswordField(), 0, 5);
 
             return gp;
         }
@@ -252,15 +254,6 @@ public class SchemaLoadApp extends Application {
     }
 
     /**
-     * Schema load utility launcher.
-     *
-     * @param args Command line arguments passed to the application.
-     */
-    public static void main(String[] args) {
-        launch(args);
-    }
-
-    /**
      * @return Header pane with title label.
      */
     private Pane createHeaderPane() {
@@ -321,15 +314,6 @@ public class SchemaLoadApp extends Application {
         nextBtn.setDisable(step == pages.size() - 1);
     }
 
-    /**
-     * Gets image by its filename.
-     *
-     * @param fname Image filename.
-     */
-    private Image image(String fname, int sz) {
-        return new Image(getClass().getResourceAsStream(String.format("media/%1$s_%2$dx%2$d.png", fname, sz)));
-    }
-
     /** {@inheritDoc} */
     @Override public void start(Stage primaryStage) {
         primaryStage.getIcons()
@@ -364,4 +348,51 @@ public class SchemaLoadApp extends Application {
 
         go(false);
     }
+
+    /**
+     * Schema load utility launcher.
+     */
+    private static void sampleDb() {
+        try {
+            Class.forName("org.h2.Driver");
+            Connection conn = DriverManager.getConnection("jdbc:h2:mem:test", "sa", "");
+
+            Statement stmt = conn.createStatement();
+
+            stmt.executeUpdate("CREATE TABLE Organization (id integer, name varchar(50), city varchar(50))");
+            stmt.executeUpdate("CREATE TABLE Person (id integer, org_id integer, name varchar(50))");
+
+            stmt.executeUpdate("CREATE INDEX Org_Name_IDX On Organization (name)");
+            stmt.executeUpdate("CREATE INDEX Org_Name_City_IDX On Organization (name, city)");
+            stmt.executeUpdate("CREATE INDEX Person_Name_IDX1 On Person (name)");
+            stmt.executeUpdate("CREATE INDEX Person_Name_IDX2 On Person (name desc)");
+
+            conn.commit();
+
+            stmt.executeUpdate("INSERT INTO Organization(id, name) VALUES (1, 'GridGain')");
+            stmt.executeUpdate("INSERT INTO Organization(id, name) VALUES (2, 'Apache')");
+
+            stmt.executeUpdate("INSERT INTO Person(id, org_id, name) VALUES (1, 1, 'Kuznetsov')");
+            stmt.executeUpdate("INSERT INTO Person(id, org_id, name) VALUES (2, 2, 'Boudnik')");
+
+            conn.commit();
+
+            conn.close();
+        }
+        catch(Throwable e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * Schema load utility launcher.
+     *
+     * @param args Command line arguments passed to the application.
+     */
+    public static void main(String[] args) {
+        sampleDb();
+
+        launch(args);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_128x128.png
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_128x128.png b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_128x128.png
deleted file mode 100644
index dacee19..0000000
Binary files a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_128x128.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_16x16.png
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_16x16.png b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_16x16.png
deleted file mode 100644
index 9764668..0000000
Binary files a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_16x16.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_32x32.png
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_32x32.png b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_32x32.png
deleted file mode 100644
index 8f39620..0000000
Binary files a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_32x32.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_48x48.png
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_48x48.png b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_48x48.png
deleted file mode 100644
index a956f2c..0000000
Binary files a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/media/branch_48x48.png and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/55370e2e/modules/schema-load/src/main/java/org/apache/ignite/schema/util/SchemaUtils.java
----------------------------------------------------------------------
diff --git a/modules/schema-load/src/main/java/org/apache/ignite/schema/util/SchemaUtils.java b/modules/schema-load/src/main/java/org/apache/ignite/schema/util/SchemaUtils.java
index 6e0e9f1..3f30158 100644
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/util/SchemaUtils.java
+++ b/modules/schema-load/src/main/java/org/apache/ignite/schema/util/SchemaUtils.java
@@ -9,10 +9,17 @@
 
 package org.apache.ignite.schema.util;
 
+import javafx.geometry.*;
+import javafx.scene.image.*;
+import javafx.scene.layout.*;
+
 /**
  * TODO: Add class description.
  */
 public class SchemaUtils {
+    /** */
+    public static final Insets DFLT_PADDING = new Insets(10, 10, 10, 10);
+
     /**
      * @param str Source string.
      * @return String with each word first letters capitalized.
@@ -64,4 +71,43 @@ public class SchemaUtils {
     public static String toJavaFieldName(String name) {
         return uncapitalize(toJavaClassName(name));
     }
+
+    /**
+     * Gets image by its filename.
+     *
+     * @param fname Image filename.
+     */
+    public static Image image(String fname, int sz) {
+        return new Image(SchemaUtils.class.getClassLoader()
+            .getResourceAsStream(String.format("media/%1$s_%2$dx%2$d.png", fname, sz)));
+    }
+
+    /**
+     * Create new {@code HBox} with default padding.
+     *
+     * @param spacing Amount of horizontal space between each child.
+     * @return New {@code HBox} instance.
+     */
+    public static HBox newHBox(int spacing) {
+        HBox hb = new HBox(spacing);
+
+        hb.setPadding(DFLT_PADDING);
+
+        return hb;
+    }
+
+    /**
+     * Create new {@code VBox} with default padding.
+     *
+     * @param spacing Amount of horizontal space between each child.
+     * @return New {@code VBox} instance.
+     */
+    public static VBox newVBox(int spacing) {
+        VBox vb = new VBox(spacing);
+
+        vb.setPadding(DFLT_PADDING);
+
+        return vb;
+    }
 }
+