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()); } /**