2 * Copyright (C) 2015 Roland Haeder
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (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 General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 package org.mxchange.addressbook.beans.user;
19 import java.text.MessageFormat;
20 import java.util.Date;
21 import java.util.GregorianCalendar;
22 import java.util.List;
23 import java.util.Objects;
24 import javax.annotation.PostConstruct;
25 import javax.enterprise.context.SessionScoped;
26 import javax.faces.view.facelets.FaceletException;
27 import javax.inject.Named;
28 import javax.naming.Context;
29 import javax.naming.InitialContext;
30 import javax.naming.NamingException;
31 import org.mxchange.jcontacts.contact.Contact;
32 import org.mxchange.jcontacts.contact.UserContact;
33 import org.mxchange.jcontacts.contact.gender.Gender;
34 import org.mxchange.jcountry.data.Country;
35 import org.mxchange.jphone.phonenumbers.cellphone.DialableCellphoneNumber;
36 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
37 import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
38 import org.mxchange.jusercore.model.user.LoginUser;
39 import org.mxchange.jusercore.model.user.User;
40 import org.mxchange.jusercore.model.user.UserSessionBeanRemote;
43 * A user bean (controller)
45 * @author Roland Haeder<roland@mxchange.org>
47 @Named ("userController")
49 public class UserWebBean implements UserWebController {
54 private static final long serialVersionUID = 542_145_347_916L;
56 /////////////////////// Properties /////////////////////
60 private Date birthday;
65 private DialableCellphoneNumber cellphoneNumber;
75 private String comment;
80 private Country country;
85 private String emailAddress;
90 private List<String> emailAddressList;
93 * Email address repeated
95 private String emailAddressRepeat;
100 private String familyName;
105 private DialableFaxNumber faxNumber;
110 private String firstName;
115 private Gender gender;
120 private Short houseNumber;
125 private DialableLandLineNumber phoneNumber;
130 private String street;
135 private final UserSessionBeanRemote userBean;
145 private String userName;
150 private List<String> userNameList;
153 * User password (unencrypted from web form)
155 private String userPassword;
158 * User password repeated (unencrypted from web form)
160 private String userPasswordRepeat;
165 private Integer zipCode;
168 * Default constructor
170 public UserWebBean () {
171 // Set gender to UNKNOWN
172 this.gender = Gender.UNKNOWN;
176 // Get initial context
177 Context context = new InitialContext();
180 this.userBean = (UserSessionBeanRemote) context.lookup("ejb/stateless-user"); //NOI18N
181 } catch (final NamingException e) {
183 throw new FaceletException(e);
188 public void addUserNameEmailAddress (final User user) {
189 // Make sure the entry is not added yet
190 if (this.userNameList.contains(user.getUserName())) {
192 throw new IllegalArgumentException(MessageFormat.format("User name {0} already added.", user.getUserName()));
193 } else if (this.emailAddressList.contains(user.getUserContact().getEmailAddress())) {
195 throw new IllegalArgumentException(MessageFormat.format("Email address {0} already added.", user.getUserContact().getEmailAddress()));
199 this.userNameList.add(user.getUserName());
202 this.emailAddressList.add(user.getUserContact().getEmailAddress());
206 public void clearData () {
209 this.setUserId(null);
210 this.setGender(Gender.UNKNOWN);
211 this.setFirstName(null);
212 this.setFamilyName(null);
213 this.setStreet(null);
214 this.setHouseNumber(null);
215 this.setZipCode(null);
217 this.setCountry(null);
220 this.setEmailAddress(null);
221 this.setEmailAddressRepeat(null);
222 this.setPhoneNumber(null);
223 this.setCellphoneNumber(null);
224 this.setFaxNumber(null);
227 this.setBirthday(null);
228 this.setComment(null);
229 this.setUserName(null);
230 this.setUserPassword(null);
231 this.setUserPasswordRepeat(null);
235 public void copyUser (final User user) {
238 this.setUserId(user.getUserId());
239 this.setGender(user.getUserContact().getGender());
240 this.setFirstName(user.getUserContact().getFirstName());
241 this.setFamilyName(user.getUserContact().getFamilyName());
242 this.setStreet(user.getUserContact().getStreet());
243 this.setHouseNumber(user.getUserContact().getHouseNumber());
244 this.setZipCode(user.getUserContact().getZipCode());
245 this.setCity(user.getUserContact().getCity());
246 this.setCountry(user.getUserContact().getCountry());
249 this.setPhoneNumber(user.getUserContact().getPhoneNumber());
250 this.setCellphoneNumber(user.getUserContact().getCellphoneNumber());
251 this.setFaxNumber(user.getUserContact().getFaxNumber());
252 this.setEmailAddress(user.getUserContact().getEmailAddress());
255 this.setBirthday(user.getUserContact().getBirthday());
256 this.setComment(user.getUserContact().getComment());
260 public User createUserInstance () {
262 //this.getLogger().logTrace("createUserInstance: CALLED!");
264 // Required personal data must be set
265 assert (this.isRequiredPersonalDataSet()) : "not all personal data is set"; //NOI18N
267 // Create new user instance
268 User user = new LoginUser();
269 user.setUserName(this.getUserName());
271 // Create new contact
272 Contact contact = new UserContact(this.getGender(), this.getFirstName(), this.getFamilyName());
273 contact.setStreet(this.getStreet());
274 contact.setHouseNumber(this.getHouseNumber());
275 contact.setZipCode(this.getZipCode());
276 contact.setCity(this.getCity());
277 contact.setCountry(this.getCountry());
278 contact.setEmailAddress(this.getEmailAddress());
279 contact.setPhoneNumber(this.getPhoneNumber());
280 contact.setFaxNumber(this.getFaxNumber());
281 contact.setCellphoneNumber(this.getCellphoneNumber());
282 contact.setBirthday(this.getBirthday());
283 contact.setComment(this.getComment());
285 // Created timestamp and ownContact
286 contact.setCreated(new GregorianCalendar());
287 contact.setOwnContact(Boolean.TRUE);
289 // Set contact in user
290 user.setUserContact(contact);
291 user.setUserCreated(new GregorianCalendar());
294 //this.getLogger().logTrace(MessageFormat.format("createUserInstance: user={0} - EXIT!", user));
300 public Date getBirthday () {
301 return this.birthday;
305 public void setBirthday (final Date birthday) {
306 this.birthday = birthday;
310 public DialableCellphoneNumber getCellphoneNumber () {
311 return this.cellphoneNumber;
315 public void setCellphoneNumber (final DialableCellphoneNumber cellphoneNumber) {
316 this.cellphoneNumber = cellphoneNumber;
320 public String getCity () {
325 public void setCity (final String city) {
330 public String getComment () {
335 public void setComment (final String comment) {
336 this.comment = comment;
340 public Country getCountry () {
345 public void setCountry (final Country country) {
346 this.country = country;
350 public String getEmailAddress () {
351 return this.emailAddress;
355 public void setEmailAddress (final String emailAddress) {
356 this.emailAddress = emailAddress;
360 public String getEmailAddressRepeat () {
361 return this.emailAddressRepeat;
365 public void setEmailAddressRepeat (final String emailAddressRepeat) {
366 this.emailAddressRepeat = emailAddressRepeat;
370 public String getFamilyName () {
371 return this.familyName;
375 public void setFamilyName (final String familyName) {
376 this.familyName = familyName;
380 public DialableFaxNumber getFaxNumber () {
381 return this.faxNumber;
385 public void setFaxNumber (final DialableFaxNumber faxNumber) {
386 this.faxNumber = faxNumber;
390 public String getFirstName () {
391 return this.firstName;
395 public void setFirstName (final String firstName) {
396 this.firstName = firstName;
400 public Gender getGender () {
405 public void setGender (final Gender gender) {
406 this.gender = gender;
410 public Short getHouseNumber () {
411 return this.houseNumber;
415 public void setHouseNumber (final Short houseNumber) {
416 this.houseNumber = houseNumber;
420 public DialableLandLineNumber getPhoneNumber () {
421 return this.phoneNumber;
425 public void setPhoneNumber (final DialableLandLineNumber phoneNumber) {
426 this.phoneNumber = phoneNumber;
430 public String getStreet () {
435 public void setStreet (final String street) {
436 this.street = street;
440 public Long getUserId () {
445 public void setUserId (final Long userId) {
446 this.userId = userId;
450 public String getUserName () {
451 return this.userName;
455 public void setUserName (final String userName) {
456 this.userName = userName;
460 public String getUserPassword () {
461 return this.userPassword;
465 public void setUserPassword (final String userPassword) {
466 this.userPassword = userPassword;
470 public String getUserPasswordRepeat () {
471 return this.userPasswordRepeat;
475 public void setUserPasswordRepeat (final String userPasswordRepeat) {
476 this.userPasswordRepeat = userPasswordRepeat;
480 public Integer getZipCode () {
485 public void setZipCode (final Integer zipCode) {
486 this.zipCode = zipCode;
490 public void init () {
491 // Get full user name list for reducing EJB calls
492 this.userNameList = this.userBean.getUserNameList();
494 // Get full email address list for reducing EJB calls
495 this.emailAddressList = this.userBean.getEmailAddressList();
499 public boolean isEmailAddressRegistered (final User user) {
500 return ((this.emailAddressList instanceof List) && (this.emailAddressList.contains(user.getUserContact().getEmailAddress())));
504 public boolean isRequiredPersonalDataSet () {
505 return ((this.getUserName() != null) &&
506 (this.getGender() != null) &&
507 (this.getFirstName() != null) &&
508 (this.getFamilyName() != null) &&
509 (this.getStreet() != null) &&
510 (this.getHouseNumber() != null) &&
511 (this.getZipCode() != null) &&
512 (this.getCity() != null) &&
513 (this.getEmailAddress() != null) &&
514 (this.getEmailAddressRepeat() != null) &&
515 (this.getUserPassword() != null) &&
516 (this.getUserPasswordRepeat() != null));
520 public boolean isSameEmailAddressEntered () {
521 return (Objects.equals(this.getEmailAddress(), this.getEmailAddressRepeat()));
525 public boolean isSamePasswordEntered () {
526 return (Objects.equals(this.getUserPassword(), this.getUserPasswordRepeat()));
530 public boolean isUserNameRegistered (final User user) {
531 return ((this.userNameList instanceof List) && (this.userNameList.contains(user.getUserName())));