You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/01/07 15:56:28 UTC

incubator-ignite git commit: # IGNITE-32 WIP: Implemented save and restore preferences. Implemented check for empty keys/values.

Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-32 232c70d10 -> 711dc4a9e


# IGNITE-32 WIP: Implemented save and restore preferences. Implemented check for empty keys/values.


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

Branch: refs/heads/ignite-32
Commit: 711dc4a9e3a582ff81b3db746dc5472633217b01
Parents: 232c70d
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jan 7 21:56:28 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jan 7 21:56:28 2015 +0700

----------------------------------------------------------------------
 .../ignite/schema/pojo/PojoCodeGenerator.java   |   2 +-
 .../apache/ignite/schema/ui/SchemaLoadApp.java  | 227 +++++++++++++------
 2 files changed, 160 insertions(+), 69 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/711dc4a9/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 3376006..e1b20bb 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
@@ -72,7 +72,7 @@ public class PojoCodeGenerator {
     private static void generateCode(String pkg, String type, Collection<GridCacheQueryTypeDescriptor> descs,
         File pkgFolder, boolean constructor) throws IOException {
         if (descs.isEmpty())
-            return; // TODO IGNITE-32 UI should pass non metadata.
+            throw new IllegalStateException("List of type descriptors is empty.");
 
         Collection<String> src = new ArrayList<>(256);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/711dc4a9/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 148cfb3..9cf3dca 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
@@ -19,13 +19,13 @@ import org.apache.ignite.schema.db.*;
 import org.apache.ignite.schema.pojo.*;
 import org.apache.ignite.schema.xml.*;
 import org.gridgain.grid.cache.query.*;
-import org.gridgain.grid.util.typedef.*;
 import org.gridgain.grid.util.typedef.internal.*;
 
 import java.io.*;
 import java.net.*;
 import java.sql.*;
 import java.util.*;
+import java.util.prefs.*;
 
 import static javafx.embed.swing.SwingFXUtils.*;
 import static org.apache.ignite.schema.ui.Controls.*;
@@ -109,6 +109,13 @@ public class SchemaLoadApp extends Application {
         }
 
         /**
+         * @return Type descriptor.
+         */
+        public GridCacheQueryTypeDescriptor descriptor() {
+            return desc;
+        }
+
+        /**
          * @return Boolean property support for {@code key} property.
          */
         public BooleanProperty keyProperty() {
@@ -130,9 +137,6 @@ public class SchemaLoadApp extends Application {
         }
     }
 
-    /** TODO: IGNITE 32 remove before release */
-    private static final String PATH = "C:/Temp/ignite";
-
     /** */
     private Stage owner;
 
@@ -149,13 +153,13 @@ public class SchemaLoadApp extends Application {
     private Button nextBtn;
 
     /** */
-    private TextField jdbcTf;
+    private TextField jdbcDrvJarTf;
 
     /** */
-    private TextField drvTf;
+    private TextField jdbcDrvClsTf;
 
     /** */
-    private TextField urlTf;
+    private TextField jdbcUrlTf;
 
     /** */
     private TextField userTf;
@@ -167,16 +171,16 @@ public class SchemaLoadApp extends Application {
     private GridPaneEx connPnl;
 
     /** */
-    private CheckBoxTreeItem<String> rootItem;
+    private TreeView<String> tree;
 
     /** */
-    private TableView<Field> tbl;
+    private CheckBoxTreeItem<String> rootItem;
 
     /** */
-    private TextField pkgTf;
+    private TextField outFolderTf;
 
     /** */
-    private TextField outFolderTf;
+    private TextField pkgTf;
 
     /** */
     private CheckBox pojoConstructorCh;
@@ -188,12 +192,18 @@ public class SchemaLoadApp extends Application {
     private CheckBox xmlSingleFileCh;
 
     /** */
-    private GridPaneEx genPnl;
+    private CheckBox dfltNamingCh;
 
     /** */
-    private LinkedHashMap<String, LinkedHashMap<String, GridCacheQueryTypeMetadata>> metas;
+    private Button btnNaming;
 
     /** */
+    private GridPaneEx genPnl;
+
+    /** Map with types metadata. */
+    private LinkedHashMap<String, LinkedHashMap<String, GridCacheQueryTypeMetadata>> metas;
+
+    /** Map with fields descriptors. */
     private Map<String, Map<String, Collection<Field>>> fields;
 
     /** */
@@ -276,17 +286,54 @@ public class SchemaLoadApp extends Application {
             boolean constructor = pojoConstructorCh.isSelected();
             boolean include = pojoIncludeKeysCh.isSelected();
 
+            // Generate POJO and XML.
             for (TreeItem<String> schemeItem : rootItem.getChildren()) {
                 for (TreeItem<String> tblItem : schemeItem.getChildren()) {
                     if (((CheckBoxTreeItem)tblItem).isSelected()) {
-                        GridCacheQueryTypeMetadata meta = metas.get(schemeItem.getValue()).get(tblItem.getValue());
+                        String scheme = schemeItem.getValue();
+                        String tbl = tblItem.getValue();
+
+                        GridCacheQueryTypeMetadata meta = metas.get(scheme).get(tbl);
+
+                        Collection<Field> tblFields = fields.get(scheme).get(tbl);
 
-                        if (include) {
-                            meta = new GridCacheQueryTypeMetadata(meta);
+                        // Create a copy of metadata for modifications before processing.
+                        meta = new GridCacheQueryTypeMetadata(meta);
 
-                            meta.setValueDescriptors(F.concat(false, meta.getKeyDescriptors(), meta.getValueDescriptors()));
+                        Collection<GridCacheQueryTypeDescriptor> keys = new ArrayList<>();
+
+                        Collection<GridCacheQueryTypeDescriptor> vals = new ArrayList<>();
+
+                        // Fill list with key and value type descriptors.
+                        for (Field fld : tblFields) {
+                            GridCacheQueryTypeDescriptor desc = fld.descriptor();
+
+                            if (fld.isKey()) {
+                                keys.add(desc);
+
+                                if (include)
+                                    vals.add(desc);
+                            }
+                            else
+                                vals.add(desc);
+                        }
+
+                        if (keys.isEmpty()) {
+                            tree.getSelectionModel().select(tblItem);
+
+                            throw new IllegalStateException("No key fields specified for type: " + tbl);
+                        }
+
+                        if (vals.isEmpty()) {
+                            tree.getSelectionModel().select(tblItem);
+
+                            throw new IllegalStateException("No value fields specified for type: " + tbl);
                         }
 
+                        meta.setKeyDescriptors(keys);
+
+                        meta.setValueDescriptors(vals);
+
                         all.add(meta);
 
                         XmlTransformer.transform(pkg, meta, new File(destFolder, meta.getType() + ".xml"));
@@ -386,17 +433,17 @@ public class SchemaLoadApp extends Application {
      * @throws SQLException if connection failed.
      */
     private Connection connect() throws SQLException {
-        String drvCls = jdbcTf.getText();
+        String drvCls = jdbcDrvClsTf.getText();
 
         Driver drv = drivers.get(drvCls);
 
         if (drv == null) {
-            String path = drvTf.getText().trim();
+            String path = jdbcDrvJarTf.getText().trim();
 
             if (path.isEmpty())
                 throw new IllegalStateException("Driver jar file name is not specified");
 
-            File drvJar = new File(drvTf.getText());
+            File drvJar = new File(jdbcDrvJarTf.getText());
 
             if (!drvJar.exists())
                 throw new IllegalStateException("Driver jar file is not found");
@@ -427,7 +474,7 @@ public class SchemaLoadApp extends Application {
         if (!pwd.isEmpty())
             info.put("password", pwd);
 
-        return drv.connect(urlTf.getText(), info);
+        return drv.connect(jdbcUrlTf.getText(), info);
     }
 
     /**
@@ -440,8 +487,7 @@ public class SchemaLoadApp extends Application {
         connPnl.addColumn(100, 100, Double.MAX_VALUE, Priority.ALWAYS);
         connPnl.addColumn(35, 35, 35, Priority.NEVER);
 
-        drvTf = connPnl.addLabeled("Driver JAR:", textField());
-        drvTf.setText("C:/GridGain/h2/bin/h2-1.3.176.jar");
+        jdbcDrvJarTf = connPnl.addLabeled("Driver JAR:", textField());
 
         connPnl.add(button("...", new EventHandler<ActionEvent>() {
             /** {@inheritDoc} */
@@ -453,18 +499,15 @@ public class SchemaLoadApp extends Application {
                 File drvJar = fc.showOpenDialog(owner);
 
                 if (drvJar != null)
-                    drvTf.setText(drvJar.getAbsolutePath());
+                    jdbcDrvJarTf.setText(drvJar.getAbsolutePath());
             }
         }));
 
-        jdbcTf = connPnl.addLabeled("JDBC Driver:", textField(), 2);
-        jdbcTf.setText("org.h2.Driver");
+        jdbcDrvClsTf = connPnl.addLabeled("JDBC Driver:", textField(), 2);
 
-        urlTf = connPnl.addLabeled("URL:", textField(), 2);
-        urlTf.setText("jdbc:h2:c:/Temp/test");
+        jdbcUrlTf = connPnl.addLabeled("URL:", textField(), 2);
 
         userTf = connPnl.addLabeled("User:", textField(), 2);
-        userTf.setText("sa");
 
         pwdTf = connPnl.addLabeled("Password:", new PasswordField(), 2);
     }
@@ -482,21 +525,6 @@ public class SchemaLoadApp extends Application {
         genPnl.addRow(100, 100, Double.MAX_VALUE, Priority.ALWAYS);
         genPnl.addRows(6);
 
-        rootItem = new CheckBoxTreeItem<>("Database");
-        rootItem.setExpanded(true);
-
-        TreeView<String> tree = new TreeView<>(rootItem);
-
-        tree.setCellFactory(CheckBoxTreeCell.<String>forTreeView());
-
-        tree.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() {
-            /** {@inheritDoc} */
-            @Override public void changed(ObservableValue<? extends TreeItem<String>> val, TreeItem<String> oldItem,
-                TreeItem<String> newItem) {
-                onTreeSelectionChanged(newItem);
-            }
-        });
-
         TableColumn<Field, Boolean> keyCol = tableColumn("Key", "key", 70, 70);
 
         keyCol.setCellFactory(new Callback<TableColumn<Field, Boolean>, TableCell<Field, Boolean>>() {
@@ -516,21 +544,39 @@ public class SchemaLoadApp extends Application {
 
         TableColumn<Field, String> javaNameCol = tableColumn("Ignite Name", "javaName", 0, 0);
 
-        tbl = new TableView<>();
+        final TableView<Field> tbl = new TableView<>();
 
         tbl.getColumns().addAll(keyCol, dbNameCol, javaNameCol);
         tbl.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
         tbl.setEditable(true);
 
+        rootItem = new CheckBoxTreeItem<>("Database");
+        rootItem.setExpanded(true);
+
+        tree = new TreeView<>(rootItem);
+
+        tree.setCellFactory(CheckBoxTreeCell.<String>forTreeView());
+
+        tree.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() {
+            /** {@inheritDoc} */
+            @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(FXCollections.observableArrayList(
+                        fields.get(newItem.getParent().getValue()).get(newItem.getValue())));
+                else
+                    tbl.setItems(noData);
+
+            }
+        });
+
         genPnl.add(splitPane(tree, tbl, 0.6), 3);
 
         pkgTf = genPnl.addLabeled("Package:", textField());
-        pkgTf.setText("org.apache.ignite");
 
         genPnl.wrap();
 
         outFolderTf = genPnl.addLabeled("Output Folder:", textField());
-        outFolderTf.setText(PATH);
 
         genPnl.add(button("...", new EventHandler<ActionEvent>() {
             /** {@inheritDoc} */
@@ -553,10 +599,10 @@ public class SchemaLoadApp extends Application {
         xmlSingleFileCh = genPnl.add(checkBox("Write all configurations to a single file",
             "If selected then all configurations will be saved into the file 'ignite.xml'", true), 3);
 
-        final CheckBox dfltNamingCh = checkBox("Default naming conversions",
+        dfltNamingCh = checkBox("Default naming conversions",
             "If selected then DB names will be converted to default java names", true);
 
-        final Button btnNaming = button("Configure Naming", new EventHandler<ActionEvent>() {
+        btnNaming = button("Configure Naming", new EventHandler<ActionEvent>() {
             /** {@inheritDoc} */
             @Override public void handle(ActionEvent evt) {
                 MessageBox.informationDialog(owner, "TODO: implement.");
@@ -575,19 +621,6 @@ public class SchemaLoadApp extends Application {
         genPnl.add(hBox(10, false, dfltNamingCh, btnNaming), 3);
     }
 
-    /**
-     * Action on tree selection changed.
-     *
-     * @param item Selected tree item.
-     */
-    private void onTreeSelectionChanged(TreeItem<String> item) {
-        if (item != null && item.getParent() != null && item.isLeaf())
-            tbl.setItems(FXCollections.observableArrayList(
-                fields.get(item.getParent().getValue()).get(item.getValue())));
-        else
-            tbl.setItems(noData);
-    }
-
     /** {@inheritDoc} */
     @Override public void start(Stage primaryStage) {
         System.setProperty("prism.lcdtext", "false");
@@ -633,19 +666,77 @@ public class SchemaLoadApp extends Application {
 
         primaryStage.setScene(scene);
 
-        int w = 400;
-        primaryStage.setWidth(w);
-        primaryStage.setMinWidth(w);
+        primaryStage.setWidth(400);
+        primaryStage.setMinWidth(400);
 
-        int h = 600;
-        primaryStage.setHeight(h);
-        primaryStage.setMinHeight(h);
+        primaryStage.setHeight(600);
+        primaryStage.setMinHeight(600);
 
         prev();
 
+        Preferences userPrefs = Preferences.userNodeForPackage(getClass());
+
+        // Restore window pos and size.
+        double x = userPrefs.getDouble("window.x", 100);
+        double y = userPrefs.getDouble("window.y", 100);
+        double w = userPrefs.getDouble("window.width", 400);
+        double h = userPrefs.getDouble("window.height", 600);
+
+        // Ensure that window fit any available screen.
+        if (!Screen.getScreensForRectangle(x, y, w, h).isEmpty()) {
+            if (x > 0)
+                primaryStage.setX(x);
+
+            if (y > 0)
+                primaryStage.setY(y);
+
+            primaryStage.setWidth(w);
+            primaryStage.setHeight(h);
+        }
+
+        // Restore connection pane settings.
+        jdbcDrvJarTf.setText(userPrefs.get("jdbc.driver.jar", "h2.jar"));
+        jdbcDrvClsTf.setText(userPrefs.get("jdbc.driver.class", "org.h2.Driver"));
+        jdbcUrlTf.setText(userPrefs.get("jdbc.url", "jdbc:h2:~/test"));
+        userTf.setText(userPrefs.get("jdbc.user", "sa"));
+
+        // Restore generation pane settings.
+        outFolderTf.setText(userPrefs.get("out.folder", "~/temp"));
+        pkgTf.setText(userPrefs.get("pojo.package", "org.apache.ignite"));
+        pojoIncludeKeysCh.setSelected(userPrefs.getBoolean("pojo.include", false));
+        pojoConstructorCh.setSelected(userPrefs.getBoolean("pojo.constructor", false));
+        xmlSingleFileCh.setSelected(userPrefs.getBoolean("xml.single", true));
+        dfltNamingCh.setSelected(userPrefs.getBoolean("naming.default", true));
+        btnNaming.setDisable(dfltNamingCh.isSelected());
+
         primaryStage.show();
     }
 
+    /** {@inheritDoc} */
+    @Override public void stop() throws Exception {
+        Preferences userPrefs = Preferences.userNodeForPackage(getClass());
+
+        // Save window pos and size.
+        userPrefs.putDouble("window.x", owner.getX());
+        userPrefs.putDouble("window.y", owner.getY());
+        userPrefs.putDouble("window.width", owner.getWidth());
+        userPrefs.putDouble("window.height", owner.getHeight());
+
+        // Save connection pane settings.
+        userPrefs.put("jdbc.driver.jar", jdbcDrvJarTf.getText());
+        userPrefs.put("jdbc.driver.class", jdbcDrvClsTf.getText());
+        userPrefs.put("jdbc.url", jdbcUrlTf.getText());
+        userPrefs.put("jdbc.user", userTf.getText());
+
+        // Save generation pane settings.
+        userPrefs.put("out.folder", outFolderTf.getText());
+        userPrefs.put("pojo.package", pkgTf.getText());
+        userPrefs.putBoolean("pojo.include", pojoIncludeKeysCh.isSelected());
+        userPrefs.putBoolean("pojo.constructor", pojoConstructorCh.isSelected());
+        userPrefs.putBoolean("xml.single", xmlSingleFileCh.isSelected());
+        userPrefs.putBoolean("naming.default", dfltNamingCh.isSelected());
+    }
+
     /**
      * Schema load utility launcher.
      *