]> git.mxchange.org Git - jaddressbook-share-lib.git/blob - Addressbook/src/org/mxchange/addressbook/manager/contact/ContactManager.java
Introduced updateNameData() + changing own "name data" is basicly finished
[jaddressbook-share-lib.git] / Addressbook / src / org / mxchange / addressbook / manager / contact / ContactManager.java
1 /*\r
2  * Copyright (C) 2015 Roland Haeder\r
3  *\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
8  *\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
13  *\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
16  */\r
17 package org.mxchange.addressbook.manager.contact;\r
18 \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
27 \r
28 /**\r
29  * A manager for contacts\r
30  *\r
31  * @author Roland Haeder\r
32  * @version 0.0\r
33  * @since 0.0\r
34  */\r
35 public class ContactManager extends BaseManager implements ManageableContact {\r
36 \r
37     /**\r
38      * All contacts\r
39      */\r
40     private final List<Contact> contacts;\r
41 \r
42     /**\r
43      * @param maxContacts Maximum allowed contacts\r
44      * @param client Client instance to use\r
45      */\r
46     public ContactManager (final int maxContacts, final Client client) {\r
47         // Always call super constructor first\r
48         super();\r
49 \r
50         // Init contacts\r
51         this.contacts = new ArrayList<>(maxContacts);\r
52 \r
53         // Debug message\r
54         //* NOISY-DEBUG: */ this.getLogger().debug("client=" + client);\r
55 \r
56         // Init client\r
57         this.setClient(client);\r
58     }\r
59 \r
60     /**\r
61      * Adds given contact to address book\r
62      *\r
63      * @param contact Contact being added\r
64      * @todo Add check for book size\r
65      */\r
66     @Override\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
75         }\r
76 \r
77         // Debug message\r
78         /* NOISY-DEBUG: */ this.getLogger().debug("Adding '" + contact.getSurname() + "' '" + contact.getFamilyName() + "' at pos '" + this.size () + "' ...");\r
79 \r
80         // Add contact\r
81         this.contacts.add(contact);\r
82     }\r
83 \r
84     /**\r
85      * Let the user add a new other address\r
86      */\r
87     @Override\r
88     public void addOtherAddress () {\r
89         throw new UnsupportedOperationException("Not supported yet.");\r
90     }\r
91 \r
92     /**\r
93      * Let the user change address data\r
94      * \r
95      * @param contact Instance to change data\r
96      * @param client Client instance to call back\r
97      */\r
98     @Override\r
99     public void changeAddressData (final Contact contact, final Client client) {\r
100         throw new UnsupportedOperationException("Not supported yet.");\r
101     }\r
102 \r
103     /**\r
104      * Let the user change "name data"\r
105      * \r
106      * @param contact Instance to change data\r
107      * @param client Client instance to call back\r
108      */\r
109     @Override\r
110     public void changeNameData (final Contact contact, final Client client) {\r
111         // First display them again\r
112         client.displayNameBox(contact);\r
113 \r
114         // Is this own data?\r
115         if (contact.isOwnContact()) {\r
116             // Re-ask own data\r
117             // Gender:\r
118             char gender = this.enterOwnGender();\r
119 \r
120             // Surname\r
121             String surname = this.enterOwnSurname();\r
122 \r
123             // Family name\r
124             String familyName = this.enterOwnFamilyName();\r
125 \r
126             // And company\r
127             String companyName = this.enterCompanyName();\r
128 \r
129             // Update contact instance\r
130             contact.updateNameData(gender, surname, familyName, companyName);\r
131         } else {\r
132             // Then re-ask them ...\r
133             throw new UnsupportedOperationException("Changing contact entries not finished.");\r
134         }\r
135     }\r
136 \r
137     /**\r
138      * Let the user change other address\r
139      */\r
140     @Override\r
141     public void changeOtherAddress () {\r
142         throw new UnsupportedOperationException("Not supported yet.");\r
143     }\r
144 \r
145     /**\r
146      * Let the user change other data\r
147      *\r
148      * @param contact Instance to change data\r
149      * @param client Client instance to call back\r
150      */\r
151     @Override\r
152     public void changeOtherData (final Contact contact, final Client client) {\r
153         throw new UnsupportedOperationException("Not supported yet.");\r
154     }\r
155 \r
156     /**\r
157      * Allows the user to change his/her own data\r
158      */\r
159     @Override\r
160     public void changeOwnData () {\r
161         /*\r
162          * First check if the user has registered own contact, before that \r
163          * nothing can be changed.\r
164          */\r
165         if (!this.isOwnContactAdded()) {\r
166             // Not added\r
167             this.getClient().displayMessage("Sie haben noch nicht Ihre Daten eingegeben.");\r
168 \r
169             // Skip any below code\r
170             return;\r
171         }\r
172 \r
173         // Instance\r
174         Contact contact = this.getOwnContact();\r
175 \r
176         // It must be found\r
177         assert(contact instanceof Contact);\r
178 \r
179         // Display contact\r
180         contact.show(this.getClient());\r
181 \r
182         try {\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
187         }\r
188     }\r
189 \r
190     /**\r
191      * Let the user delete other address\r
192      */\r
193     @Override\r
194     public void deleteOtherAddress () {\r
195         throw new UnsupportedOperationException("Not supported yet.");\r
196     }\r
197 \r
198     /**\r
199      * Asks user for own data\r
200      */\r
201     @Override\r
202     public void enterOwnData () {\r
203         // First ask for gender\r
204         char gender = this.enterOwnGender();\r
205 \r
206         // 2nd for surname\r
207         String surname = this.enterOwnSurname();\r
208         \r
209         // And 3rd for family name\r
210         String familyName = this.enterOwnFamilyName();\r
211 \r
212         // Company name ...\r
213         String companyName = this.enterCompanyName();\r
214 \r
215         // Construct UserContact instance\r
216         Contact contact = new UserContact(gender, surname, familyName, companyName);\r
217 \r
218         // Mark contact as own\r
219         contact.enableFlagOwnContact();\r
220 \r
221         // Add it to contact "book"\r
222         this.addContact(contact);\r
223     }\r
224 \r
225     /**\r
226      * Getter for size\r
227      *\r
228      * @return size of contact "book"\r
229      */\r
230     @Override\r
231     public int size () {\r
232         return this.contacts.size();\r
233     }\r
234 \r
235     /**\r
236      * Asks the user for his/her company name\r
237      * @return \r
238      */\r
239     private String enterCompanyName () {\r
240         return this.getClient().enterString(5, 50, "Bitte geben Sie Ihre Firmenbezeichnung ein: ", true);\r
241     }\r
242 \r
243     /**\r
244      * Asks the user for family name\r
245      * @return Family name of the user\r
246      */\r
247     private String enterOwnFamilyName () {\r
248         return this.getClient().enterString(2, 50, "Bitte geben Sie Ihren Nachnamen ein: ", false);\r
249     }\r
250 \r
251     /**\r
252      * Asks the user for gender, until a valid has been entered\r
253      * @return Gender of the user\r
254      */\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
257     }\r
258 \r
259     /**\r
260      * Asks the user for surname\r
261      * @return Surname of the user\r
262      */\r
263     private String enterOwnSurname () {\r
264         return this.getClient().enterString(2, 50, "Bitte geben Sie Ihren Vornamen ein: ", false);\r
265     }\r
266 \r
267     /**\r
268      * "Getter" for own contact instance or null if not found\r
269      *\r
270      * @return Contact instance or null\r
271      */\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
275 \r
276         // Init instance\r
277         Contact contact = null;\r
278 \r
279         // Search all contact\r
280         while (iterator.hasNext()) {\r
281             // Get next instance\r
282             Contact next = iterator.next();\r
283 \r
284             // Is this own contact?\r
285             if (next.isOwnContact()) {\r
286                 // Found it\r
287                 contact = next;\r
288                 break;\r
289                 \r
290             }\r
291         }\r
292 \r
293         // Return instance or null\r
294         return contact;\r
295     }\r
296 \r
297     /**\r
298      * Checks whether given contact was found in "address book"\r
299      *\r
300      * @param checkContact Contact to be checked\r
301      * @return TRUE if found, FALSE if not found\r
302      */\r
303     private boolean isContactAlreadyAdded (final Contact checkContact) throws NullPointerException {\r
304         // Default is not found\r
305         boolean isFound = false;\r
306 \r
307         // Debug message\r
308         //* NOISY-DEBUG: */ this.getLogger().debug("Checking '" +  this.contacts.length + "' entries...");\r
309 \r
310         // Now get it back from address book, first get an iterator\r
311         Iterator<Contact> iterator = this.contacts.iterator();\r
312 \r
313         // Check entries\r
314         while (iterator.hasNext()) {\r
315             // Get next entry\r
316             Contact contact = iterator.next();\r
317 \r
318             // Debug message\r
319             //* NOISY-DEBUG: */ this.getLogger().debug("contact=" + contact + ",checkContent=" + checkContact);\r
320 \r
321             // Is it valid?\r
322             if ((contact instanceof Contact) && ((contact.equals(checkContact)))) {\r
323                 // Found matching entry\r
324                 isFound = true;\r
325                 break;\r
326             }\r
327         }\r
328 \r
329         // Return result\r
330         return isFound;\r
331     }\r
332 \r
333     /**\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
336      */\r
337     private boolean isOwnContactAdded () {\r
338         // Default is not added\r
339         boolean isAdded = false;\r
340 \r
341         // Now get it back from address book, first get an iterator\r
342         Iterator<Contact> iterator = this.contacts.iterator();\r
343 \r
344         // Check entries\r
345         while (iterator.hasNext()) {\r
346             // Get next entry\r
347             Contact contact = iterator.next();\r
348 \r
349             // Is it valid?\r
350             if (contact instanceof Contact) {\r
351                 // Get flag\r
352                 isAdded = contact.isOwnContact();\r
353 \r
354                 // Is this own contact?\r
355                 if (isAdded) {\r
356                     // Then abort loop\r
357                     break;\r
358                 }\r
359             }\r
360         }\r
361         // Return result\r
362         return isAdded;\r
363     }\r
364 }\r