Return-Path: X-Original-To: apmail-ignite-commits-archive@minotaur.apache.org Delivered-To: apmail-ignite-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id CB59217B4C for ; Wed, 7 Jan 2015 14:56:49 +0000 (UTC) Received: (qmail 70027 invoked by uid 500); 7 Jan 2015 14:56:50 -0000 Delivered-To: apmail-ignite-commits-archive@ignite.apache.org Received: (qmail 69996 invoked by uid 500); 7 Jan 2015 14:56:50 -0000 Mailing-List: contact commits-help@ignite.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.incubator.apache.org Delivered-To: mailing list commits@ignite.incubator.apache.org Received: (qmail 69986 invoked by uid 99); 7 Jan 2015 14:56:50 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 07 Jan 2015 14:56:50 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,T_RP_MATCHES_RCVD X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO mail.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with SMTP; Wed, 07 Jan 2015 14:56:48 +0000 Received: (qmail 66767 invoked by uid 99); 7 Jan 2015 14:56:28 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 07 Jan 2015 14:56:28 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 09AB2A2687B; Wed, 7 Jan 2015 14:56:28 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sboikov@apache.org To: commits@ignite.incubator.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: incubator-ignite git commit: # IGNITE-32 WIP: Implemented save and restore preferences. Implemented check for empty keys/values. Date: Wed, 7 Jan 2015 14:56:28 +0000 (UTC) X-Virus-Checked: Checked by ClamAV on apache.org 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 Authored: Wed Jan 7 21:56:28 2015 +0700 Committer: AKuznetsov 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 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 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 rootItem; + private TreeView tree; /** */ - private TableView tbl; + private CheckBoxTreeItem 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> metas; + private Button btnNaming; /** */ + private GridPaneEx genPnl; + + /** Map with types metadata. */ + private LinkedHashMap> metas; + + /** Map with fields descriptors. */ private Map>> fields; /** */ @@ -276,17 +286,54 @@ public class SchemaLoadApp extends Application { boolean constructor = pojoConstructorCh.isSelected(); boolean include = pojoIncludeKeysCh.isSelected(); + // Generate POJO and XML. for (TreeItem schemeItem : rootItem.getChildren()) { for (TreeItem 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 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 keys = new ArrayList<>(); + + Collection 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() { /** {@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 tree = new TreeView<>(rootItem); - - tree.setCellFactory(CheckBoxTreeCell.forTreeView()); - - tree.getSelectionModel().selectedItemProperty().addListener(new ChangeListener>() { - /** {@inheritDoc} */ - @Override public void changed(ObservableValue> val, TreeItem oldItem, - TreeItem newItem) { - onTreeSelectionChanged(newItem); - } - }); - TableColumn keyCol = tableColumn("Key", "key", 70, 70); keyCol.setCellFactory(new Callback, TableCell>() { @@ -516,21 +544,39 @@ public class SchemaLoadApp extends Application { TableColumn javaNameCol = tableColumn("Ignite Name", "javaName", 0, 0); - tbl = new TableView<>(); + final TableView 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.forTreeView()); + + tree.getSelectionModel().selectedItemProperty().addListener(new ChangeListener>() { + /** {@inheritDoc} */ + @Override public void changed(ObservableValue> val, TreeItem oldItem, + TreeItem 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() { /** {@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() { + btnNaming = button("Configure Naming", new EventHandler() { /** {@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 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. *