# IGNITE-32: refactored preferences to properties.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/bbd393ca Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/bbd393ca Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/bbd393ca Branch: refs/heads/ignite-181 Commit: bbd393ca6201d2f2609eee3da8027beb471376a2 Parents: f5fec4b Author: AKuznetsov <akuznet...@gridgain.com> Authored: Mon Feb 9 10:20:04 2015 +0700 Committer: AKuznetsov <akuznet...@gridgain.com> Committed: Mon Feb 9 10:20:04 2015 +0700 ---------------------------------------------------------------------- .../apache/ignite/schema/ui/SchemaLoadApp.java | 245 +++++++++++++------ 1 file changed, 174 insertions(+), 71 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/bbd393ca/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 cd34a10..f4f76e9 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 @@ -37,7 +37,6 @@ import java.net.*; import java.sql.*; import java.util.*; import java.util.concurrent.*; -import java.util.prefs.*; import static javafx.embed.swing.SwingFXUtils.*; import static org.apache.ignite.schema.ui.Controls.*; @@ -92,6 +91,22 @@ public class SchemaLoadApp extends Application { } } + /** Default presets for popular databases. */ + private final Preset[] presets = { + new Preset("h2", "H2 Database", "h2.jar", "org.h2.Driver", "jdbc:h2:[database]", "sa"), + new Preset("db2", "DB2", "db2jcc4.jar", "com.ibm.db2.jcc.DB2Driver", "jdbc:db2://[host]:[port]/[database]", + "db2admin"), + new Preset("oracle", "Oracle", "ojdbc6.jar", "oracle.jdbc.OracleDriver", + "jdbc:oracle:thin:@[host]:[port]:[database]", "system"), + new Preset("mysql", "MySQL", "mysql-connector-java-5-bin.jar", "com.mysql.jdbc.Driver", + "jdbc:mysql://[host]:[port]/[database]", "root"), + new Preset("mssql", "Microsoft SQL Server", "sqljdbc41.jar", "com.microsoft.sqlserver.jdbc.SQLServerDriver", + "jdbc:sqlserver://[host]:[port][;databaseName=database]", "sa"), + new Preset("posgresql", "PostgreSQL", "postgresql-9.3.jdbc4.jar", "org.postgresql.Driver", + "jdbc:postgresql://[host]:[port]/[database]", "sa"), + new Preset("custom", "Custom server...", "custom-jdbc.jar", "org.custom.Driver", "jdbc:custom", "sa") + }; + /** */ private Stage owner; @@ -122,22 +137,6 @@ public class SchemaLoadApp extends Application { /** */ private ComboBox<Preset> rdbmsCb; - /** Default presets for popular databases. */ - private final Preset[] presets = { - new Preset("h2", "H2 Database", "h2.jar", "org.h2.Driver", "jdbc:h2:[database]", "sa"), - new Preset("db2", "DB2", "db2jcc4.jar", "com.ibm.db2.jcc.DB2Driver", "jdbc:db2://[host]:[port]/[database]", - "db2admin"), - new Preset("oracle", "Oracle", "ojdbc6.jar", "oracle.jdbc.OracleDriver", - "jdbc:oracle:thin:@[host]:[port]:[database]", "system"), - new Preset("mysql", "MySQL", "mysql-connector-java-5-bin.jar", "com.mysql.jdbc.Driver", - "jdbc:mysql://[host]:[port]/[database]", "root"), - new Preset("mssql", "Microsoft SQL Server", "sqljdbc41.jar", "com.microsoft.sqlserver.jdbc.SQLServerDriver", - "jdbc:sqlserver://[host]:[port][;databaseName=database]", "sa"), - new Preset("posgresql", "PostgreSQL", "postgresql-9.3.jdbc4.jar", "org.postgresql.Driver", - "jdbc:postgresql://[host]:[port]/[database]", "sa"), - new Preset("custom", "Custom server...", "custom-jdbc.jar", "org.custom.Driver", "jdbc:custom", "sa") - }; - /** */ private TextField jdbcDrvJarTf; @@ -210,7 +209,13 @@ public class SchemaLoadApp extends Application { /** */ private final Map<String, Driver> drivers = new HashMap<>(); - /** */ + /** Application preferences. */ + private final Properties prefs = new Properties(); + + /** File path for storing on local file system. */ + private final File prefsFile = new File(System.getProperty("user.home"), ".ignite-schema-load"); + + /** Empty POJO fields model. */ private static final ObservableList<PojoField> NO_FIELDS = FXCollections.emptyObservableList(); /** */ @@ -1114,10 +1119,108 @@ public class SchemaLoadApp extends Application { return res; } + /** + * Gets string property. + * + * @param key Property key. + * @param dflt Default value. + */ + private String getStringProp(String key, String dflt) { + String val = prefs.getProperty(key); + + if (val != null) + return val; + + return dflt; + } + + /** + * Sets string property. + * + * @param key Property key. + * @param val Value to set. + */ + private void setStringProp(String key, String val) { + prefs.put(key, val); + } + + /** + * Gets int property. + * + * @param key Property key. + * @param dflt Default value. + */ + private int getIntProp(String key, int dflt) { + String val = prefs.getProperty(key); + + if (val != null) + try { + return Integer.parseInt(val); + } + catch (NumberFormatException e) { + return dflt; + } + + return dflt; + } + + /** + * Sets int property. + * + * @param key Property key. + * @param val Value to set. + */ + private void setIntProp(String key, int val) { + prefs.put(key, String.valueOf(val)); + } + + /** + * Gets boolean property. + * + * @param key Property key. + * @param dflt Default value. + */ + private boolean getBoolProp(String key, boolean dflt) { + String val = prefs.getProperty(key); + + if (val != null) + return Boolean.parseBoolean(val); + + return dflt; + } + + /** + * Sets boolean property. + * + * @param key Property key. + * @param val Value to set. + */ + private void setBoolProp(String key, boolean val) { + prefs.put(key, String.valueOf(val)); + } + /** {@inheritDoc} */ @Override public void start(Stage primaryStage) { owner = primaryStage; + if (prefsFile.exists()) + try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(prefsFile))) { + prefs.load(in); + } + catch (IOException ignore) { + // No-op. + } + + // Restore presets. + for (Preset preset : presets) { + String key = "presets." + preset.pref + "."; + + preset.jar = getStringProp(key + "jar", preset.jar); + preset.drv = getStringProp(key + "drv", preset.drv); + preset.url = getStringProp(key + "url", preset.url); + preset.user = getStringProp(key + "user", preset.user); + } + primaryStage.setTitle("Apache Ignite Auto Schema Load Utility"); primaryStage.getIcons().addAll( @@ -1145,24 +1248,12 @@ public class SchemaLoadApp extends Application { prev(); - Preferences prefs = Preferences.userNodeForPackage(getClass()); - - // Restore presets. - for (Preset preset : presets) { - String key = "presets." + preset.pref + "."; - - preset.jar = prefs.get(key + "jar", preset.jar); - preset.drv = prefs.get(key + "drv", preset.drv); - preset.url = prefs.get(key + "url", preset.url); - preset.user = prefs.get(key + "user", preset.user); - } - // Restore window pos and size. - if (prefs.get("window.x", null) != null) { - double x = prefs.getDouble("window.x", 100); - double y = prefs.getDouble("window.y", 100); - double w = prefs.getDouble("window.width", 650); - double h = prefs.getDouble("window.height", 650); + if (prefs.getProperty("window.x") != null) { + int x = getIntProp("window.x", 100); + int y = getIntProp("window.y", 100); + int w = getIntProp("window.width", 650); + int h = getIntProp("window.height", 650); // Ensure that window fit any available screen. if (!Screen.getScreensForRectangle(x, y, w, h).isEmpty()) { @@ -1182,23 +1273,23 @@ public class SchemaLoadApp extends Application { String userHome = System.getProperty("user.home").replace('\\', '/'); // Restore connection pane settings. - rdbmsCb.getSelectionModel().select(prefs.getInt("jdbc.db.preset", 0)); - jdbcDrvJarTf.setText(prefs.get("jdbc.driver.jar", "h2.jar")); - jdbcDrvClsTf.setText(prefs.get("jdbc.driver.class", "org.h2.Driver")); - jdbcUrlTf.setText(prefs.get("jdbc.url", "jdbc:h2:" + userHome + "/ignite-schema-load/db")); - userTf.setText(prefs.get("jdbc.user", "sa")); + rdbmsCb.getSelectionModel().select(getIntProp("jdbc.db.preset", 0)); + jdbcDrvJarTf.setText(getStringProp("jdbc.driver.jar", "h2.jar")); + jdbcDrvClsTf.setText(getStringProp("jdbc.driver.class", "org.h2.Driver")); + jdbcUrlTf.setText(getStringProp("jdbc.url", "jdbc:h2:" + userHome + "/ignite-schema-load/db")); + userTf.setText(getStringProp("jdbc.user", "sa")); // Restore generation pane settings. - outFolderTf.setText(prefs.get("out.folder", userHome + "/ignite-schema-load/out")); + outFolderTf.setText(getStringProp("out.folder", userHome + "/ignite-schema-load/out")); - pkgTf.setText(prefs.get("pojo.package", "org.apache.ignite")); - pojoIncludeKeysCh.setSelected(prefs.getBoolean("pojo.include", true)); - pojoConstructorCh.setSelected(prefs.getBoolean("pojo.constructor", false)); + pkgTf.setText(getStringProp("pojo.package", "org.apache.ignite")); + pojoIncludeKeysCh.setSelected(getBoolProp("pojo.include", true)); + pojoConstructorCh.setSelected(getBoolProp("pojo.constructor", false)); - xmlSingleFileCh.setSelected(prefs.getBoolean("xml.single", true)); + xmlSingleFileCh.setSelected(getBoolProp("xml.single", true)); - regexTf.setText(prefs.get("naming.pattern", "(\\w+)")); - replaceTf.setText(prefs.get("naming.replace", "$1_SomeText")); + regexTf.setText(getStringProp("naming.pattern", "(\\w+)")); + replaceTf.setText(getStringProp("naming.replace", "$1_SomeText")); primaryStage.show(); } @@ -1209,51 +1300,63 @@ public class SchemaLoadApp extends Application { * @param preset Preset to save. */ private void savePreset(Preset preset) { - Preferences prefs = Preferences.userNodeForPackage(getClass()); - String key = "presets." + preset.pref + "."; preset.jar = jdbcDrvJarTf.getText(); - prefs.put(key + "jar", preset.jar); + setStringProp(key + "jar", preset.jar); preset.drv = jdbcDrvClsTf.getText(); - prefs.put(key + "drv", preset.drv); + setStringProp(key + "drv", preset.drv); preset.url = jdbcUrlTf.getText(); - prefs.put(key + "url", preset.url); + setStringProp(key + "url", preset.url); preset.user = userTf.getText(); - prefs.put(key + "user", preset.user); + setStringProp(key + "user", preset.user); + + savePreferences(); + } + + /** + * Save user preferences. + */ + private void savePreferences() { + try (FileOutputStream out = new FileOutputStream(prefsFile)) { + prefs.store(out, "Apache Ignite Schema Load Utility"); + } + catch (IOException e) { + MessageBox.errorDialog(owner, "Failed to save preferences!", e); + } } /** {@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()); + setIntProp("window.x", (int)owner.getX()); + setIntProp("window.y", (int)owner.getY()); + setIntProp("window.width", (int)owner.getWidth()); + setIntProp("window.height", (int)owner.getHeight()); // Save connection pane settings. - userPrefs.putInt("jdbc.db.preset", rdbmsCb.getSelectionModel().getSelectedIndex()); - 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()); + setIntProp("jdbc.db.preset", rdbmsCb.getSelectionModel().getSelectedIndex()); + setStringProp("jdbc.driver.jar", jdbcDrvJarTf.getText()); + setStringProp("jdbc.driver.class", jdbcDrvClsTf.getText()); + setStringProp("jdbc.url", jdbcUrlTf.getText()); + setStringProp("jdbc.user", userTf.getText()); // Save generation pane settings. - userPrefs.put("out.folder", outFolderTf.getText()); + setStringProp("out.folder", outFolderTf.getText()); + + setStringProp("pojo.package", pkgTf.getText()); + setBoolProp("pojo.include", pojoIncludeKeysCh.isSelected()); + setBoolProp("pojo.constructor", pojoConstructorCh.isSelected()); - userPrefs.put("pojo.package", pkgTf.getText()); - userPrefs.putBoolean("pojo.include", pojoIncludeKeysCh.isSelected()); - userPrefs.putBoolean("pojo.constructor", pojoConstructorCh.isSelected()); + setBoolProp("xml.single", xmlSingleFileCh.isSelected()); - userPrefs.putBoolean("xml.single", xmlSingleFileCh.isSelected()); + setStringProp("naming.pattern", regexTf.getText()); + setStringProp("naming.replace", replaceTf.getText()); - userPrefs.put("naming.pattern", regexTf.getText()); - userPrefs.put("naming.replace", replaceTf.getText()); + savePreferences(); } /**