Skip to content

Commit

Permalink
# IGNITE-32: refactored preferences to properties.
Browse files Browse the repository at this point in the history
  • Loading branch information
akuznetsov-gridgain committed Feb 9, 2015
1 parent f5fec4b commit bbd393c
Showing 1 changed file with 174 additions and 71 deletions.
Expand Up @@ -37,7 +37,6 @@
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.*;
Expand Down Expand Up @@ -92,6 +91,22 @@ private static class Preset {
}
}

/** 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;

Expand Down Expand Up @@ -122,22 +137,6 @@ private static class Preset {
/** */
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;

Expand Down Expand Up @@ -210,7 +209,13 @@ private static class Preset {
/** */
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();

/** */
Expand Down Expand Up @@ -1114,10 +1119,108 @@ private Collection<PojoDescriptor> checkedPojos() {
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(
Expand Down Expand Up @@ -1145,24 +1248,12 @@ private Collection<PojoDescriptor> checkedPojos() {

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()) {
Expand All @@ -1182,23 +1273,23 @@ private Collection<PojoDescriptor> checkedPojos() {
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();
}
Expand All @@ -1209,51 +1300,63 @@ private Collection<PojoDescriptor> checkedPojos() {
* @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();
}

/**
Expand Down

0 comments on commit bbd393c

Please sign in to comment.