X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjava%2Forg%2Fmxchange%2Faddressbook%2Fbeans%2Faddressbook%2FAddressbookWebBean.java;h=c5e0566ac8ba4e1bf6f517abbfa45c2acb8fe873;hb=34654c8de41131dc7b69c37bd313a08557d51da5;hp=e69455e72deacfabff406ef38612da7c05fbdbe0;hpb=43af64029f2991850d1f187ee6003fe8f6c49025;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 e69455e7..c5e0566a 100644 --- a/src/java/org/mxchange/addressbook/beans/addressbook/AddressbookWebBean.java +++ b/src/java/org/mxchange/addressbook/beans/addressbook/AddressbookWebBean.java @@ -22,6 +22,9 @@ 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; @@ -32,14 +35,14 @@ import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import org.mxchange.addressbook.beans.login.UserLoginWebController; -import org.mxchange.addressbook.events.AddressbookLoadedEvent; +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; /** @@ -51,11 +54,21 @@ import org.mxchange.jusercore.model.user.User; @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 */ @@ -87,11 +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; - /** * A list of all user's address books */ @@ -112,6 +120,9 @@ public class AddressbookWebBean implements AddressbookWebController { // Throw again throw new FaceletException(e); } + + // Init list + AddressbookWebBean.countSharesList = new ConcurrentHashMap<>(0); } @Override @@ -132,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); @@ -158,33 +169,57 @@ public class AddressbookWebBean implements AddressbookWebController { } @Override - public void afterAddressbookLoaded (final @Observes AddressbookLoadedEvent event) { + public void afterAddressbookLoadedEvent (final @Observes AddressbookLoadedEvent event) { // event should not be null if (null == event) { // Throw NPE - throw new NullPointerException("event is null"); + throw new NullPointerException("event is null"); //NOI18N } else if (event.getAddressbook() == null) { // Throw NPE again - throw new NullPointerException("event.addressbook is null"); + 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"); + throw new NullPointerException("event.addressbook.addressbookId is null"); //NOI18N } else if (event.getAddressbook().getAddressbookId() < 1) { // Invalid id number - throw new IllegalArgumentException("Address book instance " + event.getAddressbook() + " has invalid id number: " + event.getAddressbook().getAddressbookId()); + 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"); + throw new NullPointerException("event.addressbook.addressbookUser is null"); //NOI18N } // Get address book instance - Addressbook addressbook = event.getAddressbook(); + Addressbook book = event.getAddressbook(); // Set address book data - this.setAddressbookId(addressbook.getAddressbookId()); - this.setAddressbookName(addressbook.getAddressbookName()); - this.setAddressbookUser(addressbook.getAddressbookUser()); - this.setAddressbookCreated(addressbook.getAddressbookCreated()); + 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 @@ -217,20 +252,43 @@ 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) { - // Call EJB - return this.addressbookBean.countAllUserSharedAddressbooks(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 @@ -292,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 @@ -312,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; @@ -324,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); + } }