]> git.mxchange.org Git - jcore.git/commitdiff
Moved more stuff from addressbook to here
authorRoland Haeder <roland@mxchange.org>
Thu, 6 Aug 2015 11:46:51 +0000 (13:46 +0200)
committerRoland Haeder <roland@mxchange.org>
Thu, 6 Aug 2015 11:46:51 +0000 (13:46 +0200)
Signed-off-by:Roland Häder <roland@mxchange.org>

src/org/mxchange/jcore/BaseFrameworkSystem.java
src/org/mxchange/jcore/application/BaseApplication.java [new file with mode: 0644]
src/org/mxchange/jcore/client/Client.java
src/org/mxchange/jcore/contact/BaseContact.java [new file with mode: 0644]
src/org/mxchange/jcore/contact/Contact.java [new file with mode: 0644]
src/org/mxchange/jcore/contact/Gender.java [new file with mode: 0644]

index bbaf0a4b2a87f6987c5db48f56812374e77c428d..50c199dbc7fb4467c9819567feb6e486dec3865b 100644 (file)
@@ -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<? 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;
        }
 
        /**
@@ -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<? 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
         *
@@ -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 (file)
index 0000000..92f6f26
--- /dev/null
@@ -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 {
+}
index 7a917d03b1b38969364b39dc045e03784b83af76..230d29110de89840244114431c4a228e5bb546f9 100644 (file)
@@ -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 (file)
index 0000000..a30dcc5
--- /dev/null
@@ -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 <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;
+       }
+}
diff --git a/src/org/mxchange/jcore/contact/Contact.java b/src/org/mxchange/jcore/contact/Contact.java
new file mode 100644 (file)
index 0000000..ba1ddd6
--- /dev/null
@@ -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 <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);
+}
diff --git a/src/org/mxchange/jcore/contact/Gender.java b/src/org/mxchange/jcore/contact/Gender.java
new file mode 100644 (file)
index 0000000..2c415dd
--- /dev/null
@@ -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 <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());
+       }
+}