]> git.mxchange.org Git - jfinancials-swing.git/blobdiff - Addressbook/src/org/mxchange/addressbook/BaseFrameworkSystem.java
Basic support for properties file
[jfinancials-swing.git] / Addressbook / src / org / mxchange / addressbook / BaseFrameworkSystem.java
index 431aeb456a8e49677e56f1aba655014fd1dc7f92..6315877d1f81f9d9387e012b0451777e77637b3f 100644 (file)
  */
 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,41 @@ 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
+        *
+        * @return Resource bundle
+        */
+       protected final ResourceBundle getBundle () {
+               return this.bundle;
+       }
+
        /**
         * Getter for logger
         *
@@ -140,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
         *
@@ -157,13 +267,4 @@ public class BaseFrameworkSystem implements FrameworkInterface {
        protected final void setTableName (final String tableName) {
                this.tableName = tableName;
        }
-
-       /**
-        * Getter for bundle instance
-        *
-        * @return Resource bundle
-        */
-       protected final ResourceBundle getBundle () {
-               return this.bundle;
-       }
 }