From 5c0579d7d5f6ba9512d96610872cc4c359a0558a Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Wed, 29 Jul 2015 14:26:55 +0200 Subject: [PATCH] =?utf8?q?Basic=20support=20for=20properties=20file=20Sign?= =?utf8?q?ed-off-by:Roland=20H=C3=A4der=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../addressbook/BaseFrameworkSystem.java | 127 ++++++++++++++---- .../addressbook/FrameworkInterface.java | 4 + .../frontend/BaseDatabaseFrontend.java | 2 +- 3 files changed, 106 insertions(+), 27 deletions(-) diff --git a/Addressbook/src/org/mxchange/addressbook/BaseFrameworkSystem.java b/Addressbook/src/org/mxchange/addressbook/BaseFrameworkSystem.java index b43b42b..6315877 100644 --- a/Addressbook/src/org/mxchange/addressbook/BaseFrameworkSystem.java +++ b/Addressbook/src/org/mxchange/addressbook/BaseFrameworkSystem.java @@ -16,6 +16,13 @@ */ 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; @@ -55,6 +62,11 @@ public class BaseFrameworkSystem implements FrameworkInterface { */ private ManageableContact contactManager; + /** + * Instance for own properties + */ + private final Properties properties; + /** * Name of used database table, handled over to backend */ @@ -72,6 +84,11 @@ public class BaseFrameworkSystem implements FrameworkInterface { * No instances can be created of this class */ protected BaseFrameworkSystem () { + // Init properties instance + this.properties = new Properties(); + + // Init properties file + this.initProperties(); } /** @@ -104,6 +121,54 @@ public class BaseFrameworkSystem implements FrameworkInterface { 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 * @@ -131,6 +196,32 @@ public class BaseFrameworkSystem implements FrameworkInterface { 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 * @@ -149,6 +240,16 @@ public class BaseFrameworkSystem implements FrameworkInterface { 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 * @@ -166,30 +267,4 @@ public class BaseFrameworkSystem implements FrameworkInterface { 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); - - } } diff --git a/Addressbook/src/org/mxchange/addressbook/FrameworkInterface.java b/Addressbook/src/org/mxchange/addressbook/FrameworkInterface.java index 822be62..02144db 100644 --- a/Addressbook/src/org/mxchange/addressbook/FrameworkInterface.java +++ b/Addressbook/src/org/mxchange/addressbook/FrameworkInterface.java @@ -26,6 +26,10 @@ import org.mxchange.addressbook.manager.contact.ManageableContact; * @author Roland Haeder */ public interface FrameworkInterface { + /* + * Properties file name + */ + public static final String PROPERTIES_CONFIG_FILE = "config.properties"; /** * Getter for contact manager diff --git a/Addressbook/src/org/mxchange/addressbook/database/frontend/BaseDatabaseFrontend.java b/Addressbook/src/org/mxchange/addressbook/database/frontend/BaseDatabaseFrontend.java index 56b9d70..63fd428 100644 --- a/Addressbook/src/org/mxchange/addressbook/database/frontend/BaseDatabaseFrontend.java +++ b/Addressbook/src/org/mxchange/addressbook/database/frontend/BaseDatabaseFrontend.java @@ -70,7 +70,7 @@ public class BaseDatabaseFrontend extends BaseFrameworkSystem { // Read property // @TODO rewrite this to own properties file - String backendType = System.getProperty("org.mxchange.addressbook.database.backendType", "base64csv"); //NOI18N + String backendType = this.getProperty("org.mxchange.addressbook.database.backendType"); //NOI18N // Try it try { -- 2.39.5