2 * Copyright (C) 2015 Roland Haeder
\r
4 * This program is free software: you can redistribute it and/or modify
\r
5 * it under the terms of the GNU General Public License as published by
\r
6 * the Free Software Foundation, either version 3 of the License, or
\r
7 * (at your option) any later version.
\r
9 * This program is distributed in the hope that it will be useful,
\r
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
12 * GNU General Public License for more details.
\r
14 * You should have received a copy of the GNU General Public License
\r
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
\r
17 package org.mxchange.addressbook.manager.contact;
\r
19 import java.util.ArrayList;
\r
20 import java.util.Iterator;
\r
21 import java.util.List;
\r
22 import org.mxchange.addressbook.UnhandledUserChoiceException;
\r
23 import org.mxchange.addressbook.client.Client;
\r
24 import org.mxchange.addressbook.contact.Contact;
\r
25 import org.mxchange.addressbook.contact.user.UserContact;
\r
26 import org.mxchange.addressbook.manager.BaseManager;
\r
29 * A manager for contacts
\r
31 * @author Roland Haeder
\r
35 public class ContactManager extends BaseManager implements ManageableContact {
\r
40 private final List<Contact> contacts;
\r
43 * @param maxContacts Maximum allowed contacts
\r
44 * @param client Client instance to use
\r
46 public ContactManager (final int maxContacts, final Client client) {
\r
47 // Always call super constructor first
\r
51 this.contacts = new ArrayList<>(maxContacts);
\r
54 //* NOISY-DEBUG: */ this.getLogger().debug("client=" + client);
\r
57 this.setClient(client);
\r
61 * Adds given contact to address book
\r
63 * @param contact Contact being added
\r
64 * @todo Add check for book size
\r
67 public void addContact (final Contact contact) {
\r
68 // Check if contact is found
\r
69 if (this.isContactAlreadyAdded(contact)) {
\r
70 // Contact already added
\r
71 // @todo Do something here
\r
72 } else if ((contact.isOwnContact()) && (this.isOwnContactAdded())) {
\r
73 // Own contact already added
\r
74 // @todo Do something
\r
78 /* NOISY-DEBUG: */ this.getLogger().debug("Adding '" + contact.getSurname() + "' '" + contact.getFamilyName() + "' at pos '" + this.size () + "' ...");
\r
81 this.contacts.add(contact);
\r
85 * Let the user add a new other address
\r
88 public void addOtherAddress () {
\r
89 throw new UnsupportedOperationException("Not supported yet.");
\r
93 * Let the user change address data
\r
95 * @param contact Instance to change data
\r
96 * @param client Client instance to call back
\r
99 public void changeAddressData (final Contact contact, final Client client) {
\r
100 throw new UnsupportedOperationException("Not supported yet.");
\r
104 * Let the user change "name data"
\r
106 * @param contact Instance to change data
\r
107 * @param client Client instance to call back
\r
110 public void changeNameData (final Contact contact, final Client client) {
\r
111 // First display them again
\r
112 client.displayNameBox(contact);
\r
114 // Is this own data?
\r
115 if (contact.isOwnContact()) {
\r
118 char gender = this.enterOwnGender();
\r
121 String surname = this.enterOwnSurname();
\r
124 String familyName = this.enterOwnFamilyName();
\r
127 String companyName = this.enterCompanyName();
\r
129 // Update contact instance
\r
130 contact.updateNameData(gender, surname, familyName, companyName);
\r
132 // Then re-ask them ...
\r
133 throw new UnsupportedOperationException("Changing contact entries not finished.");
\r
138 * Let the user change other address
\r
141 public void changeOtherAddress () {
\r
142 throw new UnsupportedOperationException("Not supported yet.");
\r
146 * Let the user change other data
\r
148 * @param contact Instance to change data
\r
149 * @param client Client instance to call back
\r
152 public void changeOtherData (final Contact contact, final Client client) {
\r
153 throw new UnsupportedOperationException("Not supported yet.");
\r
157 * Allows the user to change his/her own data
\r
160 public void changeOwnData () {
\r
162 * First check if the user has registered own contact, before that
\r
163 * nothing can be changed.
\r
165 if (!this.isOwnContactAdded()) {
\r
167 this.getClient().displayMessage("Sie haben noch nicht Ihre Daten eingegeben.");
\r
169 // Skip any below code
\r
174 Contact contact = this.getOwnContact();
\r
176 // It must be found
\r
177 assert(contact instanceof Contact);
\r
180 contact.show(this.getClient());
\r
183 // Ask user what to change
\r
184 this.getClient().doUserChangeAdressChoice(contact);
\r
185 } catch (final UnhandledUserChoiceException ex) {
\r
186 this.getLogger().catching(ex);
\r
191 * Let the user delete other address
\r
194 public void deleteOtherAddress () {
\r
195 throw new UnsupportedOperationException("Not supported yet.");
\r
199 * Asks user for own data
\r
202 public void enterOwnData () {
\r
203 // First ask for gender
\r
204 char gender = this.enterOwnGender();
\r
207 String surname = this.enterOwnSurname();
\r
209 // And 3rd for family name
\r
210 String familyName = this.enterOwnFamilyName();
\r
212 // Company name ...
\r
213 String companyName = this.enterCompanyName();
\r
215 // Construct UserContact instance
\r
216 Contact contact = new UserContact(gender, surname, familyName, companyName);
\r
218 // Mark contact as own
\r
219 contact.enableFlagOwnContact();
\r
221 // Add it to contact "book"
\r
222 this.addContact(contact);
\r
228 * @return size of contact "book"
\r
231 public int size () {
\r
232 return this.contacts.size();
\r
236 * Asks the user for his/her company name
\r
239 private String enterCompanyName () {
\r
240 return this.getClient().enterString(5, 50, "Bitte geben Sie Ihre Firmenbezeichnung ein: ", true);
\r
244 * Asks the user for family name
\r
245 * @return Family name of the user
\r
247 private String enterOwnFamilyName () {
\r
248 return this.getClient().enterString(2, 50, "Bitte geben Sie Ihren Nachnamen ein: ", false);
\r
252 * Asks the user for gender, until a valid has been entered
\r
253 * @return Gender of the user
\r
255 private char enterOwnGender () {
\r
256 return this.getClient().enterChar(new char[] {'M', 'F', 'C'}, "Bitte geben Sie die Anrede ein: (M=Herr, F=Frau, C=Firma): ");
\r
260 * Asks the user for surname
\r
261 * @return Surname of the user
\r
263 private String enterOwnSurname () {
\r
264 return this.getClient().enterString(2, 50, "Bitte geben Sie Ihren Vornamen ein: ", false);
\r
268 * "Getter" for own contact instance or null if not found
\r
270 * @return Contact instance or null
\r
272 private Contact getOwnContact () {
\r
273 // Now get it back from address book, first get an iterator
\r
274 Iterator<Contact> iterator = this.contacts.iterator();
\r
277 Contact contact = null;
\r
279 // Search all contact
\r
280 while (iterator.hasNext()) {
\r
281 // Get next instance
\r
282 Contact next = iterator.next();
\r
284 // Is this own contact?
\r
285 if (next.isOwnContact()) {
\r
293 // Return instance or null
\r
298 * Checks whether given contact was found in "address book"
\r
300 * @param checkContact Contact to be checked
\r
301 * @return TRUE if found, FALSE if not found
\r
303 private boolean isContactAlreadyAdded (final Contact checkContact) throws NullPointerException {
\r
304 // Default is not found
\r
305 boolean isFound = false;
\r
308 //* NOISY-DEBUG: */ this.getLogger().debug("Checking '" + this.contacts.length + "' entries...");
\r
310 // Now get it back from address book, first get an iterator
\r
311 Iterator<Contact> iterator = this.contacts.iterator();
\r
314 while (iterator.hasNext()) {
\r
316 Contact contact = iterator.next();
\r
319 //* NOISY-DEBUG: */ this.getLogger().debug("contact=" + contact + ",checkContent=" + checkContact);
\r
322 if ((contact instanceof Contact) && ((contact.equals(checkContact)))) {
\r
323 // Found matching entry
\r
334 * Checks whether own contact is already added by checking all entries for isOwnContact flag
\r
335 * @return Whether own contact is already added
\r
337 private boolean isOwnContactAdded () {
\r
338 // Default is not added
\r
339 boolean isAdded = false;
\r
341 // Now get it back from address book, first get an iterator
\r
342 Iterator<Contact> iterator = this.contacts.iterator();
\r
345 while (iterator.hasNext()) {
\r
347 Contact contact = iterator.next();
\r
350 if (contact instanceof Contact) {
\r
352 isAdded = contact.isOwnContact();
\r
354 // Is this own contact?
\r