Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-32 eaeca2e5a -> 0b45f2498


# IGNITE-32 WIP: Rework UI after code review.


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

Branch: refs/heads/ignite-32
Commit: 0b45f24986bf946bf84383c4ad10b34bffa04755
Parents: eaeca2e
Author: AKuznetsov <akuznet...@gridgain.com>
Authored: Wed Jan 14 17:56:28 2015 +0700
Committer: AKuznetsov <akuznet...@gridgain.com>
Committed: Wed Jan 14 17:56:28 2015 +0700

----------------------------------------------------------------------
 .../ignite/schema/pojo/PojoCodeGenerator.java   |  59 ++---
 .../org/apache/ignite/schema/ui/Controls.java   |  43 ++-
 .../java/org/apache/ignite/schema/ui/Field.java | 198 --------------
 .../org/apache/ignite/schema/ui/MessageBox.java |   6 +-
 .../apache/ignite/schema/ui/NamingDialog.java   | 160 ------------
 .../apache/ignite/schema/ui/PojoDescriptor.java | 117 +++++++++
 .../org/apache/ignite/schema/ui/PojoField.java  | 217 ++++++++++++++++
 .../apache/ignite/schema/ui/SchemaLoadApp.java  | 260 ++++++++-----------
 8 files changed, 507 insertions(+), 553 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0b45f249/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 b1eac78..e29508b 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
@@ -2,7 +2,7 @@
 
 package org.apache.ignite.schema.pojo;
 
-import org.gridgain.grid.cache.query.*;
+import org.apache.ignite.schema.ui.*;
 
 import java.io.*;
 import java.util.*;
@@ -63,16 +63,15 @@ public class PojoCodeGenerator {
     /**
      * Generate java class code.
      *
+     * @param pojo POJO descriptor.
+     * @param key {@code true} if key class should be generated.
      * @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, boolean constructor) throws IOException {
-        if (descs.isEmpty())
-            throw new IllegalStateException("List of type descriptors is 
empty.");
+    private static void generateCode(PojoDescriptor pojo, boolean key, String 
pkg, File pkgFolder, boolean constructor)
+        throws IOException {
+        String type = key ? pojo.keyClassName() : pojo.valueClassName();
 
         Collection<String> src = new ArrayList<>(256);
 
@@ -96,12 +95,14 @@ public class PojoCodeGenerator {
 
         add0(src, "");
 
+        List<PojoField> fields = pojo.fields();
+
         // Fields.
-        for (GridCacheQueryTypeDescriptor desc : descs) {
-            String fldName = desc.getJavaName();
+        for (PojoField field : fields) {
+            String fldName = field.javaName();
 
             add1(src, "/** Value for " + fldName + ". */");
-            add1(src, "private " + desc.getJavaType().getSimpleName() + " " + 
fldName + ";");
+            add1(src, "private " + field.javaTypeName() + " " + fldName + ";");
             add0(src, "");
         }
 
@@ -121,17 +122,17 @@ public class PojoCodeGenerator {
             add1(src, " */");
             add1(src, "public " + type + "(");
 
-            Iterator<GridCacheQueryTypeDescriptor> it = descs.iterator();
+            Iterator<PojoField> it = fields.iterator();
 
             while (it.hasNext()) {
-                GridCacheQueryTypeDescriptor desc = it.next();
+                PojoField field = it.next();
 
-                add2(src, desc.getJavaType().getSimpleName() + " " + 
desc.getJavaName() + (it.hasNext() ? "," : ""));
+                add2(src, field.javaTypeName() + " " + field.javaName() + 
(it.hasNext() ? "," : ""));
             }
             add1(src, ") {");
 
-            for (GridCacheQueryTypeDescriptor desc : descs)
-                add2(src, String.format("this.%1$s = %1$s;", 
desc.getJavaName()));
+            for (PojoField field : fields)
+                add2(src, String.format("this.%1$s = %1$s;", 
field.javaName()));
 
             add1(src, "}");
 
@@ -139,10 +140,10 @@ public class PojoCodeGenerator {
         }
 
         // Methods.
-        for (GridCacheQueryTypeDescriptor desc : descs) {
-            String fldName = desc.getJavaName();
+        for (PojoField field : fields) {
+            String fldName = field.javaName();
 
-            String fldType = desc.getJavaType().getSimpleName();
+            String fldType = field.javaTypeName();
 
             String mtdName = capitalizeFirst(fldName);
 
@@ -183,10 +184,10 @@ public class PojoCodeGenerator {
 
         add2(src, String.format("%1$s that = (%1$s)o;", type));
 
-        for (GridCacheQueryTypeDescriptor desc : descs) {
+        for (PojoField field : fields) {
             add0(src, "");
             add2(src, String.format("if (%1$s != null ? 
!%1$s.equals(that.%1$s) : that.%1$s != null)",
-                desc.getJavaName()));
+                field.javaName()));
             add3(src, "return false;");
         }
 
@@ -199,16 +200,16 @@ public class PojoCodeGenerator {
         add1(src, "/** {@inheritDoc} */");
         add1(src, "@Override public int hashCode() {");
 
-        Iterator<GridCacheQueryTypeDescriptor> it = descs.iterator();
+        Iterator<PojoField> it = fields.iterator();
 
-        add2(src, String.format("int res = %1$s != null ? %1$s.hashCode() : 
0;", it.next().getJavaName()));
+        add2(src, String.format("int res = %1$s != null ? %1$s.hashCode() : 
0;", it.next().javaName()));
 
         if (it.hasNext()) {
             add0(src, "");
 
             while (it.hasNext())
                 add2(src, String.format("res = 31 * res + (%1$s != null ? 
%1$s.hashCode() : 0);",
-                    it.next().getJavaName()));
+                    it.next().javaName()));
         }
 
         add0(src, "");
@@ -221,8 +222,8 @@ public class PojoCodeGenerator {
         add1(src, "@Override public String toString() {");
         add2(src, "return \"" + type + " [\" + ");
 
-        for (GridCacheQueryTypeDescriptor desc : descs)
-            add3(src, String.format("\" %1$s=\" + %1$s +", 
desc.getJavaName()));
+        for (PojoField field : fields)
+            add3(src, String.format("\" %1$s=\" + %1$s +", field.javaName()));
 
         add3(src, "\"]\";");
         add1(src, "}");
@@ -238,21 +239,21 @@ public class PojoCodeGenerator {
     /**
      * Generate source code for type by its metadata.
      *
-     * @param meta Type metadata.
+     * @param pojo POJO descriptor.
      * @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, boolean constructor)
+    public static void generate(PojoDescriptor pojo, 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, constructor);
+        generateCode(pojo, true, pkg, pkgFolder, constructor);
 
-        generateCode(pkg, meta.getType(), meta.getValueDescriptors(), 
pkgFolder, constructor);
+        generateCode(pojo, false, pkg, pkgFolder, constructor);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0b45f249/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Controls.java
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Controls.java 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Controls.java
index 0bda823..6e416ce 100644
--- 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Controls.java
+++ 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Controls.java
@@ -139,17 +139,34 @@ public class Controls {
     }
 
     /**
+     * Sets control tooltip if needed.
+     *
+     * @param ctrl Target control.
+     * @param tip Tooltip text.
+     * @return Control itself for method chaining.
+     */
+    public static <T extends Control> T tooltip(T ctrl, String tip) {
+        if (!tip.isEmpty())
+            ctrl.setTooltip(new Tooltip(tip));
+
+        return ctrl;
+    }
+
+    /**
      * Create button with text only.
      *
      * @param text Button text.
+     * @param tip Tooltip text.
      * @param onAct Button action.
      * @return New {@code Button} instance.
      */
-    public static Button button(String text, EventHandler<ActionEvent> onAct) {
+    public static Button button(String text, String tip, 
EventHandler<ActionEvent> onAct) {
         Button btn = new Button(text);
 
         btn.setOnAction(onAct);
 
+        tooltip(btn, tip);
+
         return btn;
     }
 
@@ -166,7 +183,8 @@ public class Controls {
 
         btn.setGraphic(icon);
         btn.setOnAction(onAct);
-        btn.setTooltip(new Tooltip(tip));
+
+        tooltip(btn, tip);
 
         return btn;
     }
@@ -175,11 +193,12 @@ public class Controls {
      * Create pane with buttons.
      *
      * @param alignment Alignment of buttons.
+     * @param dfltPadding If {@code true} than set default padding for pane.
      * @param btns Buttons that will be added to pane.
      * @return New {@code HBox} instance with buttons.
      */
-    public static Pane buttonsPane(Pos alignment, Button... btns) {
-        HBox hb = hBox(10, true, btns);
+    public static Pane buttonsPane(Pos alignment, boolean dfltPadding, 
Button... btns) {
+        HBox hb = hBox(10, dfltPadding, btns);
 
         hb.setAlignment(alignment);
 
@@ -197,24 +216,23 @@ public class Controls {
     public static CheckBox checkBox(String text, String tip, boolean sel) {
         CheckBox ch = new CheckBox(text);
 
-        ch.setTooltip(new Tooltip(tip));
         ch.setSelected(sel);
 
+        tooltip(ch, tip);
+
         return ch;
     }
 
     /**
      * Create text field.
      *
-     * @param txt Textual content of this text field.
      * @param tip Tooltip text.
      * @return New {@code TextField} instance.
      */
-    public static TextField textField(String txt, String tip) {
+    public static TextField textField(String tip) {
         TextField tf = new TextField();
 
-        tf.setText(txt);
-        tf.setTooltip(new Tooltip(tip));
+        tooltip(tf, tip);
 
         return tf;
     }
@@ -246,7 +264,7 @@ public class Controls {
     public static PasswordField passwordField(String tip) {
         PasswordField pf = new PasswordField();
 
-        pf.setTooltip(new Tooltip(tip));
+        tooltip(pf, tip);
 
         return pf;
     }
@@ -283,10 +301,7 @@ public class Controls {
         int minWidth, int maxWidth) {
         TableColumn<S, T> col = new TableColumn<>();
 
-        Label tipLb = new Label(colName);
-        tipLb.setTooltip(new Tooltip(tip));
-
-        col.setGraphic(tipLb);
+        col.setGraphic(tooltip(new Label(colName), tip));
 
         col.setSortable(false);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0b45f249/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Field.java
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Field.java 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Field.java
deleted file mode 100644
index 26edc7a..0000000
--- a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/Field.java
+++ /dev/null
@@ -1,198 +0,0 @@
-package org.apache.ignite.schema.ui;
-
-import javafx.beans.property.*;
-import org.gridgain.grid.cache.query.*;
-
-import static java.sql.Types.*;
-
-/**
- * Field descriptor with properties for JavaFX GUI bindings.
- */
-public class Field {
-    /** If this field belongs to primary key. */
-    private final BooleanProperty key;
-
-    /** Field name for POJO. */
-    private final StringProperty javaName;
-
-    /** Field type for POJO. */
-    private final StringProperty javaTypeName;
-
-    /** Field name in database. */
-    private final StringProperty dbName;
-
-    /** Field type in database. */
-    private final StringProperty dbTypeName;
-
-    /** Field type descriptor. */
-    private final GridCacheQueryTypeDescriptor desc;
-
-    /**
-     * @param key {@code true} if this field belongs to primary key.
-     * @param desc Field type descriptor.
-     */
-    public Field(boolean key, GridCacheQueryTypeDescriptor desc) {
-        this.desc = desc;
-        this.key = new SimpleBooleanProperty(key);
-        javaName = new SimpleStringProperty(desc.getJavaName());
-        javaTypeName = new SimpleStringProperty(desc.getJavaType().getName());
-        dbName = new SimpleStringProperty(desc.getDbName());
-        dbTypeName = new SimpleStringProperty(jdbcTypeName(desc.getDbType()));
-    }
-
-    /**
-     * Copy constructor.
-     *
-     * @param src Source field to copy from.
-     */
-    public Field(Field src) {
-        desc = src.desc;
-        key = new SimpleBooleanProperty(src.isKey());
-        javaName = new SimpleStringProperty(desc.getJavaName());
-        javaTypeName = new SimpleStringProperty(desc.getJavaType().getName());
-        dbName = new SimpleStringProperty(desc.getDbName());
-        dbTypeName = new SimpleStringProperty(jdbcTypeName(desc.getDbType()));
-    }
-
-    /**
-     * @param jdbcType String name for JDBC type.
-     */
-    private static String jdbcTypeName(int jdbcType) {
-        switch (jdbcType) {
-            case BIT:
-                return "BIT";
-            case TINYINT:
-                return "TINYINT";
-            case SMALLINT:
-                return "SMALLINT";
-            case INTEGER:
-                return "INTEGER";
-            case BIGINT:
-                return "BIGINT";
-            case FLOAT:
-                return "FLOAT";
-            case REAL:
-                return "REAL";
-            case DOUBLE:
-                return "DOUBLE";
-            case NUMERIC:
-                return "NUMERIC";
-            case DECIMAL:
-                return "DECIMAL";
-            case CHAR:
-                return "CHAR";
-            case VARCHAR:
-                return "VARCHAR";
-            case LONGVARCHAR:
-                return "LONGVARCHAR";
-            case DATE:
-                return "DATE";
-            case TIME:
-                return "TIME";
-            case TIMESTAMP:
-                return "TIMESTAMP";
-            case BINARY:
-                return "BINARY";
-            case VARBINARY:
-                return "VARBINARY";
-            case LONGVARBINARY:
-                return "LONGVARBINARY";
-            case NULL:
-                return "NULL";
-            case OTHER:
-                return "OTHER";
-            case JAVA_OBJECT:
-                return "JAVA_OBJECT";
-            case DISTINCT:
-                return "DISTINCT";
-            case STRUCT:
-                return "STRUCT";
-            case ARRAY:
-                return "ARRAY";
-            case BLOB:
-                return "BLOB";
-            case CLOB:
-                return "CLOB";
-            case REF:
-                return "REF";
-            case DATALINK:
-                return "DATALINK";
-            case BOOLEAN:
-                return "BOOLEAN";
-            case ROWID:
-                return "ROWID";
-            case NCHAR:
-                return "NCHAR";
-            case NVARCHAR:
-                return "NVARCHAR";
-            case LONGNVARCHAR:
-                return "LONGNVARCHAR";
-            case NCLOB:
-                return "NCLOB";
-            case SQLXML:
-                return "SQLXML";
-            default:
-                return "Unknown";
-        }
-    }
-
-    /**
-     * @return {@code true} if this field belongs to primary key.
-     */
-    public boolean isKey() {
-        return key.get();
-    }
-
-    /**
-     * @return Type descriptor.
-     */
-    public GridCacheQueryTypeDescriptor descriptor() {
-        desc.setJavaName(javaName.get());
-
-        return desc;
-    }
-
-    /**
-     * @return Boolean property support for {@code key} property.
-     */
-    public BooleanProperty keyProperty() {
-        return key;
-    }
-
-    /**
-     * @return String property support for {@code javaName} property.
-     */
-    public StringProperty javaNameProperty() {
-        return javaName;
-    }
-
-    /**
-     * @return String property support for {@code javaTypeName} property.
-     */
-    public StringProperty javaTypeNameProperty() {
-        return javaTypeName;
-    }
-
-    /**
-     * @return String property support for {@code dbName} property.
-     */
-    public StringProperty dbNameProperty() {
-        return dbName;
-    }
-
-    /**
-     * @return String property support for {@code dbName} property.
-     */
-    public StringProperty dbTypeNameProperty() {
-        return dbTypeName;
-    }
-
-    /**
-     * @param other Some other instance of {@code Field} to compare with.
-     * @return {@code true} if fields are not the same.
-     */
-    public boolean diff(Field other) {
-        // User can change via GUI only key and java name properties.
-        return isKey() != other.isKey() || 
!javaName.get().equals(other.javaName.get());
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0b45f249/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
index 4f4d248..7b43050 100644
--- 
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
@@ -84,13 +84,13 @@ public class MessageBox extends ModalDialog {
         if (type == MessageType.CONFIRM) {
             res = NO_OPTION;
 
-            btns.getChildren().addAll(button("Yes", new 
EventHandler<ActionEvent>() {
+            btns.getChildren().addAll(button("Yes", "", new 
EventHandler<ActionEvent>() {
                 @Override public void handle(ActionEvent e) {
                     res = YES_OPTION;
 
                     close();
                 }
-            }), button("No", new EventHandler<ActionEvent>() {
+            }), button("No", "", new EventHandler<ActionEvent>() {
                 @Override public void handle(ActionEvent e) {
                     res = NO_OPTION;
 
@@ -99,7 +99,7 @@ public class MessageBox extends ModalDialog {
             }));
         }
         else
-            btns.getChildren().add(button("OK", new 
EventHandler<ActionEvent>() {
+            btns.getChildren().add(button("OK", "", new 
EventHandler<ActionEvent>() {
                 @Override public void handle(ActionEvent e) {
                     close();
                 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0b45f249/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/NamingDialog.java
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/NamingDialog.java
 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/NamingDialog.java
deleted file mode 100644
index e9d7fd5..0000000
--- 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/NamingDialog.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/* @java.file.header */
-
-package org.apache.ignite.schema.ui;
-
-import javafx.event.*;
-import javafx.geometry.*;
-import javafx.scene.control.*;
-import javafx.scene.layout.*;
-import javafx.stage.*;
-
-import static org.apache.ignite.schema.ui.Controls.*;
-
-/**
- * Dialog with custom naming options.
- */
-public class NamingDialog extends ModalDialog {
-    /** */
-    private final TextField prefixTf;
-
-    /** */
-    private final TextField suffixTf;
-
-    /** */
-    private final CheckBox regexCh;
-
-    /** */
-    private final TextField ptrnTf;
-
-    /** */
-    private final TextField replaceTf;
-
-    /** */
-    private boolean ok;
-
-    /**
-     * Create naming dialog.
-     *
-     * @param owner Owner window.
-     * @param prefix Prefix.
-     * @param suffix Suffix.
-     * @param regex {@code true} if regular expression should be applied to DB 
names.
-     * @param ptrn Regular expression pattern.
-     * @param replace Text to replace.
-     */
-    public NamingDialog(final Stage owner, final String prefix, String suffix, 
boolean regex, final String ptrn,
-        final String replace) {
-        super(owner, 350, 270);
-
-        setTitle("Custom Naming");
-        initStyle(StageStyle.UTILITY);
-        initModality(Modality.APPLICATION_MODAL);
-        initOwner(owner);
-        setResizable(false);
-
-        GridPaneEx pane = paneEx();
-
-        pane.addColumn();
-        pane.addColumn(200, 200, Double.MAX_VALUE, Priority.ALWAYS);
-
-        prefixTf = pane.addLabeled("Prefix:", textField(prefix, "Optional text 
to add before each DB name"));
-
-        suffixTf = pane.addLabeled("Suffix:", textField(suffix, "Optional text 
to add after each DB name"));
-
-        regexCh = pane.add(checkBox("Regular expression",
-            "If selected than DB names will be processed with specified 
pattern", regex), 2);
-
-        ptrnTf = pane.addLabeled("Pattern:", textField(ptrn, "Regular 
expression pattern. For example: (.*)-(.*)"));
-        ptrnTf.setDisable(!regex);
-
-        replaceTf = pane.addLabeled("Replace with:", textField(replace, 
"Replace text. For example: $1_$2"));
-        replaceTf.setDisable(!regex);
-
-        regexCh.setOnAction(new EventHandler<ActionEvent>() {
-            @Override public void handle(ActionEvent evt) {
-                boolean f = !regexCh.isSelected();
-
-                ptrnTf.setDisable(f);
-                replaceTf.setDisable(f);
-            }
-        });
-
-        Pane btns = buttonsPane(Pos.BOTTOM_CENTER,
-            button("OK", new EventHandler<ActionEvent>() {
-                @Override public void handle(ActionEvent evt) {
-                    if (regexCh.isSelected()) {
-                        if (pattern().isEmpty()) {
-                            MessageBox.warningDialog(owner, "Regular 
expression pattern should not be empty!");
-
-                            ptrnTf.requestFocus();
-
-                            return;
-                        }
-
-                        if (replace().isEmpty()) {
-                            MessageBox.warningDialog(owner, "Replace 
expression should not be empty!");
-
-                            replaceTf.requestFocus();
-
-                            return;
-                        }
-                    }
-
-                    ok = true;
-
-                    close();
-                }
-            }),
-            button("Cancel", new EventHandler<ActionEvent>() {
-                @Override public void handle(ActionEvent evt) {
-                    close();
-                }
-            }));
-
-        setScene(scene(borderPane(null, pane, btns, null, null)));
-    }
-
-    /**
-     * @return Prefix.
-     */
-    public String prefix() {
-        return prefixTf.getText().trim();
-    }
-
-    /**
-     * @return Suffix.
-     */
-    public String suffix() {
-        return suffixTf.getText().trim();
-    }
-
-    /**
-     * @return {@code true} if regexp should be applied to DB name.
-     */
-    public boolean regexp() {
-        return regexCh.isSelected();
-    }
-
-    /**
-     * @return Regex pattern.
-     */
-    public String pattern() {
-        return ptrnTf.getText().trim();
-    }
-
-    /**
-     * @return Replace text.
-     */
-    public String replace() {
-        return replaceTf.getText().trim();
-    }
-
-    /**
-     * Show modal dialog.
-     */
-    public boolean showDialog() {
-        showModal();
-
-        return ok;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0b45f249/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/PojoDescriptor.java
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/PojoDescriptor.java
 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/PojoDescriptor.java
new file mode 100644
index 0000000..6a560f1
--- /dev/null
+++ 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/PojoDescriptor.java
@@ -0,0 +1,117 @@
+/* @java.file.header */
+
+/*  _________        _____ __________________        _____
+ *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
+ *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
+ *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
+ *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
+ */
+
+package org.apache.ignite.schema.ui;
+
+import javafx.collections.*;
+
+import java.util.*;
+
+/**
+ * Descriptor for java type.
+ */
+public class PojoDescriptor {
+    /** Name for key class. */
+    private String keyClsName;
+
+    /** Previous name for key class. */
+    private final String keyClsNamePrev;
+
+    /** Name for value class. */
+    private String valClsName;
+
+    /** Previous name for value class. */
+    private final String valClsNamePrev;
+
+    /** Java class fields. */
+    private final ObservableList<PojoField> fields;
+
+    /** Java class fields. */
+    private final List<PojoField> fieldsPrev;
+
+    /**
+     * Type descriptor.
+     *
+     * @param type Type name.
+     * @param fields List of POJO fields descriptor.
+     */
+    public PojoDescriptor(String type, List<PojoField> fields) {
+        keyClsName = type + "Key";
+        keyClsNamePrev = keyClsName;
+
+        valClsName = type;
+        valClsNamePrev = valClsName;
+
+        this.fields = FXCollections.observableList(fields);
+
+        fieldsPrev = new ArrayList<>(fields.size());
+
+        for(PojoField field : fields)
+            fieldsPrev.add(new PojoField(field));
+    }
+
+    /**
+     * @return {@code true} if descriptor was changed by user via GUI.
+     */
+    public boolean changed() {
+        boolean diff = !keyClsName.equals(keyClsNamePrev) || 
!valClsName.equals(valClsNamePrev);
+
+        if (!diff)
+            for(int i = 0; i < fields.size(); i++) {
+                PojoField cur = fields.get(i);
+                PojoField prev = fieldsPrev.get(i);
+
+                // User can change via GUI only key and java name properties.
+                if (cur.key() != prev.key() || 
!cur.javaName().equals(prev.javaName())) {
+                    diff = true;
+
+                    break;
+                }
+            }
+
+        return diff;
+    }
+
+    /**
+     * Reset changes made by user.
+     */
+    public void reset() {
+        keyClsName = keyClsNamePrev;
+        valClsName = valClsNamePrev;
+
+        for(int i = 0; i < fields.size(); i++) {
+            PojoField cur = fields.get(i);
+            PojoField prev = fieldsPrev.get(i);
+
+            cur.key(prev.key());
+            cur.javaName(prev.javaName());
+        }
+    }
+
+    /**
+     * @return Name for key class.
+     */
+    public String keyClassName() {
+        return keyClsName;
+    }
+
+    /**
+     * @return Name for value class.
+     */
+    public String valueClassName() {
+        return valClsName;
+    }
+
+    /**
+     * @return Java class fields.
+     */
+    public ObservableList<PojoField> fields() {
+        return fields;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0b45f249/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/PojoField.java
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/PojoField.java 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/PojoField.java
new file mode 100644
index 0000000..9fa471b
--- /dev/null
+++ 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/ui/PojoField.java
@@ -0,0 +1,217 @@
+package org.apache.ignite.schema.ui;
+
+import javafx.beans.property.*;
+import org.gridgain.grid.cache.query.*;
+
+import static java.sql.Types.*;
+
+/**
+ * Field descriptor with properties for JavaFX GUI bindings.
+ */
+public class PojoField {
+    /** If this field belongs to primary key. */
+    private final BooleanProperty key;
+
+    /** Field name for POJO. */
+    private final StringProperty javaName;
+
+    /** Field type for POJO. */
+    private final StringProperty javaTypeName;
+
+    /** Field name in database. */
+    private final StringProperty dbName;
+
+    /** Field type in database. */
+    private final StringProperty dbTypeName;
+
+    /** Field type descriptor. */
+    private final GridCacheQueryTypeDescriptor desc;
+
+    /**
+     * @param key {@code true} if this field belongs to primary key.
+     * @param desc Field type descriptor.
+     */
+    public PojoField(boolean key, GridCacheQueryTypeDescriptor desc) {
+        this.desc = desc;
+        this.key = new SimpleBooleanProperty(key);
+        javaName = new SimpleStringProperty(desc.getJavaName());
+        javaTypeName = new SimpleStringProperty(desc.getJavaType().getName());
+        dbName = new SimpleStringProperty(desc.getDbName());
+        dbTypeName = new SimpleStringProperty(jdbcTypeName(desc.getDbType()));
+    }
+
+    /**
+     * Copy constructor.
+     *
+     * @param src Source field to copy from.
+     */
+    public PojoField(PojoField src) {
+        desc = src.desc;
+        key = new SimpleBooleanProperty(src.key());
+        javaName = new SimpleStringProperty(desc.getJavaName());
+        javaTypeName = new SimpleStringProperty(desc.getJavaType().getName());
+        dbName = new SimpleStringProperty(desc.getDbName());
+        dbTypeName = new SimpleStringProperty(jdbcTypeName(desc.getDbType()));
+    }
+
+    /**
+     * @param jdbcType String name for JDBC type.
+     */
+    private static String jdbcTypeName(int jdbcType) {
+        switch (jdbcType) {
+            case BIT:
+                return "BIT";
+            case TINYINT:
+                return "TINYINT";
+            case SMALLINT:
+                return "SMALLINT";
+            case INTEGER:
+                return "INTEGER";
+            case BIGINT:
+                return "BIGINT";
+            case FLOAT:
+                return "FLOAT";
+            case REAL:
+                return "REAL";
+            case DOUBLE:
+                return "DOUBLE";
+            case NUMERIC:
+                return "NUMERIC";
+            case DECIMAL:
+                return "DECIMAL";
+            case CHAR:
+                return "CHAR";
+            case VARCHAR:
+                return "VARCHAR";
+            case LONGVARCHAR:
+                return "LONGVARCHAR";
+            case DATE:
+                return "DATE";
+            case TIME:
+                return "TIME";
+            case TIMESTAMP:
+                return "TIMESTAMP";
+            case BINARY:
+                return "BINARY";
+            case VARBINARY:
+                return "VARBINARY";
+            case LONGVARBINARY:
+                return "LONGVARBINARY";
+            case NULL:
+                return "NULL";
+            case OTHER:
+                return "OTHER";
+            case JAVA_OBJECT:
+                return "JAVA_OBJECT";
+            case DISTINCT:
+                return "DISTINCT";
+            case STRUCT:
+                return "STRUCT";
+            case ARRAY:
+                return "ARRAY";
+            case BLOB:
+                return "BLOB";
+            case CLOB:
+                return "CLOB";
+            case REF:
+                return "REF";
+            case DATALINK:
+                return "DATALINK";
+            case BOOLEAN:
+                return "BOOLEAN";
+            case ROWID:
+                return "ROWID";
+            case NCHAR:
+                return "NCHAR";
+            case NVARCHAR:
+                return "NVARCHAR";
+            case LONGNVARCHAR:
+                return "LONGNVARCHAR";
+            case NCLOB:
+                return "NCLOB";
+            case SQLXML:
+                return "SQLXML";
+            default:
+                return "Unknown";
+        }
+    }
+
+    /**
+     * @return {@code true} if this field belongs to primary key.
+     */
+    public boolean key() {
+        return key.get();
+    }
+
+    /**
+     * @param pk {@code true} if this field belongs to primary key.
+     */
+    public void key(boolean pk) {
+        key.set(pk);
+    }
+
+    /**
+     * @return POJO field java name.
+     */
+    public String javaName() {
+        return javaName.get();
+    }
+
+    /**
+     * @param name POJO field java name.
+     */
+    public void javaName(String name) {
+        javaName.set(name);
+    }
+
+    /**
+     * @return POJO field java type name.
+     */
+    public String javaTypeName() {
+        return javaTypeName.get();
+    }
+
+    /**
+     * @return Type descriptor.
+     */
+    public GridCacheQueryTypeDescriptor descriptor() {
+        desc.setJavaName(javaName.get());
+
+        return desc;
+    }
+
+    /**
+     * @return Boolean property support for {@code key} property.
+     */
+    public BooleanProperty keyProperty() {
+        return key;
+    }
+
+    /**
+     * @return String property support for {@code javaName} property.
+     */
+    public StringProperty javaNameProperty() {
+        return javaName;
+    }
+
+    /**
+     * @return String property support for {@code javaTypeName} property.
+     */
+    public StringProperty javaTypeNameProperty() {
+        return javaTypeName;
+    }
+
+    /**
+     * @return String property support for {@code dbName} property.
+     */
+    public StringProperty dbNameProperty() {
+        return dbName;
+    }
+
+    /**
+     * @return String property support for {@code dbName} property.
+     */
+    public StringProperty dbTypeNameProperty() {
+        return dbTypeName;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/0b45f249/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 33f9b96..f5cc705 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
@@ -30,7 +30,6 @@ import java.util.regex.*;
 
 import static javafx.embed.swing.SwingFXUtils.*;
 import static org.apache.ignite.schema.ui.Controls.*;
-import static org.apache.ignite.schema.util.SchemaUtils.*;
 
 /**
  * Schema load application.
@@ -80,6 +79,12 @@ public class SchemaLoadApp extends Application {
     private CheckBoxTreeItem<String> rootItem;
 
     /** */
+    private TextField ptrnTf;
+
+    /** */
+    private TextField replaceTf;
+
+    /** */
     private TextField outFolderTf;
 
     /** */
@@ -95,15 +100,9 @@ public class SchemaLoadApp extends Application {
     private CheckBox xmlSingleFileCh;
 
     /** */
-    private CheckBox dfltNamingCh;
-
-    /** */
     private CheckBox openFolderCh;
 
     /** */
-    private Button btnNaming;
-
-    /** */
     private GridPaneEx genPnl;
 
     /** */
@@ -112,32 +111,14 @@ public class SchemaLoadApp extends Application {
     /** */
     private ProgressIndicator pi;
 
-    /** */
-    private String prefix;
-
-    /** */
-    private String suffix;
-
-    /** */
-    private boolean regex;
-
-    /** */
-    private String ptrn;
-
-    /** */
-    private String replace;
-
     /** Map with types metadata. */
     private Map<String, Map<String, GridCacheQueryTypeMetadata>> metas;
 
-    /** Map with fields descriptors. */
-    private Map<String, Map<String, ObservableList<Field>>> fields = 
Collections.emptyMap();
-
-    /** Map with previous fields descriptors, needed to detect for changes 
made by user. */
-    private Map<String, Map<String, ObservableList<Field>>> fieldsPrev = 
Collections.emptyMap();
+    /** Map with schema - table - POJO descriptors. */
+    private Map<String, Map<String, PojoDescriptor>> pojos = 
Collections.emptyMap();
 
     /** */
-    private static final ObservableList<Field> NO_DATA = 
FXCollections.emptyObservableList();
+    private static final ObservableList<PojoField> NO_DATA = 
FXCollections.emptyObservableList();
 
     /** */
     private final Map<String, Driver> drivers = new HashMap<>();
@@ -212,19 +193,16 @@ public class SchemaLoadApp extends Application {
                     metas = DbMetadataParser.parse(conn);
                 }
 
-                fields = new TreeMap<>();
-                fieldsPrev = new TreeMap<>();
+                pojos = new TreeMap<>();
 
                 for (Map.Entry<String, Map<String, 
GridCacheQueryTypeMetadata>> meta : metas.entrySet()) {
                     String schema = meta.getKey();
 
                     Map<String, GridCacheQueryTypeMetadata> tbls = 
meta.getValue();
 
-                    Map<String, ObservableList<Field>> tblsFields = new 
TreeMap<>();
-                    Map<String, ObservableList<Field>> tblsFieldsPrev = new 
TreeMap<>();
+                    Map<String, PojoDescriptor> tblsPojo = new TreeMap<>();
 
-                    fields.put(schema, tblsFields);
-                    fieldsPrev.put(schema, tblsFieldsPrev);
+                    pojos.put(schema, tblsPojo);
 
                     for (Map.Entry<String, GridCacheQueryTypeMetadata> tbl : 
tbls.entrySet()) {
                         GridCacheQueryTypeMetadata type = tbl.getValue();
@@ -233,21 +211,15 @@ public class SchemaLoadApp extends Application {
 
                         Collection<GridCacheQueryTypeDescriptor> vals = 
type.getValueDescriptors();
 
-                        List<Field> tblFields = new ArrayList<>(keys.size() + 
vals.size());
+                        List<PojoField> tblFields = new 
ArrayList<>(keys.size() + vals.size());
 
                         for (GridCacheQueryTypeDescriptor key : keys)
-                            tblFields.add(new Field(true, key));
+                            tblFields.add(new PojoField(true, key));
 
                         for (GridCacheQueryTypeDescriptor val : vals)
-                            tblFields.add(new Field(false, val));
-
-                        List<Field> tblFieldsPrev = new 
ArrayList<>(tblFields.size());
-
-                        for (Field fld : tblFields)
-                            tblFieldsPrev.add(new Field(fld));
+                            tblFields.add(new PojoField(false, val));
 
-                        tblsFields.put(type.getTableName(), 
FXCollections.observableList(tblFields));
-                        tblsFieldsPrev.put(type.getTableName(), 
FXCollections.observableList(tblFieldsPrev));
+                        tblsPojo.put(type.getTableName(), new 
PojoDescriptor(type.getType(), tblFields));
                     }
                 }
 
@@ -273,7 +245,7 @@ public class SchemaLoadApp extends Application {
 
                 rootItem.getChildren().clear();
 
-                for (Map.Entry<String, Map<String, ObservableList<Field>>> 
schema : fields.entrySet()) {
+                for (Map.Entry<String, Map<String, PojoDescriptor>> schema : 
pojos.entrySet()) {
                     CheckBoxTreeItem<String> schemaItem = 
addCheckBoxTreeItem(rootItem, schema.getKey());
 
                     for (String tbl : schema.getValue().keySet())
@@ -360,7 +332,7 @@ public class SchemaLoadApp extends Application {
 
                             GridCacheQueryTypeMetadata meta = 
metas.get(scheme).get(tbl);
 
-                            Collection<Field> tblFields = 
fields.get(scheme).get(tbl);
+                            PojoDescriptor pojo = pojos.get(scheme).get(tbl);
 
                             // Create a copy of metadata for modifications 
before processing.
                             meta = new GridCacheQueryTypeMetadata(meta);
@@ -369,34 +341,11 @@ public class SchemaLoadApp extends Application {
 
                             Collection<GridCacheQueryTypeDescriptor> vals = 
new ArrayList<>();
 
-                            boolean customNaming = !dfltNamingCh.isSelected();
-
                             // Fill list with key and value type descriptors.
-                            for (Field fld : tblFields) {
+                            for (PojoField fld : pojo.fields()) {
                                 GridCacheQueryTypeDescriptor desc = 
fld.descriptor();
 
-                                if (customNaming) {
-                                    String javaName = desc.getJavaName();
-
-                                    if (!prefix.isEmpty())
-                                        javaName = prefix + 
capitalizeFirst(javaName);
-
-                                    if (!suffix.isEmpty())
-                                        javaName += suffix;
-
-                                    try {
-                                        if (regex)
-                                            javaName = 
javaName.replaceAll(ptrn, replace);
-                                    }
-                                    catch (PatternSyntaxException e) {
-                                        throw new 
IllegalStateException("Failed to apply regexp [" + ptrn + "] to [" +
-                                            javaName + "]", e);
-                                    }
-
-                                    desc.setJavaName(javaName);
-                                }
-
-                                if (fld.isKey()) {
+                                if (fld.key()) {
                                     keys.add(desc);
 
                                     if (include)
@@ -419,7 +368,7 @@ public class SchemaLoadApp extends Application {
                             if (!singleXml)
                                 XmlTransformer.transform(pkg, meta, new 
File(destFolder, meta.getType() + ".xml"));
 
-                            PojoCodeGenerator.generate(meta, outFolder, pkg, 
constructor);
+                            PojoCodeGenerator.generate(pojo, outFolder, pkg, 
constructor);
                         }
                     }
                 }
@@ -492,33 +441,29 @@ public class SchemaLoadApp extends Application {
      * @return Panel with control buttons.
      */
     private Pane createButtonsPane() {
-        prevBtn = button("Prev", new EventHandler<ActionEvent>() {
+        prevBtn = button("Prev", "", new EventHandler<ActionEvent>() {
             @Override public void handle(ActionEvent evt) {
                 prev();
             }
         });
 
-        nextBtn = button("Next", new EventHandler<ActionEvent>() {
+        nextBtn = button("Next", "", new EventHandler<ActionEvent>() {
             @Override public void handle(ActionEvent evt) {
                 next();
             }
         });
 
-        return buttonsPane(Pos.BOTTOM_RIGHT, prevBtn, nextBtn);
+        return buttonsPane(Pos.BOTTOM_RIGHT, true, prevBtn, nextBtn);
     }
 
     /**
      * @return {@code true} if some changes were made to fields metadata.
      */
     private boolean changed() {
-        for (Map.Entry<String, Map<String, ObservableList<Field>>> schema : 
fields.entrySet()) {
-            for (Map.Entry<String, ObservableList<Field>> tbl : 
schema.getValue().entrySet()) {
-                ObservableList<Field> cur = tbl.getValue();
-                ObservableList<Field> prev = 
fieldsPrev.get(schema.getKey()).get(tbl.getKey());
-
-                for (int i = 0; i < cur.size(); i++)
-                    if (cur.get(i).diff(prev.get(i)))
-                        return true;
+        for (Map.Entry<String, Map<String, PojoDescriptor>> schema : 
pojos.entrySet()) {
+            for (Map.Entry<String, PojoDescriptor> pojo : 
schema.getValue().entrySet()) {
+                if (pojo.getValue().changed())
+                    return true;
             }
         }
 
@@ -639,9 +584,9 @@ public class SchemaLoadApp extends Application {
         connPnl.addColumn(100, 100, Double.MAX_VALUE, Priority.ALWAYS);
         connPnl.addColumn(35, 35, 35, Priority.NEVER);
 
-        jdbcDrvJarTf = connPnl.addLabeled("Driver JAR:", textField("", "Path 
to driver jar"));
+        jdbcDrvJarTf = connPnl.addLabeled("Driver JAR:", textField("Path to 
driver jar"));
 
-        connPnl.add(button("...", new EventHandler<ActionEvent>() {
+        connPnl.add(button("...", "",  new EventHandler<ActionEvent>() {
             /** {@inheritDoc} */
             @Override public void handle(ActionEvent evt) {
                 FileChooser fc = new FileChooser();
@@ -657,11 +602,11 @@ public class SchemaLoadApp extends Application {
             }
         }));
 
-        jdbcDrvClsTf = connPnl.addLabeled("JDBC Driver:", textField("", "Class 
name for JDBC driver"), 2);
+        jdbcDrvClsTf = connPnl.addLabeled("JDBC Driver:", textField("Class 
name for JDBC driver"), 2);
 
-        jdbcUrlTf = connPnl.addLabeled("JDBC URL:", textField("", "JDBC URL of 
the database connection string"), 2);
+        jdbcUrlTf = connPnl.addLabeled("JDBC URL:", textField("JDBC URL of the 
database connection string"), 2);
 
-        userTf = connPnl.addLabeled("User:", textField("", "User name"), 2);
+        userTf = connPnl.addLabeled("User:", textField("User name"), 2);
 
         pwdTf = connPnl.addLabeled("Password:", passwordField("User 
password"), 2);
 
@@ -683,13 +628,13 @@ public class SchemaLoadApp extends Application {
         genPnl.addRow(100, 100, Double.MAX_VALUE, Priority.ALWAYS);
         genPnl.addRows(6);
 
-        TableColumn<Field, Boolean> keyCol = tableColumn("Key", "key",
+        TableColumn<PojoField, Boolean> keyCol = tableColumn("Key", "key",
             "If checked then this field will be part of key object", 70, 70);
 
-        keyCol.setCellFactory(new Callback<TableColumn<Field, Boolean>, 
TableCell<Field, Boolean>>() {
+        keyCol.setCellFactory(new Callback<TableColumn<PojoField, Boolean>, 
TableCell<PojoField, Boolean>>() {
             /** {@inheritDoc} */
-            @Override public TableCell<Field, Boolean> call(TableColumn<Field, 
Boolean> col) {
-                CheckBoxTableCell<Field, Boolean> cell = new 
CheckBoxTableCell<>();
+            @Override public TableCell<PojoField, Boolean> 
call(TableColumn<PojoField, Boolean> col) {
+                CheckBoxTableCell<PojoField, Boolean> cell = new 
CheckBoxTableCell<>();
 
                 cell.setAlignment(Pos.CENTER);
 
@@ -699,19 +644,19 @@ public class SchemaLoadApp extends Application {
 
         keyCol.setEditable(true);
 
-        TableColumn<Field, String> dbNameCol = tableColumn("DB Name", 
"dbName", "Field name in database", 100, 0);
+        TableColumn<PojoField, String> dbNameCol = tableColumn("DB Name", 
"dbName", "Field name in database", 100, 0);
 
-        TableColumn<Field, String> dbTypeNameCol = tableColumn("DB Type", 
"dbTypeName", "Field type in database", 100, 0);
+        TableColumn<PojoField, String> dbTypeNameCol = tableColumn("DB Type", 
"dbTypeName", "Field type in database", 100, 0);
 
-        TableColumn<Field, String> javaNameCol = tableColumn("Ignite Name", 
"javaName",
+        TableColumn<PojoField, String> javaNameCol = tableColumn("Ignite 
Name", "javaName",
             "Field name in POJO class", 100, 0);
-        javaNameCol.setCellFactory(TextFieldTableCell.<Field>forTableColumn());
+        
javaNameCol.setCellFactory(TextFieldTableCell.<PojoField>forTableColumn());
         javaNameCol.setEditable(true);
 
-        TableColumn<Field, String> javaTypeNameCol = tableColumn("Java Type", 
"javaTypeName",
+        TableColumn<PojoField, String> javaTypeNameCol = tableColumn("Java 
Type", "javaTypeName",
             "Field java type in POJO class", 100, 0);
 
-        final TableView<Field> tbl = new TableView<>();
+        final TableView<PojoField> tbl = new TableView<>();
 
         tbl.setMinHeight(50);
         tbl.setPlaceholder(text("Select table to see table columns", 0));
@@ -723,7 +668,7 @@ public class SchemaLoadApp extends Application {
         tbl.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
         tbl.setEditable(true);
 
-        tbl.getColumns().addListener(new ListChangeListener<TableColumn<Field, 
?>>() {
+        tbl.getColumns().addListener(new 
ListChangeListener<TableColumn<PojoField, ?>>() {
             private boolean suspended;
 
             /** {@inheritDoc} */
@@ -746,12 +691,12 @@ public class SchemaLoadApp extends Application {
         final Button upBtn = button(imageView("navigate_up", 24), "Move 
selected row up",
             new EventHandler<ActionEvent>() {
                 @Override public void handle(ActionEvent evt) {
-                    TableView.TableViewSelectionModel<Field> selMdl = 
tbl.getSelectionModel();
+                    TableView.TableViewSelectionModel<PojoField> selMdl = 
tbl.getSelectionModel();
 
                     int selIdx = selMdl.getSelectedIndex();
 
                     if (selIdx > 0) {
-                        ObservableList<Field> items = tbl.getItems();
+                        ObservableList<PojoField> items = tbl.getItems();
 
                         int newId = selIdx - 1;
 
@@ -770,11 +715,11 @@ public class SchemaLoadApp extends Application {
         final Button downBtn = button(imageView("navigate_down", 24), "Move 
selected row down",
             new EventHandler<ActionEvent>() {
                 @Override public void handle(ActionEvent evt) {
-                    TableView.TableViewSelectionModel<Field> selMdl = 
tbl.getSelectionModel();
+                    TableView.TableViewSelectionModel<PojoField> selMdl = 
tbl.getSelectionModel();
 
                     int selIdx = selMdl.getSelectedIndex();
 
-                    ObservableList<Field> items = tbl.getItems();
+                    ObservableList<PojoField> items = tbl.getItems();
 
                     int maxIdx = items.size() - 1;
 
@@ -813,7 +758,7 @@ public class SchemaLoadApp extends Application {
             @Override public void changed(ObservableValue<? extends 
TreeItem<String>> val, TreeItem<String> oldItem,
                 TreeItem<String> newItem) {
                 if (newItem != null && newItem.getParent() != null && 
newItem.isLeaf()) {
-                    
tbl.setItems(fields.get(newItem.getParent().getValue()).get(newItem.getValue()));
+                    
tbl.setItems(pojos.get(newItem.getParent().getValue()).get(newItem.getValue()).fields());
                     tbl.getSelectionModel().select(0);
                 }
                 else {
@@ -827,11 +772,65 @@ public class SchemaLoadApp extends Application {
 
         genPnl.add(splitPane(tree, borderPane(null, tbl, null, null, vBox(10, 
upBtn, downBtn)), 0.6), 3);
 
-        pkgTf = genPnl.addLabeled("Package:", textField("", "Package that will 
be used for POJOs generation"), 2);
+        genPnl.add(new Label("Replace Ignite name for selected table:"), 3);
+
+        ptrnTf = genPnl.addLabeled("    Regexp pattern:", textField("Regular 
expression pattern. For example: ((\\w+)"), 2);
+        replaceTf = genPnl.addLabeled("    Replace with:", textField("Replace 
text. For example: $1_Suffix"), 2);
+
+        genPnl.add(buttonsPane(Pos.BOTTOM_RIGHT, false,
+            button("Rename", "Execute replace of Ignite names with provided 
regular expression pattern",
+                new EventHandler<ActionEvent>() {
+                    /** {@inheritDoc} */
+                    @Override public void handle(ActionEvent evt) {
+                        ObservableList<PojoField> fields = tbl.getItems();
+
+                        if (fields.isEmpty()) {
+                            MessageBox.warningDialog(owner, "Please select 
table to rename Ignite names!");
+
+                            return;
+                        }
 
-        outFolderTf = genPnl.addLabeled("Output Folder:", textField("", 
"Output folder for POJOs and XML files"));
+                    String ptrn = ptrnTf.getText().trim();
 
-        genPnl.add(button("...", new EventHandler<ActionEvent>() {
+                    if (ptrn.isEmpty()) {
+                        MessageBox.warningDialog(owner, "Regular expression 
pattern should not be empty!");
+
+                        ptrnTf.requestFocus();
+
+                        return;
+                    }
+
+                    String replace = replaceTf.getText().trim();
+
+                    if (replace.isEmpty()) {
+                        MessageBox.warningDialog(owner, "Replace expression 
should not be empty!");
+
+                        replaceTf.requestFocus();
+
+                        return;
+                    }
+
+                    try {
+                        for(PojoField field : fields)
+                            field.javaName(field.javaName().replaceAll(ptrn, 
replace));
+                    }
+                    catch (PatternSyntaxException e) {
+                        MessageBox.errorDialog(owner, "Failed to apply 
regexp!", e);
+                    }
+                }
+            }),
+            button("Revert", "Revert all changes to Ignite name to default 
ones", new EventHandler<ActionEvent>() {
+                /** {@inheritDoc} */
+                @Override public void handle(ActionEvent evt) {
+                    // TODO: CODE: implement.
+                }
+            })), 3);
+
+        pkgTf = genPnl.addLabeled("Package:", textField("Package that will be 
used for POJOs generation"), 2);
+
+        outFolderTf = genPnl.addLabeled("Output Folder:", textField("Output 
folder for POJOs and XML files"));
+
+        genPnl.add(button("...", "", new EventHandler<ActionEvent>() {
             /** {@inheritDoc} */
             @Override public void handle(ActionEvent evt) {
                 DirectoryChooser dc = new DirectoryChooser();
@@ -852,33 +851,6 @@ public class SchemaLoadApp extends Application {
         xmlSingleFileCh = genPnl.add(checkBox("Write all configurations to a 
single XML file",
             "If selected then all configurations will be saved into the file 
'Ignite.xml'", true), 3);
 
-        dfltNamingCh = checkBox("Default naming conversions",
-            "If selected then DB names will be converted to default java 
names", true);
-
-        btnNaming = button("Configure Naming", new EventHandler<ActionEvent>() 
{
-            /** {@inheritDoc} */
-            @Override public void handle(ActionEvent evt) {
-                NamingDialog dlg = new NamingDialog(owner, prefix, suffix, 
regex, ptrn, replace);
-
-                if (dlg.showDialog()) {
-                    prefix = dlg.prefix();
-                    suffix = dlg.suffix();
-                    regex = dlg.regexp();
-                    ptrn = dlg.pattern();
-                    replace = dlg.replace();
-                }
-            }
-        });
-
-        dfltNamingCh.setOnAction(new EventHandler<ActionEvent>() {
-            /** {@inheritDoc} */
-            @Override public void handle(ActionEvent evt) {
-                btnNaming.setDisable(dfltNamingCh.isSelected());
-            }
-        });
-
-        genPnl.add(hBox(10, false, dfltNamingCh, btnNaming), 
3).setAlignment(Pos.CENTER_LEFT);
-
         openFolderCh = genPnl.add(checkBox("Reveal output folder",
             "Open output folder in system file manager after generation 
complete", true), 3);
 
@@ -899,7 +871,7 @@ public class SchemaLoadApp extends Application {
             image("ignite", 64),
             image("ignite", 128));
 
-        pi = progressIndicator(100);
+        pi = progressIndicator(50);
 
         createGeneratePane();
 
@@ -957,14 +929,8 @@ public class SchemaLoadApp extends Application {
 
         xmlSingleFileCh.setSelected(userPrefs.getBoolean("xml.single", true));
 
-        dfltNamingCh.setSelected(userPrefs.getBoolean("naming.default", true));
-        prefix = userPrefs.get("naming.prefix", "");
-        suffix = userPrefs.get("naming.suffix", "");
-        regex = userPrefs.getBoolean("naming.regex", false);
-        ptrn = userPrefs.get("naming.pattern", "");
-        replace = userPrefs.get("naming.replace", "");
-
-        btnNaming.setDisable(dfltNamingCh.isSelected());
+        ptrnTf.setText(userPrefs.get("naming.pattern", ""));
+        replaceTf.setText(userPrefs.get("naming.replace", ""));
 
         primaryStage.show();
     }
@@ -995,12 +961,8 @@ public class SchemaLoadApp extends Application {
 
         userPrefs.putBoolean("xml.single", xmlSingleFileCh.isSelected());
 
-        userPrefs.putBoolean("naming.default", dfltNamingCh.isSelected());
-        userPrefs.put("naming.prefix", prefix);
-        userPrefs.put("naming.suffix", suffix);
-        userPrefs.putBoolean("naming.regex", regex);
-        userPrefs.put("naming.pattern", ptrn);
-        userPrefs.put("naming.replace", replace);
+        userPrefs.put("naming.pattern", ptrnTf.getText());
+        userPrefs.put("naming.replace", replaceTf.getText());
     }
 
     /**

Reply via email to