]> git.mxchange.org Git - jfinancials-war.git/blob
782d8314e2b348045299419344be6657c0852391
[jfinancials-war.git] /
1 /*
2  * Copyright (C) 2016 - 2020 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.mobileprovider;
18
19 import java.util.Objects;
20 import javax.ejb.EJB;
21 import javax.enterprise.context.RequestScoped;
22 import javax.enterprise.event.Event;
23 import javax.enterprise.inject.Any;
24 import javax.faces.application.FacesMessage;
25 import javax.faces.view.facelets.FaceletException;
26 import javax.inject.Inject;
27 import javax.inject.Named;
28 import org.mxchange.jcountry.model.data.Country;
29 import org.mxchange.jfinancials.beans.BaseFinancialsBean;
30 import org.mxchange.jphone.events.mobileprovider.added.AdminAddedMobileProviderEvent;
31 import org.mxchange.jphone.events.mobileprovider.added.AdminMobileProviderAddedEvent;
32 import org.mxchange.jphone.exceptions.mobileprovider.MobileProviderAlreadyAddedException;
33 import org.mxchange.jphone.model.phonenumbers.mobileprovider.AdminMobileProviderSessionBeanRemote;
34 import org.mxchange.jphone.model.phonenumbers.mobileprovider.CellphoneProvider;
35 import org.mxchange.jphone.model.phonenumbers.mobileprovider.MobileProvider;
36
37 /**
38  * Administrative bean (controller) for mobile provider
39  * <p>
40  * @author Roland Häder<roland@mxchange.org>
41  */
42 @Named ("adminMobileProviderController")
43 @RequestScoped
44 public class FinancialsAdminMobileProviderWebRequestBean extends BaseFinancialsBean implements FinancialsAdminMobileProviderWebRequestController {
45
46         /**
47          * Serial number
48          */
49         private static final long serialVersionUID = 184_598_175_371_269_016L;
50
51         /**
52          * Remote EJB for mobile providers (administrative)
53          */
54         @EJB (lookup = "java:global/jfinancials-ejb/adminMobileProvider!org.mxchange.jphone.model.phonenumbers.mobileprovider.AdminMobileProviderSessionBeanRemote")
55         private AdminMobileProviderSessionBeanRemote adminRemoteBean;
56
57         /**
58          * Regular bean
59          */
60         @Inject
61         private FinancialsMobileProviderWebRequestController mobileController;
62
63         /**
64          * Event being fired when the mobile provider was added
65          */
66         @Inject
67         @Any
68         private Event<AdminAddedMobileProviderEvent> providerAddedEvent;
69
70         /**
71          * Country instance ('s dial data)
72          */
73         private Country providerCountry;
74
75         /**
76          * Provider dial prefix (example: 0177 for German E+)
77          */
78         private Long providerDialPrefix;
79
80         /**
81          * Pattern for mail gateway
82          */
83         private String providerMailPattern;
84
85         /**
86          * Name of the provider
87          */
88         private String providerName;
89
90         /**
91          * Default constructor
92          */
93         public FinancialsAdminMobileProviderWebRequestBean () {
94                 // Call super constructor
95                 super();
96         }
97
98         /**
99          * Adds a mobile provider to database by calling the EJB. A pre-check on
100          * dial-prefix and country combination is done, if found, an exception is
101          * thrown. A redirect should take place after successfull creation.
102          * <p>
103          * @todo Add field validation
104          */
105         public void addMobileProvider () {
106                 // Create mobile provider instance
107                 final MobileProvider mobileProvider = new CellphoneProvider(this.getProviderDialPrefix(), this.getProviderName(), this.getProviderCountry(), this.getProviderMailPattern());
108
109                 // Is the provider already created?
110                 if (this.isMobileProviderCreated(mobileProvider)) {
111                         // Then throw exception
112                         this.showFacesMessage("form_add_mobile_provider:providerDialPrefix", new MobileProviderAlreadyAddedException(mobileProvider), FacesMessage.SEVERITY_WARN); //NOI18N
113                         return;
114                 }
115
116                 // Init variable
117                 final MobileProvider updatedProvider;
118
119                 try {
120                         // Call remote EJB and get back an updated instance
121                         updatedProvider = this.adminRemoteBean.addMobileProvider(mobileProvider);
122                 } catch (final MobileProviderAlreadyAddedException ex) {
123                         // Throw again
124                         throw new FaceletException(ex);
125                 }
126
127                 // Fire event
128                 this.providerAddedEvent.fire(new AdminMobileProviderAddedEvent(updatedProvider));
129         }
130
131         /**
132          * Getter for country instance ('s dial data)
133          * <p>
134          * @return Country instance
135          */
136         public Country getProviderCountry () {
137                 return this.providerCountry;
138         }
139
140         /**
141          * Setter for country instance ('s dial data)
142          * <p>
143          * @param providerCountry Country instance
144          */
145         public void setProviderCountry (final Country providerCountry) {
146                 this.providerCountry = providerCountry;
147         }
148
149         /**
150          * Getter for provider dial prefix
151          * <p>
152          * @return Provider dial prefix
153          */
154         public Long getProviderDialPrefix () {
155                 return this.providerDialPrefix;
156         }
157
158         /**
159          * Setter for provider dial prefix
160          * <p>
161          * @param providerDialPrefix Provider dial prefix
162          */
163         public void setProviderDialPrefix (final Long providerDialPrefix) {
164                 this.providerDialPrefix = providerDialPrefix;
165         }
166
167         /**
168          * Getter for pattern for mail gateway
169          * <p>
170          * @return Pattern for mail gateway
171          */
172         public String getProviderMailPattern () {
173                 return this.providerMailPattern;
174         }
175
176         /**
177          * Setter for pattern for mail gateway
178          * <p>
179          * @param providerMailPattern Pattern for mail gateway
180          */
181         public void setProviderMailPattern (final String providerMailPattern) {
182                 this.providerMailPattern = providerMailPattern;
183         }
184
185         /**
186          * Getter for provider name
187          * <p>
188          * @return Provider name
189          */
190         public String getProviderName () {
191                 return this.providerName;
192         }
193
194         /**
195          * Setter for provider name
196          * <p>
197          * @param providerName Provider name
198          */
199         public void setProviderName (final String providerName) {
200                 this.providerName = providerName;
201         }
202
203         /**
204          * Checks whether if the given mobile provider is already created by
205          * checking both dial prefix and country.
206          * <p>
207          * @param mobileProvider Mobile provider instance to check
208          * <p>
209          * @return Whether the given mobile provider instance is found
210          */
211         private boolean isMobileProviderCreated (final MobileProvider mobileProvider) {
212                 // Default is not found
213                 boolean isFound = false;
214
215                 // Loop through all
216                 for (final MobileProvider currentMobileProvider : this.mobileController.allMobileProviders()) {
217                         // Is the provider's dial prefix and country the same?
218                         if (Objects.equals(mobileProvider, currentMobileProvider)) {
219                                 // Is the same, abort loop
220                                 isFound = true;
221                                 break;
222                         }
223                 }
224
225                 // Return result
226                 return isFound;
227         }
228
229 }