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;
74 private UserLoginWebController loginController;
79 public AddressbookWebBean () {
82 // Get initial context
83 Context context = new InitialContext();
86 this.addressbookBean = (AddressbookSessionBeanRemote) context.lookup("ejb/stateless-addressbook"); //NOI18N
87 } catch (final NamingException e) {
89 throw new FaceletException(e);
94 public void addAddressbook () {
95 // Is this name already used?
96 if (!this.loginController.isUserLoggedIn()) {
98 throw new FaceletException("This method can only be called as logged-in user."); //NOI18N
99 } else if (this.getAddressbookName() == null) {
100 // Address book name is null
101 throw new NullPointerException("addressbookName is null");
102 } else if (this.getAddressbookName().isEmpty()) {
103 // Address book name is empty
104 throw new IllegalStateException("addressbookName is empty.");
105 } else if (this.isAddressbookNameUsed(this.getAddressbookName())) {
106 // Already used by this user
107 throw new FaceletException(MessageFormat.format("Address book name {0} already used.", this.getAddressbookName())); //NOI18N
110 // Create address book instance with name
111 Addressbook addressbook = new UserAddressbook(this.getAddressbookName());
113 // Set default status to UNLOCKED and owner
114 addressbook.setAddressbookStatus(AddressbokStatus.UNLOCKED);
115 addressbook.setAddressbookUser(this.loginController.getLoggedInUser());
116 addressbook.setAddressbookCreated(new GregorianCalendar());
119 // Register this address book
120 Addressbook updatedAddressbook = this.addressbookBean.createAddressbook(addressbook);
123 this.setAddressbookName(null);
125 // Add address book entry to list
126 this.addressbookList.add(updatedAddressbook);
127 } catch (final AddressbookNameAlreadyUsedException ex) {
128 // Throw again as cause
129 throw new FaceletException(ex);
134 public List<Addressbook> allAddressbooks () {
135 // Is the user logged in?
136 if (!this.loginController.isUserLoggedIn()) {
138 throw new FaceletException("This method can only be called as logged-in user."); //NOI18N
141 return Collections.unmodifiableList(this.addressbookList);
145 public List<AddressbookEntry> allEntries (final Addressbook addressbook) {
146 // Is the user logged in?
147 if (!this.loginController.isUserLoggedIn()) {
149 throw new FaceletException("This method can only be called as logged-in user."); //NOI18N
153 return this.addressbookBean.allEntries(addressbook);
157 public int allEntriesSize (final Addressbook addressbook) {
159 return this.allEntries(addressbook).size();
163 public String getAddressbookName () {
164 return this.addressbookName;
168 public void setAddressbookName (final String addressbookName) {
169 this.addressbookName = addressbookName;
173 public boolean hasCreatedAddressbooks () {
174 // Is the user logged in?
175 if (!this.loginController.isUserLoggedIn()) {
177 throw new FaceletException("This method can only be called as logged-in user."); //NOI18N
180 // Check if the list is filled
181 return (!this.addressbookList.isEmpty());
185 public void init () {
187 this.addressbookList = new ArrayList<>(0);
189 // Is the user logged-in?
190 if (this.loginController.isUserLoggedIn()) {
191 // Fill list with entries
192 this.addressbookList = this.addressbookBean.getUsersList(this.loginController.getLoggedInUser());
197 public boolean isAddressbookNameUsed (final String addressbookName) {
199 if (null == addressbookName) {
201 throw new NullPointerException("addressbookName is null"); //NOI18N
202 } else if (this.addressbookList.isEmpty()) {
207 // Default is not found
208 boolean isFound = false;
211 for (final Addressbook addressbook : this.addressbookList) {
213 if (addressbook.getAddressbookName().equals(addressbookName)) {