From: Roland Häder <roland@mxchange.org>
Date: Tue, 2 Aug 2016 17:00:04 +0000 (+0200)
Subject: Continued with fixing: (please cherry-pick)
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=542e7cf67de6fe1ff048bd67b2d75039385e5978;p=jfinancials-war.git

Continued with fixing: (please cherry-pick)
- introduced uniqueAddContact() which uniquely adds contact to controller's list(s) which prevents double-listing
- also added missing call of above method after user registration
- introduced uniqueAddUser() which uniquely adds user to controlleräs list(s)
- used above method heavily

Signed-off-by: Roland Häder <roland@mxchange.org>
---

diff --git a/src/java/org/mxchange/addressbook/beans/contact/AddressbookContactWebSessionBean.java b/src/java/org/mxchange/addressbook/beans/contact/AddressbookContactWebSessionBean.java
index 3d1f284b..64367724 100644
--- a/src/java/org/mxchange/addressbook/beans/contact/AddressbookContactWebSessionBean.java
+++ b/src/java/org/mxchange/addressbook/beans/contact/AddressbookContactWebSessionBean.java
@@ -265,7 +265,10 @@ public class AddressbookContactWebSessionBean extends BaseAddressbookController
 		this.clear();
 
 		// Call other method
-		this.contactList.add(event.getAddedContact());
+		this.uniqueAddContact(event.getAddedContact());
+
+		// Add to selectable contacts
+		this.selectableContacts.add(event.getAddedContact());
 	}
 
 	@Override
@@ -336,27 +339,8 @@ public class AddressbookContactWebSessionBean extends BaseAddressbookController
 			throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getUpdatedContact(), event.getUpdatedContact().getContactId())); //NOI18N
 		}
 
-		// Get iterator from list
-		Iterator<Contact> iterator = this.contactList.iterator();
-
-		// "Walk" through all entries
-		while (iterator.hasNext()) {
-			// Get next element
-			Contact next = iterator.next();
-
-			// Is id number the same?
-			if (Objects.equals(event.getUpdatedContact().getContactId(), next.getContactId())) {
-				// Found entry, so remove it and abort
-				this.contactList.remove(next);
-
-				// Remove also email from list
-				this.emailAddressList.remove(next.getContactEmailAddress());
-				break;
-			}
-		}
-
-		// Add contact to list
-		this.contactList.add(event.getUpdatedContact());
+		// Add contact instance only once
+		this.uniqueAddContact(event.getUpdatedContact());
 
 		// Add email address to list
 		this.emailAddressList.add(event.getUpdatedContact().getContactEmailAddress());
@@ -388,6 +372,9 @@ public class AddressbookContactWebSessionBean extends BaseAddressbookController
 		// Copy all data from registered->user
 		this.copyContact(registeredContact);
 
+		// Add contact instance only once
+		this.uniqueAddContact(registeredContact);
+
 		// Add user name and email address
 		this.addUserNameEmailAddress(registeredContact);
 
@@ -412,30 +399,8 @@ public class AddressbookContactWebSessionBean extends BaseAddressbookController
 			throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getConfirmedUser(), event.getConfirmedUser().getUserId())); //NOI18N
 		}
 
-		// "Cache" contact instance
-		Contact contact = event.getConfirmedUser().getUserContact();
-
-		// Get iterator from list
-		Iterator<Contact> iterator = this.contactList.iterator();
-
-		// "Walk" through all entries
-		while (iterator.hasNext()) {
-			// Get next element
-			Contact next = iterator.next();
-
-			// Is id number the same?
-			if (Objects.equals(contact.getContactId(), next.getContactId())) {
-				// Found entry, so remove it and abort
-				this.removeContact(next);
-				break;
-			}
-		}
-
-		// Add contact to list
-		this.contactList.add(contact);
-
-		// Trace message
-		//* NOISY-DEBUG: */ System.out.println("ContactWebBean:afterAdminUpdatedContactDataEvent: EXIT!"); //NOI18N
+		// Add contact instance only once
+		this.uniqueAddContact(event.getConfirmedUser().getUserContact());
 	}
 
 	@Override
@@ -1129,4 +1094,43 @@ public class AddressbookContactWebSessionBean extends BaseAddressbookController
 		this.emailAddressList.remove(contact.getContactEmailAddress());
 	}
 
+	/**
+	 * Adds unique instance to contact list. First any existing instance is
+	 * being removed, then the new instance is added.
+	 * <p>
+	 * @param contact Contact instance to add uniquely
+	 */
+	private void uniqueAddContact (final Contact contact) {
+		// Is the instance valid?
+		if (null == contact) {
+			// Throw NPE
+			throw new NullPointerException("contact is null"); //NOI18N
+		} else if (contact.getContactId() == null) {
+			// Throw NPE
+			throw new NullPointerException("contact.contactId is null"); //NOI18N
+		} else if (contact.getContactId() < 1) {
+			// Not valid id number
+			throw new IllegalArgumentException(MessageFormat.format("contact.contactId={0} is not valid.", contact.getContactId())); //NOI18N
+		}
+
+		// Get iterator from list
+		Iterator<Contact> iterator = this.contactList.iterator();
+
+		// "Walk" through all entries
+		while (iterator.hasNext()) {
+			// Get next element
+			Contact next = iterator.next();
+
+			// Is id number the same?
+			if (Objects.equals(contact.getContactId(), next.getContactId())) {
+				// Found entry, so remove it and abort
+				this.removeContact(next);
+				break;
+			}
+		}
+
+		// Add contact to list
+		this.contactList.add(contact);
+	}
+
 }
diff --git a/src/java/org/mxchange/addressbook/beans/user/AddressbookUserWebSessionBean.java b/src/java/org/mxchange/addressbook/beans/user/AddressbookUserWebSessionBean.java
index 8e60563a..29b088ad 100644
--- a/src/java/org/mxchange/addressbook/beans/user/AddressbookUserWebSessionBean.java
+++ b/src/java/org/mxchange/addressbook/beans/user/AddressbookUserWebSessionBean.java
@@ -191,8 +191,8 @@ public class AddressbookUserWebSessionBean extends BaseAddressbookController imp
 			throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getAddedUser(), event.getAddedUser().getUserId())); //NOI18N
 		}
 
-		// Add user to local list
-		this.userList.add(event.getAddedUser());
+		// Add user uniquely
+		this.uniqueAddUser(event.getAddedUser());
 
 		// Clear all data
 		this.clear();
@@ -266,8 +266,8 @@ public class AddressbookUserWebSessionBean extends BaseAddressbookController imp
 		// Clear all data
 		this.clear();
 
-		// Add user to local list
-		this.userList.add(registeredUser);
+		// Add user uniquely
+		this.uniqueAddUser(registeredUser);
 
 		// Add user name
 		this.addUserName(registeredUser);
@@ -305,24 +305,8 @@ public class AddressbookUserWebSessionBean extends BaseAddressbookController imp
 			throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getConfirmedUser(), event.getConfirmedUser().getUserId())); //NOI18N
 		}
 
-		// Get iterator from list
-		Iterator<User> iterator = this.userList.iterator();
-
-		// "Walk" through all entries
-		while (iterator.hasNext()) {
-			// Get next element
-			User next = iterator.next();
-
-			// Is id number the same?
-			if (Objects.equals(event.getConfirmedUser().getUserId(), next.getUserId())) {
-				// Found entry, so remove it and abort
-				this.userList.remove(next);
-				break;
-			}
-		}
-
-		// Add contact to list
-		this.userList.add(event.getConfirmedUser());
+		// Add user uniquely
+		this.uniqueAddUser(event.getConfirmedUser());
 	}
 
 	@Override
@@ -349,6 +333,7 @@ public class AddressbookUserWebSessionBean extends BaseAddressbookController imp
 		this.copyUser(event.getLoggedInUser());
 
 		// Re-initialize list
+		// @TODO This calls the EJB again, after a user logs in which can cause lots of calls on it.
 		this.visibleUserList = this.userBean.allMemberPublicVisibleUsers();
 
 		// Trace message
@@ -834,6 +819,42 @@ public class AddressbookUserWebSessionBean extends BaseAddressbookController imp
 		this.setUserProfileMode(user.getUserProfileMode());
 	}
 
+	/**
+	 * Uniquely adds given user instance to user list. First an existing
+	 * instance will be removed, then the given instance is being added.
+	 * <p>
+	 * @param user User instance to add
+	 */
+	private void uniqueAddUser (final User user) {
+		// Make sure the instance is valid
+		if (null == user) {
+			// Throw NPE
+			throw new NullPointerException("user is null"); //NOI18N
+		} else if (user.getUserContact() == null) {
+			// Throw again ...
+			throw new NullPointerException("user.userContact is null"); //NOI18N
+		}
+
+		// Get iterator from list
+		Iterator<User> iterator = this.userList.iterator();
+
+		// "Walk" through all entries
+		while (iterator.hasNext()) {
+			// Get next element
+			User next = iterator.next();
+
+			// Is id number the same?
+			if (Objects.equals(user.getUserId(), next.getUserId())) {
+				// Found entry, so remove it and abort
+				this.userList.remove(next);
+				break;
+			}
+		}
+
+		// Add contact to list
+		this.userList.add(user);
+	}
+
 	/**
 	 * Updates list with given user instance
 	 * <p>