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.addressbook;
19 import java.text.MessageFormat;
20 import java.util.ArrayList;
21 import java.util.Collections;
22 import java.util.GregorianCalendar;
23 import java.util.List;
24 import javax.annotation.PostConstruct;
25 import javax.enterprise.context.SessionScoped;
26 import javax.faces.view.facelets.FaceletException;
27 import javax.inject.Inject;
28 import javax.inject.Named;
29 import javax.naming.Context;
30 import javax.naming.InitialContext;
31 import javax.naming.NamingException;
32 import org.mxchange.addressbook.beans.login.UserLoginWebController;
33 import org.mxchange.addressbook.exceptions.AddressbookNameAlreadyUsedException;
34 import org.mxchange.addressbook.model.addressbook.Addressbook;
35 import org.mxchange.addressbook.model.addressbook.AddressbookSessionBeanRemote;
36 import org.mxchange.addressbook.model.addressbook.UserAddressbook;
37 import org.mxchange.addressbook.model.addressbook.status.AddressbokStatus;
40 * A user bean (controller)
42 * @author Roland Haeder<roland@mxchange.org>
44 @Named ("addressbookController")
46 public class AddressbookWebBean implements AddressbookWebController {
51 private static final long serialVersionUID = 185_781_756_712_969L;
54 * Remote address book bean
56 private AddressbookSessionBeanRemote addressbookBean;
58 /////////////////////// Properties /////////////////////
60 * A list of all user's address books
62 private List<Addressbook> addressbookList;
65 * Name of the address book
67 private String addressbookName;
73 private UserLoginWebController loginController;
78 public AddressbookWebBean () {
81 // Get initial context
82 Context context = new InitialContext();
85 this.addressbookBean = (AddressbookSessionBeanRemote) context.lookup("ejb/stateless-addressbook"); //NOI18N
86 } catch (final NamingException e) {
88 throw new FaceletException(e);
93 public void addAddressbook () {
94 // Is this name already used?
95 if (!this.loginController.isUserLoggedIn()) {
97 throw new FaceletException("This method can only be called as logged-in user."); //NOI18N
98 } else if (this.getAddressbookName() == null) {
99 // Address book name is null
100 throw new NullPointerException("addressbookName is null");
101 } else if (this.getAddressbookName().isEmpty()) {
102 // Address book name is empty
103 throw new IllegalStateException("addressbookName is empty.");
104 } else if (this.isAddressbookNameUsed(this.getAddressbookName())) {
105 // Already used by this user
106 throw new FaceletException(MessageFormat.format("Address book name {0} already used.", this.getAddressbookName())); //NOI18N
109 // Create address book instance with name
110 Addressbook addressbook = new UserAddressbook(this.getAddressbookName());
112 // Set default status to UNLOCKED and owner
113 addressbook.setAddressbookStatus(AddressbokStatus.UNLOCKED);
114 addressbook.setAddressbookUser(this.loginController.getLoggedInUser());
115 addressbook.setAddressbookCreated(new GregorianCalendar());
118 // Register this address book
119 Addressbook updatedAddressbook = this.addressbookBean.createAddressbook(addressbook);
122 this.setAddressbookName(null);
124 // Add address book entry to list
125 this.addressbookList.add(updatedAddressbook);
126 } catch (final AddressbookNameAlreadyUsedException ex) {
127 // Throw again as cause
128 throw new FaceletException(ex);
133 public List<Addressbook> allAddressbooks () {
134 return Collections.unmodifiableList(this.addressbookList);
138 public String getAddressbookName () {
139 return this.addressbookName;
143 public void setAddressbookName (final String addressbookName) {
144 this.addressbookName = addressbookName;
148 public boolean hasCreatedAddressbooks () {
149 // Is the user logged in?
150 if (!this.loginController.isUserLoggedIn()) {
152 throw new FaceletException("This method can only be called as logged-in user."); //NOI18N
155 // Check if the list is filled
156 return (!this.addressbookList.isEmpty());
160 public void init () {
162 this.addressbookList = new ArrayList<>(0);
164 // Is the user logged-in?
165 if (this.loginController.isUserLoggedIn()) {
166 // Fill list with entries
167 this.addressbookList = this.addressbookBean.getUsersList(this.loginController.getLoggedInUser());
172 public boolean isAddressbookNameUsed (final String addressbookName) {
174 if (null == addressbookName) {
176 throw new NullPointerException("addressbookName is null"); //NOI18N
177 } else if (this.addressbookList.isEmpty()) {
182 // Default is not found
183 boolean isFound = false;
186 for (final Addressbook addressbook : this.addressbookList) {
188 if (addressbook.getAddressbookName().equals(addressbookName)) {