2 * Copyright (C) 2016 Roland Haeder
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.jjobs.beans.phone;
19 import java.text.MessageFormat;
20 import java.util.List;
21 import java.util.Objects;
22 import javax.enterprise.context.RequestScoped;
23 import javax.enterprise.event.Event;
24 import javax.enterprise.inject.Any;
25 import javax.faces.view.facelets.FaceletException;
26 import javax.inject.Inject;
27 import javax.inject.Named;
28 import javax.naming.Context;
29 import javax.naming.InitialContext;
30 import javax.naming.NamingException;
31 import org.mxchange.jcountry.data.Country;
32 import org.mxchange.jjobs.beans.BaseJobsController;
33 import org.mxchange.jjobs.beans.helper.JobsWebRequestController;
34 import org.mxchange.jphone.events.fax.removed.AdminFaxNumberRemovedFromListEvent;
35 import org.mxchange.jphone.events.fax.removed.AdminRemoveFaxNumberFromListEvent;
36 import org.mxchange.jphone.events.landline.removed.AdminLandLineNumberRemovedFromListEvent;
37 import org.mxchange.jphone.events.landline.removed.AdminRemoveLandLineNumberFromListEvent;
38 import org.mxchange.jphone.events.mobile.deleted.AdminDeletedMobileNumberEvent;
39 import org.mxchange.jphone.events.mobile.deleted.AdminMobileNumberDeletedEvent;
40 import org.mxchange.jphone.events.mobile.remove.AdminMobileNumberRemovedFromListEvent;
41 import org.mxchange.jphone.events.mobile.remove.AdminRemoveMobileNumberFromListEvent;
42 import org.mxchange.jphone.events.mobile.updated.AdminMobileNumberUpdatedEvent;
43 import org.mxchange.jphone.events.mobile.updated.AdminUpdatedMobileNumberEvent;
44 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
45 import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
46 import org.mxchange.jphone.phonenumbers.mobile.DialableMobileNumber;
47 import org.mxchange.jphone.phonenumbers.mobileprovider.MobileProvider;
48 import org.mxchange.jphone.phonenumbers.phone.AdminPhoneSessionBeanRemote;
51 * Administrative controller (bean) for phone numbers
53 * @author Roland Haeder<roland@mxchange.org>
55 @Named ("adminPhoneController")
57 public class JobsAdminPhoneWebRequestBean extends BaseJobsController implements JobsAdminPhoneWebRequestController {
62 private static final long serialVersionUID = 184_598_175_371_269_016L;
65 * Remote EJB for phone number (administrative)
67 private AdminPhoneSessionBeanRemote adminPhoneBean;
70 * Admin helper instance
73 private JobsWebRequestController beanHelper;
78 private DialableFaxNumber choosenFaxNumber;
81 * Choosen land-line number
83 private DialableLandLineNumber choosenLandLineNumber;
86 * Choosen mobile number
88 private DialableMobileNumber choosenMobileNumber;
91 * (Entered) mobile number
93 private Long mobileNumber;
96 * Event being fired when an administrator has deleted mobile number
100 private Event<AdminDeletedMobileNumberEvent> mobileNumberDeletedEvent;
103 * Event being fired when an administrator has updated mobile number
107 private Event<AdminUpdatedMobileNumberEvent> mobileNumberUpdatedEvent;
112 private MobileProvider mobileProvider;
115 * Area code (city dial prefix)
117 private Long phoneAreaCode;
120 * Generic hone controller
123 private JobsPhoneWebApplicationController phoneController;
126 * Country (for dial prefix)
128 private Country phoneCountry;
133 private Long phoneNumber;
136 * Event being fired when a list of all unsed fax numbers is being
141 private Event<AdminRemoveFaxNumberFromListEvent> removeLinkedFaxNumbersEvent;
144 * Event being fired when a list of all unsed land-line numbers is being
149 private Event<AdminRemoveLandLineNumberFromListEvent> removeLinkedLandLineNumbersEvent;
152 * Event being fired when a list of all unsed mobile numbers is being
157 private Event<AdminRemoveMobileNumberFromListEvent> removeLinkedMobileNumbersEvent;
160 * Default constructor
162 public JobsAdminPhoneWebRequestBean () {
165 // Get initial context
166 Context context = new InitialContext();
168 // Try to lookup the beans
169 this.adminPhoneBean = (AdminPhoneSessionBeanRemote) context.lookup("java:global/jjobs-ejb/adminPhone!org.mxchange.jphone.phonenumbers.phone.AdminPhoneSessionBeanRemote"); //NOI18N
170 } catch (final NamingException e) {
172 throw new FaceletException(e);
177 public List<DialableFaxNumber> allNonLinkedFaxNumbers () {
178 // Get list of all mobile numbers
179 List<DialableFaxNumber> list = this.phoneController.allFaxNumbers();
181 // Visit all controllers to reduce the list
182 this.removeLinkedFaxNumbersEvent.fire(new AdminFaxNumberRemovedFromListEvent(list));
189 public List<DialableLandLineNumber> allNonLinkedLandLineNumbers () {
190 // Get list of all mobile numbers
191 List<DialableLandLineNumber> list = this.phoneController.allLandLineNumbers();
193 // Visit all controllers to reduce the list
194 this.removeLinkedLandLineNumbersEvent.fire(new AdminLandLineNumberRemovedFromListEvent(list));
201 public List<DialableMobileNumber> allNonLinkedMobileNumbers () {
202 // Get list of all mobile numbers
203 List<DialableMobileNumber> list = this.phoneController.allMobileNumbers();
205 // Visit all controllers to reduce the list
206 this.removeLinkedMobileNumbersEvent.fire(new AdminMobileNumberRemovedFromListEvent(list));
213 public String deleteMobileData () {
215 if (this.beanHelper.getMobileNumber() == null) {
216 // Not set, throw NPE
217 throw new NullPointerException("this.beanHelper.mobileNumber is null"); //NOI18N
218 } else if (this.beanHelper.getMobileNumber().getPhoneId() == null) {
220 throw new NullPointerException("this.beanHelper.mobileNumber.phoneId is null"); //NOI18N
221 } else if (this.beanHelper.getMobileNumber().getPhoneId() < 1) {
223 throw new IllegalArgumentException(MessageFormat.format("this.beanHelper.mobileNumber.phoneId={0} is not valid", this.beanHelper.getMobileNumber().getPhoneId())); //NOI18N
224 } else if (this.beanHelper.getMobileNumber().getMobileProvider() == null) {
226 throw new NullPointerException("this.beanHelper.mobileNumber.mobileProvider is null"); //NOI18N
227 } else if (this.beanHelper.getMobileNumber().getMobileProvider().getProviderId() == null) {
229 throw new NullPointerException("this.beanHelper.mobileNumber.mobileProvider.providerId is null"); //NOI18N
230 } else if (this.beanHelper.getMobileNumber().getMobileProvider().getProviderId() < 1) {
232 throw new IllegalArgumentException(MessageFormat.format("this.beanHelper.mobileNumber.mobileProvider.providerId={0} is not valid.", this.beanHelper.getMobileNumber().getMobileProvider().getProviderId())); //NOI18N
233 } else if (this.beanHelper.getMobileNumber().getPhoneNumber() == null) {
235 throw new NullPointerException("this.beanHelper.mobileNumber.phoneNumber is null"); //NOI18N
236 } else if (this.beanHelper.getMobileNumber().getPhoneNumber() < 1) {
238 throw new NullPointerException(MessageFormat.format("this.beanHelper.mobileNumber.phoneNumber={0} is not valid.", this.beanHelper.getMobileNumber().getPhoneNumber())); //NOI18N
242 this.adminPhoneBean.deleteMobileData(this.beanHelper.getMobileNumber());
245 this.mobileNumberDeletedEvent.fire(new AdminMobileNumberDeletedEvent(this.beanHelper.getMobileNumber()));
247 // All fine, redirect
248 return "admin_list_mobile?faces-redirect=true&includeViewParams=true"; //NOI18N
252 public String editMobileData () {
254 if (this.beanHelper.getMobileNumber() == null) {
255 // Not set, throw NPE
256 throw new NullPointerException("this.beanHelper.mobileNumber is null"); //NOI18N
257 } else if (this.beanHelper.getMobileNumber().getPhoneId() == null) {
259 throw new NullPointerException("this.beanHelper.mobileNumber.phoneId is null"); //NOI18N
260 } else if (this.beanHelper.getMobileNumber().getPhoneId() < 1) {
262 throw new IllegalArgumentException(MessageFormat.format("this.beanHelper.mobileNumber.phoneId={0} is not valid", this.beanHelper.getMobileNumber().getPhoneId())); //NOI18N
263 } else if (this.beanHelper.getMobileNumber().getMobileProvider() == null) {
265 throw new NullPointerException("this.beanHelper.mobileNumber.mobileProvider is null"); //NOI18N
266 } else if (this.beanHelper.getMobileNumber().getMobileProvider().getProviderId() == null) {
268 throw new NullPointerException("this.beanHelper.mobileNumber.mobileProvider.providerId is null"); //NOI18N
269 } else if (this.beanHelper.getMobileNumber().getMobileProvider().getProviderId() < 1) {
271 throw new IllegalArgumentException(MessageFormat.format("this.beanHelper.mobileNumber.mobileProvider.providerId={0} is not valid.", this.beanHelper.getMobileNumber().getMobileProvider().getProviderId())); //NOI18N
272 } else if (this.beanHelper.getMobileNumber().getPhoneNumber() == null) {
274 throw new NullPointerException("this.beanHelper.mobileNumber.phoneNumber is null"); //NOI18N
275 } else if (this.beanHelper.getMobileNumber().getPhoneNumber() < 1) {
277 throw new NullPointerException(MessageFormat.format("this.beanHelper.mobileNumber.phoneNumber={0} is not valid.", this.beanHelper.getMobileNumber().getPhoneNumber())); //NOI18N
278 } else if (this.getMobileProvider() == null) {
280 this.showFacesMessage("form_edit_mobile:mobileProvider", "ERROR_ADMIN_NO_MOBILE_PROVIDER_SELECTED"); //NOI18N
282 } else if (this.getMobileProvider().getProviderId() == null) {
283 // Throw NPE again ...
284 throw new NullPointerException("this.mobileProvider.providerId is null"); //NOI18N
285 } else if (this.getMobileProvider().getProviderId() < 0) {
287 throw new IllegalArgumentException(MessageFormat.format("this.mobileProvider.providerId={0} is not valid.", this.getMobileProvider().getProviderId())); //NOI18N
288 } else if (this.getPhoneNumber() == null) {
290 this.showFacesMessage("form_edit_mobile:mobileNumber", "ERROR_ADMIN_EMPTY_MOBILE_NUMBER"); //NOI18N
294 // Is the mobile provider and number the same?
295 if ((Objects.equals(this.getMobileProvider(), this.beanHelper.getMobileNumber().getMobileProvider())) && (Objects.equals(this.getPhoneNumber(), this.beanHelper.getMobileNumber().getPhoneNumber()))) {
296 // No difference in both together, no need to edit
301 this.beanHelper.getMobileNumber().setMobileProvider(this.getMobileProvider());
302 this.beanHelper.getMobileNumber().setPhoneNumber(this.getPhoneNumber());
305 DialableMobileNumber updatedNumber = this.adminPhoneBean.updateMobileData(this.beanHelper.getMobileNumber());
308 this.mobileNumberUpdatedEvent.fire(new AdminMobileNumberUpdatedEvent(updatedNumber));
310 // All fine, redirect
311 return "admin_edit_mobile?faces-redirect=true&includeViewParams=true"; //NOI18N
315 public DialableFaxNumber getChoosenFaxNumber () {
316 return this.choosenFaxNumber;
320 public void setChoosenFaxNumber (final DialableFaxNumber choosenFaxNumber) {
321 this.choosenFaxNumber = choosenFaxNumber;
325 public DialableLandLineNumber getChoosenLandLineNumber () {
326 return this.choosenLandLineNumber;
330 public void setChoosenLandLineNumber (final DialableLandLineNumber choosenLandLineNumber) {
331 this.choosenLandLineNumber = choosenLandLineNumber;
335 public DialableMobileNumber getChoosenMobileNumber () {
336 return this.choosenMobileNumber;
340 public void setChoosenMobileNumber (final DialableMobileNumber choosenMobileNumber) {
341 this.choosenMobileNumber = choosenMobileNumber;
345 public Long getMobileNumber () {
346 return this.mobileNumber;
350 public void setMobileNumber (final Long mobileNumber) {
351 this.mobileNumber = mobileNumber;
355 public MobileProvider getMobileProvider () {
356 return this.mobileProvider;
360 public void setMobileProvider (final MobileProvider mobileProvider) {
361 this.mobileProvider = mobileProvider;
365 public Long getPhoneAreaCode () {
366 return this.phoneAreaCode;
370 public void setPhoneAreaCode (final Long phoneAreaCode) {
371 this.phoneAreaCode = phoneAreaCode;
375 public Country getPhoneCountry () {
376 return this.phoneCountry;
380 public void setPhoneCountry (final Country phoneCountry) {
381 this.phoneCountry = phoneCountry;
385 public Long getPhoneNumber () {
386 return this.phoneNumber;
390 public void setPhoneNumber (final Long phoneNumber) {
391 this.phoneNumber = phoneNumber;