<Scene Scope="Project" version="2">
<Scope Scope="Faces Configuration Only"/>
<Scope Scope="Project">
- <Node id="customer/checkout2.xhtml" x="400" y="750" zoom="true"/>
- <Node id="admin/admin_country_list.xhtml" x="1400" y="450" zoom="true"/>
- <Node id="admin/admin_user_delete.xhtml" x="400" y="300" zoom="true"/>
- <Node id="privacy.xhtml" x="650" y="450" zoom="true"/>
- <Node id="customer/checkout.xhtml" x="1150" y="450" zoom="true"/>
- <Node id="admin/index.xhtml" x="650" y="750" zoom="true"/>
- <Node id="basket.xhtml" x="1900" y="150" zoom="true"/>
- <Node id="admin/admin_country_delete.xhtml" x="150" y="600" zoom="true"/>
- <Node id="admin/admin_country_edit.xhtml" x="150" y="750" zoom="true"/>
- <Node id="customer/register.xhtml" x="1400" y="300" zoom="true"/>
- <Node id="item_added.xhtml" x="900" y="450" zoom="true"/>
- <Node id="admin/admin_user_list.xhtml" x="150" y="300" zoom="true"/>
- <Node id="terms.xhtml" x="650" y="300" zoom="true"/>
- <Node id="admin/admin_logout.xhtml" x="400" y="600" zoom="true"/>
- <Node id="customer/lost_passwd.xhtml" x="150" y="150" zoom="true"/>
- <Node id="admin/admin_user_add.xhtml" x="900" y="150" zoom="true"/>
- <Node id="admin/admin_user_edit.xhtml" x="400" y="450" zoom="true"/>
- <Node id="index.xhtml" x="150" y="900" zoom="true"/>
- <Node id="errorHandler.xhtml" x="150" y="1050" zoom="true"/>
- <Node id="logout.xhtml" x="650" y="600" zoom="true"/>
- <Node id="customer/checkout_done.xhtml" x="1150" y="600" zoom="true"/>
- <Node id="admin/admin_category_list.xhtml" x="150" y="450" zoom="true"/>
- <Node id="admin/admin_user_unlock.xhtml" x="1650" y="150" zoom="true"/>
- <Node id="admin/admin_category_delete.xhtml" x="650" y="150" zoom="true"/>
- <Node id="customer/login.xhtml" x="1150" y="150" zoom="true"/>
- <Node id="*" x="1400" y="150" zoom="true"/>
- <Node id="imprint.xhtml" x="1650" y="300" zoom="true"/>
- <Node id="admin/admin_product_edit.xhtml" x="400" y="150" zoom="true"/>
- <Node id="admin/admin_product_delete.xhtml" x="900" y="300" zoom="true"/>
- <Node id="admin/admin_category_edit.xhtml" x="1150" y="300" zoom="true"/>
- <Node id="admin/admin_product_list.xhtml" x="400" y="900" zoom="true"/>
- <Node id="customer/empty_basket.xhtml" x="900" y="600" zoom="true"/>
+ <Node id="customer/checkout2.xhtml" x="1650" y="150" zoom="true"/>
+ <Node id="admin/admin_country_list.xhtml" x="900" y="450" zoom="true"/>
+ <Node id="admin/admin_user_delete.xhtml" x="1150" y="600" zoom="true"/>
+ <Node id="privacy.xhtml" x="1150" y="150" zoom="true"/>
+ <Node id="customer/checkout.xhtml" x="1400" y="150" zoom="true"/>
+ <Node id="admin/index.xhtml" x="150" y="300" zoom="true"/>
+ <Node id="basket.xhtml" x="900" y="600" zoom="true"/>
+ <Node id="exception.xhtml" x="650" y="300" zoom="true"/>
+ <Node id="admin/admin_country_delete.xhtml" x="650" y="150" zoom="true"/>
+ <Node id="customer/register.xhtml" x="396" y="90" zoom="true"/>
+ <Node id="admin/admin_country_edit.xhtml" x="150" y="600" zoom="true"/>
+ <Node id="item_added.xhtml" x="900" y="300" zoom="true"/>
+ <Node id="admin/admin_user_list.xhtml" x="400" y="900" zoom="true"/>
+ <Node id="terms.xhtml" x="400" y="450" zoom="true"/>
+ <Node id="admin/admin_logout.xhtml" x="1150" y="300" zoom="true"/>
+ <Node id="admin/admin_user_edit.xhtml" x="650" y="750" zoom="true"/>
+ <Node id="customer/lost_passwd.xhtml" x="1650" y="300" zoom="true"/>
+ <Node id="admin/admin_user_add.xhtml" x="150" y="150" zoom="true"/>
+ <Node id="index.xhtml" x="900" y="750" zoom="true"/>
+ <Node id="logout.xhtml" x="900" y="150" zoom="true"/>
+ <Node id="customer/checkout_done.xhtml" x="1400" y="450" zoom="true"/>
+ <Node id="admin/admin_user_unlock.xhtml" x="150" y="1050" zoom="true"/>
+ <Node id="admin/admin_category_list.xhtml" x="400" y="600" zoom="true"/>
+ <Node id="admin/admin_category_delete.xhtml" x="150" y="750" zoom="true"/>
+ <Node id="imprint.xhtml" x="650" y="450" zoom="true"/>
+ <Node id="*" x="400" y="750" zoom="true"/>
+ <Node id="customer/login.xhtml" x="1900" y="150" zoom="true"/>
+ <Node id="admin/admin_product_delete.xhtml" x="1400" y="300" zoom="true"/>
+ <Node id="admin/admin_product_edit.xhtml" x="1150" y="450" zoom="true"/>
+ <Node id="admin/admin_category_edit.xhtml" x="400" y="300" zoom="true"/>
+ <Node id="admin/admin_product_list.xhtml" x="650" y="600" zoom="true"/>
+ <Node id="customer/empty_basket.xhtml" x="150" y="900" zoom="true"/>
</Scope>
<Scope Scope="All Faces Configurations"/>
</Scene>
import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.faces.view.facelets.FaceletException;
+import javax.inject.Inject;
import javax.inject.Named;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
+import org.mxchange.jcontacts.contact.Contact;
+import org.mxchange.jcontacts.contact.UserContact;
import org.mxchange.jcontacts.contact.gender.Gender;
import org.mxchange.jcountry.data.Country;
+import org.mxchange.jphone.phonenumbers.cellphone.CellphoneNumber;
+import org.mxchange.jphone.phonenumbers.cellphone.DialableCellphoneNumber;
+import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
+import org.mxchange.jphone.phonenumbers.fax.FaxNumber;
+import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
+import org.mxchange.jphone.phonenumbers.landline.LandLineNumber;
import org.mxchange.jphone.phonenumbers.smsprovider.SmsProvider;
+import org.mxchange.jusercore.exceptions.EmailAddressAlreadyRegisteredException;
+import org.mxchange.jusercore.exceptions.UserNameAlreadyRegisteredException;
import org.mxchange.jusercore.exceptions.UserNotFoundException;
+import org.mxchange.jusercore.exceptions.UserPasswordMismatchException;
+import org.mxchange.jusercore.model.user.LoginUser;
import org.mxchange.jusercore.model.user.User;
import org.mxchange.jusercore.model.user.UserSessionBeanRemote;
+import org.mxchange.jusercore.model.user.UserUtils;
import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
/**
*/
private Integer zipCode;
+ /**
+ * Regular user controller
+ */
+ @Inject
+ private PizzaUserWebSessionController userController;
+
/**
* Default constructor
*/
}
}
+ @Override
+ public void addUser () {
+ // Create new user instance
+ User user = new LoginUser();
+ user.setUserName(this.getUserName());
+ user.setUserProfileMode(this.getUserProfileMode());
+
+ // Generate phone number
+ DialableLandLineNumber phone = new LandLineNumber(this.getPhoneCountry(), this.getPhoneAreaCode(), this.getPhoneNumber());
+ DialableCellphoneNumber cellphone = new CellphoneNumber(this.getCellphoneCarrier(), this.getCellphoneNumber());
+ DialableFaxNumber fax = new FaxNumber(this.getFaxCountry(), this.getFaxAreaCode(), this.getFaxNumber());
+
+ // Create new contact
+ Contact contact = new UserContact(this.getGender(), this.getFirstName(), this.getFamilyName());
+ contact.setContactStreet(this.getStreet());
+ contact.setContactHouseNumber(this.getHouseNumber());
+ contact.setContactZipCode(this.getZipCode());
+ contact.setContactCity(this.getCity());
+ contact.setContactCountry(this.getCountry());
+ contact.setContactEmailAddress(this.getEmailAddress());
+
+ // Don't set null or wrong references
+ if ((phone instanceof DialableLandLineNumber) && (phone.getPhoneCountry() instanceof Country) && (this.getPhoneAreaCode() != null) && (this.getPhoneNumber() != null) && (this.getPhoneAreaCode() > 0) && (this.getPhoneNumber() > 0)) {
+ // Now the number must be given
+ if (phone.getPhoneAreaCode() == null) {
+ // Is null
+ throw new NullPointerException("phone.phoneAreaCode is null"); //NOI18N
+ } else if (phone.getPhoneAreaCode() < 1) {
+ // Abort here
+ throw new IllegalArgumentException("phone.phoneAreaCode is zero or below."); //NOI18N
+ } else if (phone.getPhoneNumber() == null) {
+ // Is null
+ throw new NullPointerException("phone.phoneNumber is null"); //NOI18N
+ } else if (phone.getPhoneNumber() < 1) {
+ // Abort here
+ throw new IllegalArgumentException("phone.phoneNumber is zero or below."); //NOI18N
+ }
+
+ // Set phone number
+ contact.setContactLandLineNumber(phone);
+ }
+
+ // Don't set null or wrong references
+ if ((fax instanceof DialableFaxNumber) && (fax.getPhoneCountry() instanceof Country) && (this.getFaxAreaCode() != null) && (this.getFaxNumber() != null) && (this.getFaxAreaCode() > 0) && (this.getFaxNumber() > 0)) {
+ // Now the number must be given
+ if (fax.getPhoneAreaCode() == null) {
+ // Is null
+ throw new NullPointerException("fax.phoneAreaCode is null"); //NOI18N
+ } else if (fax.getPhoneAreaCode() < 1) {
+ // Abort here
+ throw new IllegalArgumentException("fax.phoneAreaCode is zero or below."); //NOI18N
+ } else if (fax.getPhoneNumber() == null) {
+ // Is null
+ throw new NullPointerException("fax.phoneNumber is null"); //NOI18N
+ } else if (fax.getPhoneNumber() < 1) {
+ // Abort here
+ throw new IllegalArgumentException("fax.phoneNumber is zero or below."); //NOI18N
+ }
+
+ // Set fax number
+ contact.setContactFaxNumber(fax);
+ }
+
+ // Is the provider set?
+ if ((cellphone instanceof DialableCellphoneNumber) && (this.getCellphoneCarrier() instanceof SmsProvider) && (this.getCellphoneNumber() != null) && (this.getCellphoneNumber() > 0)) {
+ // Is the number set?
+ if (cellphone.getPhoneNumber() == null) {
+ // Is null
+ throw new NullPointerException("cellphone.phoneNumber is null"); //NOI18N
+ } else if (cellphone.getPhoneNumber() < 1) {
+ // Abort here
+ throw new IllegalArgumentException("cellphone.phoneNumber is zero or below."); //NOI18N
+ }
+
+ // Set cellphone number
+ contact.setContactCellphoneNumber(cellphone);
+ }
+
+ contact.setContactBirthday(this.getBirthday());
+ contact.setContactComment(this.getComment());
+
+ // Set contact in user
+ user.setUserContact(contact);
+
+ // Init variable for password
+ String password = null;
+
+ // Is the user name or email address used already?
+ // @TODO Add password length check
+ if (this.userController.isUserNameRegistered(user)) {
+ // User name is already used
+ throw new FaceletException(new UserNameAlreadyRegisteredException(user));
+ } else if (this.userController.isEmailAddressRegistered(user)) {
+ // Email address is already used
+ throw new FaceletException(new EmailAddressAlreadyRegisteredException(user));
+ } else if ((this.getUserPassword().isEmpty()) && (this.getUserPasswordRepeat().isEmpty())) {
+ // Empty password entered, then generate one
+ password = UserUtils.createRandomPassword(PizzaUserWebSessionController.MINIMUM_PASSWORD_LENGTH);
+ } else if (!this.isSamePasswordEntered()) {
+ // Both passwords don't match
+ throw new FaceletException(new UserPasswordMismatchException(user));
+ } else {
+ // Both match, so get it from this bean
+ password = this.getUserPassword();
+ }
+
+ // The password should not be null and at least 5 characters long
+ assert (password != null) : "password is null";
+ assert (password.length() >= PizzaUserWebSessionController.MINIMUM_PASSWORD_LENGTH) : "Password is not long enough.";
+
+ // Encrypt password and set it
+ user.setUserEncryptedPassword(UserUtils.encryptPassword(password));
+
+ try {
+ // Now, that all is set, call EJB
+ this.userBean.addUser(user);
+ } catch (final UserNameAlreadyRegisteredException | EmailAddressAlreadyRegisteredException ex) {
+ // Throw again
+ throw new FaceletException(ex);
+ }
+ }
+
@Override
public List<User> allUsers () {
// Return it
this.userList = this.userBean.allUsers();
}
+ /**
+ * Checks if same password is entered and that they are not empty.
+ * <p>
+ * @return Whether the same password was entered
+ */
+ private boolean isSamePasswordEntered () {
+ return ((!this.getUserPassword().isEmpty()) && (Objects.equals(this.getUserPassword(), this.getUserPasswordRepeat())));
+ }
+
@Override
public User lookupUserById (final Long userId) throws UserNotFoundException {
// Init variable
*/
boolean hasUsers ();
+ /**
+ * Adds user instance to database by preparing a complete user instance and
+ * sending it to the EJB. The data set in the controller is being verified,
+ * e.g. if the user name or email address is not used yet.
+ */
+ void addUser ();
+
/**
* Getter for birth day
* <p>
import java.text.MessageFormat;
import java.util.Collections;
import java.util.Date;
-import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
User user = new LoginUser();
user.setUserName(this.getUserName());
user.setUserProfileMode(this.getUserProfileMode());
- user.setUserCreated(new GregorianCalendar());
// Generate phone number
- DialableLandLineNumber phone = new LandLineNumber(this.getPhoneCountry(), this.getPhoneAreaCode(), this.getPhoneNumber(), new GregorianCalendar());
- DialableCellphoneNumber cellphone = new CellphoneNumber(this.getCellphoneCarrier(), this.getCellphoneNumber(), new GregorianCalendar());
- DialableFaxNumber fax = new FaxNumber(this.getFaxCountry(), this.getFaxAreaCode(), this.getFaxNumber(), new GregorianCalendar());
+ DialableLandLineNumber phone = new LandLineNumber(this.getPhoneCountry(), this.getPhoneAreaCode(), this.getPhoneNumber());
+ DialableCellphoneNumber cellphone = new CellphoneNumber(this.getCellphoneCarrier(), this.getCellphoneNumber());
+ DialableFaxNumber fax = new FaxNumber(this.getFaxCountry(), this.getFaxAreaCode(), this.getFaxNumber());
// Create new contact
Contact contact = new UserContact(this.getGender(), this.getFirstName(), this.getFamilyName());
contact.setContactComment(this.getComment());
// Created timestamp and ownContact
- contact.setContactCreated(new GregorianCalendar());
contact.setContactOwnContact(Boolean.TRUE);
// Set contact in user
// Trace message
//this.getLogger().logTrace(MessageFormat.format("createUserInstance: user={0} - EXIT!", user));
+
// Return it
return user;
}
}
@Override
- public boolean isRequiredPersonalDataSet () {
- return ((this.getUserName() != null) &&
- (this.getUserProfileMode() != null) &&
+ public boolean isRequiredChangePersonalDataSet () {
+ return ((this.getUserProfileMode() != null) &&
(this.getGender() != null) &&
(this.getFirstName() != null) &&
(this.getFamilyName() != null) &&
(this.getStreet() != null) &&
(this.getHouseNumber() != null) &&
(this.getZipCode() != null) &&
- (this.getCity() != null) &&
- (this.getEmailAddress() != null) &&
- (this.getEmailAddressRepeat() != null) &&
- (this.getUserPassword() != null) &&
- (this.getUserPasswordRepeat() != null));
+ (this.getCity() != null));
}
@Override
- public boolean isRequiredChangePersonalDataSet () {
- return ((this.getUserProfileMode() != null) &&
+ public boolean isRequiredPersonalDataSet () {
+ return ((this.getUserName() != null) &&
+ (this.getUserProfileMode() != null) &&
(this.getGender() != null) &&
(this.getFirstName() != null) &&
(this.getFamilyName() != null) &&
(this.getStreet() != null) &&
(this.getHouseNumber() != null) &&
(this.getZipCode() != null) &&
- (this.getCity() != null));
+ (this.getCity() != null) &&
+ (this.getEmailAddress() != null) &&
+ (this.getEmailAddressRepeat() != null) &&
+ (this.getUserPassword() != null) &&
+ (this.getUserPasswordRepeat() != null));
}
@Override
@Override
public boolean isSamePasswordEntered () {
- return (Objects.equals(this.getUserPassword(), this.getUserPasswordRepeat()));
+ return ((!this.getUserPassword().isEmpty()) && (Objects.equals(this.getUserPassword(), this.getUserPasswordRepeat())));
}
@Override
*/
public interface PizzaUserWebSessionController extends Serializable {
+ /**
+ * Minimum password length
+ */
+ public static final Integer MINIMUM_PASSWORD_LENGTH = 5;
+
/**
* Tries to lookup user by given id number. If the user is not found or the
* account status is not CONFIRMED proper exceptions are thrown.
// Return category id
return String.valueOf(((Country) value).getCountryId());
}
+
}
// Return category id
return String.valueOf(((SmsProvider) value).getProviderId());
}
+
}
<to-view-id>/basket.xhtml</to-view-id>
</navigation-case>
<navigation-case>
- <from-outcome>item_not_changed</from-outcome>
- <to-view-id>/errorHandler.xhtml</to-view-id>
+ <from-outcome>exception</from-outcome>
+ <to-view-id>/exception.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>admin_delete_user</from-outcome>
<to-view-id>/admin/admin_country_edit.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
+ <!--
+ <factory>
+ <exception-handler-factory>
+ org.mxchange.jcoreee.exceptions.CustomExceptionHandlerFactory
+ </exception-handler-factory>
+ </factory>
+ //-->
</faces-config>
+++ /dev/null
-<%--
-Document : errorHandler
-Created on : 05.08.2016, 12:06:39
-Author : Roland Haeder
---%>
-
-<%@page import="java.io.PrintWriter"%>
-<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-<jsp:useBean id="date" class="java.util.Date" />
-
-<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
-<c:set var="basePath" value="${pageContext.request.contextPath}" />
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <link rel="stylesheet" href="${basePath}/style.css" type="text/css" />
- <title>Pizza-Service - Fehler</title>
- </head>
-
- <body>
- <div id="header">
- <div id="guest_title">
- <h1>Pizza-Service - Fehler</h1>
- </div>
- </div>
-
- <jsp:include page="/WEB-INF/templates/guest/guest_menu.jsp" flush="false" />
-
- <div id="content_outer">
- <div id="content_title">
- <h2>An error occurred:</h2>
- </div>
-
- <div id="content">
- Unfortunately an unexpected error has occurred. Below you can find the error details.
- <ul>
- <li>Timestamp: <fmt:formatDate value="${date}" type="both" dateStyle="long" timeStyle="long" /></li>
- <li>Action: <c:out value="${requestScope['javax.servlet.forward.request_uri']}" /></li>
- <li>Exception: <c:out value="${requestScope['javax.servlet.error.exception']}" /></li>
- <li>Message: <c:out value="${requestScope['javax.servlet.error.message']}" /></li>
- <li>Status code: <c:out value="${requestScope['javax.servlet.error.status_code']}" /></li>
- <li>User agent: <c:out value="${header['user-agent']}" /></li>
- </ul>
- </div>
- </div>
-
- <jsp:include page="/WEB-INF/templates/guest/guest_footer.jsp" flush="false" />
- </body>
-</html>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://xmlns.jcp.org/jsf/html"
+ xmlns:f="http://xmlns.jcp.org/jsf/core"
+ >
+
+ <ui:composition template="/WEB-INF/templates/guest/guest_base.tpl">
+ <ui:define name="guest_title">#{msg.PAGE_TITLE_EXCEPTION_THROWN}</ui:define>
+
+ <ui:define name="content_header">
+ #{msg.CONTENT_TITLE_EXCEPTION_THROWN}
+ </ui:define>
+
+ <ui:define name="content">
+ Unfortunately an unexpected error has occurred.
+ </ui:define>
+ </ui:composition>
+</html>