2 * Copyright (C) 2016 - 2022 Free Software Foundation
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.jfinancials.beans.phone;
19 import java.text.MessageFormat;
20 import java.util.Date;
21 import java.util.List;
22 import java.util.Objects;
24 import javax.enterprise.context.RequestScoped;
25 import javax.enterprise.event.Event;
26 import javax.enterprise.event.Observes;
27 import javax.enterprise.inject.Any;
28 import javax.faces.application.FacesMessage;
29 import javax.inject.Inject;
30 import javax.inject.Named;
31 import org.mxchange.jcountry.model.data.Country;
32 import org.mxchange.jfinancials.beans.BaseFinancialsBean;
33 import org.mxchange.jfinancials.beans.phone.list.FinancialsPhoneListWebViewController;
34 import org.mxchange.jphone.events.fax.created.ObservableCreatedFaxNumberEvent;
35 import org.mxchange.jphone.events.fax.deleted.AdminDeletedFaxNumberEvent;
36 import org.mxchange.jphone.events.fax.deleted.AdminFaxNumberDeletedEvent;
37 import org.mxchange.jphone.events.fax.removed.AdminFaxNumberRemovedFromListEvent;
38 import org.mxchange.jphone.events.fax.removed.AdminRemoveFaxNumberFromListEvent;
39 import org.mxchange.jphone.events.fax.updated.AdminFaxNumberUpdatedEvent;
40 import org.mxchange.jphone.events.fax.updated.AdminUpdatedFaxNumberEvent;
41 import org.mxchange.jphone.events.landline.created.ObservableCreatedLandLineNumberEvent;
42 import org.mxchange.jphone.events.landline.deleted.AdminDeletedLandLineNumberEvent;
43 import org.mxchange.jphone.events.landline.deleted.AdminLandLineNumberDeletedEvent;
44 import org.mxchange.jphone.events.landline.removed.AdminLandLineNumberRemovedFromListEvent;
45 import org.mxchange.jphone.events.landline.removed.AdminRemoveLandLineNumberFromListEvent;
46 import org.mxchange.jphone.events.landline.updated.AdminLandLineNumberUpdatedEvent;
47 import org.mxchange.jphone.events.landline.updated.AdminUpdatedLandLineNumberEvent;
48 import org.mxchange.jphone.events.mobile.remove.AdminRemoveMobileNumberFromListEvent;
49 import org.mxchange.jphone.model.phonenumbers.fax.DialableFaxNumber;
50 import org.mxchange.jphone.model.phonenumbers.fax.FaxNumber;
51 import org.mxchange.jphone.model.phonenumbers.landline.DialableLandLineNumber;
52 import org.mxchange.jphone.model.phonenumbers.landline.LandLineNumber;
53 import org.mxchange.jphone.model.phonenumbers.phone.AdminPhoneSessionBeanRemote;
56 * Administrative bean (controller) for phone numbers
58 * @author Roland Häder<roland@mxchange.org>
60 @Named ("adminPhoneController")
62 public class FinancialsAdminPhoneWebRequestBean extends BaseFinancialsBean implements FinancialsAdminPhoneWebRequestController {
67 private static final long serialVersionUID = 184_598_175_371_269_016L;
70 * Remote EJB for phone number (administrative)
72 @EJB (lookup = "java:global/jfinancials-ejb/adminPhone!org.mxchange.jphone.model.phonenumbers.phone.AdminPhoneSessionBeanRemote")
73 private AdminPhoneSessionBeanRemote adminPhoneBean;
78 private DialableFaxNumber faxNumber;
81 * Event being fired when an administrator has deleted fax number
85 private Event<AdminDeletedFaxNumberEvent> faxNumberDeletedEvent;
88 * Event being fired when an administrator has updated fax number
92 private Event<AdminUpdatedFaxNumberEvent> faxNumberUpdatedEvent;
97 private DialableLandLineNumber landLineNumber;
100 * Event being fired when an administrator has deleted land-line number
104 private Event<AdminDeletedLandLineNumberEvent> landLineNumberDeletedEvent;
107 * Event being fired when an administrator has updated fax number
111 private Event<AdminUpdatedLandLineNumberEvent> landLineNumberUpdatedEvent;
114 * Area code (city dial prefix)
116 private Integer phoneAreaCode;
119 * Country (for dial prefix)
121 private Country phoneCountry;
124 * When the phone entry has been created (persisted)
126 private Date phoneEntryCreated;
129 * When the phone entry has been updated
131 private Date phoneEntryUpdated;
134 * Phone id (aka primary key)
136 private Long phoneId;
139 * Generic hone controller
142 private FinancialsPhoneListWebViewController phoneListController;
147 private Long phoneNumber;
150 * Event being fired when a list of all unsed fax numbers is being created.
154 private Event<AdminRemoveFaxNumberFromListEvent> removeLinkedFaxNumbersEvent;
157 * Event being fired when a list of all unsed land-line numbers is being
162 private Event<AdminRemoveLandLineNumberFromListEvent> removeLinkedLandLineNumbersEvent;
165 * Event being fired when a list of all unsed mobile numbers is being
170 private Event<AdminRemoveMobileNumberFromListEvent> removeLinkedMobileNumbersEvent;
173 * Default constructor
175 public FinancialsAdminPhoneWebRequestBean () {
176 // Call super constructor
181 * Observes events being fired when a bean helper has successfully created a
182 * land-line number instance.
184 * @param event Event being fired
186 public void afterCreatedFaxNumberEvent (@Observes final ObservableCreatedFaxNumberEvent event) {
187 // The event instance must be valid
190 throw new NullPointerException("event is null"); //NOI18N
191 } else if (event.getFaxNumber() == null) {
193 throw new NullPointerException("event.landLineNumber is null"); //NOI18N
194 } else if (event.getFaxNumber().getPhoneId() == null) {
195 // Throw NPE yet again
196 throw new NullPointerException("event.landLineNumber.phoneId is null"); //NOI18N
197 } else if (event.getFaxNumber().getPhoneId() < 1) {
198 // Throw NPE yet again
199 throw new NullPointerException(MessageFormat.format("event.landLineNumber.phoneId={0} is invalid", event.getFaxNumber().getPhoneId())); //NOI18N
202 // Get fax number from event
203 final DialableFaxNumber number = event.getFaxNumber();
205 // Copy all data to this bean
206 this.setPhoneId(number.getPhoneId());
207 this.setPhoneCountry(number.getPhoneCountry());
208 this.setPhoneAreaCode(number.getPhoneAreaCode());
209 this.setPhoneNumber(number.getPhoneNumber());
210 this.setPhoneEntryCreated(number.getPhoneEntryCreated());
211 this.setPhoneEntryUpdated(number.getPhoneEntryUpdated());
215 * Observes events being fired when a bean helper has successfully created a
216 * land-line number instance.
218 * @param event Event being fired
220 public void afterCreatedLandLineNumberEvent (@Observes final ObservableCreatedLandLineNumberEvent event) {
221 // The event instance must be valid
224 throw new NullPointerException("event is null"); //NOI18N
225 } else if (event.getLandLineNumber() == null) {
227 throw new NullPointerException("event.landLineNumber is null"); //NOI18N
228 } else if (event.getLandLineNumber().getPhoneId() == null) {
229 // Throw NPE yet again
230 throw new NullPointerException("event.landLineNumber.phoneId is null"); //NOI18N
231 } else if (event.getLandLineNumber().getPhoneId() < 1) {
232 // Throw NPE yet again
233 throw new NullPointerException(MessageFormat.format("event.landLineNumber.phoneId={0} is invalid", event.getLandLineNumber().getPhoneId())); //NOI18N
236 // Get fax number from event
237 final DialableLandLineNumber number = event.getLandLineNumber();
239 // Copy all data to this bean
240 this.setPhoneId(number.getPhoneId());
241 this.setPhoneCountry(number.getPhoneCountry());
242 this.setPhoneAreaCode(number.getPhoneAreaCode());
243 this.setPhoneNumber(number.getPhoneNumber());
244 this.setPhoneEntryCreated(number.getPhoneEntryCreated());
245 this.setPhoneEntryUpdated(number.getPhoneEntryUpdated());
249 * Returns a list of all unused ("non-linked") land-line numbers
251 * @return List with all unused land-line numbers
253 public List<DialableFaxNumber> allNonLinkedFaxNumbers () {
254 // Get list of all mobile numbers
255 final List<DialableFaxNumber> numbers = this.phoneListController.getAllFaxNumbers();
257 // Visit all controllers to reduce the list
258 this.removeLinkedFaxNumbersEvent.fire(new AdminFaxNumberRemovedFromListEvent(numbers));
265 * Returns a list of all unused ("non-linked") land-line numbers
267 * @return List with all unused land-line numbers
269 public List<DialableLandLineNumber> allNonLinkedLandLineNumbers () {
270 // Get list of all mobile numbers
271 final List<DialableLandLineNumber> numbers = this.phoneListController.getAllLandLineNumbers();
273 // Visit all controllers to reduce the list
274 this.removeLinkedLandLineNumbersEvent.fire(new AdminLandLineNumberRemovedFromListEvent(numbers));
281 * Deletes given fax entry data
284 public void deleteFaxData () {
285 // Get fax number from bean helper
286 final DialableFaxNumber number = this.createFaxNumber();
289 if (number == null) {
290 // Not set, throw NPE
291 throw new NullPointerException("faxNumber is null"); //NOI18N
292 } else if (number.getPhoneId() == null) {
294 throw new NullPointerException("faxNumber.phoneId is null"); //NOI18N
295 } else if (number.getPhoneId() < 1) {
297 throw new IllegalArgumentException(MessageFormat.format("faxNumber.phoneId={0} is not valid", number.getPhoneId())); //NOI18N
298 } else if (number.getPhoneCountry() == null) {
300 throw new NullPointerException("faxNumber.phoneCountry is null"); //NOI18N
301 } else if (number.getPhoneCountry().getCountryId() == null) {
303 throw new NullPointerException("faxNumber.phoneCountry.countryId is null"); //NOI18N
304 } else if (number.getPhoneCountry().getCountryId() < 1) {
306 throw new NullPointerException(MessageFormat.format("faxNumber.phoneCountry.countryId={0} is not valid", number.getPhoneCountry().getCountryId())); //NOI18N
307 } else if (number.getPhoneAreaCode() == null) {
309 throw new NullPointerException("faxNumber.phoneAreaCode is null"); //NOI18N
310 } else if (number.getPhoneAreaCode() < 1) {
312 throw new IllegalArgumentException(MessageFormat.format("faxNumber.phoneAreaCode={0} is not valid.", number.getPhoneAreaCode())); //NOI18N
313 } else if (number.getPhoneNumber() == null) {
315 throw new NullPointerException("faxNumber.phoneNumber is null"); //NOI18N
316 } else if (number.getPhoneNumber() < 1) {
318 throw new NullPointerException(MessageFormat.format("faxNumber.phoneNumber={0} is not valid.", number.getPhoneNumber())); //NOI18N
322 this.adminPhoneBean.deleteFaxData(number);
325 this.faxNumberDeletedEvent.fire(new AdminFaxNumberDeletedEvent(number));
329 * Deletes given land-line entry data
331 public void deleteLandLineData () {
332 // Get land-line number from helper
333 final DialableLandLineNumber number = this.createLandLineNumber();
336 if (number == null) {
337 // Not set, throw NPE
338 throw new NullPointerException("landLineNumber is null"); //NOI18N
339 } else if (number.getPhoneId() == null) {
341 throw new NullPointerException("landLineNumber.phoneId is null"); //NOI18N
342 } else if (number.getPhoneId() < 1) {
344 throw new IllegalArgumentException(MessageFormat.format("landLineNumber.phoneId={0} is not valid", number.getPhoneId())); //NOI18N
345 } else if (number.getPhoneCountry() == null) {
347 throw new NullPointerException("landLineNumber.phoneCountry is null"); //NOI18N
348 } else if (number.getPhoneCountry().getCountryId() == null) {
350 throw new NullPointerException("landLineNumber.phoneCountry.countryId is null"); //NOI18N
351 } else if (number.getPhoneCountry().getCountryId() < 1) {
353 throw new NullPointerException(MessageFormat.format("landLineNumber.phoneCountry.countryId={0} is not valid", number.getPhoneCountry().getCountryId())); //NOI18N
354 } else if (number.getPhoneAreaCode() == null) {
356 throw new NullPointerException("landLineNumber.phoneAreaCode is null"); //NOI18N
357 } else if (number.getPhoneAreaCode() < 1) {
359 throw new IllegalArgumentException(MessageFormat.format("landLineNumber.phoneAreaCode={0} is not valid.", number.getPhoneAreaCode())); //NOI18N
360 } else if (number.getPhoneNumber() == null) {
362 throw new NullPointerException("landLineNumber.phoneNumber is null"); //NOI18N
363 } else if (number.getPhoneNumber() < 1) {
365 throw new NullPointerException(MessageFormat.format("landLineNumber.phoneNumber={0} is not valid.", number.getPhoneNumber())); //NOI18N
369 this.adminPhoneBean.deleteLandLineData(number);
372 this.landLineNumberDeletedEvent.fire(new AdminLandLineNumberDeletedEvent(number));
376 * Changes fax entry data
378 * @return Redirect outcome
380 public String doChangeFaxNumber () {
381 // Get fax number from bean helper
382 final DialableFaxNumber number = this.createFaxNumber();
385 if (number == null) {
386 // Not set, throw NPE
387 throw new NullPointerException("faxNumber is null"); //NOI18N
388 } else if (number.getPhoneId() == null) {
390 throw new NullPointerException("faxNumber.phoneId is null"); //NOI18N
391 } else if (number.getPhoneId() < 1) {
393 throw new IllegalArgumentException(MessageFormat.format("faxNumber.phoneId={0} is not valid", number.getPhoneId())); //NOI18N
394 } else if (number.getPhoneCountry() == null) {
396 throw new NullPointerException("faxNumber.phoneCountry is null"); //NOI18N
397 } else if (number.getPhoneCountry().getCountryId() == null) {
399 throw new NullPointerException("faxNumber.phoneCountry.countryId is null"); //NOI18N
400 } else if (number.getPhoneCountry().getCountryId() < 1) {
402 throw new NullPointerException(MessageFormat.format("faxNumber.phoneCountry.countryId={0} is not valid", number.getPhoneCountry().getCountryId())); //NOI18N
403 } else if (number.getPhoneAreaCode() == null) {
405 throw new NullPointerException("faxNumber.phoneAreaCode is null"); //NOI18N
406 } else if (number.getPhoneAreaCode() < 1) {
408 throw new IllegalArgumentException(MessageFormat.format("faxNumber.phoneAreaCode={0} is not valid.", number.getPhoneAreaCode())); //NOI18N
409 } else if (number.getPhoneNumber() == null) {
411 throw new NullPointerException("faxNumber.phoneNumber is null"); //NOI18N
412 } else if (number.getPhoneNumber() < 1) {
414 throw new NullPointerException(MessageFormat.format("faxNumber.phoneNumber={0} is not valid.", number.getPhoneNumber())); //NOI18N
417 // Is the mobile provider and number the same?
418 if ((Objects.equals(this.getPhoneCountry(), number.getPhoneCountry())) && (Objects.equals(this.getPhoneAreaCode(), number.getPhoneAreaCode())) && (Objects.equals(this.getPhoneNumber(), number.getPhoneNumber()))) {
420 this.showFacesMessage("form_edit_fax:faxNumber", "ERROR_ADMIN_NO_CHANGE_ENTERED", FacesMessage.SEVERITY_WARN); //NOI18N
422 // No difference in both together, no need to edit
427 number.setPhoneCountry(this.getPhoneCountry());
428 number.setPhoneAreaCode(this.getPhoneAreaCode());
429 number.setPhoneNumber(this.getPhoneNumber());
432 final DialableFaxNumber updatedNumber = this.adminPhoneBean.updateFaxData(number);
435 this.faxNumberUpdatedEvent.fire(new AdminFaxNumberUpdatedEvent(updatedNumber));
437 // All fine, redirect
438 return "admin_show_fax"; //NOI18N
442 * Changes land-line entry data
444 * @return Redirect outcome
446 public String doChangeLandLineNumber () {
447 // Get land-line number from helper
448 final DialableLandLineNumber number = this.createLandLineNumber();
451 if (number == null) {
452 // Not set, throw NPE
453 throw new NullPointerException("landLineNumber is null"); //NOI18N
454 } else if (number.getPhoneId() == null) {
456 throw new NullPointerException("landLineNumber.phoneId is null"); //NOI18N
457 } else if (number.getPhoneId() < 1) {
459 throw new IllegalArgumentException(MessageFormat.format("landLineNumber.phoneId={0} is not valid", number.getPhoneId())); //NOI18N
460 } else if (number.getPhoneCountry() == null) {
462 throw new NullPointerException("landLineNumber.phoneCountry is null"); //NOI18N
463 } else if (number.getPhoneCountry().getCountryId() == null) {
465 throw new NullPointerException("landLineNumber.phoneCountry.countryId is null"); //NOI18N
466 } else if (number.getPhoneCountry().getCountryId() < 1) {
468 throw new NullPointerException(MessageFormat.format("landLineNumber.phoneCountry.countryId={0} is not valid", number.getPhoneCountry().getCountryId())); //NOI18N
469 } else if (number.getPhoneAreaCode() == null) {
471 throw new NullPointerException("landLineNumber.phoneAreaCode is null"); //NOI18N
472 } else if (number.getPhoneAreaCode() < 1) {
474 throw new IllegalArgumentException(MessageFormat.format("landLineNumber.phoneAreaCode={0} is not valid.", number.getPhoneAreaCode())); //NOI18N
475 } else if (number.getPhoneNumber() == null) {
477 throw new NullPointerException("landLineNumber.phoneNumber is null"); //NOI18N
478 } else if (number.getPhoneNumber() < 1) {
480 throw new NullPointerException(MessageFormat.format("landLineNumber.phoneNumber={0} is not valid.", number.getPhoneNumber())); //NOI18N
483 // Is the mobile provider and number the same?
484 if ((Objects.equals(this.getPhoneCountry(), number.getPhoneCountry())) && (Objects.equals(this.getPhoneAreaCode(), number.getPhoneAreaCode())) && (Objects.equals(this.getPhoneNumber(), number.getPhoneNumber()))) {
486 this.showFacesMessage("form_edit_landline:landLineNumber", "ERROR_ADMIN_NO_CHANGE_ENTERED", FacesMessage.SEVERITY_WARN); //NOI18N
488 // No difference in both together, no need to edit
493 number.setPhoneCountry(this.getPhoneCountry());
494 number.setPhoneAreaCode(this.getPhoneAreaCode());
495 number.setPhoneNumber(this.getPhoneNumber());
498 final DialableLandLineNumber updatedNumber = this.adminPhoneBean.updateLandLineData(number);
501 this.landLineNumberUpdatedEvent.fire(new AdminLandLineNumberUpdatedEvent(updatedNumber));
503 // All fine, redirect
504 return "admin_show_landline"; //NOI18N
508 * Getter for chosen fax number
512 public DialableFaxNumber getFaxNumber () {
513 return this.faxNumber;
517 * Setter for chosen fax number
519 * @param faxNumber fax number
521 public void setFaxNumber (final DialableFaxNumber faxNumber) {
522 this.faxNumber = faxNumber;
526 * Getter for chosen land-line number
528 * @return land-line number
530 public DialableLandLineNumber getLandLineNumber () {
531 return this.landLineNumber;
535 * Setter for chosen land-line number
537 * @param landLineNumber land-line number
539 public void setLandLineNumber (final DialableLandLineNumber landLineNumber) {
540 this.landLineNumber = landLineNumber;
544 * Getter for phone area code
546 * @return Phone area code
548 public Integer getPhoneAreaCode () {
549 return this.phoneAreaCode;
553 * Setter for phone area code
555 * @param phoneAreaCode Phone area code
557 public void setPhoneAreaCode (final Integer phoneAreaCode) {
558 this.phoneAreaCode = phoneAreaCode;
562 * Getter for phone country (for dial prefix)
564 * @return Phone country
566 public Country getPhoneCountry () {
567 return this.phoneCountry;
571 * Setter for phone country (for dial prefix)
573 * @param phoneCountry Phone country
575 public void setPhoneCountry (final Country phoneCountry) {
576 this.phoneCountry = phoneCountry;
580 * Getter for phone entry created timestamp
582 * @return Phone entry created timestamp
584 @SuppressWarnings ("ReturnOfDateField")
585 public Date getPhoneEntryCreated () {
586 return this.phoneEntryCreated;
590 * Setter for phone entry created timestamp
592 * @param phoneEntryCreated Phone entry created timestamp
594 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
595 public void setPhoneEntryCreated (final Date phoneEntryCreated) {
596 this.phoneEntryCreated = phoneEntryCreated;
600 * Getter for phone entry updated timestamp
602 * @return Phone entry updated timestamp
604 @SuppressWarnings ("ReturnOfDateField")
605 public Date getPhoneEntryUpdated () {
606 return this.phoneEntryUpdated;
610 * Setter for phone entry updated timestamp
612 * @param phoneEntryUpdated Phone entry updated timestamp
614 @SuppressWarnings ("AssignmentToDateFieldFromParameter")
615 public void setPhoneEntryUpdated (final Date phoneEntryUpdated) {
616 this.phoneEntryUpdated = phoneEntryUpdated;
620 * Getter for phone id
624 public Long getPhoneId () {
629 * Setter for phone id
631 * @param phoneId Phone id
633 public void setPhoneId (final Long phoneId) {
634 this.phoneId = phoneId;
638 * Getter for dial number without prefix
640 * @return Dial number without prefix
642 public Long getPhoneNumber () {
643 return this.phoneNumber;
647 * Setter for dial number without prefix
649 * @param phoneNumber Dial number without prefix
651 public void setPhoneNumber (final Long phoneNumber) {
652 this.phoneNumber = phoneNumber;
656 * Returns an instance of a DialableFaxNumber from all fields stored in this
659 * @return An instance of a DialableFaxNumber class
661 private DialableFaxNumber createFaxNumber () {
663 final DialableFaxNumber number = new FaxNumber(
664 this.getPhoneCountry(),
665 this.getPhoneAreaCode(),
666 this.getPhoneNumber()
669 // Add all other data
670 number.setPhoneEntryCreated(this.getPhoneEntryCreated());
671 number.setPhoneEntryUpdated(this.getPhoneEntryUpdated());
674 if (this.getPhoneId() instanceof Long) {
676 number.setPhoneId(this.getPhoneId());
684 * Returns an instance of a DialableLandLineNumber from all fields stored in
687 * @return An instance of a DialableLandLineNumber class
689 private DialableLandLineNumber createLandLineNumber () {
691 final DialableLandLineNumber number = new LandLineNumber(
692 this.getPhoneCountry(),
693 this.getPhoneAreaCode(),
694 this.getPhoneNumber()
697 // Add all other data
698 number.setPhoneEntryCreated(this.getPhoneEntryCreated());
699 number.setPhoneEntryUpdated(this.getPhoneEntryUpdated());
702 if (this.getPhoneId() instanceof Long) {
704 number.setPhoneId(this.getPhoneId());