* @author Roland Haeder
*/
public class BaseFrameworkSystem implements FrameworkInterface {
+ /**
+ * Bundle instance
+ */
+ private static ResourceBundle bundle;
/**
* Instance for own properties
*/
private static final Properties properties = new Properties(System.getProperties());
+ /**
+ * Self instance
+ */
+ private static FrameworkInterface selfInstance;
+
/**
* Class' logger
*/
*/
private Application application;
- /**
- * Bundle instance
- */
- private static ResourceBundle bundle;
/**
* Client instance
*/
private DatabaseFrontend wrapper;
+
/**
* Initialize object
*/
LOG = LogManager.getLogger(this);
}
+ /**
+ * Getter for this application
+ *
+ * @return Instance from this application
+ */
+ public static final FrameworkInterface getInstance () {
+ // Return it
+ return selfInstance;
+ }
+
/**
* No instances can be created of this class
*/
protected BaseFrameworkSystem () {
// Init properties file
this.initProperties();
+
+ // Set own instance
+ this.setSelfInstance();
}
/**
- * Initializes i18n bundles
+ * Application instance
+ *
+ * @return the application
*/
- protected void initBundle () {
- // Is the bundle set?
- if (bundle instanceof ResourceBundle) {
- // Is already set
- throw new IllegalStateException("called twice");
+ @Override
+ public final Application getApplication () {
+ return this.application;
+ }
+
+ /**
+ * Getter for logger
+ *
+ * @return Logger
+ */
+ @Override
+ public final Logger getLogger () {
+ return this.LOG;
+ }
+
+ /**
+ * Manager instance
+ *
+ * @return the contactManager
+ */
+ @Override
+ public final Manageable getManager () {
+ return this.manager;
+ }
+
+ /**
+ * 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);
+ }
+
+ /**
+ * 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) {
+ throw new UnsupportedOperationException(MessageFormat.format("Not implemented. columnName={0}", columnName)); //NOI18N
+ }
+
+ /**
+ * Some "getter" for target class instance from given name.
+ *
+ * @param instance Instance to iterate on
+ * @param targetClass Class name to look for
+ * @return Class instance
+ */
+ @SuppressWarnings ("unchecked")
+ 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;
+ }
- // Set instance
- bundle = ResourceBundle.getBundle(FrameworkInterface.I18N_BUNDLE_FILE); // NOI18N
+ /**
+ * Some "getter" for a Method instance from given method name
+ *
+ * @param instance Actual instance to call
+ * @param targetClass Target class name
+ * @param methodName Method name
+ * @return A Method instance
+ */
+ 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]);
+ } catch (final SecurityException ex) {
+ // Security problem
+ this.abortProgramWithException(ex);
+ } catch (final NoSuchMethodException ex) {
+ // 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;
+ }
+
+ /**
+ * Setter for self instance
+ */
+ private void setSelfInstance () {
+ // Need to set it here
+ selfInstance = this;
+ }
+
+ /**
+ * 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);
+
}
/**
* Application instance
*
- * @return the application
+ * @param application the application to set
*/
- @Override
- public final Application getApplication () {
- return this.application;
+ protected final void setApplication (final Application application) {
+ this.application = application;
}
/**
return this.client;
}
+ /**
+ * Getter for bundle instance
+ *
+ * @return Resource bundle
+ */
+ protected final ResourceBundle getBundle () {
+ return BaseFrameworkSystem.bundle;
+ }
+
+ /**
+ * Client instance
+ *
+ * @param client the client to set
+ */
+ protected final void setClient (final Client client) {
+ this.client = client;
+ }
+
/**
* Checks if given boolean field is available and set to same value
*
return value;
}
- /**
- * Client instance
- *
- * @param client the client to set
- */
- protected final void setClient (final Client client) {
- this.client = client;
- }
-
- /**
- * Application instance
- *
- * @param application the application to set
- */
- protected final void setApplication (final Application application) {
- this.application = application;
- }
-
- /**
- * Getter for logger
- *
- * @return Logger
- */
- @Override
- public final Logger getLogger () {
- return this.LOG;
- }
-
- /**
- * Manager instance
- *
- * @return the contactManager
- */
- @Override
- public final Manageable getManager () {
- return this.manager;
- }
-
- /**
- * 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);
- }
-
- /**
- * 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) {
- throw new UnsupportedOperationException(MessageFormat.format("Not implemented. columnName={0}", columnName)); //NOI18N
- }
-
- /**
- * Some "getter" for target class instance from given name.
- *
- * @param instance Instance to iterate on
- * @param targetClass Class name to look for
- * @return Class instance
- */
- @SuppressWarnings ("unchecked")
- 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;
- }
-
- /**
- * Some "getter" for a Method instance from given method name
- *
- * @param instance Actual instance to call
- * @param targetClass Target class name
- * @param methodName Method name
- * @return A Method instance
- */
- 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]);
- } catch (final SecurityException ex) {
- // Security problem
- this.abortProgramWithException(ex);
- } catch (final NoSuchMethodException ex) {
- // 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;
- }
-
- /**
- * 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;
- }
-
/**
* Manager instance
*
protected void setWrapper (final DatabaseFrontend wrapper) {
this.wrapper = wrapper;
}
+
+ /**
+ * Initializes i18n bundles
+ */
+ protected void initBundle () {
+ // Is the bundle set?
+ if (bundle instanceof ResourceBundle) {
+ // Is already set
+ throw new IllegalStateException("called twice");
+ }
+
+ // Set instance
+ bundle = ResourceBundle.getBundle(FrameworkInterface.I18N_BUNDLE_FILE); // NOI18N
+ }
/**
* Checks whether the given field is a boolean field by probing it.
--- /dev/null
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.mxchange.jcore.application;
+
+import org.mxchange.jcore.BaseFrameworkSystem;
+
+/**
+ * A general application class
+ *
+ * @author Roland Haeder
+ */
+public abstract class BaseApplication extends BaseFrameworkSystem implements Application {
+}
package org.mxchange.jcore.client;
import org.mxchange.jcore.FrameworkInterface;
+import org.mxchange.jcore.contact.Contact;
/**
* An interface for application clients
* Inizializes this client
*/
public void init ();
+
+ /**
+ * Displays a "box" for the address
+ *
+ * @param contact Contact to show address from
+ */
+ public void displayAddressBox (final Contact contact);
+
+ /**
+ * Displays a "box" for the name
+ *
+ * @param contact Contact to show name from
+ */
+ public void displayNameBox (final Contact contact);
+
+ /**
+ * Displays a "box" for other data
+ *
+ * @param contact Contact to show other data from
+ */
+ public void displayOtherDataBox (final Contact contact);
}
--- /dev/null
+/*
+ * Copyright (C) 2015 Roland Haeder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.jcore.contact;
+
+import java.text.MessageFormat;
+import java.util.Objects;
+import org.mxchange.jcore.BaseFrameworkSystem;
+import org.mxchange.jcore.client.Client;
+
+/**
+ * A general contact
+ *
+ * @author Roland Haeder
+ * @version 0.0
+ */
+public class BaseContact extends BaseFrameworkSystem implements Contact {
+
+ /**
+ * Birth day
+ */
+ private String birthday;
+
+ /**
+ * Cellphone number
+ */
+ private String cellphoneNumber;
+
+ /**
+ * City
+ */
+ private String city;
+
+ /**
+ * Optional comments
+ */
+ private String comment;
+
+ /**
+ * Companyname
+ */
+ private String companyName;
+
+ /**
+ * Country code
+ */
+ private String countryCode;
+
+ /**
+ * Email address
+ */
+ private String emailAddress;
+
+ /**
+ * Family name
+ */
+ private String familyName;
+
+ /**
+ * Fax number
+ */
+ private String faxNumber;
+
+ /**
+ * Gender instance
+ */
+ private Gender gender;
+
+ /**
+ * House number
+ */
+ private int houseNumber;
+
+ /**
+ * Marker whether this contact is user's own data
+ */
+ private boolean ownContact;
+
+ /**
+ * Phone number
+ */
+ private String phoneNumber;
+
+ /**
+ * Street
+ */
+ private String street;
+
+ /**
+ * Surname
+ */
+ private String surname;
+
+ /**
+ * ZIP code
+ */
+ private long zipCode;
+
+ /**
+ * No instances can be created of this class
+ */
+ protected BaseContact () {
+ }
+
+ /**
+ * Check if contacts are same or throw an exception
+ *
+ * @param object Other possible contact class
+ * @return Whether both contacts are same
+ * @todo Needs a lot improvements
+ */
+ @Override
+ public boolean equals (final Object object) {
+ // Is it same type?
+ if (!(object instanceof BaseContact)) {
+ // Not equal types
+ return false;
+ } else if (!(object instanceof Contact)) {
+ // Not correct interface
+ return false;
+ }
+
+ // Try to cast
+ Contact contact = (Contact) object;
+
+ // Now test some data @todo Definedly needs improvement
+ return ((this.getGender().equals(contact.getGender()))
+ && (this.getSurname().toLowerCase().equals(contact.getSurname().toLowerCase()))
+ && (this.getFamilyName().toLowerCase().equals(contact.getFamilyName().toLowerCase())));
+ }
+
+ /**
+ * Birth day
+ *
+ * @return the birthday
+ */
+ @Override
+ public String getBirthday () {
+ return this.birthday;
+ }
+
+ /**
+ * Cellphone number
+ *
+ * @return the cellphoneNumber
+ */
+ @Override
+ public String getCellphoneNumber () {
+ return this.cellphoneNumber;
+ }
+
+ /**
+ * City
+ *
+ * @return the city
+ */
+ @Override
+ public String getCity () {
+ return this.city;
+ }
+
+ /**
+ * City
+ *
+ * @param city the city to set
+ */
+ private void setCity (final String city) {
+ this.city = city;
+ }
+
+ /**
+ * Comments
+ *
+ * @return the comment
+ */
+ @Override
+ public String getComment () {
+ return this.comment;
+ }
+
+ /**
+ * Comments
+ *
+ * @param comment the comment to set
+ */
+ private void setComment (final String comment) {
+ this.comment = comment;
+ }
+
+ /**
+ * Companyname
+ *
+ * @return the companyName
+ */
+ @Override
+ public String getCompanyName () {
+ return this.companyName;
+ }
+
+ /**
+ * Companyname
+ *
+ * @param companyName the companyName to set
+ */
+ private void setCompanyName (final String companyName) {
+ this.companyName = companyName;
+ }
+
+ /**
+ * Country code
+ *
+ * @return the countryCode
+ */
+ @Override
+ public String getCountryCode () {
+ return this.countryCode;
+ }
+
+ /**
+ * Country code
+ *
+ * @param countryCode the countryCode to set
+ */
+ private void setCountryCode (final String countryCode) {
+ 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
+ *
+ * @return the emailAddress
+ */
+ @Override
+ public String getEmailAddress () {
+ return this.emailAddress;
+ }
+
+ /**
+ * Email address
+ *
+ * @param emailAddress the emailAddress to set
+ */
+ private void setEmailAddress (final String emailAddress) {
+ this.emailAddress = emailAddress;
+ }
+
+ /**
+ * Family name
+ *
+ * @return the familyName
+ */
+ @Override
+ public String getFamilyName () {
+ return this.familyName;
+ }
+
+ /**
+ * Family name
+ *
+ * @param familyName the familyName to set
+ */
+ private void setFamilyName (final String familyName) {
+ this.familyName = familyName;
+ }
+
+ /**
+ * Fax number
+ *
+ * @return the faxNumber
+ */
+ @Override
+ public String getFaxNumber () {
+ return this.faxNumber;
+ }
+
+ /**
+ * Fax number
+ *
+ * @param faxNumber the faxNumber to set
+ */
+ private void setFaxNumber (final String faxNumber) {
+ this.faxNumber = faxNumber;
+ }
+
+ /**
+ * Gender of the contact
+ *
+ * @return the gender
+ */
+ @Override
+ public Gender getGender () {
+ return this.gender;
+ }
+
+ /**
+ * Gender of the contact
+ *
+ * @param gender the gender to set
+ */
+ private void setGender (final Gender gender) {
+ this.gender = gender;
+ }
+
+ /**
+ * House number
+ *
+ * @return the houseNumber
+ */
+ @Override
+ public int getHouseNumber () {
+ return this.houseNumber;
+ }
+
+ /**
+ * Phone number
+ *
+ * @return the phoneNumber
+ */
+ @Override
+ public String getPhoneNumber () {
+ return this.phoneNumber;
+ }
+
+ /**
+ * Street
+ *
+ * @return the street
+ */
+ @Override
+ public String getStreet () {
+ return this.street;
+ }
+
+ /**
+ * Street
+ *
+ * @param street the street to set
+ */
+ protected final void setStreet (final String 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 gender Human-readable gender
+ */
+ @Override
+ public String getTranslatedGender () {
+ // "Translate" it
+ String translated = this.getBundle().getString(this.getGender().getMessageKey());
+
+ // Return it
+ return translated;
+ }
+
+ /**
+ * ZIP code
+ *
+ * @return the zipCode
+ */
+ @Override
+ public final long getZipCode () {
+ return this.zipCode;
+ }
+
+ /**
+ * ZIP code
+ *
+ * @param zipCode the zipCode to set
+ */
+ protected 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.";
+
+ int hash = 7;
+ hash = 79 * hash + Objects.hashCode(this.getFamilyName());
+ hash = 79 * hash + this.getGender().hashCode();
+ hash = 79 * hash + Objects.hashCode(this.getSurname());
+ return hash;
+ }
+
+ /**
+ * Checks whether the contact is user's own data
+ *
+ * @return Own data?
+ */
+ @Override
+ public final boolean isOwnContact () {
+ return this.ownContact;
+ }
+
+ /**
+ * Shows this contact to the user
+ *
+ * @param client Client instance to use
+ */
+ @Override
+ 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);
+ }
+
+ /**
+ * Updates address data in this Contact instance
+ *
+ * @param street Street
+ * @param zipCode ZIP code
+ * @param city City
+ * @param countryCode Country code
+ */
+ @Override
+ public void updateAddressData (final String street, final long zipCode, final String city, final String countryCode) {
+ // Trace message
+ this.getLogger().trace(MessageFormat.format("street={0},zipCode={1},city={2},countryCode={3} - CALLED!", street, zipCode, city, countryCode)); //NOI18N
+
+ // Set all
+ if (street != null) {
+ this.setStreet(street);
+ }
+ if (zipCode > 0) {
+ this.setZipCode(zipCode);
+ }
+ if (city != null) {
+ this.setCity(city);
+ }
+ if (countryCode != null) {
+ this.setCountryCode(countryCode);
+ }
+
+ // Trace message
+ this.getLogger().trace("EXIT!"); //NOI18N
+ }
+
+ /**
+ * Updates name data in this Contact instance
+ *
+ * @param gender Gender (M, F, C)
+ * @param surname Surname
+ * @param familyName Family name
+ * @param companyName Company name
+ */
+ @Override
+ public void updateNameData (final Gender gender, final String surname, final String familyName, final String companyName) {
+ // Trace message
+ this.getLogger().trace(MessageFormat.format("gender={0},surname={1},familyName={2},companyName={3} - CALLED!", gender, surname, familyName, companyName)); //NOI18N
+
+ // Set all
+ this.setGender(gender);
+
+ if (surname != null) {
+ this.setSurname(surname);
+ }
+ if (familyName != null) {
+ this.setFamilyName(familyName);
+ }
+ if (companyName != null) {
+ this.setCompanyName(companyName);
+ }
+
+ // Trace message
+ this.getLogger().trace("EXIT!"); //NOI18N
+ }
+
+ /**
+ * Updates other data in this Contact instance
+ *
+ * @param phoneNumber Phone number
+ * @param cellphoneNumber Cellphone number
+ * @param faxNumber Fax number
+ * @param emailAddress Email address
+ * @param birthday Birth day
+ * @param comment Comments
+ */
+ @Override
+ public void updateOtherData (final String phoneNumber, final String cellphoneNumber, final String faxNumber, final String emailAddress, final String birthday, final String comment) {
+ // Trace message
+ this.getLogger().trace(MessageFormat.format("phoneNumber={0},cellphoneNumber={1}faxNumber={2},emailAddress={3},birthday={4},comment={5} - CALLED!", phoneNumber, cellphoneNumber, faxNumber, emailAddress, birthday, comment)); //NOI18N
+
+ // Set all
+ if (phoneNumber != null) {
+ this.setPhoneNumber(phoneNumber);
+ }
+ if (cellphoneNumber != null) {
+ this.setCellphoneNumber(cellphoneNumber);
+ }
+ if (faxNumber != null) {
+ this.setFaxNumber(faxNumber);
+ }
+ if (emailAddress != null) {
+ this.setEmailAddress(emailAddress);
+ }
+ if (birthday != null) {
+ this.setBirthday(birthday);
+ }
+ if (comment != null) {
+ this.setComment(comment);
+ }
+
+ // Trace message
+ this.getLogger().trace("EXIT!"); //NOI18N
+ }
+
+ /**
+ * Enables the flag "own data" which signals that this contact is the user's
+ * own data.
+ */
+ protected final void enableFlagOwnContact () {
+ this.ownContact = true;
+ }
+
+ /**
+ * Surname
+ *
+ * @param surname the surname to set
+ */
+ protected final void setSurname (final String surname) {
+ this.surname = surname;
+ }
+
+ /**
+ * Phone number
+ *
+ * @param phoneNumber the phoneNumber to set
+ */
+ protected final void setPhoneNumber (final String phoneNumber) {
+ this.phoneNumber = phoneNumber;
+ }
+
+ /**
+ * House number
+ *
+ * @param houseNumber the houseNumber to set
+ */
+ protected final void setHouseNumber (final int houseNumber) {
+ this.houseNumber = houseNumber;
+ }
+
+ /**
+ * Cellphone number
+ *
+ * @param cellphoneNumber the cellphoneNumber to set
+ */
+ protected final void setCellphoneNumber (final String cellphoneNumber) {
+ this.cellphoneNumber = cellphoneNumber;
+ }
+
+ /**
+ * Birth day
+ *
+ * @param birthday the birthday to set
+ */
+ protected 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;
+ }
+}
--- /dev/null
+/*
+ * Copyright (C) 2015 Roland Haeder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.jcore.contact;
+
+import org.mxchange.jcore.FrameworkInterface;
+import org.mxchange.jcore.client.Client;
+
+/**
+ *
+ * @author Roland Haeder
+ */
+public interface Contact extends FrameworkInterface {
+
+ /**
+ * Some "getter" for translated gender of the contact
+ *
+ * @return Translated / human-readable gender
+ */
+ public String getTranslatedGender ();
+
+ /**
+ * Checks whether the contact is user's own data
+ *
+ * @return Own data?
+ */
+ public boolean isOwnContact ();
+
+ /**
+ * Gender of the contact
+ *
+ * @return the gender
+ */
+ public Gender getGender ();
+
+ /**
+ * Surname
+ *
+ * @return the surname
+ */
+ public String getSurname ();
+
+ /**
+ * Family name
+ *
+ * @return the familyName
+ */
+ public String getFamilyName ();
+
+ /**
+ * Companyname
+ *
+ * @return the companyName
+ */
+ public String getCompanyName ();
+
+ /**
+ * Street
+ *
+ * @return the street
+ */
+ public String getStreet ();
+
+ /**
+ * House number
+ *
+ * @return the houseNumber
+ */
+ public int getHouseNumber ();
+
+ /**
+ * ZIP code
+ *
+ * @return the zipCode
+ */
+ public long getZipCode ();
+
+ /**
+ * City
+ *
+ * @return the city
+ */
+ public String getCity ();
+
+ /**
+ * Country code
+ *
+ * @return the countryCode
+ */
+ public String getCountryCode ();
+
+ /**
+ * Email address
+ *
+ * @return the emailAddress
+ */
+ public String getEmailAddress ();
+
+ /**
+ * Phone number
+ *
+ * @return the phoneNumber
+ */
+ public String getPhoneNumber ();
+
+ /**
+ * Fax number
+ *
+ * @return the faxNumber
+ */
+ public String getFaxNumber ();
+
+ /**
+ * Cellphone number
+ *
+ * @return the cellphoneNumber
+ */
+ public String getCellphoneNumber ();
+
+ /**
+ * Birth day
+ *
+ * @return the birthday
+ */
+ public String getBirthday ();
+
+ /**
+ * Comments
+ *
+ * @return the comment
+ */
+ public String getComment ();
+
+ /**
+ * Checks if given boolean value is available and set to same value
+ *
+ * @param columnName Column name to check
+ * @param bool Boolean value
+ * @return Whether all conditions are met
+ */
+ public boolean isValueEqual (final String columnName, final boolean bool);
+
+ /**
+ * Shows the contact to the user
+ *
+ * @param client Client instance to call back
+ */
+ public void show (final Client client);
+
+ /**
+ * Updates address data in this Contact instance
+ *
+ * @param street Street
+ * @param zipCode ZIP code
+ * @param city City
+ * @param countryCode Country code
+ */
+ public void updateAddressData (final String street, final long zipCode, final String city, final String countryCode);
+
+ /**
+ * Updates name data in this Contact instance
+ *
+ * @param gender Gender (M, F, C)
+ * @param surname Surname
+ * @param familyName Family name
+ * @param companyName Company name
+ */
+ public void updateNameData (final Gender gender, final String surname, final String familyName, final String companyName);
+
+ /**
+ * Updates other data in this Contact instance
+ *
+ * @param phoneNumber Phone number
+ * @param cellNumber Cellphone number
+ * @param faxNumber Fax number
+ * @param email Email address
+ * @param birthday Birthday
+ * @param comment Comments
+ */
+ public void updateOtherData (final String phoneNumber, final String cellNumber, final String faxNumber, final String email, final String birthday, final String comment);
+}
--- /dev/null
+/*
+ * Copyright (C) 2015 Roland Haeder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.jcore.contact;
+
+import org.mxchange.jcore.BaseFrameworkSystem;
+
+/**
+ * Gender enum
+ *
+ * @author Roland Haeder
+ */
+public enum Gender {
+
+ /**
+ * Unknown enum
+ */
+ UNKNOWN("U", "BaseContact.gender.unknown.text"),
+ /**
+ * Male enum
+ */
+ MALE("M", "BaseContact.gender.male.text"),
+ /**
+ * Female enum
+ */
+ FEMALE("F", "BaseContact.gender.female.text"),
+ /**
+ * Company enum
+ */
+ COMPANY("C", "BaseContact.gender.company.text");
+
+ /**
+ * Cache for valid chars
+ */
+ private static char[] validChars;
+
+ /**
+ * Getter for Gender enum from given character
+ *
+ * @param gender Gender character
+ * @return Gender enum
+ */
+ public static Gender fromChar (final char gender) {
+ Gender g = null;
+ switch (gender) {
+ case 'U': // Unknown
+ g = UNKNOWN;
+ break;
+
+ case 'M': // Male
+ g = MALE;
+ break;
+
+ case 'F': // Female
+ g = FEMALE;
+ break;
+
+ case 'C': // Company
+ g = COMPANY;
+ break;
+
+ default: // Unsupported
+ throw new IllegalArgumentException("gender " + gender + " is invalid.");
+ }
+
+ // Return it
+ //* NOISY-DEBUG: */ System.out.println("gender=" + g.getClass().getName());
+ return g;
+ }
+
+ /**
+ * Valid chars
+ *
+ * @return Valid chars
+ */
+ public static char[] validChars () {
+ // Is cache set?
+ if (validChars != null) {
+ // Return it
+ return validChars;
+ }
+
+ // Init array
+ char[] valid = new char[3];
+
+ // Get values
+ int i = 0;
+ for (Object value : values()) {
+ // First cast
+ Gender gender = (Gender) value;
+
+ // Debug message
+ //* NOISY-DEBUG: */ System.out.println("gender=" + gender);
+ // Is it UNKNOWN?
+ if (gender.equals(Gender.UNKNOWN)) {
+ // Skip this
+ continue;
+ }
+
+ // Debug message
+ //* NOISY-DEBUG: */ System.out.println(MessageFormat.format("gender={0} - adding at pos {1} ...", gender, i));
+ // Get database value as this is also the access
+ valid[i] = gender.getDatabaseValue().charAt(0);
+
+ // Increment index
+ i++;
+ }
+
+ // Set it here
+ validChars = valid;
+
+ // Return finialized array
+ return valid;
+ }
+
+ /**
+ * Database value
+ */
+ private final String databaseValue;
+
+ /**
+ * Output value (for messages)
+ */
+ private final String messageKey;
+
+ /**
+ * Constructor
+ *
+ * @param databaseValue Value being stored in database
+ * @param messageKey Message key for resource file
+ */
+ private Gender (final String databaseValue, final String messageKey) {
+ // Set both
+ this.databaseValue = databaseValue;
+ this.messageKey = messageKey;
+ }
+
+ /**
+ * Database value
+ *
+ * @return the databaseValue
+ */
+ protected String getDatabaseValue () {
+ return this.databaseValue;
+ }
+
+ /**
+ * Output value (for messages)
+ *
+ * @return the messageKey
+ */
+ protected String getMessageKey () {
+ return this.messageKey;
+ }
+
+ /**
+ * Overwritten to return human-readable strings
+ *
+ * @return Human-readable strings
+ */
+ @Override
+ public String toString () {
+ // Get key from bundle and return it
+ return BaseFrameworkSystem.getInstance().getMessageStringFromKey(this.getMessageKey());
+ }
+}