X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2Fjava%2Forg%2Fmxchange%2Faddressbook%2Fmodel%2Faddressbook%2FAddressbookSessionBean.java;h=38e51542f774c7699e28a87266ca87ed2650e705;hb=be7d61793121f843b01e39c9899a66e8894c32ce;hp=c1bd4a5c3785fa49f1457c02ca629a92cc496a6f;hpb=a0b70cc374e26a3f49ac47fd380c66057c19dfa6;p=addressbook-ejb.git diff --git a/src/java/org/mxchange/addressbook/model/addressbook/AddressbookSessionBean.java b/src/java/org/mxchange/addressbook/model/addressbook/AddressbookSessionBean.java index c1bd4a5..38e5154 100644 --- a/src/java/org/mxchange/addressbook/model/addressbook/AddressbookSessionBean.java +++ b/src/java/org/mxchange/addressbook/model/addressbook/AddressbookSessionBean.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015 Roland Haeder + * Copyright (C) 2016 Roland Haeder * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,21 +17,25 @@ package org.mxchange.addressbook.model.addressbook; import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import javax.ejb.Stateless; import javax.persistence.NoResultException; import javax.persistence.Query; import org.mxchange.addressbook.exceptions.AddressbookNameAlreadyUsedException; +import org.mxchange.addressbook.exceptions.AddressbookNotFoundException; import org.mxchange.addressbook.model.addressbook.entry.AddressbookEntry; +import org.mxchange.addressbook.model.addressbook.shared.ShareableAddressbook; import org.mxchange.jcoreee.database.BaseDatabaseBean; import org.mxchange.jusercore.model.user.User; /** * A stateless bean handling addressbooks *

- * @author Roland Haeder + * @author Roland Haeder */ -@Stateless (name = "addressbook", mappedName = "ejb/stateless-addressbook", description = "A stateless bean for handling addressbooks") +@Stateless (name = "addressbook", mappedName = "ejb/stateless-addressbook-adr", description = "A stateless bean for handling Addressbook addressbooks") public class AddressbookSessionBean extends BaseDatabaseBean implements AddressbookSessionBeanRemote { /** @@ -42,18 +46,178 @@ public class AddressbookSessionBean extends BaseDatabaseBean implements Addressb @Override @SuppressWarnings ("unchecked") public List allEntries (final Addressbook addressbook) { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("allEntries: addressbook={0} - CALLED!", addressbook)); //NOI18N + + // Validate parameter + if (null == addressbook) { + // Throw NPE + throw new NullPointerException("addressbook is null"); + } else if (addressbook.getAddressbookId() == null) { + // Throw NPE again + throw new NullPointerException("addressbook.addressbookId is null"); + } else if (addressbook.getAddressbookId() < 1) { + // Invalid id number + throw new IllegalArgumentException(MessageFormat.format("addressbook.addressbookId={0} is invalid.", addressbook.getAddressbookId())); + } else if (addressbook.getAddressbookUser() == null) { + // Throw again NPE + throw new NullPointerException("addressbook.addressbookUser is null"); + } else if (addressbook.getAddressbookUser().getUserId() == null) { + // Throw again NPE + throw new NullPointerException("addressbook.addressbookUser.userId is null"); + } else if (addressbook.getAddressbookUser().getUserId() < 1) { + // Invalid id number again + throw new IllegalArgumentException(MessageFormat.format("addressbook.addressbookUser.userId={0} is invalid", addressbook.getAddressbookUser().getUserId())); + } + // Generate query - Query query = this.getEntityManager().createNamedQuery("AllAddressbookEntries"); //NOI18N + Query query = this.getEntityManager().createNamedQuery("SearchUsersAddressbookEntries", List.class); //NOI18N // Set parameters query.setParameter("addressbook", addressbook); //NOI18N query.setParameter("owner", addressbook.getAddressbookUser()); //NOI18N - query.setParameter("sharer", addressbook.getAddressbookUser()); //NOI18N // Return it return query.getResultList(); } + @Override + @SuppressWarnings ("unchecked") + public List allUsersNotSharing (final User user, final Addressbook addressbook) { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("allUsersNotSharing: user={0},addressbook={1} - CALLED!", user, addressbook)); //NOI18N + + // Test parameter + if (null == user) { + // Throw NPE + throw new NullPointerException("user is null"); //NOI18N + } else if (user.getUserId() == null) { + // Throw NPE again + throw new NullPointerException("user.userId is null"); //NOI18N + } else if (user.getUserId() < 1) { + // Invalid id + throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is invalid", user.getUserId())); //NOI18N + } else if (null == addressbook) { + // Again NPE + throw new NullPointerException("addressbook is null"); //NOI18N + } else if (addressbook.getAddressbookId() == null) { + // Again NPE + throw new NullPointerException("addressbook.addressbookId is null"); //NOI18N + } else if (addressbook.getAddressbookId() < 1) { + // Invalid id + throw new IllegalArgumentException(MessageFormat.format("addressbook.getAddressbookId={0} is invalid", addressbook.getAddressbookId())); //NOI18N + } + + // Get named query for a user list without given user + Query allUsersExceptQuery = this.getEntityManager().createNamedQuery("SearchAllUsersExcept", List.class); //NOI18N + + // Set parameter + allUsersExceptQuery.setParameter("user", user); //NOI18N + + // Get full list + List allUsersExcept = allUsersExceptQuery.getResultList(); + + // Debug message + this.getLoggerBeanLocal().logDebug(MessageFormat.format("allUsersNotSharing: allUsersExcept.size()={0}", allUsersExcept.size())); //NOI18N + + // Now get all shares this user has created + Query allSharesQuery = this.getEntityManager().createNamedQuery("SearchUserSharedAddressbooks", List.class); //NOI18N + + // Set parameter + allSharesQuery.setParameter("user", user); //NOI18N + + // Get full list again + List allShares = allSharesQuery.getResultList(); + + // Debug message + this.getLoggerBeanLocal().logDebug(MessageFormat.format("allUsersNotSharing: allShares.size()={0}", allShares.size())); //NOI18N + + // List for users aharing with given + List sharingUsers = new ArrayList<>(allShares.size()); + + // Check all entries + for (final ShareableAddressbook share : allShares) { + // Debug message + this.getLoggerBeanLocal().logDebug(MessageFormat.format("allUsersNotSharing: share.shareUserSharee={0}", share.getShareUserSharee())); //NOI18N + + // Add it + sharingUsers.add(share.getShareUserSharee()); + } + + // Debug message + this.getLoggerBeanLocal().logDebug(MessageFormat.format("allUsersNotSharing: sharingUsers.size()={0}", sharingUsers.size())); //NOI18N + + // Init final user list + List userList = new LinkedList<>(); + + // Walk through all users + for (final User foundUser : allUsersExcept) { + // Debug message + this.getLoggerBeanLocal().logDebug(MessageFormat.format("allUsersNotSharing: foundUser={0}", foundUser)); //NOI18N + + // Does the list contain it ? + if (!sharingUsers.contains(foundUser)) { + // Found one to add + this.getLoggerBeanLocal().logDebug(MessageFormat.format("allUsersNotSharing: foundUser={0} - ADDING!", foundUser)); //NOI18N + + // Add it + userList.add(foundUser); + } + } + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("allUsersNotSharing: userList.size()={0} - EXIT!", userList.size())); //NOI18N + + // Return it + return userList; + } + + @Override + @SuppressWarnings ("unchecked") + public Integer countAllUserSharedAddressbooks (final User user) { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("countAllUserSharedAddressbooks: user={0} - CALLED!", user)); //NOI18N + + // user should be valid + if (null == user) { + // Throw NPE + throw new NullPointerException("user is null"); //NOI18N + } else if (user.getUserId() == null) { + // Throw NPE again + throw new NullPointerException("user.userId is null"); //NOI18N + } else if (user.getUserId() < 1) { + // Invalid id + throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is invalid", user.getUserId())); //NOI18N + } + + // Get named query + Query query = this.getEntityManager().createNamedQuery("SearchUserSharedAddressbooks", List.class); //NOI18N + + // Set parameter + query.setParameter("user", user); //NOI18N + + // Default is zero + Integer count = 0; + + // Try it + try { + // Get whole list + List dummy = query.getResultList(); + + // Set size + count = dummy.size(); + } catch (final NoResultException ex) { + // Need to catch this, so log it + this.getLoggerBeanLocal().logDebug(MessageFormat.format("countAllUserSharedAddressbooks: getResultList() failed: {0}", ex)); //NOI18N + } + + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("countAllUserSharedAddressbooks: count={0} - EXIT!", count)); //NOI18N + + // Return count + return count; + } + @Override public Addressbook createAddressbook (final Addressbook addressbook) throws AddressbookNameAlreadyUsedException { // Is it not null? @@ -83,28 +247,55 @@ public class AddressbookSessionBean extends BaseDatabaseBean implements Addressb // Return it updated return addressbook; } - + + @Override + public Addressbook getAddressbookById (final Long addressbookId) throws AddressbookNotFoundException { + // Trace message + this.getLoggerBeanLocal().logTrace(MessageFormat.format("getAddressbookById: addressbookId={0} - CALLED!", addressbookId)); //NOI18N + + // addressbookId should not be null or below 1 + if (null == addressbookId) { + // Throw NPE + throw new NullPointerException("addressbookId is null"); //NOI18N + } else if (addressbookId < 1) { + // Not valid + throw new IllegalArgumentException(MessageFormat.format("addressbookId is not valid: {0}", addressbookId)); //NOI18N + } else if (!this.isAddressbookIdUsed(addressbookId)) { + // No address book found + throw new AddressbookNotFoundException(addressbookId); + } + + // Get named query instance + Query query = this.getEntityManager().createNamedQuery("SearchAddressbookById", UserAddressbook.class); //NOI18N + + // Set parameter + query.setParameter("id", addressbookId); //NOI18N + + // Return it + return (Addressbook) query.getSingleResult(); + } + @Override @SuppressWarnings ("unchecked") - public List getUsersList (final User loggedInUser) { + public List getUsersAddressbookList (final User loggedInUser) { // Trace message this.getLoggerBeanLocal().logTrace(MessageFormat.format("getUsersList: loggedInUser={0} - CALLED!", loggedInUser)); //NOI18N - + // Is the user instance null? if (null == loggedInUser) { // Abort here throw new NullPointerException("loggedInUser is null"); //NOI18N } - + // Get query instance Query query = this.getEntityManager().createNamedQuery("AllUsersAddressbooks", List.class); //NOI18N - + // Set parameter query.setParameter("param", loggedInUser); //NOI18N - + // Get full list from JPA List addressbooks = query.getResultList(); - + // Return it return addressbooks; } @@ -124,7 +315,7 @@ public class AddressbookSessionBean extends BaseDatabaseBean implements Addressb } // Get query instance - Query query = this.getEntityManager().createNamedQuery("FindAddressbookById"); //NOI18N + Query query = this.getEntityManager().createNamedQuery("SearchAddressbookById", UserAddressbook.class); //NOI18N // Set parameter query.setParameter("id", addressbookId); //NOI18N @@ -162,7 +353,13 @@ public class AddressbookSessionBean extends BaseDatabaseBean implements Addressb throw new NullPointerException("addressbook is null"); //NOI18N } else if (addressbook.getAddressbookUser() == null) { // User instance is null - throw new NullPointerException("addressbook.user should not be null."); //NOI18N + throw new NullPointerException("addressbook.addressbookUser is null."); //NOI18N + } else if (addressbook.getAddressbookUser().getUserId() == null) { + // User instance is null + throw new NullPointerException("addressbook.addressbookUser.userId is null."); //NOI18N + } else if (addressbook.getAddressbookUser().getUserId() < 1) { + // User instance is null + throw new NullPointerException(MessageFormat.format("addressbook.addressbookUser.userId={0} is invalid.", addressbook.getAddressbookUser().getUserId())); //NOI18N } else if (addressbook.getAddressbookName() == null) { // Address book name not set throw new NullPointerException("addressbook.addressbookName should not be null"); //NOI18N