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.LinkedList;
21 import java.util.List;
22 import java.util.Objects;
23 import javax.enterprise.context.SessionScoped;
24 import javax.enterprise.event.Observes;
25 import javax.inject.Inject;
26 import javax.inject.Named;
27 import org.mxchange.jcontacts.events.contact.add.ObservableAdminAddedContactEvent;
28 import org.mxchange.jcontacts.events.contact.update.ObservableAdminUpdatedContactEvent;
29 import org.mxchange.jcontacts.events.fax.unlinked.ObservableAdminUnlinkedFaxNumberEvent;
30 import org.mxchange.jcontacts.events.landline.unlinked.ObservableAdminUnlinkedLandLineNumberEvent;
31 import org.mxchange.jcontacts.events.mobile.unlinked.ObservableAdminUnlinkedMobileNumberEvent;
32 import org.mxchange.jcontacts.model.contact.Contact;
33 import org.mxchange.jphone.events.fax.created.ObservableCreatedFaxNumberEvent;
34 import org.mxchange.jphone.events.landline.created.ObservableCreatedLandLineNumberEvent;
35 import org.mxchange.jphone.events.mobile.created.ObservableCreatedMobileNumberEvent;
36 import org.mxchange.jphone.model.phonenumbers.DialableNumber;
37 import org.mxchange.jphone.model.phonenumbers.fax.DialableFaxNumber;
38 import org.mxchange.jphone.model.phonenumbers.landline.DialableLandLineNumber;
39 import org.mxchange.jphone.model.phonenumbers.mobile.DialableMobileNumber;
40 import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent;
41 import org.mxchange.pizzaapplication.beans.BasePizzaController;
42 import org.mxchange.pizzaapplication.beans.contact.PizzaContactWebRequestController;
45 * A general contact bean (controller)
47 * @author Roland Häder<roland@mxchange.org>
49 @Named ("contactPhoneController")
51 public class PizzaContactPhoneWebRequestBean extends BasePizzaController implements PizzaContactPhoneWebRequestController {
56 private static final long serialVersionUID = 542_145_347_916L;
59 * General contact controller
62 private PizzaContactWebRequestController contactController;
65 * "Cache" for contact's mobile, land-line and fax numbers. Currently one
66 * per each type is supported. Maybe later this will change into a OneToMany
67 * relationship (one contact, many numbers).
70 @Cached(cacheName = "contactsPhoneCache")
71 private transient Cache<DialableNumber, List<Contact>> contactsPhoneCache;
76 private DialableFaxNumber faxNumber;
81 private DialableLandLineNumber landLineNumber;
84 * Chosen mobile number
86 private DialableMobileNumber mobileNumber;
91 public PizzaContactPhoneWebRequestBean () {
92 // Call super constructor
97 * Observes events being fired when an administrator has added a new
100 * @param event Event being fired
102 public void afterAdminAddedContactEvent (@Observes final ObservableAdminAddedContactEvent event) {
103 // The event must be valid
106 throw new NullPointerException("event is null"); //NOI18N
107 } else if (event.getAddedContact() == null) {
109 throw new NullPointerException("event.addedContact is null"); //NOI18N
110 } else if (event.getAddedContact().getContactId() == null) {
112 throw new NullPointerException("event.addedContact.contactId is null"); //NOI18N
113 } else if (event.getAddedContact().getContactId() < 1) {
115 throw new IllegalArgumentException(MessageFormat.format("event.addedContact.contactId={0} is not valid", event.getAddedContact().getContactId())); //NOI18N
123 * Event observer for newly added users by administrator
125 * @param event Event being fired
127 public void afterAdminAddedUserEvent (@Observes final ObservableAdminAddedUserEvent event) {
128 // event should not be null
131 throw new NullPointerException("event is null"); //NOI18N
132 } else if (event.getAddedUser() == null) {
134 throw new NullPointerException("event.addedUser is null"); //NOI18N
135 } else if (event.getAddedUser().getUserId() == null) {
137 throw new NullPointerException("event.addedUser.userId is null"); //NOI18N
138 } else if (event.getAddedUser().getUserId() < 1) {
140 throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getAddedUser(), event.getAddedUser().getUserId())); //NOI18N
148 * Event observer for unlinked fax contact by administrators
150 * @param event Unlinked fax contact event
152 public void afterAdminUnlinkedFaxContactDataEvent (@Observes final ObservableAdminUnlinkedFaxNumberEvent event) {
153 // event should not be null
156 throw new NullPointerException("event is null"); //NOI18N
157 } else if (event.getUnlinkedFaxNumber() == null) {
159 throw new NullPointerException("event.unlinkedFaxNumber is null"); //NOI18N
160 } else if (event.getUnlinkedFaxNumber().getPhoneId() == null) {
162 throw new NullPointerException("event.unlinkedFaxNumber.contactId is null"); //NOI18N
163 } else if (event.getUnlinkedFaxNumber().getPhoneId() < 1) {
165 throw new IllegalArgumentException(MessageFormat.format("contactId of contact={0} is not valid: {1}", event.getUnlinkedFaxNumber(), event.getUnlinkedFaxNumber().getPhoneId())); //NOI18N
168 // Remove it from list
169 this.contactsPhoneCache.remove(event.getUnlinkedFaxNumber());
176 * Event observer for unlinked land-line contact by administrators
178 * @param event Unlinked land-line contact event
180 public void afterAdminUnlinkedLandLineContactDataEvent (@Observes final ObservableAdminUnlinkedLandLineNumberEvent event) {
181 // event should not be null
184 throw new NullPointerException("event is null"); //NOI18N
185 } else if (event.getUnlinkedLandLineNumber() == null) {
187 throw new NullPointerException("event.unlinkedLandLineNumber is null"); //NOI18N
188 } else if (event.getUnlinkedLandLineNumber().getPhoneId() == null) {
190 throw new NullPointerException("event.unlinkedLandLineNumber.contactId is null"); //NOI18N
191 } else if (event.getUnlinkedLandLineNumber().getPhoneId() < 1) {
193 throw new IllegalArgumentException(MessageFormat.format("contactId of contact={0} is not valid: {1}", event.getUnlinkedLandLineNumber(), event.getUnlinkedLandLineNumber().getPhoneId())); //NOI18N
196 // Remove it from list
197 this.contactsPhoneCache.remove(event.getUnlinkedLandLineNumber());
204 * Event observer for unlinked mobile contact by administrators
206 * @param event Unlinked mobile contact event
208 public void afterAdminUnlinkedMobileContactDataEvent (@Observes final ObservableAdminUnlinkedMobileNumberEvent event) {
209 // event should not be null
212 throw new NullPointerException("event is null"); //NOI18N
213 } else if (event.getUnlinkedMobileNumber() == null) {
215 throw new NullPointerException("event.unlinkedMobileNumber is null"); //NOI18N
216 } else if (event.getUnlinkedMobileNumber().getPhoneId() == null) {
218 throw new NullPointerException("event.unlinkedMobileNumber.contactId is null"); //NOI18N
219 } else if (event.getUnlinkedMobileNumber().getPhoneId() < 1) {
221 throw new IllegalArgumentException(MessageFormat.format("contactId of contact={0} is not valid: {1}", event.getUnlinkedMobileNumber(), event.getUnlinkedMobileNumber().getPhoneId())); //NOI18N
224 // Remove it from list
225 this.contactsPhoneCache.remove(event.getUnlinkedMobileNumber());
232 * Event observer for updated contact data by administrators
234 * @param event Updated contact data event
236 public void afterAdminUpdatedContactDataEvent (@Observes final ObservableAdminUpdatedContactEvent event) {
237 // event should not be null
240 throw new NullPointerException("event is null"); //NOI18N
241 } else if (event.getUpdatedContact() == null) {
243 throw new NullPointerException("event.updatedContact is null"); //NOI18N
244 } else if (event.getUpdatedContact().getContactId() == null) {
246 throw new NullPointerException("event.updatedContact.contactId is null"); //NOI18N
247 } else if (event.getUpdatedContact().getContactId() < 1) {
249 throw new IllegalArgumentException(MessageFormat.format("contactId of contact={0} is not valid: {1}", event.getUpdatedContact(), event.getUpdatedContact().getContactId())); //NOI18N
257 * Observes events being fired when a bean helper has successfully created a
258 * fax number instance.
260 * @param event Event being fired
262 public void afterCreatedFaxNumberEvent (@Observes final ObservableCreatedFaxNumberEvent event) {
263 // The event instance must be valid
266 throw new NullPointerException("event is null"); //NOI18N
267 } else if (event.getFaxNumber() == null) {
269 throw new NullPointerException("event.faxNumber is null"); //NOI18N
270 } else if (event.getFaxNumber().getPhoneId() == null) {
271 // Throw NPE yet again
272 throw new NullPointerException("event.faxNumber.phoneId is null"); //NOI18N
273 } else if (event.getFaxNumber().getPhoneId() < 1) {
274 // Throw NPE yet again
275 throw new NullPointerException(MessageFormat.format("event.faxNumber.phoneId={0} is invalid", event.getFaxNumber().getPhoneId())); //NOI18N
279 this.setFaxNumber(event.getFaxNumber());
283 * Observes events being fired when a bean helper has successfully created a
284 * land-line number instance.
286 * @param event Event being fired
288 public void afterCreatedLandLineNumberEvent (@Observes final ObservableCreatedLandLineNumberEvent event) {
289 // The event instance must be valid
292 throw new NullPointerException("event is null"); //NOI18N
293 } else if (event.getLandLineNumber() == null) {
295 throw new NullPointerException("event.landLineNumber is null"); //NOI18N
296 } else if (event.getLandLineNumber().getPhoneId() == null) {
297 // Throw NPE yet again
298 throw new NullPointerException("event.landLineNumber.phoneId is null"); //NOI18N
299 } else if (event.getLandLineNumber().getPhoneId() < 1) {
300 // Throw NPE yet again
301 throw new NullPointerException(MessageFormat.format("event.landLineNumber.phoneId={0} is invalid", event.getLandLineNumber().getPhoneId())); //NOI18N
305 this.setLandLineNumber(event.getLandLineNumber());
309 * Observes events being fired when a bean helper has successfully created a
310 * mobile number instance.
312 * @param event Event being fired
314 public void afterCreatedMobileNumberEvent (@Observes final ObservableCreatedMobileNumberEvent event) {
315 // The event instance must be valid
318 throw new NullPointerException("event is null"); //NOI18N
319 } else if (event.getMobileNumber() == null) {
321 throw new NullPointerException("event.mobileNumber is null"); //NOI18N
322 } else if (event.getMobileNumber().getPhoneId() == null) {
323 // Throw NPE yet again
324 throw new NullPointerException("event.mobileNumber.phoneId is null"); //NOI18N
325 } else if (event.getMobileNumber().getPhoneId() < 1) {
326 // Throw NPE yet again
327 throw new NullPointerException(MessageFormat.format("event.mobileNumber.phoneId={0} is invalid", event.getMobileNumber().getPhoneId())); //NOI18N
331 this.setMobileNumber(event.getMobileNumber());
335 * Getter for all contacts having current fax number linked
337 * @return List of all linked contacts
339 public List<Contact> allCurrentFaxNumberContacts () {
341 DialableFaxNumber number = this.getFaxNumber();
344 if (this.contactsPhoneCache.containsKey(number)) {
345 // Return cached version
346 return this.contactsPhoneCache.get(number);
349 List<Contact> list = new LinkedList<>();
351 // "Walk" through all contacts
352 for (final Contact contact : this.contactController.allContacts()) {
353 // Is mobile instance the same?
354 if (Objects.equals(contact.getContactFaxNumber(), number)) {
360 // Store result in cache
361 this.contactsPhoneCache.put(number, list);
363 // Return now-cached list
369 * Getter for all contacts having current land-line number linked
371 * @return List of all linked contacts
373 public List<Contact> allCurrentLandLineNumberContacts () {
375 DialableLandLineNumber number = this.getLandLineNumber();
378 if (this.contactsPhoneCache.containsKey(number)) {
379 // Return cached version
380 return this.contactsPhoneCache.get(number);
383 List<Contact> list = new LinkedList<>();
385 // "Walk" through all contacts
386 for (final Contact contact : this.contactController.allContacts()) {
387 // Is mobile instance the same?
388 if (Objects.equals(contact.getContactLandLineNumber(), number)) {
394 // Store result in cache
395 this.contactsPhoneCache.put(number, list);
397 // Return now-cached list
403 * Getter for all contacts having current mobile number linked
405 * @return List of all linked contacts
407 public List<Contact> allCurrentMobileNumberContacts () {
409 DialableMobileNumber number = this.getMobileNumber();
412 if (this.contactsPhoneCache.containsKey(number)) {
413 // Return cached version
414 return this.contactsPhoneCache.get(number);
417 List<Contact> list = new LinkedList<>();
419 // "Walk" through all contacts
420 for (final Contact contact : this.contactController.allContacts()) {
421 // Is mobile instance the same?
422 if (Objects.equals(contact.getContactMobileNumber(), number)) {
428 // Store result in cache
429 this.contactsPhoneCache.put(number, list);
431 // Return now-cached list
437 * Getter for chosen fax number
441 public DialableFaxNumber getFaxNumber () {
442 return this.faxNumber;
446 * Setter for chosen fax number
448 * @param faxNumber fax number
450 public void setFaxNumber (final DialableFaxNumber faxNumber) {
451 this.faxNumber = faxNumber;
455 * Getter for chosen land-line number
457 * @return land-line number
459 public DialableLandLineNumber getLandLineNumber () {
460 return this.landLineNumber;
464 * Setter for chosen land-line number
466 * @param landLineNumber land-line number
468 public void setLandLineNumber (final DialableLandLineNumber landLineNumber) {
469 this.landLineNumber = landLineNumber;
473 * Getter for chosen mobile number
475 * @return mobile number
477 public DialableMobileNumber getMobileNumber () {
478 return this.mobileNumber;
482 * Setter for chosen mobile number
484 * @param mobileNumber mobile number
486 public void setMobileNumber (final DialableMobileNumber mobileNumber) {
487 this.mobileNumber = mobileNumber;
493 private void clear () {