X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2Fjava%2Forg%2Fmxchange%2Faddressbook%2Fbeans%2Faddressbook%2FAddressbookWebBean.java;h=c5e0566ac8ba4e1bf6f517abbfa45c2acb8fe873;hb=34654c8de41131dc7b69c37bd313a08557d51da5;hp=b50a418923c0b1f12380aa0bbdf3a02d341ada08;hpb=7aa25f312e6560bea95c4c3bc96597c351e0ab89;p=addressbook-war.git diff --git a/src/java/org/mxchange/addressbook/beans/addressbook/AddressbookWebBean.java b/src/java/org/mxchange/addressbook/beans/addressbook/AddressbookWebBean.java index b50a4189..c5e0566a 100644 --- a/src/java/org/mxchange/addressbook/beans/addressbook/AddressbookWebBean.java +++ b/src/java/org/mxchange/addressbook/beans/addressbook/AddressbookWebBean.java @@ -18,11 +18,16 @@ package org.mxchange.addressbook.beans.addressbook; import java.text.MessageFormat; import java.util.ArrayList; +import java.util.Calendar; import java.util.Collections; import java.util.GregorianCalendar; import java.util.List; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import javax.annotation.PostConstruct; import javax.enterprise.context.SessionScoped; +import javax.enterprise.event.Observes; import javax.faces.view.facelets.FaceletException; import javax.inject.Inject; import javax.inject.Named; @@ -30,16 +35,18 @@ import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import org.mxchange.addressbook.beans.login.UserLoginWebController; +import org.mxchange.addressbook.events.addressbook.AddressbookLoadedEvent; import org.mxchange.addressbook.exceptions.AddressbookNameAlreadyUsedException; import org.mxchange.addressbook.model.addressbook.Addressbook; import org.mxchange.addressbook.model.addressbook.AddressbookSessionBeanRemote; import org.mxchange.addressbook.model.addressbook.UserAddressbook; import org.mxchange.addressbook.model.addressbook.entry.AddressbookEntry; -import org.mxchange.addressbook.model.addressbook.shared.ShareableAddressbook; import org.mxchange.addressbook.model.addressbook.status.AddressbokStatus; +import org.mxchange.jusercore.events.login.UserLoggedInEvent; +import org.mxchange.jusercore.model.user.User; /** - * A user bean (controller) + * An address book bean (controller) *

* @author Roland Haeder */ @@ -47,27 +54,45 @@ import org.mxchange.addressbook.model.addressbook.status.AddressbokStatus; @SessionScoped public class AddressbookWebBean implements AddressbookWebController { + /** + * Map for count of user's shared addresses + */ + private static ConcurrentMap countSharesList; + /** * Serial number */ private static final long serialVersionUID = 185_781_756_712_969L; + /** + * Address book instance + */ + private Addressbook addressbook; + /** * Remote address book bean */ private AddressbookSessionBeanRemote addressbookBean; + /** + * When this address book has been created + */ + private Calendar addressbookCreated; + /** * Address book id number (from URL for example) */ private Long addressbookId; - /** * Name of the address book */ private String addressbookName; + /** + * Who owns this address book + */ + private User addressbookUser; /** * Login controller @@ -75,12 +100,6 @@ public class AddressbookWebBean implements AddressbookWebController { @Inject private UserLoginWebController loginController; - /** - * A list of all user's shared (with others) address books - */ - private List sharedAddressbooks; - - /////////////////////// Properties ///////////////////// /** * A list of all user's address books */ @@ -101,6 +120,9 @@ public class AddressbookWebBean implements AddressbookWebController { // Throw again throw new FaceletException(e); } + + // Init list + AddressbookWebBean.countSharesList = new ConcurrentHashMap<>(0); } @Override @@ -121,16 +143,16 @@ public class AddressbookWebBean implements AddressbookWebController { } // Create address book instance with name - Addressbook addressbook = new UserAddressbook(this.getAddressbookName()); + Addressbook book = new UserAddressbook(this.getAddressbookName()); // Set default status to UNLOCKED and owner - addressbook.setAddressbookStatus(AddressbokStatus.UNLOCKED); - addressbook.setAddressbookUser(this.loginController.getLoggedInUser()); - addressbook.setAddressbookCreated(new GregorianCalendar()); + book.setAddressbookStatus(AddressbokStatus.UNLOCKED); + book.setAddressbookUser(this.loginController.getLoggedInUser()); + book.setAddressbookCreated(new GregorianCalendar()); try { // Register this address book - Addressbook updatedAddressbook = this.addressbookBean.createAddressbook(addressbook); + Addressbook updatedAddressbook = this.addressbookBean.createAddressbook(book); // Remove name this.setAddressbookName(null); @@ -146,6 +168,60 @@ public class AddressbookWebBean implements AddressbookWebController { } } + @Override + public void afterAddressbookLoadedEvent (final @Observes AddressbookLoadedEvent event) { + // event should not be null + if (null == event) { + // Throw NPE + throw new NullPointerException("event is null"); //NOI18N + } else if (event.getAddressbook() == null) { + // Throw NPE again + throw new NullPointerException("event.addressbook is null"); //NOI18N + } else if (event.getAddressbook().getAddressbookId() == null) { + // And again a NPE + throw new NullPointerException("event.addressbook.addressbookId is null"); //NOI18N + } else if (event.getAddressbook().getAddressbookId() < 1) { + // Invalid id number + throw new IllegalArgumentException(MessageFormat.format("Address book instance {0} has invalid id number: {1}", event.getAddressbook(), event.getAddressbook().getAddressbookId())); //NOI18N + } else if (event.getAddressbook().getAddressbookUser() == null) { + // One more NPE ... + throw new NullPointerException("event.addressbook.addressbookUser is null"); //NOI18N + } + + // Get address book instance + Addressbook book = event.getAddressbook(); + + // Set address book data + this.setAddressbookId(book.getAddressbookId()); + this.setAddressbookName(book.getAddressbookName()); + this.setAddressbookUser(book.getAddressbookUser()); + this.setAddressbookCreated(book.getAddressbookCreated()); + + // And instance ... + this.setAddressbook(book); + } + + @Override + public void afterLoginEvent (final @Observes UserLoggedInEvent event) { + // Is the user logged in? + if (null == event) { + // Is null + throw new NullPointerException("event is null"); //NOI18N + } else if (event.getUser() == null) { + // user is null + throw new NullPointerException("event.user is null"); //NOI18N + } else if (!event.getUser().equals(this.loginController.getLoggedInUser())) { + // Not matching + throw new IllegalStateException("event.user and loginController.loggedInUser don't match."); //NOI18N + } else if (!this.loginController.isUserLoggedIn()) { + // Not logged in + throw new FaceletException("This method can only be called as logged-in user."); //NOI18N + } + + // Init user's address book list + this.initAddressbookList(); + } + @Override public List allAddressbooks () { // Is the user logged in? @@ -176,14 +252,53 @@ public class AddressbookWebBean implements AddressbookWebController { } @Override - public List allShares () { + public List allUsersNotSharing () { // Is the user logged in? if (!this.loginController.isUserLoggedIn()) { // Not logged in throw new FaceletException("This method can only be called as logged-in user."); //NOI18N } - - return Collections.unmodifiableList(this.sharedAddressbooks); + + // Call EJB + return this.addressbookBean.allUsersNotSharing(this.loginController.getLoggedInUser(), this.getAddressbook()); + } + + @Override + public Integer countAllUserSharedAddressbooks (final User user) { + // Is there cache? + if (AddressbookWebBean.countSharesList.containsKey(user)) { + // Return it instead + return AddressbookWebBean.countSharesList.get(user); + } + + // Call EJB ("expensive") + Integer count = this.addressbookBean.countAllUserSharedAddressbooks(user); + + // Add to list + AddressbookWebBean.countSharesList.put(user, count); + + // Return it + return count; + } + + @Override + public Addressbook getAddressbook () { + return this.addressbook; + } + + @Override + public void setAddressbook (final Addressbook addressbook) { + this.addressbook = addressbook; + } + + @Override + public Calendar getAddressbookCreated () { + return this.addressbookCreated; + } + + @Override + public void setAddressbookCreated (final Calendar addressbookCreated) { + this.addressbookCreated = addressbookCreated; } @Override @@ -206,6 +321,16 @@ public class AddressbookWebBean implements AddressbookWebController { this.addressbookName = addressbookName; } + @Override + public User getAddressbookUser () { + return this.addressbookUser; + } + + @Override + public void setAddressbookUser (final User addressbookUser) { + this.addressbookUser = addressbookUser; + } + @Override public boolean hasCreatedAddressbooks () { // Is the user logged in? @@ -225,9 +350,12 @@ public class AddressbookWebBean implements AddressbookWebController { // Is the user logged-in? if (this.loginController.isUserLoggedIn()) { - // Fill list with entries - this.usersAddressbooks = this.addressbookBean.getUsersList(this.loginController.getLoggedInUser()); + // Initialize list + this.initAddressbookList(); } + + // TODO Initialize list from bean with just one call + //this.addressbookBean.getUserCountMap() } @Override @@ -245,9 +373,9 @@ public class AddressbookWebBean implements AddressbookWebController { boolean isFound = false; // Check all entries - for (final Addressbook addressbook : this.usersAddressbooks) { + for (final Addressbook book : this.usersAddressbooks) { // Is the name same? - if (addressbook.getAddressbookName().equals(addressbookName)) { + if (book.getAddressbookName().equals(addressbookName)) { // Found a match isFound = true; break; @@ -257,4 +385,33 @@ public class AddressbookWebBean implements AddressbookWebController { // Return status return isFound; } + + @Override + public boolean isOtherAddressbook () { + // Just call the other method and invert it + return (!this.isOwnAddressbook()); + } + + @Override + public boolean isOwnAddressbook () { + // Is the user logged in? + if (!this.loginController.isUserLoggedIn()) { + // No, then no own address book + return false; + } + + // Is same user? + return Objects.equals(this.getAddressbookUser(), this.loginController.getLoggedInUser()); + } + + /** + * Initializes the user user's address book list + */ + private void initAddressbookList () { + // Get user instance + User user = this.loginController.getLoggedInUser(); + + // Fill list with entries + this.usersAddressbooks = this.addressbookBean.getUsersAddressbookList(user); + } }