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;
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;
}
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]);
// 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;
}
protected final void abortProgramWithException (final Throwable throwable) {
// Log exception ...
this.getLogger().catching(throwable);
-
+
// .. and exit
System.exit(1);
* @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
// Is already set
throw new IllegalStateException("called twice");
}
-
+
// Set instance
bundle = ResourceBundle.getBundle(FrameworkInterface.I18N_BUNDLE_FILE); // NOI18N
}
// 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();
+ }
}
package org.mxchange.jcore.contact;
import java.text.MessageFormat;
+import java.util.Iterator;
import java.util.Objects;
import org.mxchange.jcore.BaseFrameworkSystem;
import org.mxchange.jcore.client.Client;
public Object getValueFromColumn (final String columnName) {
// Trace message
this.getLogger().trace(MessageFormat.format("columnName={0} - CALLED!", columnName));
-
+
// Determine if the given column is boolean
if (this.isBooleanField(this, "BaseContact", columnName)) {
// Yes, then call other method
return this.getBooleanField(this, "BaseContact", columnName);
}
-
+
// Convert column name to field name
String methodName = this.convertColumnNameToGetterMethod(columnName, false);
-
+
// Debug message
this.getLogger().debug(MessageFormat.format("field={0}", methodName));
-
+
// Get field
Object value = this.getField(this, "BaseContact", methodName);
-
+
// Trace message
this.getLogger().trace("value=" + value + " - EXIT!");
-
+
// Return it
return value;
}
public boolean isValueEqual (final String columnName, final boolean bool) {
// Trace message
this.getLogger().trace(MessageFormat.format("columnName={0},bool={1} - CALLED!", columnName, bool));
-
+
// Convert column name to field name
String methodName = this.convertColumnNameToGetterMethod(columnName, true);
-
+
// Debug message
this.getLogger().debug(MessageFormat.format("field={0}", methodName));
-
+
// Init class instance
boolean value = this.getBooleanField(this, "BaseContact", methodName);
-
+
// Debug message
this.getLogger().debug(MessageFormat.format("value={0}", value));
-
+
// Compare it
boolean isFound = (bool == value);
-
+
// Trace message
this.getLogger().trace(MessageFormat.format("isFound={0} - EXIT!", isFound));
-
+
// Return result
return isFound;
}
+ /**
+ * Returns an iterator of all values from this object
+ * @return An iterator
+ */
+ @Override
+ public Iterator<Object> iterator () {
+ return this.fieldIterator(this, "BaseContact");
+ }
+
/**
* Shows this contact to the user
*
public void show (final Client client) {
// Trace message
this.getLogger().trace(MessageFormat.format("client={0} - CALLED!", client)); //NOI18N
-
+
// The client must be set
if (client == null) {
// Not set
throw new NullPointerException("client is null");
}
-
+
// Display name "box"
client.displayNameBox(this);
-
+
// Display address "box"
client.displayAddressBox(this);
-
+
// Display other data "box"
client.displayOtherDataBox(this);
}