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.entry.AddressbookEntry;
38 import org.mxchange.addressbook.model.addressbook.status.AddressbokStatus;
41 * A user bean (controller)
43 * @author Roland Haeder<roland@mxchange.org>
45 @Named ("addressbookController")
47 public class AddressbookWebBean implements AddressbookWebController {
52 private static final long serialVersionUID = 185_781_756_712_969L;
55 * Remote address book bean
57 private AddressbookSessionBeanRemote addressbookBean;
59 /////////////////////// Properties /////////////////////
61 * A list of all user's address books
63 private List<Addressbook> addressbookList;
66 * Name of the address book
68 private String addressbookName;
71 * Address book id number (from URL for example)
73 private Long addressbookId;
79 private UserLoginWebController loginController;
84 public AddressbookWebBean () {
87 // Get initial context
88 Context context = new InitialContext();
91 this.addressbookBean = (AddressbookSessionBeanRemote) context.lookup("ejb/stateless-addressbook"); //NOI18N
92 } catch (final NamingException e) {
94 throw new FaceletException(e);
99 public String addAddressbook () {
100 // Is this name already used?
101 if (!this.loginController.isUserLoggedIn()) {
103 throw new FaceletException("This method can only be called as logged-in user."); //NOI18N
104 } else if (this.getAddressbookName() == null) {
105 // Address book name is null
106 throw new NullPointerException("addressbookName is null"); //NOI18N
107 } else if (this.getAddressbookName().isEmpty()) {
108 // Address book name is empty
109 throw new IllegalStateException("addressbookName is empty."); //NOI18N
110 } else if (this.isAddressbookNameUsed(this.getAddressbookName())) {
111 // Already used by this user
112 throw new FaceletException(MessageFormat.format("Address book name {0} already used.", this.getAddressbookName())); //NOI18N
115 // Create address book instance with name
116 Addressbook addressbook = new UserAddressbook(this.getAddressbookName());
118 // Set default status to UNLOCKED and owner
119 addressbook.setAddressbookStatus(AddressbokStatus.UNLOCKED);
120 addressbook.setAddressbookUser(this.loginController.getLoggedInUser());
121 addressbook.setAddressbookCreated(new GregorianCalendar());
124 // Register this address book
125 Addressbook updatedAddressbook = this.addressbookBean.createAddressbook(addressbook);
128 this.setAddressbookName(null);
130 // Add address book entry to list
131 this.addressbookList.add(updatedAddressbook);
134 return "login_own_addressbooks"; //NOI18N
135 } catch (final AddressbookNameAlreadyUsedException ex) {
136 // Throw again as cause
137 throw new FaceletException(ex);
142 public List<Addressbook> allAddressbooks () {
143 // Is the user logged in?
144 if (!this.loginController.isUserLoggedIn()) {
146 throw new FaceletException("This method can only be called as logged-in user."); //NOI18N
149 return Collections.unmodifiableList(this.addressbookList);
153 public List<AddressbookEntry> allEntries (final Addressbook addressbook) {
154 // Is the user logged in?
155 if (!this.loginController.isUserLoggedIn()) {
157 throw new FaceletException("This method can only be called as logged-in user."); //NOI18N
161 return this.addressbookBean.allEntries(addressbook);
165 public int allEntriesSize (final Addressbook addressbook) {
167 return this.allEntries(addressbook).size();
171 public Long getAddressbookId () {
172 return this.addressbookId;
176 public void setAddressbookId (final Long addressbookId) {
177 this.addressbookId = addressbookId;
181 public String getAddressbookName () {
182 return this.addressbookName;
186 public void setAddressbookName (final String addressbookName) {
187 this.addressbookName = addressbookName;
191 public boolean hasCreatedAddressbooks () {
192 // Is the user logged in?
193 if (!this.loginController.isUserLoggedIn()) {
195 throw new FaceletException("This method can only be called as logged-in user."); //NOI18N
198 // Check if the list is filled
199 return (!this.addressbookList.isEmpty());
203 public void init () {
205 this.addressbookList = new ArrayList<>(0);
207 // Is the user logged-in?
208 if (this.loginController.isUserLoggedIn()) {
209 // Fill list with entries
210 this.addressbookList = this.addressbookBean.getUsersList(this.loginController.getLoggedInUser());
215 public boolean isAddressbookNameUsed (final String addressbookName) {
217 if (null == addressbookName) {
219 throw new NullPointerException("addressbookName is null"); //NOI18N
220 } else if (this.addressbookList.isEmpty()) {
225 // Default is not found
226 boolean isFound = false;
229 for (final Addressbook addressbook : this.addressbookList) {
231 if (addressbook.getAddressbookName().equals(addressbookName)) {