From eb98bf71c1ef80b7dc42baf1d441579f0f3f6ed8 Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Thu, 6 Aug 2015 13:46:51 +0200 Subject: [PATCH 1/1] =?utf8?q?Moved=20more=20stuff=20from=20addressbook=20?= =?utf8?q?to=20here=20Signed-off-by:Roland=20H=C3=A4der=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../mxchange/jcore/BaseFrameworkSystem.java | 369 ++++----- .../jcore/application/BaseApplication.java | 16 + src/org/mxchange/jcore/client/Client.java | 22 + .../mxchange/jcore/contact/BaseContact.java | 702 ++++++++++++++++++ src/org/mxchange/jcore/contact/Contact.java | 194 +++++ src/org/mxchange/jcore/contact/Gender.java | 179 +++++ 6 files changed, 1311 insertions(+), 171 deletions(-) create mode 100644 src/org/mxchange/jcore/application/BaseApplication.java create mode 100644 src/org/mxchange/jcore/contact/BaseContact.java create mode 100644 src/org/mxchange/jcore/contact/Contact.java create mode 100644 src/org/mxchange/jcore/contact/Gender.java diff --git a/src/org/mxchange/jcore/BaseFrameworkSystem.java b/src/org/mxchange/jcore/BaseFrameworkSystem.java index bbaf0a4..50c199d 100644 --- a/src/org/mxchange/jcore/BaseFrameworkSystem.java +++ b/src/org/mxchange/jcore/BaseFrameworkSystem.java @@ -42,12 +42,21 @@ import org.mxchange.jcore.manager.Manageable; * @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 */ @@ -58,10 +67,6 @@ public class BaseFrameworkSystem implements FrameworkInterface { */ private Application application; - /** - * Bundle instance - */ - private static ResourceBundle bundle; /** * Client instance @@ -83,6 +88,7 @@ public class BaseFrameworkSystem implements FrameworkInterface { */ private DatabaseFrontend wrapper; + /** * Initialize object */ @@ -90,36 +96,180 @@ public class BaseFrameworkSystem implements FrameworkInterface { 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 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 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) 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 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; } /** @@ -132,6 +282,24 @@ public class BaseFrameworkSystem implements FrameworkInterface { 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 * @@ -409,161 +577,6 @@ public class BaseFrameworkSystem implements FrameworkInterface { 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 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 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) 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 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 * @@ -653,6 +666,20 @@ public class BaseFrameworkSystem implements FrameworkInterface { 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. diff --git a/src/org/mxchange/jcore/application/BaseApplication.java b/src/org/mxchange/jcore/application/BaseApplication.java new file mode 100644 index 0000000..92f6f26 --- /dev/null +++ b/src/org/mxchange/jcore/application/BaseApplication.java @@ -0,0 +1,16 @@ +/* + * 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 { +} diff --git a/src/org/mxchange/jcore/client/Client.java b/src/org/mxchange/jcore/client/Client.java index 7a917d0..230d291 100644 --- a/src/org/mxchange/jcore/client/Client.java +++ b/src/org/mxchange/jcore/client/Client.java @@ -17,6 +17,7 @@ package org.mxchange.jcore.client; import org.mxchange.jcore.FrameworkInterface; +import org.mxchange.jcore.contact.Contact; /** * An interface for application clients @@ -58,4 +59,25 @@ public interface Client extends FrameworkInterface { * 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); } diff --git a/src/org/mxchange/jcore/contact/BaseContact.java b/src/org/mxchange/jcore/contact/BaseContact.java new file mode 100644 index 0000000..a30dcc5 --- /dev/null +++ b/src/org/mxchange/jcore/contact/BaseContact.java @@ -0,0 +1,702 @@ +/* + * 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 . + */ +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; + } +} diff --git a/src/org/mxchange/jcore/contact/Contact.java b/src/org/mxchange/jcore/contact/Contact.java new file mode 100644 index 0000000..ba1ddd6 --- /dev/null +++ b/src/org/mxchange/jcore/contact/Contact.java @@ -0,0 +1,194 @@ +/* + * 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 . + */ +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); +} diff --git a/src/org/mxchange/jcore/contact/Gender.java b/src/org/mxchange/jcore/contact/Gender.java new file mode 100644 index 0000000..2c415dd --- /dev/null +++ b/src/org/mxchange/jcore/contact/Gender.java @@ -0,0 +1,179 @@ +/* + * 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 . + */ +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()); + } +} -- 2.39.2