+ @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<Addressbook> allAddressbooks () {
+ // 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.usersAddressbooks);
+ }
+
+ @Override
+ public List<AddressbookEntry> allEntries (final Addressbook addressbook) {
+ // 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
+ }
+
+ // Ask the bean
+ return this.addressbookBean.allEntries(addressbook);
+ }
+
+ @Override
+ public int allEntriesSize (final Addressbook addressbook) {
+ // Ask the bean
+ return this.allEntries(addressbook).size();
+ }
+
+ @Override
+ public List<User> 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
+ }
+
+ // 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
+ public Long getAddressbookId () {
+ return this.addressbookId;
+ }
+
+ @Override
+ public void setAddressbookId (final Long addressbookId) {
+ this.addressbookId = addressbookId;
+ }
+