]> git.mxchange.org Git - jcore.git/blobdiff - src/org/mxchange/jcore/BaseFrameworkSystem.java
Introduced fieldIterator() + all Contact instances are now iterable over their attributes
[jcore.git] / src / org / mxchange / jcore / BaseFrameworkSystem.java
index 50c199dbc7fb4467c9819567feb6e486dec3865b..5f74161b26bd28c790a5ff9cada55dead595c118 100644 (file)
@@ -22,10 +22,14 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
+import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.text.MessageFormat;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Properties;
 import java.util.ResourceBundle;
 import java.util.StringTokenizer;
@@ -33,6 +37,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.mxchange.jcore.application.Application;
 import org.mxchange.jcore.client.Client;
+import org.mxchange.jcore.contact.Contact;
 import org.mxchange.jcore.database.frontend.DatabaseFrontend;
 import org.mxchange.jcore.manager.Manageable;
 
@@ -73,6 +78,11 @@ public class BaseFrameworkSystem implements FrameworkInterface {
         */
        private Client client;
 
+       /**
+        * Contact instance
+        */
+       private Contact contact;
+
        /**
         * Manager instance
         */
@@ -182,22 +192,22 @@ public class BaseFrameworkSystem implements FrameworkInterface {
        private Class<? extends FrameworkInterface> getClassFromTarget (final FrameworkInterface instance, final String targetClass) {
                // Trace message
                this.getLogger().debug(MessageFormat.format("instance={0},targetClass={1}", instance, targetClass)); //NOI18N
-               
+
                // Instance reflaction of this class
                Class<? extends FrameworkInterface> c = instance.getClass();
-               
+
                // Analyze class
                while (!targetClass.equals(c.getSimpleName())) {
                        // Debug message
                        this.getLogger().debug(MessageFormat.format("c={0}", c.getSimpleName())); //NOI18N
-                       
+
                        // Get super class (causes unchecked warning)
                        c = (Class<? extends FrameworkInterface>) c.getSuperclass();
                }
-               
+
                // Trace message
                this.getLogger().trace(MessageFormat.format("c={0} - EXIT!", c)); //NOI18N
-               
+
                // Return it
                return c;
        }
@@ -213,13 +223,13 @@ public class BaseFrameworkSystem implements FrameworkInterface {
        private Method getMethodFromName (final FrameworkInterface instance, final String targetClass, final String methodName) {
                // Trace messahe
                this.getLogger().trace(MessageFormat.format("targetClass={0},methodName={1}", targetClass, methodName)); //NOI18N
-               
+
                // Get target class instance
                Class<? extends FrameworkInterface> c = this.getClassFromTarget(instance, targetClass);
-               
+
                // Init field instance
                Method method = null;
-               
+
                // Use reflection to get all attributes
                try {
                        method = c.getDeclaredMethod(methodName, new Class<?>[0]);
@@ -230,13 +240,13 @@ public class BaseFrameworkSystem implements FrameworkInterface {
                        // Method not found
                        this.abortProgramWithException(ex);
                }
-               
+
                // Assert on field
                assert (method instanceof Method) : "method is not a Method instance"; //NOI18N
-               
+
                // Trace message
                this.getLogger().trace(MessageFormat.format("method={0} - EXIT!", method)); //NOI18N
-               
+
                // Return it
                return method;
        }
@@ -257,7 +267,7 @@ public class BaseFrameworkSystem implements FrameworkInterface {
        protected final void abortProgramWithException (final Throwable throwable) {
                // Log exception ...
                this.getLogger().catching(throwable);
-               
+
                // .. and exit
                System.exit(1);
                
@@ -511,6 +521,7 @@ public class BaseFrameworkSystem implements FrameworkInterface {
         * @param delimiter Delimiter
         * @param size Size of array
         * @return Array from tokenized string
+        * @todo Get rid of size parameter
         */
        protected String[] getArrayFromString (final String str, final String delimiter, final int size) {
                // Trace message
@@ -628,7 +639,7 @@ public class BaseFrameworkSystem implements FrameworkInterface {
         * @return Propety value
         */
        protected final String getProperty (final String key) {
-               return BaseFrameworkSystem.properties.getProperty(String.format("org.mxchange.addressbook.%s", key)); //NOI18N
+               return BaseFrameworkSystem.properties.getProperty(String.format("org.mxchange.%s", key)); //NOI18N
        }
 
        /**
@@ -654,7 +665,7 @@ public class BaseFrameworkSystem implements FrameworkInterface {
         *
         * @return DatabaseFrontend instance
         */
-       protected DatabaseFrontend getWrapper () {
+       protected final DatabaseFrontend getWrapper () {
                return this.wrapper;
        }
 
@@ -663,10 +674,28 @@ public class BaseFrameworkSystem implements FrameworkInterface {
         *
         * @param wrapper A DatabaseFrontend instance
         */
-       protected void setWrapper (final DatabaseFrontend wrapper) {
+       protected final void setWrapper (final DatabaseFrontend wrapper) {
                this.wrapper = wrapper;
        }
-       
+
+       /**
+        * Getter for Contact instance
+        *
+        * @return Contact instance
+        */
+       protected final Contact getContact () {
+               return this.contact;
+       }
+
+       /**
+        * Setter for Contact instance
+        *
+        * @param contact A Contact instance
+        */
+       protected final void setContact (final Contact contact) {
+               this.contact = contact;
+       }
+
        /**
         * Initializes i18n bundles
         */
@@ -676,7 +705,7 @@ public class BaseFrameworkSystem implements FrameworkInterface {
                        // Is already set
                        throw new IllegalStateException("called twice");
                }
-               
+
                // Set instance
                bundle = ResourceBundle.getBundle(FrameworkInterface.I18N_BUNDLE_FILE); // NOI18N
        }
@@ -722,4 +751,38 @@ public class BaseFrameworkSystem implements FrameworkInterface {
                // Return result
                return isBool;
        }
+
+       /**
+        * Creates an iterator from given instance and class name. The class name
+        * is required in getValueFromColumn() to make a proper call.
+        * 
+        * @param instance Instance to run getter calls on
+        * @param className Class name to iterate over
+        * @return An iterator over all object's fields
+        */
+       protected Iterator<Object> fieldIterator (final FrameworkInterface instance, final String className) {
+               // Trace message
+               this.getLogger().trace(MessageFormat.format("instance={0},className={1} - CALLED!", instance, className));
+
+               // Get all attributes from given instance
+               Field[] fields = instance.getClass().getDeclaredFields();
+
+               // A list is fine
+               List<Object> list = new ArrayList<>(fields.length);
+
+               // Walk through all
+               for (final Field field : fields) {
+                       // Get value from it
+                       Object value = this.getValueFromColumn(field.getName());
+
+                       // Add it to list
+                       assert(list.add(value)) : MessageFormat.format("value {0} has not been added", value);
+               }
+
+               // Debug message
+               this.getLogger().debug(MessageFormat.format("Returning iterator for {0} entries ...", list.size()));
+
+               // Return list iterator
+               return list.iterator();
+       }
 }