*/
package org.mxchange.jcore.contact;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
import java.text.MessageFormat;
+import java.util.Iterator;
+import java.util.Map;
import java.util.Objects;
import org.mxchange.jcore.BaseFrameworkSystem;
import org.mxchange.jcore.client.Client;
/**
- * A general contact
+ * A general contact class which should only be extended.
*
* @author Roland Haeder
* @version 0.0
*/
private String faxNumber;
+ /**
+ * First name
+ */
+ private String firstName;
+
/**
* Gender instance
*/
/**
* House number
*/
- private int houseNumber;
+ private Long houseNumber;
/**
- * Marker whether this contact is user's own data
+ * Flag whether this contact is user's own data
*/
private boolean ownContact;
*/
private String street;
- /**
- * Surname
- */
- private String surname;
-
/**
* ZIP code
*/
- private long zipCode;
+ private Long zipCode;
/**
- * No instances can be created of this class
+ * No instances should be created of this class. Better extend this class
+ * and provide proper constructors.
*/
protected BaseContact () {
}
// Now test some data @todo Definedly needs improvement
return ((this.getGender().equals(contact.getGender()))
- && (this.getSurname().toLowerCase().equals(contact.getSurname().toLowerCase()))
+ && (this.getFirstName().toLowerCase().equals(contact.getFirstName().toLowerCase()))
&& (this.getFamilyName().toLowerCase().equals(contact.getFamilyName().toLowerCase())));
}
return this.birthday;
}
+ /**
+ * Birth day
+ *
+ * @param birthday the birthday to set
+ */
+ @Override
+ public final void setBirthday (final String birthday) {
+ this.birthday = birthday;
+ }
+
/**
* Cellphone number
*
* @return the cellphoneNumber
*/
@Override
- public String getCellphoneNumber () {
+ public final String getCellphoneNumber () {
return this.cellphoneNumber;
}
+ /**
+ * Cellphone number
+ *
+ * @param cellphoneNumber the cellphoneNumber to set
+ */
+ @Override
+ public final void setCellphoneNumber (final String cellphoneNumber) {
+ this.cellphoneNumber = cellphoneNumber;
+ }
+
/**
* City
*
this.countryCode = countryCode;
}
- /**
- * "Serializes" this object into a CSV string (this time with semicolons)
- *
- * @return "CSV-serialized" version of the stored data
- * @deprecated Don't use this anymore
- */
- @Deprecated
- public String getCsvStringFromStoreableObject () {
- // Trace message
- this.getLogger().trace("CALLED!"); //NOI18N
-
- // Get all together
- String csvString = String.format(
- "\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\";\"%s\"", //NOI18N
- this.isOwnContact(),
- this.getGender().getDatabaseValue(),
- this.getSurname(),
- this.getFamilyName(),
- this.getCompanyName(),
- this.getStreet(),
- this.getZipCode(),
- this.getCity(),
- this.getCountryCode(),
- this.getPhoneNumber(),
- this.getFaxNumber(),
- this.getCellphoneNumber(),
- this.getEmailAddress(),
- this.getBirthday(),
- this.getComment()
- );
-
- // Then return it
- return csvString;
- }
-
/**
* Email address
*
*/
@Override
public String getFamilyName () {
+ //* NOISY-DEBUG: */ this.getLogger().trace("CALLED!");
return this.familyName;
}
*/
@Override
public final void setFamilyName (final String familyName) {
+ /* NOISY-DEBUG: */ this.getLogger().trace(MessageFormat.format("familyName={0} - CALLED!", familyName)); //NOI18N
this.familyName = familyName;
}
this.faxNumber = faxNumber;
}
+ /**
+ * First name
+ *
+ * @return the firstName
+ */
+ @Override
+ public final String getFirstName () {
+ return this.firstName;
+ }
+
+ /**
+ * First name
+ *
+ * @param firstName the firstName to set
+ */
+ @Override
+ public final void setFirstName (final String firstName) {
+ this.firstName = firstName;
+ }
+
/**
* Gender of the contact
*
* @return the houseNumber
*/
@Override
- public int getHouseNumber () {
+ public Long getHouseNumber () {
return this.houseNumber;
}
+ /**
+ * House number
+ *
+ * @param houseNumber the houseNumber to set
+ */
+ @Override
+ public final void setHouseNumber (final Long houseNumber) {
+ this.houseNumber = houseNumber;
+ }
+
/**
* Phone number
*
return this.phoneNumber;
}
+ /**
+ * Phone number
+ *
+ * @param phoneNumber the phoneNumber to set
+ */
+ @Override
+ public final void setPhoneNumber (final String phoneNumber) {
+ this.phoneNumber = phoneNumber;
+ }
+
/**
* Street
*
this.street = street;
}
- /**
- * Surname
- *
- * @return the surname
- */
- @Override
- public final String getSurname () {
- return this.surname;
- }
-
/**
* Some "getter" for a translated/human-readable gender
*
return translated;
}
+ /**
+ * Some "getter for a value from given column name. This name will be
+ * translated into a method name and then this method is called.
+ *
+ * @param columnName Column name
+ * @return Value from field
+ */
+ @Override
+ public Object getValueFromColumn (final String columnName) throws IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+ // Trace message
+ this.getLogger().trace(MessageFormat.format("columnName={0} - CALLED!", columnName)); //NOI18N
+
+ // A '$' means not our field
+ if (columnName.startsWith("$")) { //NOI18N
+ // Don't handle these
+ throw new IllegalArgumentException("columnsName contains $"); //NOI18N
+ }
+
+ // Determine if the given column is boolean
+ if (this.isBooleanField(this, "BaseContact", columnName)) { //NOI18N
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("Column {0} represents a boolean field.", columnName)); //NOI18N
+
+ // Yes, then call other method
+ return this.getBooleanField(this, "BaseContact", this.convertColumnNameToGetterMethod(columnName, true)); //NOI18N
+ }
+
+ // Convert column name to field name
+ String methodName = this.convertColumnNameToGetterMethod(columnName, false);
+
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("field={0}", methodName)); //NOI18N
+
+ // Get field
+ Object value = this.getField(this, "BaseContact", methodName); //NOI18N
+
+ // Trace message
+ this.getLogger().trace(MessageFormat.format("value={0} - EXIT!", value)); //NOI18N
+
+ // Return it
+ return value;
+ }
+
/**
* ZIP code
*
* @return the zipCode
*/
@Override
- public final long getZipCode () {
+ public final Long getZipCode () {
return this.zipCode;
}
* @param zipCode the zipCode to set
*/
@Override
- public final void setZipCode (final long zipCode) {
+ public final void setZipCode (final Long zipCode) {
this.zipCode = zipCode;
}
@Override
public int hashCode () {
// Validate gender instance
- assert (this.getGender() instanceof Gender) : "gender is not set.";
+ assert (this.getGender() instanceof Gender) : "gender is not set."; //NOI18N
int hash = 7;
hash = 79 * hash + Objects.hashCode(this.getFamilyName());
hash = 79 * hash + this.getGender().hashCode();
- hash = 79 * hash + Objects.hashCode(this.getSurname());
+ hash = 79 * hash + Objects.hashCode(this.getFirstName());
return hash;
}
+ /**
+ * Checks if given boolean field is available and set to same value
+ *
+ * @param columnName Column name to check
+ * @param bool Boolean value
+ * @return Whether all conditions are met
+ */
+ @Override
+ public boolean isFieldValueEqual (final String columnName, final boolean bool) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+ // Trace message
+ this.getLogger().trace(MessageFormat.format("columnName={0},bool={1} - CALLED!", columnName, bool)); //NOI18N
+
+ // Convert column name to field name
+ String methodName = this.convertColumnNameToGetterMethod(columnName, true);
+
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("field={0}", methodName)); //NOI18N
+
+ // Init class instance
+ boolean value = this.getBooleanField(this, "BaseContact", methodName); //NOI18N
+
+ // Debug message
+ this.getLogger().debug(MessageFormat.format("value={0}", value)); //NOI18N
+
+ // Compare it
+ boolean isFound = (bool == value);
+
+ // Trace message
+ this.getLogger().trace(MessageFormat.format("isFound={0} - EXIT!", isFound)); //NOI18N
+
+ // Return result
+ return isFound;
+ }
+
/**
* Checks whether the contact is user's own data
*
return this.ownContact;
}
+ /**
+ * Returns an iterator of all values from this object
+ * @return An iterator
+ */
+ @Override
+ public Iterator<Map.Entry<Field, Object>> iterator () throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
+ return this.fieldIterator(this, "BaseContact"); //NOI18N
+ }
+
+ @Override
+ public void setValueFromColumn (final String columnName, final Object value) throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+ // Trace message
+ this.getLogger().trace(MessageFormat.format("columnName={0},value={1} - CALLED!", columnName, value)); //NOI18N
+
+ // Call super method
+ this.setValueInStoreableFromColumn(this, "BaseContact", columnName, value); //NOI18N
+
+ // Trace message
+ this.getLogger().trace("EXIT!"); //NOI18N
+ }
+
/**
* Shows this contact to the user
*
// The client must be set
if (client == null) {
// Not set
- throw new NullPointerException("client is null");
+ throw new NullPointerException("client is null"); //NOI18N
}
// Display name "box"
protected final void enableFlagOwnContact () {
this.ownContact = true;
}
-
- /**
- * Surname
- *
- * @param surname the surname to set
- */
- @Override
- public final void setSurname (final String surname) {
- this.surname = surname;
- }
-
- /**
- * Phone number
- *
- * @param phoneNumber the phoneNumber to set
- */
- @Override
- public final void setPhoneNumber (final String phoneNumber) {
- this.phoneNumber = phoneNumber;
- }
-
- /**
- * House number
- *
- * @param houseNumber the houseNumber to set
- */
- public final void setHouseNumber (final int houseNumber) {
- this.houseNumber = houseNumber;
- }
-
- /**
- * Cellphone number
- *
- * @param cellphoneNumber the cellphoneNumber to set
- */
- @Override
- public final void setCellphoneNumber (final String cellphoneNumber) {
- this.cellphoneNumber = cellphoneNumber;
- }
-
- /**
- * Birth day
- *
- * @param birthday the birthday to set
- */
- @Override
- public final void setBirthday (final String birthday) {
- this.birthday = birthday;
- }
-
- /**
- * Some "getter for a value from given column name. This name will be
- * translated into a method name and then this method is called.
- *
- * @param columnName Column name
- * @return Value from field
- */
- @Override
- 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;
- }
-
- /**
- * Checks if given boolean field is available and set to same value
- *
- * @param columnName Column name to check
- * @param bool Boolean value
- * @return Whether all conditions are met
- */
- @Override
- 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;
- }
}