2 * Copyright (C) 2016, 2017 Roland Häder
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU Affero General Public License as
6 * published by the Free Software Foundation, either version 3 of the
7 * License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Affero General Public License for more details.
14 * You should have received a copy of the GNU Affero General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 package org.mxchange.pizzaapplication.beans.contact.phone;
19 import java.text.MessageFormat;
20 import java.util.HashMap;
21 import java.util.LinkedList;
22 import java.util.List;
24 import java.util.Objects;
25 import javax.enterprise.context.SessionScoped;
26 import javax.enterprise.event.Observes;
27 import javax.inject.Inject;
28 import javax.inject.Named;
29 import org.mxchange.jcontacts.contact.Contact;
30 import org.mxchange.jcontacts.events.contact.add.ObservableAdminAddedContactEvent;
31 import org.mxchange.jcontacts.events.contact.update.ObservableAdminUpdatedContactEvent;
32 import org.mxchange.jcontacts.events.fax.unlinked.ObservableAdminUnlinkedFaxNumberEvent;
33 import org.mxchange.jcontacts.events.landline.unlinked.ObservableAdminUnlinkedLandLineNumberEvent;
34 import org.mxchange.jcontacts.events.mobile.unlinked.ObservableAdminUnlinkedMobileNumberEvent;
35 import org.mxchange.jphone.events.fax.created.ObservableCreatedFaxNumberEvent;
36 import org.mxchange.jphone.events.landline.created.ObservableCreatedLandLineNumberEvent;
37 import org.mxchange.jphone.events.mobile.created.ObservableCreatedMobileNumberEvent;
38 import org.mxchange.jphone.phonenumbers.DialableNumber;
39 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
40 import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
41 import org.mxchange.jphone.phonenumbers.mobile.DialableMobileNumber;
42 import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent;
43 import org.mxchange.pizzaapplication.beans.BasePizzaController;
44 import org.mxchange.pizzaapplication.beans.contact.PizzaContactWebSessionController;
45 import org.mxchange.pizzaapplication.beans.helper.PizzaWebRequestHelperController;
48 * A general contact bean (controller)
50 * @author Roland Häder<roland@mxchange.org>
52 @Named ("contactPhoneController")
54 public class PizzaContactPhoneWebSessionBean extends BasePizzaController implements PizzaContactPhoneWebSessionController {
59 private static final long serialVersionUID = 542_145_347_916L;
65 private PizzaWebRequestHelperController beanHelper;
68 * General contact controller
71 private PizzaContactWebSessionController contactController;
74 * "Cache" for contact's mobile, land-line and fax numbers. Currently one
75 * per each type is supported. Maybe later this will change into a OneToMany
76 * relationship (one contact, many numbers).
78 private final Map<DialableNumber, List<Contact>> contacts;
83 private DialableFaxNumber faxNumber;
88 private DialableLandLineNumber landLineNumber;
91 * Chosen mobile number
93 private DialableMobileNumber mobileNumber;
98 public PizzaContactPhoneWebSessionBean () {
99 // Call super constructor
103 this.contacts = new HashMap<>(10);
107 * Observes events being fired when an administrator has added a new
110 * @param event Event being fired
112 public void afterAdminAddedContactEvent (@Observes final ObservableAdminAddedContactEvent event) {
113 // The event must be valid
116 throw new NullPointerException("event is null"); //NOI18N
117 } else if (event.getAddedContact() == null) {
119 throw new NullPointerException("event.addedContact is null"); //NOI18N
120 } else if (event.getAddedContact().getContactId() == null) {
122 throw new NullPointerException("event.addedContact.contactId is null"); //NOI18N
123 } else if (event.getAddedContact().getContactId() < 1) {
125 throw new IllegalArgumentException(MessageFormat.format("event.addedContact.contactId={0} is not valid", event.getAddedContact().getContactId())); //NOI18N
133 * Event observer for newly added users by administrator
135 * @param event Event being fired
137 public void afterAdminAddedUserEvent (@Observes final ObservableAdminAddedUserEvent event) {
138 // event should not be null
141 throw new NullPointerException("event is null"); //NOI18N
142 } else if (event.getAddedUser() == null) {
144 throw new NullPointerException("event.addedUser is null"); //NOI18N
145 } else if (event.getAddedUser().getUserId() == null) {
147 throw new NullPointerException("event.addedUser.userId is null"); //NOI18N
148 } else if (event.getAddedUser().getUserId() < 1) {
150 throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getAddedUser(), event.getAddedUser().getUserId())); //NOI18N
158 * Event observer for unlinked fax contact by administrators
160 * @param event Unlinked fax contact event
162 public void afterAdminUnlinkedFaxContactDataEvent (@Observes final ObservableAdminUnlinkedFaxNumberEvent event) {
163 // event should not be null
166 throw new NullPointerException("event is null"); //NOI18N
167 } else if (event.getUnlinkedFaxNumber() == null) {
169 throw new NullPointerException("event.unlinkedFaxNumber is null"); //NOI18N
170 } else if (event.getUnlinkedFaxNumber().getPhoneId() == null) {
172 throw new NullPointerException("event.unlinkedFaxNumber.contactId is null"); //NOI18N
173 } else if (event.getUnlinkedFaxNumber().getPhoneId() < 1) {
175 throw new IllegalArgumentException(MessageFormat.format("contactId of contact={0} is not valid: {1}", event.getUnlinkedFaxNumber(), event.getUnlinkedFaxNumber().getPhoneId())); //NOI18N
178 // Remove it from list
179 this.contacts.remove(event.getUnlinkedFaxNumber());
186 * Event observer for unlinked land-line contact by administrators
188 * @param event Unlinked land-line contact event
190 public void afterAdminUnlinkedLandLineContactDataEvent (@Observes final ObservableAdminUnlinkedLandLineNumberEvent event) {
191 // event should not be null
194 throw new NullPointerException("event is null"); //NOI18N
195 } else if (event.getUnlinkedLandLineNumber() == null) {
197 throw new NullPointerException("event.unlinkedLandLineNumber is null"); //NOI18N
198 } else if (event.getUnlinkedLandLineNumber().getPhoneId() == null) {
200 throw new NullPointerException("event.unlinkedLandLineNumber.contactId is null"); //NOI18N
201 } else if (event.getUnlinkedLandLineNumber().getPhoneId() < 1) {
203 throw new IllegalArgumentException(MessageFormat.format("contactId of contact={0} is not valid: {1}", event.getUnlinkedLandLineNumber(), event.getUnlinkedLandLineNumber().getPhoneId())); //NOI18N
206 // Remove it from list
207 this.contacts.remove(event.getUnlinkedLandLineNumber());
214 * Event observer for unlinked mobile contact by administrators
216 * @param event Unlinked mobile contact event
218 public void afterAdminUnlinkedMobileContactDataEvent (@Observes final ObservableAdminUnlinkedMobileNumberEvent event) {
219 // event should not be null
222 throw new NullPointerException("event is null"); //NOI18N
223 } else if (event.getUnlinkedMobileNumber() == null) {
225 throw new NullPointerException("event.unlinkedMobileNumber is null"); //NOI18N
226 } else if (event.getUnlinkedMobileNumber().getPhoneId() == null) {
228 throw new NullPointerException("event.unlinkedMobileNumber.contactId is null"); //NOI18N
229 } else if (event.getUnlinkedMobileNumber().getPhoneId() < 1) {
231 throw new IllegalArgumentException(MessageFormat.format("contactId of contact={0} is not valid: {1}", event.getUnlinkedMobileNumber(), event.getUnlinkedMobileNumber().getPhoneId())); //NOI18N
234 // Remove it from list
235 this.contacts.remove(event.getUnlinkedMobileNumber());
242 * Event observer for updated contact data by administrators
244 * @param event Updated contact data event
246 public void afterAdminUpdatedContactDataEvent (@Observes final ObservableAdminUpdatedContactEvent event) {
247 // event should not be null
250 throw new NullPointerException("event is null"); //NOI18N
251 } else if (event.getUpdatedContact() == null) {
253 throw new NullPointerException("event.updatedContact is null"); //NOI18N
254 } else if (event.getUpdatedContact().getContactId() == null) {
256 throw new NullPointerException("event.updatedContact.contactId is null"); //NOI18N
257 } else if (event.getUpdatedContact().getContactId() < 1) {
259 throw new IllegalArgumentException(MessageFormat.format("contactId of contact={0} is not valid: {1}", event.getUpdatedContact(), event.getUpdatedContact().getContactId())); //NOI18N
267 * Observes events being fired when a bean helper has successfully created a
268 * fax number instance.
270 * @param event Event being fired
272 public void afterCreatedFaxNumberEvent (@Observes final ObservableCreatedFaxNumberEvent event) {
273 // The event instance must be valid
276 throw new NullPointerException("event is null"); //NOI18N
277 } else if (event.getFaxNumber() == null) {
279 throw new NullPointerException("event.faxNumber is null"); //NOI18N
280 } else if (event.getFaxNumber().getPhoneId() == null) {
281 // Throw NPE yet again
282 throw new NullPointerException("event.faxNumber.phoneId is null"); //NOI18N
283 } else if (event.getFaxNumber().getPhoneId() < 1) {
284 // Throw NPE yet again
285 throw new NullPointerException(MessageFormat.format("event.faxNumber.phoneId={0} is invalid", event.getFaxNumber().getPhoneId())); //NOI18N
289 this.setFaxNumber(event.getFaxNumber());
293 * Observes events being fired when a bean helper has successfully created a
294 * land-line number instance.
296 * @param event Event being fired
298 public void afterCreatedLandLineNumberEvent (@Observes final ObservableCreatedLandLineNumberEvent event) {
299 // The event instance must be valid
302 throw new NullPointerException("event is null"); //NOI18N
303 } else if (event.getLandLineNumber() == null) {
305 throw new NullPointerException("event.landLineNumber is null"); //NOI18N
306 } else if (event.getLandLineNumber().getPhoneId() == null) {
307 // Throw NPE yet again
308 throw new NullPointerException("event.landLineNumber.phoneId is null"); //NOI18N
309 } else if (event.getLandLineNumber().getPhoneId() < 1) {
310 // Throw NPE yet again
311 throw new NullPointerException(MessageFormat.format("event.landLineNumber.phoneId={0} is invalid", event.getLandLineNumber().getPhoneId())); //NOI18N
315 this.setLandLineNumber(event.getLandLineNumber());
319 * Observes events being fired when a bean helper has successfully created a
320 * mobile number instance.
322 * @param event Event being fired
324 public void afterCreatedMobileNumberEvent (@Observes final ObservableCreatedMobileNumberEvent event) {
325 // The event instance must be valid
328 throw new NullPointerException("event is null"); //NOI18N
329 } else if (event.getMobileNumber() == null) {
331 throw new NullPointerException("event.mobileNumber is null"); //NOI18N
332 } else if (event.getMobileNumber().getPhoneId() == null) {
333 // Throw NPE yet again
334 throw new NullPointerException("event.mobileNumber.phoneId is null"); //NOI18N
335 } else if (event.getMobileNumber().getPhoneId() < 1) {
336 // Throw NPE yet again
337 throw new NullPointerException(MessageFormat.format("event.mobileNumber.phoneId={0} is invalid", event.getMobileNumber().getPhoneId())); //NOI18N
341 this.setMobileNumber(event.getMobileNumber());
345 * Getter for all contacts having current fax number linked
347 * @return List of all linked contacts
349 public List<Contact> allCurrentFaxNumberContacts () {
351 DialableFaxNumber number = this.getFaxNumber();
354 if (this.contacts.containsKey(number)) {
355 // Return cached version
356 return this.contacts.get(number);
359 List<Contact> list = new LinkedList<>();
361 // "Walk" through all contacts
362 for (final Contact contact : this.contactController.allContacts()) {
363 // Is mobile instance the same?
364 if (Objects.equals(contact.getContactFaxNumber(), number)) {
370 // Store result in cache
371 this.contacts.put(number, list);
373 // Return now-cached list
379 * Getter for all contacts having current land-line number linked
381 * @return List of all linked contacts
383 public List<Contact> allCurrentLandLineNumberContacts () {
385 DialableLandLineNumber number = this.getLandLineNumber();
388 if (this.contacts.containsKey(number)) {
389 // Return cached version
390 return this.contacts.get(number);
393 List<Contact> list = new LinkedList<>();
395 // "Walk" through all contacts
396 for (final Contact contact : this.contactController.allContacts()) {
397 // Is mobile instance the same?
398 if (Objects.equals(contact.getContactLandLineNumber(), number)) {
404 // Store result in cache
405 this.contacts.put(number, list);
407 // Return now-cached list
413 * Getter for all contacts having current mobile number linked
415 * @return List of all linked contacts
417 public List<Contact> allCurrentMobileNumberContacts () {
419 DialableMobileNumber number = this.getMobileNumber();
422 if (this.contacts.containsKey(number)) {
423 // Return cached version
424 return this.contacts.get(number);
427 List<Contact> list = new LinkedList<>();
429 // "Walk" through all contacts
430 for (final Contact contact : this.contactController.allContacts()) {
431 // Is mobile instance the same?
432 if (Objects.equals(contact.getContactMobileNumber(), number)) {
438 // Store result in cache
439 this.contacts.put(number, list);
441 // Return now-cached list
447 * Getter for chosen fax number
451 public DialableFaxNumber getFaxNumber () {
452 return this.faxNumber;
456 * Setter for chosen fax number
458 * @param faxNumber fax number
460 public void setFaxNumber (final DialableFaxNumber faxNumber) {
461 this.faxNumber = faxNumber;
465 * Getter for chosen land-line number
467 * @return land-line number
469 public DialableLandLineNumber getLandLineNumber () {
470 return this.landLineNumber;
474 * Setter for chosen land-line number
476 * @param landLineNumber land-line number
478 public void setLandLineNumber (final DialableLandLineNumber landLineNumber) {
479 this.landLineNumber = landLineNumber;
483 * Getter for chosen mobile number
485 * @return mobile number
487 public DialableMobileNumber getMobileNumber () {
488 return this.mobileNumber;
492 * Setter for chosen mobile number
494 * @param mobileNumber mobile number
496 public void setMobileNumber (final DialableMobileNumber mobileNumber) {
497 this.mobileNumber = mobileNumber;
503 private void clear () {
504 // @TODO Clear all data