*/
package org.mxchange.addressbook;
+import java.io.BufferedReader;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.util.Properties;
import java.util.ResourceBundle;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
*/
private ManageableContact contactManager;
+ /**
+ * Instance for own properties
+ */
+ private final Properties properties;
+
/**
* Name of used database table, handled over to backend
*/
* No instances can be created of this class
*/
protected BaseFrameworkSystem () {
+ // Init properties instance
+ this.properties = new Properties();
+
+ // Init properties file
+ this.initProperties();
}
/**
return this.contactManager;
}
+ /**
+ * Prepares all properties, the file is written if it is not found
+ */
+ private void initProperties () {
+ try {
+ // Try to read it
+ this.properties.load(new BufferedReader(new InputStreamReader(new FileInputStream(FrameworkInterface.PROPERTIES_CONFIG_FILE))));
+ } catch (final FileNotFoundException ex) {
+ /*
+ * The file is not found which is normal for first run, so
+ * initialize default values.
+ */
+ this.initPropertiesWithDefault();
+
+ // Write file
+ this.writePropertiesFile();
+ } catch (final IOException ex) {
+ // Something else didn't work
+ this.abortProgramWithException(ex);
+ }
+ }
+
+ /**
+ * Initializes properties with default values
+ */
+ private void initPropertiesWithDefault () {
+ // Init default values:
+ // Default database backend
+ this.properties.put("org.mxchange.addressbook.database.backendType", "base64csv");
+
+ // For MySQL backend
+ this.properties.put("org.mxchange.addressbook.database.mysql.host", "localhost");
+ this.properties.put("org.mxchange.addressbook.database.mysql.login", "");
+ this.properties.put("org.mxchange.addressbook.database.mysql.password", "");
+ }
+
+ /**
+ * Writes the properties file to disk
+ */
+ private void writePropertiesFile () {
+ try {
+ // Write it
+ this.properties.store(new PrintWriter(FrameworkInterface.PROPERTIES_CONFIG_FILE), "This file is automatically generated. You may wish to alter it.");
+ } catch (final IOException ex) {
+ this.abortProgramWithException(ex);
+ }
+ }
+
/**
* Contact manager instance
*
this.application = application;
}
+ /**
+ * Getter for human-readable string from given key
+ *
+ * @param key Key to return
+ * @return Human-readable message
+ */
+ @Override
+ public final String getMessageStringFromKey (final String key) {
+ // Return message
+ return this.getBundle().getString(key);
+ }
+
+ /**
+ * Aborts program with given exception
+ *
+ * @param throwable Any type of Throwable
+ */
+ protected final void abortProgramWithException (final Throwable throwable) {
+ // Log exception ...
+ this.getLogger().catching(throwable);
+
+ // .. and exit
+ System.exit(1);
+
+ }
+
/**
* Getter for bundle instance
*
return this.LOG;
}
+ /**
+ * Getter for property which must exist
+ *
+ * @param key Key to get
+ * @return Propety value
+ */
+ protected String getProperty (final String key) {
+ return this.properties.getProperty(key);
+ }
+
/**
* Name of used database table, handled over to backend
*
protected final void setTableName (final String tableName) {
this.tableName = tableName;
}
-
- /**
- * Getter for human-readable string from given key
- *
- * @param key Key to return
- * @return Human-readable message
- */
- @Override
- public final String getMessageStringFromKey (final String key) {
- // Return message
- return this.getBundle().getString(key);
- }
-
- /**
- * Aborts program with given exception
- *
- * @param throwable Any type of Throwable
- */
- protected final void abortProgramWithException (final Throwable throwable) {
- // Log exception ...
- this.getLogger().catching(throwable);
-
- // .. and exit
- System.exit(1);
-
- }
}