]> git.mxchange.org Git - addressbook-swing.git/blobdiff - Addressbook/src/org/mxchange/addressbook/manager/contact/ContactManager.java
Added a lot stuff:
[addressbook-swing.git] / Addressbook / src / org / mxchange / addressbook / manager / contact / ContactManager.java
index 096197be45fa6c1f9cdf312f87264662fce34293..1b269ec3e2a0632fb4d178f4316c26ccf16fc72c 100644 (file)
  */\r
 package org.mxchange.addressbook.manager.contact;\r
 \r
+import java.text.MessageFormat;\r
 import java.util.ArrayList;\r
+import java.util.Collections;\r
 import java.util.Iterator;\r
 import java.util.List;\r
+import org.mxchange.addressbook.UnhandledUserChoiceException;\r
 import org.mxchange.addressbook.client.Client;\r
 import org.mxchange.addressbook.contact.Contact;\r
 import org.mxchange.addressbook.contact.user.UserContact;\r
+import org.mxchange.addressbook.database.frontend.contact.ContactDatabaseFrontend;\r
+import org.mxchange.addressbook.database.frontend.contact.ContactWrapper;\r
 import org.mxchange.addressbook.manager.BaseManager;\r
 \r
 /**\r
- * A manager for contacts\r
+ * A manager for contacts, please note that this implementation loads the whole\r
+ * list into RAM.\r
  *\r
  * @author Roland Haeder\r
  * @version 0.0\r
@@ -34,7 +40,12 @@ import org.mxchange.addressbook.manager.BaseManager;
 public class ContactManager extends BaseManager implements ManageableContact {\r
 \r
     /**\r
-     * All contacts\r
+     * A ContactWrapper instance\r
+     */\r
+    private final ContactWrapper contactDatabase;\r
+\r
+    /**\r
+     * A list of all contacts\r
      */\r
     private final List<Contact> contacts;\r
 \r
@@ -49,6 +60,12 @@ public class ContactManager extends BaseManager implements ManageableContact {
        // Init contacts\r
        this.contacts = new ArrayList<>(maxContacts);\r
 \r
+       // Init database connection\r
+       this.contactDatabase = new ContactDatabaseFrontend();\r
+\r
+       // Read all entries\r
+       this.contactDatabase.readAllContacts(this);\r
+\r
        // Debug message\r
        //* NOISY-DEBUG: */ this.getLogger().debug("client=" + client);\r
 \r
@@ -57,26 +74,12 @@ public class ContactManager extends BaseManager implements ManageableContact {
     }\r
 \r
     /**\r
-     * Adds given contact to address book\r
+     * Adds given Contact instance to list\r
      *\r
-     * @param contact Contact being added\r
-     * @todo Add check for book size\r
+     * @param contact Contact instance to add\r
      */\r
     @Override\r
     public void addContact (final Contact contact) {\r
-       // Check if contact is found\r
-       if (this.isContactAlreadyAdded(contact)) {\r
-           // Contact already added\r
-           // @todo Do something here\r
-       } else if ((contact.isOwnContact()) && (this.isOwnContactAdded())) {\r
-           // Own contact already added\r
-           // @todo Do something\r
-       }\r
-\r
-       // Debug message\r
-       /* NOISY-DEBUG: */ this.getLogger().debug("Adding '" + contact.getSurname() + "' '" + contact.getFamilyName() + "' at pos '" + this.size () + "' ...");\r
-\r
-       // Add contact\r
        this.contacts.add(contact);\r
     }\r
 \r
@@ -102,25 +105,32 @@ public class ContactManager extends BaseManager implements ManageableContact {
     @Override\r
     public void changeOwnData () {\r
        /*\r
-        * First check if the user has registered own contact, before that \r
+        * First check if the user has registered own contact, before that\r
         * nothing can be changed.\r
         */\r
        if (!this.isOwnContactAdded()) {\r
            // Not added\r
-           this.getClient().displayMessage("Sie haben noch nicht Ihre Daten eingegeben.");\r
-\r
+           this.getClient().outputMessage("Sie haben noch nicht Ihre Daten eingegeben.");\r
+           \r
            // Skip any below code\r
            return;\r
        }\r
-\r
+       \r
        // Instance\r
        Contact contact = this.getOwnContact();\r
-\r
+       \r
        // It must be found\r
        assert(contact instanceof Contact);\r
-\r
-       // @TODO Unfinished\r
-       throw new UnsupportedOperationException("Method is not finished.");\r
+       \r
+       // Display contact\r
+       contact.show(this.getClient());\r
+       \r
+       try {\r
+           // Ask user what to change\r
+           this.getClient().userChooseChangeContactData(contact);\r
+       } catch (final UnhandledUserChoiceException ex) {\r
+           this.getLogger().catching(ex);\r
+       }\r
     }\r
 \r
     /**\r
@@ -131,11 +141,125 @@ public class ContactManager extends BaseManager implements ManageableContact {
        throw new UnsupportedOperationException("Not supported yet.");\r
     }\r
 \r
+    /**\r
+     * Let the user change address data\r
+     * \r
+     * @param contact Instance to change data\r
+     * @param client Client instance to call back\r
+     */\r
+    @Override\r
+    public void doChangeAddressData (final Contact contact, final Client client) {\r
+       // First display it again\r
+       client.displayAddressBox(contact);\r
+\r
+       // Is it own data?\r
+       if (contact.isOwnContact()) {\r
+           // Own address data\r
+           String street = this.enterOwnStreet();\r
+\r
+           // Get zip code\r
+           int zipCode = this.enterOwnZipCode();\r
+\r
+           // Get city name\r
+           String city = this.enterOwnCity();\r
+\r
+           // Get country code\r
+           String countryCode = this.enterOwnCountryCode();\r
+\r
+           // Update address data\r
+           contact.updateAddressData(street, zipCode, city, countryCode);\r
+       } else {\r
+           // Other contact's address data to change\r
+           throw new UnsupportedOperationException("Changing contact entries not finished.");\r
+       }\r
+\r
+       // Flush whole list\r
+       this.flush();\r
+    }\r
+\r
+    /**\r
+     * Let the user change "name data"\r
+     * \r
+     * @param contact Instance to change data\r
+     * @param client Client instance to call back\r
+     */\r
+    @Override\r
+    public void doChangeNameData (final Contact contact, final Client client) {\r
+       // First display them again\r
+       client.displayNameBox(contact);\r
+\r
+       // Is this own data?\r
+       if (contact.isOwnContact()) {\r
+           // Re-ask own data\r
+           // Gender:\r
+           char gender = this.enterOwnGender();\r
+\r
+           // Surname\r
+           String surname = this.enterOwnSurname();\r
+\r
+           // Family name\r
+           String familyName = this.enterOwnFamilyName();\r
+\r
+           // And company\r
+           String companyName = this.enterOwnCompanyName();\r
+\r
+           // Update contact instance\r
+           contact.updateNameData(gender, surname, familyName, companyName);\r
+       } else {\r
+           // Then re-ask them ...\r
+           throw new UnsupportedOperationException("Changing contact entries not finished.");\r
+       }\r
+\r
+       // Flush whole list\r
+       this.flush();\r
+    }\r
+\r
+    /**\r
+     * Let the user change other data\r
+     *\r
+     * @param contact Instance to change data\r
+     * @param client Client instance to call back\r
+     * @todo Didn't handle birthday\r
+     */\r
+    @Override\r
+    public void doChangeOtherData (final Contact contact, final Client client) {\r
+       // First display them again\r
+       client.displayOtherDataBox(contact);\r
+\r
+       // Is this own data?\r
+       if (contact.isOwnContact()) {\r
+           // Re-ask own data\r
+           // Phone number\r
+           String phoneNumber = this.enterOwnPhoneNumber();\r
+\r
+           // Phone number\r
+           String cellNumber = this.enterOwnCellNumber();\r
+\r
+           // Fax number\r
+           String faxNumber = this.enterOwnFaxNumber();\r
+\r
+           // Email address\r
+           String email = this.enterOwnEmailAddress();\r
+\r
+           // Comment\r
+           String comment = this.enterOwnComment();\r
+\r
+           // Update contact instance\r
+           contact.updateOtherData(phoneNumber, cellNumber, faxNumber, email, null, comment);\r
+       } else {\r
+           // Then re-ask them ...\r
+           throw new UnsupportedOperationException("Changing contact entries not finished.");\r
+       }\r
+\r
+       // Flush whole list\r
+       this.flush();\r
+    }\r
+\r
     /**\r
      * Asks user for own data\r
      */\r
     @Override\r
-    public void enterOwnData () {\r
+    public void doEnterOwnData () {\r
        // First ask for gender\r
        char gender = this.enterOwnGender();\r
 \r
@@ -145,14 +269,70 @@ public class ContactManager extends BaseManager implements ManageableContact {
        // And 3rd for family name\r
        String familyName = this.enterOwnFamilyName();\r
 \r
-       // Construct UserContact instance\r
-       Contact contact = new UserContact(gender, surname, familyName);\r
+       // Company name ...\r
+       String companyName = this.enterOwnCompanyName();\r
 \r
-       // Mark contact as own\r
-       contact.enableFlagOwnContact();\r
+       // Construct UserContact instance\r
+       Contact contact = new UserContact(gender, surname, familyName, companyName);\r
 \r
        // Add it to contact "book"\r
+       this.registerContact(contact);\r
+    }\r
+\r
+    /**\r
+     * Shuts down this contact manager\r
+     */\r
+    @Override\r
+    public void doShutdown () {\r
+       // Shut down the database layer\r
+       this.contactDatabase.doShutdown();\r
+    }\r
+\r
+    /**\r
+     * Getter for whole contact list\r
+     * \r
+     * @return List of all contacts\r
+     */\r
+    @Override\r
+    public List<Contact> getList () {\r
+       return Collections.unmodifiableList(this.contacts);\r
+    }\r
+\r
+    @Override\r
+    public void listContacts () {\r
+       throw new UnsupportedOperationException("Not supported yet.");\r
+    }\r
+\r
+    /**\r
+     * Adds given contact to address book and flushes all entries to database\r
+     *\r
+     * @param contact Contact being added\r
+     * @todo Add check for book size\r
+     */\r
+    @Override\r
+    public void registerContact (final Contact contact) {\r
+       // Check if contact is found\r
+       if (this.isContactAlreadyAdded(contact)) {\r
+           // Contact already added\r
+           // @todo Do something here\r
+       } else if ((contact.isOwnContact()) && (this.isOwnContactAdded())) {\r
+           // Own contact already added\r
+           // @todo Do something\r
+       }\r
+       \r
+       // Debug message\r
+       /* NOISY-DEBUG: */ this.getLogger().debug(MessageFormat.format("Adding '{0}' '{1}' at pos '{2}' ...", contact.getSurname(), contact.getFamilyName(), this.size()));\r
+       \r
+       // Add contact to internal list\r
        this.addContact(contact);\r
+       \r
+       // Flush whole list\r
+       this.flush();\r
+    }\r
+\r
+    @Override\r
+    public void searchContacts () {\r
+       throw new UnsupportedOperationException("Not supported yet.");\r
     }\r
 \r
     /**\r
@@ -165,28 +345,134 @@ public class ContactManager extends BaseManager implements ManageableContact {
        return this.contacts.size();\r
     }\r
 \r
+    /**\r
+     * Asks the user for his/her cellphone number\r
+     * \r
+     * @return User's cellphone number\r
+     */\r
+    private String enterOwnCellNumber () {\r
+       return this.getClient().enterString(5, 30, "Bitte geben Sie Ihre Handynummer an: ", true);\r
+    }\r
+\r
+    /**\r
+     * Asks the user for his/her city's name\r
+     *\r
+     * @return City's name of the user\r
+     */\r
+    private String enterOwnCity () {\r
+       return this.getClient().enterString(3, 50, "Bitte geben Sie Ihre Wohnort ein: ", false);\r
+    }\r
+\r
+    /**\r
+     * Asks the user for his/her city's name\r
+     *\r
+     * @return City's name of the user\r
+     */\r
+    private String enterOwnComment () {\r
+       return this.getClient().enterString(0, 100, "Kommentar zu Ihrem Eintrag: ", true);\r
+    }\r
+\r
+    /**\r
+     * Asks the user for his/her company name\r
+     * \r
+     * @return User's company name\r
+     */\r
+    private String enterOwnCompanyName () {\r
+       return this.getClient().enterString(5, 50, "Bitte geben Sie Ihre Firmenbezeichnung ein: ", true);\r
+    }\r
+\r
+    /**\r
+     * Asks user for his/her own country code\r
+     * \r
+     * @return User's own country code\r
+     */\r
+    private String enterOwnCountryCode () {\r
+       return this.getClient().enterString(2, 2, "Bitte geben Sie den zweistelligen Ländercode von Ihrem Land ein: ", false).toUpperCase();\r
+    }\r
+\r
+    /**\r
+     * Asks user for his/her own country code\r
+     * \r
+     * @return User's own country code\r
+     */\r
+    private String enterOwnEmailAddress () {\r
+       return this.getClient().enterString(10, 50, "Bitte geben Sie Ihre Email-Adresse ein: ", true);\r
+    }\r
+\r
     /**\r
      * Asks the user for family name\r
+     * \r
      * @return Family name of the user\r
      */\r
     private String enterOwnFamilyName () {\r
-       return this.getClient().enterString(2, 50, "Bitte geben Sie Ihren Nachnamen ein: ");\r
+       return this.getClient().enterString(2, 50, "Bitte geben Sie Ihren Nachnamen ein: ", false);\r
+    }\r
+\r
+    /**\r
+     * Asks the user for family name\r
+     * \r
+     * @return Family name of the user\r
+     */\r
+    private String enterOwnFaxNumber () {\r
+       return this.getClient().enterString(5, 30, "Bitte geben Sie Ihre Faxnummer an: ", true);\r
     }\r
 \r
     /**\r
      * Asks the user for gender, until a valid has been entered\r
+     * \r
      * @return Gender of the user\r
      */\r
     private char enterOwnGender () {\r
        return this.getClient().enterChar(new char[] {'M', 'F', 'C'}, "Bitte geben Sie die Anrede ein: (M=Herr, F=Frau, C=Firma): ");\r
     }\r
 \r
+    /**\r
+     * Asks the user for phone number\r
+     * \r
+     * @return Phone number of the user\r
+     */\r
+    private String enterOwnPhoneNumber () {\r
+       return this.getClient().enterString(5, 30, "Bitte geben Sie Ihre Telefonnummer an: ", true);\r
+    }\r
+\r
+    /**\r
+     * Asks the user for own street (including number)\r
+     */\r
+    private String enterOwnStreet () {\r
+       return this.getClient().enterString(5, 50, "Bitte geben Sie Ihre Strasse und Hausnummer ein: ", false);\r
+    }\r
+\r
     /**\r
      * Asks the user for surname\r
      * @return Surname of the user\r
      */\r
     private String enterOwnSurname () {\r
-       return this.getClient().enterString(2, 50, "Bitte geben Sie Ihren Vornamen ein: ");\r
+       return this.getClient().enterString(2, 50, "Bitte geben Sie Ihren Vornamen ein: ", false);\r
+    }\r
+\r
+    /**\r
+     * Asks the user for own ZIP code\r
+     * @return ZIP code\r
+     */\r
+    private int enterOwnZipCode () {\r
+       return this.getClient().enterInt(0, 99_999, "Bitte geben Sie Ihre Postleitzahl ein: ");\r
+    }\r
+\r
+    /**\r
+     * Flushes all entries by calling database backend\r
+     */\r
+    private void flush () {\r
+       // Flusgh all\r
+       this.getContactDatabase().flushAllContacts(this);\r
+    }\r
+\r
+    /**\r
+     * A ContactWrapper instance\r
+     *\r
+     * @return the database\r
+     */\r
+    private ContactWrapper getContactDatabase () {\r
+       return this.contactDatabase;\r
     }\r
 \r
     /**\r
@@ -256,7 +542,9 @@ public class ContactManager extends BaseManager implements ManageableContact {
     }\r
 \r
     /**\r
-     * Checks whether own contact is already added by checking all entries for isOwnContact flag\r
+     * Checks whether own contact is already added by checking all entries for\r
+     * isOwnContact flag\r
+     * \r
      * @return Whether own contact is already added\r
      */\r
     private boolean isOwnContactAdded () {\r