]> git.mxchange.org Git - jfinancials-war.git/blob - src/java/org/mxchange/jfinancials/beans/mobile/FinancialsAdminMobileWebRequestBean.java
Updated copyright year
[jfinancials-war.git] / src / java / org / mxchange / jfinancials / beans / mobile / FinancialsAdminMobileWebRequestBean.java
1 /*
2  * Copyright (C) 2016 - 2022 Free Software Foundation
3  *
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.
8  *
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.
13  *
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/>.
16  */
17 package org.mxchange.jfinancials.beans.mobile;
18
19 import java.text.MessageFormat;
20 import java.util.Date;
21 import java.util.List;
22 import java.util.Objects;
23 import javax.ejb.EJB;
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.jfinancials.beans.BaseFinancialsBean;
32 import org.mxchange.jfinancials.beans.mobile.list.FinancialsMobileListWebViewController;
33 import org.mxchange.jphone.events.mobile.created.ObservableCreatedMobileNumberEvent;
34 import org.mxchange.jphone.events.mobile.deleted.AdminDeletedMobileNumberEvent;
35 import org.mxchange.jphone.events.mobile.deleted.AdminMobileNumberDeletedEvent;
36 import org.mxchange.jphone.events.mobile.remove.AdminMobileNumberRemovedFromListEvent;
37 import org.mxchange.jphone.events.mobile.remove.AdminRemoveMobileNumberFromListEvent;
38 import org.mxchange.jphone.events.mobile.updated.AdminMobileNumberUpdatedEvent;
39 import org.mxchange.jphone.events.mobile.updated.AdminUpdatedMobileNumberEvent;
40 import org.mxchange.jphone.model.phonenumbers.mobile.AdminMobileSessionBeanRemote;
41 import org.mxchange.jphone.model.phonenumbers.mobile.DialableMobileNumber;
42 import org.mxchange.jphone.model.phonenumbers.mobile.MobileNumber;
43 import org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProvider;
44
45 /**
46  * Administrative bean (controller) for mobile numbers
47  * <p>
48  * @author Roland Häder<roland@mxchange.org>
49  */
50 @Named ("adminMobileController")
51 @RequestScoped
52 public class FinancialsAdminMobileWebRequestBean extends BaseFinancialsBean implements FinancialsAdminMobileWebRequestController {
53
54         /**
55          * Serial number
56          */
57         private static final long serialVersionUID = 184_598_175_371_269_017L;
58
59         /**
60          * Remote EJB for phone number (administrative)
61          */
62         @EJB (lookup = "java:global/jfinancials-ejb/adminMobile!org.mxchange.jphone.model.phonenumbers.mobile.AdminMobileSessionBeanRemote")
63         private AdminMobileSessionBeanRemote adminMobileBean;
64
65         /**
66          * When the phone entry has been created (persisted)
67          */
68         private Date mobileEntryCreated;
69
70         /**
71          * When the phone entry has been updated
72          */
73         private Date mobileEntryUpdated;
74
75         /**
76          * Mobile id (aka primary key)
77          */
78         private Long mobileId;
79
80         /**
81          * Generic hone controller
82          */
83         @Inject
84         private FinancialsMobileListWebViewController mobileListController;
85
86         /**
87          * Mobile number
88          */
89         private Long mobileNumber;
90
91         /**
92          * Event being fired when an administrator has deleted mobile number
93          */
94         @Inject
95         @Any
96         private Event<AdminDeletedMobileNumberEvent> mobileNumberDeletedEvent;
97
98         /**
99          * Event being fired when an administrator has updated land-line number
100          */
101         @Inject
102         @Any
103         private Event<AdminUpdatedMobileNumberEvent> mobileNumberUpdatedEvent;
104
105         /**
106          * Mobile provider
107          */
108         private MobileProvider mobileProvider;
109
110         /**
111          * Event being fired when a list of all unused mobile numbers is being
112          * created.
113          */
114         @Inject
115         @Any
116         private Event<AdminRemoveMobileNumberFromListEvent> removeLinkedMobileNumbersEvent;
117
118         /**
119          * Chosen mobile number
120          */
121         private DialableMobileNumber selectedMobileNumber;
122
123         /**
124          * Default constructor
125          */
126         public FinancialsAdminMobileWebRequestBean () {
127                 // Call super constructor
128                 super();
129         }
130
131         /**
132          * Observes events being fired when a bean helper has successfully created a
133          * mobile number instance.
134          * <p>
135          * @param event Event being fired
136          */
137         public void afterCreatedMobileNumberEvent (@Observes final ObservableCreatedMobileNumberEvent event) {
138                 // The event instance must be valid
139                 if (null == event) {
140                         // Throw NPE
141                         throw new NullPointerException("event is null"); //NOI18N
142                 } else if (event.getMobileNumber() == null) {
143                         // Throw NPE again
144                         throw new NullPointerException("event.mobileNumber is null"); //NOI18N
145                 } else if (event.getMobileNumber().getMobileId() == null) {
146                         // Throw NPE yet again
147                         throw new NullPointerException("event.mobileNumber.mobileId is null"); //NOI18N
148                 } else if (event.getMobileNumber().getMobileId() < 1) {
149                         // Throw NPE yet again
150                         throw new NullPointerException(MessageFormat.format("event.mobileNumber.mobileId={0} is invalid", event.getMobileNumber().getMobileId())); //NOI18N
151                 }
152
153                 // Get fax number from event
154                 final DialableMobileNumber number = event.getMobileNumber();
155
156                 // Copy all data to this bean
157                 this.setMobileId(number.getMobileId());
158                 this.setMobileProvider(number.getMobileProvider());
159                 this.setMobileNumber(number.getMobileNumber());
160                 this.setMobileEntryCreated(number.getMobileEntryCreated());
161                 this.setMobileEntryUpdated(number.getMobileEntryUpdated());
162         }
163
164         /**
165          * Returns a list of all unused ("non-linked") mobile numbers
166          * <p>
167          * @return List with all unused mobile numbers
168          */
169         public List<DialableMobileNumber> allNonLinkedMobileNumbers () {
170                 // Get list of all mobile numbers
171                 final List<DialableMobileNumber> numbers = this.mobileListController.getAllMobileNumbers();
172
173                 // Visit all controllers to reduce the list
174                 this.removeLinkedMobileNumbersEvent.fire(new AdminMobileNumberRemovedFromListEvent(numbers));
175
176                 // Return it
177                 return numbers;
178         }
179
180         /**
181          * Deletes given mobile entry data
182          */
183         public void deleteMobileData () {
184                 // Get mobile number from helper
185                 final DialableMobileNumber number = this.createMobileNumber();
186
187                 // Is all data set
188                 if (number == null) {
189                         // Not set, throw NPE
190                         throw new NullPointerException("mobileNumber is null"); //NOI18N
191                 } else if (number.getMobileId() == null) {
192                         // Throw NPE again
193                         throw new NullPointerException("mobileNumber.mobileId is null"); //NOI18N
194                 } else if (number.getMobileId() < 1) {
195                         // Invalid number
196                         throw new IllegalArgumentException(MessageFormat.format("mobileNumber.mobileId={0} is not valid", number.getMobileId())); //NOI18N
197                 } else if (number.getMobileProvider() == null) {
198                         // Throw NPE
199                         throw new NullPointerException("mobileNumber.mobileProvider is null"); //NOI18N
200                 } else if (number.getMobileProvider().getProviderId() == null) {
201                         // ... throw again
202                         throw new NullPointerException("mobileNumber.mobileProvider.providerId is null"); //NOI18N
203                 } else if (number.getMobileProvider().getProviderId() < 1) {
204                         // Id not valid
205                         throw new IllegalArgumentException(MessageFormat.format("mobileNumber.mobileProvider.providerId={0} is not valid.", number.getMobileProvider().getProviderId())); //NOI18N
206                 } else if (number.getMobileNumber() == null) {
207                         // Throw NPE again
208                         throw new NullPointerException("mobileNumber.mobileNumber is null"); //NOI18N
209                 } else if (number.getMobileNumber() < 1) {
210                         // Throw NPE again
211                         throw new NullPointerException(MessageFormat.format("mobileNumber.mobileNumber={0} is not valid.", number.getMobileNumber())); //NOI18N
212                 }
213
214                 // Call EJB
215                 this.adminMobileBean.deleteMobileData(number);
216
217                 // Fire event
218                 this.mobileNumberDeletedEvent.fire(new AdminMobileNumberDeletedEvent(number));
219         }
220
221         /**
222          * Changes mobile entry data
223          * <p>
224          * @return Redirect outcome
225          */
226         public String doUpdateMobileNumber () {
227                 // Get mobile number from helper
228                 final DialableMobileNumber number = this.createMobileNumber();
229
230                 // Is all data set
231                 if (number == null) {
232                         // Not set, throw NPE
233                         throw new NullPointerException("mobileNumber is null"); //NOI18N
234                 } else if (number.getMobileId() == null) {
235                         // Throw NPE again
236                         throw new NullPointerException("mobileNumber.mobileId is null"); //NOI18N
237                 } else if (number.getMobileId() < 1) {
238                         // Invalid number
239                         throw new IllegalArgumentException(MessageFormat.format("mobileNumber.mobileId={0} is not valid", number.getMobileId())); //NOI18N
240                 } else if (number.getMobileProvider() == null) {
241                         // Throw NPE
242                         throw new NullPointerException("mobileNumber.mobileProvider is null"); //NOI18N
243                 } else if (number.getMobileProvider().getProviderId() == null) {
244                         // ... throw again
245                         throw new NullPointerException("mobileNumber.mobileProvider.providerId is null"); //NOI18N
246                 } else if (number.getMobileProvider().getProviderId() < 1) {
247                         // Id not valid
248                         throw new IllegalArgumentException(MessageFormat.format("mobileNumber.mobileProvider.providerId={0} is not valid.", number.getMobileProvider().getProviderId())); //NOI18N
249                 } else if (number.getMobileNumber() == null) {
250                         // Throw NPE again
251                         throw new NullPointerException("mobileNumber.mobileNumber is null"); //NOI18N
252                 } else if (number.getMobileNumber() < 1) {
253                         // Throw NPE again
254                         throw new NullPointerException(MessageFormat.format("mobileNumber.mobileNumber={0} is not valid.", number.getMobileNumber())); //NOI18N
255                 } else if (this.getMobileProvider() == null) {
256                         // Throw NPE again
257                         throw new NullPointerException("this.mobileProvider is null"); //NOI18N
258                 } else if (this.getMobileProvider().getProviderId() == null) {
259                         // Throw NPE again ...
260                         throw new NullPointerException("this.mobileProvider.providerId is null"); //NOI18N
261                 } else if (this.getMobileProvider().getProviderId() < 0) {
262                         // Invalid id number
263                         throw new IllegalArgumentException(MessageFormat.format("this.mobileProvider.providerId={0} is not valid.", this.getMobileProvider().getProviderId())); //NOI18N
264                 } else if (this.getMobileNumber() == null) {
265                         // Throw NPE
266                         throw new NullPointerException("this.phoneNumber is null"); //NOI18N
267                 }
268
269                 // Is the mobile provider and number the same?
270                 if ((Objects.equals(this.getMobileProvider(), number.getMobileProvider())) && (Objects.equals(this.getMobileNumber(), number.getMobileNumber()))) {
271                         // Show message
272                         this.showFacesMessage("form_edit_mobile:mobileNumber", "ERROR_ADMIN_NO_CHANGE_ENTERED", FacesMessage.SEVERITY_WARN); //NOI18N
273
274                         // No difference in both together, no need to edit
275                         return ""; //NOI18N
276                 }
277
278                 // Set all data
279                 number.setMobileProvider(this.getMobileProvider());
280                 number.setMobileNumber(this.getMobileNumber());
281
282                 // Send to bean
283                 final DialableMobileNumber updatedNumber = this.adminMobileBean.updateMobileData(number);
284
285                 // Fire event
286                 this.mobileNumberUpdatedEvent.fire(new AdminMobileNumberUpdatedEvent(updatedNumber));
287
288                 // All fine, redirect
289                 return "admin_show_mobile"; //NOI18N
290         }
291
292         /**
293          * Getter for phone entry created timestamp
294          * <p>
295          * @return Mobile entry created timestamp
296          */
297         @SuppressWarnings ("ReturnOfDateField")
298         public Date getMobileEntryCreated () {
299                 return this.mobileEntryCreated;
300         }
301
302         /**
303          * Setter for phone entry created timestamp
304          * <p>
305          * @param mobileEntryCreated Mobile entry created timestamp
306          */
307         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
308         public void setMobileEntryCreated (final Date mobileEntryCreated) {
309                 this.mobileEntryCreated = mobileEntryCreated;
310         }
311
312         /**
313          * Getter for phone entry updated timestamp
314          * <p>
315          * @return Mobile entry updated timestamp
316          */
317         @SuppressWarnings ("ReturnOfDateField")
318         public Date getMobileEntryUpdated () {
319                 return this.mobileEntryUpdated;
320         }
321
322         /**
323          * Setter for phone entry updated timestamp
324          * <p>
325          * @param mobileEntryUpdated Mobile entry updated timestamp
326          */
327         @SuppressWarnings ("AssignmentToDateFieldFromParameter")
328         public void setMobileEntryUpdated (final Date mobileEntryUpdated) {
329                 this.mobileEntryUpdated = mobileEntryUpdated;
330         }
331
332         /**
333          * Getter for phone id
334          * <p>
335          * @return Mobile id
336          */
337         public Long getMobileId () {
338                 return this.mobileId;
339         }
340
341         /**
342          * Setter for phone id
343          * <p>
344          * @param mobileId Mobile id
345          */
346         public void setMobileId (final Long mobileId) {
347                 this.mobileId = mobileId;
348         }
349
350         /**
351          * Getter for dial number without prefix
352          * <p>
353          * @return Dial number without prefix
354          */
355         public Long getMobileNumber () {
356                 return this.mobileNumber;
357         }
358
359         /**
360          * Setter for dial number without prefix
361          * <p>
362          * @param mobileNumber Dial number without prefix
363          */
364         public void setMobileNumber (final Long mobileNumber) {
365                 this.mobileNumber = mobileNumber;
366         }
367
368         /**
369          * Getter for mobile provider
370          * <p>
371          * @return Mobile provider
372          */
373         public MobileProvider getMobileProvider () {
374                 return this.mobileProvider;
375         }
376
377         /**
378          * Setter for mobile provider
379          * <p>
380          * @param mobileProvider Mobile provider
381          */
382         public void setMobileProvider (final MobileProvider mobileProvider) {
383                 this.mobileProvider = mobileProvider;
384         }
385
386         /**
387          * Getter for chosen mobile number
388          * <p>
389          * @return mobile number
390          */
391         public DialableMobileNumber getSelectedMobileNumber () {
392                 return this.selectedMobileNumber;
393         }
394
395         /**
396          * Setter for chosen mobile number
397          * <p>
398          * @param selectedMobileNumber mobile number
399          */
400         public void setSelectedMobileNumber (final DialableMobileNumber selectedMobileNumber) {
401                 this.selectedMobileNumber = selectedMobileNumber;
402         }
403
404         /**
405          * Returns an instance of a DialableMobileNumber from all fields stored in
406          * this bean.
407          * <p>
408          * @return An instance of a DialableMobileNumber class
409          */
410         private DialableMobileNumber createMobileNumber () {
411                 // Initialize it
412                 final DialableMobileNumber number = new MobileNumber(this.getMobileProvider(), this.getMobileNumber());
413
414                 // Add all other data
415                 number.setMobileEntryCreated(this.getMobileEntryCreated());
416                 number.setMobileEntryUpdated(this.getMobileEntryUpdated());
417                 number.setMobileId(this.getMobileId());
418
419                 // Return it
420                 return number;
421         }
422
423 }