From 4f8dd938834e909ac5e1317185e6e63f2009a95d Mon Sep 17 00:00:00 2001
From: Roland Haeder <roland@mxchange.org>
Date: Sun, 17 Apr 2016 17:37:32 +0200
Subject: [PATCH] Continued: - renamed bean/controller as they are
 session-scoped, else all admins will use the same - fixed object->id
 converting (opps, forgot it)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Signed-off-by: Roland Häder <roland@mxchange.org>
---
 ... JobsAdminContactPhoneWebSessionBean.java} | 72 +++++++++++++------
 ...dminContactPhoneWebSessionController.java} | 20 +++---
 .../contact/JobsContactConverter.java         | 17 +++--
 3 files changed, 69 insertions(+), 40 deletions(-)
 rename src/java/org/mxchange/jjobs/beans/phone/{JobsAdminContactPhoneWebRequestBean.java => JobsAdminContactPhoneWebSessionBean.java} (70%)
 rename src/java/org/mxchange/jjobs/beans/phone/{JobsAdminContactPhoneWebRequestController.java => JobsAdminContactPhoneWebSessionController.java} (84%)

diff --git a/src/java/org/mxchange/jjobs/beans/phone/JobsAdminContactPhoneWebRequestBean.java b/src/java/org/mxchange/jjobs/beans/phone/JobsAdminContactPhoneWebSessionBean.java
similarity index 70%
rename from src/java/org/mxchange/jjobs/beans/phone/JobsAdminContactPhoneWebRequestBean.java
rename to src/java/org/mxchange/jjobs/beans/phone/JobsAdminContactPhoneWebSessionBean.java
index 3e826b67..e54617fb 100644
--- a/src/java/org/mxchange/jjobs/beans/phone/JobsAdminContactPhoneWebRequestBean.java
+++ b/src/java/org/mxchange/jjobs/beans/phone/JobsAdminContactPhoneWebSessionBean.java
@@ -16,8 +16,10 @@
  */
 package org.mxchange.jjobs.beans.phone;
 
+import java.util.HashMap;
 import java.util.List;
-import javax.enterprise.context.RequestScoped;
+import java.util.Map;
+import javax.enterprise.context.SessionScoped;
 import javax.faces.view.facelets.FaceletException;
 import javax.inject.Named;
 import javax.naming.Context;
@@ -28,7 +30,6 @@ import org.mxchange.jcontacts.phone.AdminContactsPhoneSessionBeanRemote;
 import org.mxchange.jphone.phonenumbers.cellphone.DialableCellphoneNumber;
 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
 import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
-import org.mxchange.jusercore.model.user.User;
 
 /**
  * Administrative bean (controller) for contact's phone numbers
@@ -36,8 +37,8 @@ import org.mxchange.jusercore.model.user.User;
  * @author Roland Haeder<roland@mxchange.org>
  */
 @Named ("adminContactPhoneController")
-@RequestScoped
-public class JobsAdminContactPhoneWebRequestBean implements JobsAdminContactPhoneWebRequestController {
+@SessionScoped
+public class JobsAdminContactPhoneWebSessionBean implements JobsAdminContactPhoneWebSessionController {
 
 	/**
 	 * Serial number
@@ -54,6 +55,17 @@ public class JobsAdminContactPhoneWebRequestBean implements JobsAdminContactPhon
 	 */
 	private DialableCellphoneNumber cellPhone;
 
+	/**
+	 * Instance of linked contact account
+	 */
+	private Contact contact;
+
+	/**
+	 * "Cache" for contact lists, mostly only one is assigned. So this cache
+	 * shouldn't grow beyond control.
+	 */
+	private final Map<Long, List<Contact>> contacts;
+
 	/**
 	 * Fax number
 	 */
@@ -64,31 +76,45 @@ public class JobsAdminContactPhoneWebRequestBean implements JobsAdminContactPhon
 	 */
 	private DialableLandLineNumber landLine;
 
-	/**
-	 * Instance of linked user account
-	 */
-	private User user;
-
 	/**
 	 * Default constructor
 	 */
-	public JobsAdminContactPhoneWebRequestBean () {
+	public JobsAdminContactPhoneWebSessionBean () {
 		// Try it
 		try {
 			// Get initial context
 			Context context = new InitialContext();
 
 			// Try to lookup the beans
-			this.adminRemoteBean = (AdminContactsPhoneSessionBeanRemote) context.lookup("java:global/jjobs-ejb/admincontactphone!org.mxchange.jcontacts.phone.AdminContactsPhoneSessionBeanRemote"); //NOI18N
+			this.adminRemoteBean = (AdminContactsPhoneSessionBeanRemote) context.lookup("java:global/PizzaService-ejb/admincontactphone!org.mxchange.jcontacts.phone.AdminContactsPhoneSessionBeanRemote"); //NOI18N
 		} catch (final NamingException e) {
 			// Throw it again
 			throw new FaceletException(e);
 		}
+
+		// Init map
+		this.contacts = new HashMap<>(10);
 	}
 
 	@Override
 	public List<Contact> allCellphoneContacts () {
-		return this.adminRemoteBean.allContacts(this.getCellPhone());
+		// Get id
+		Long phoneId = this.getCellPhone().getPhoneId();
+
+		// Is cache there?
+		if (this.contacts.containsKey(phoneId)) {
+			// Return cached version
+			return this.contacts.get(phoneId);
+		} else {
+			// Ask bean
+			List<Contact> list = this.adminRemoteBean.allContacts(this.getCellPhone());
+
+			// Store result in cache
+			this.contacts.put(phoneId, list);
+
+			// Return now-cached list
+			return list;
+		}
 	}
 
 	@Override
@@ -101,6 +127,16 @@ public class JobsAdminContactPhoneWebRequestBean implements JobsAdminContactPhon
 		this.cellPhone = cellPhone;
 	}
 
+	@Override
+	public Contact getContact () {
+		return this.contact;
+	}
+
+	@Override
+	public void setContact (final Contact contact) {
+		this.contact = contact;
+	}
+
 	@Override
 	public DialableFaxNumber getFax () {
 		return this.fax;
@@ -121,16 +157,6 @@ public class JobsAdminContactPhoneWebRequestBean implements JobsAdminContactPhon
 		this.landLine = landLine;
 	}
 
-	@Override
-	public User getUser () {
-		return this.user;
-	}
-
-	@Override
-	public void setUser (final User user) {
-		this.user = user;
-	}
-
 	/**
 	 * Clears this bean
 	 */
@@ -139,7 +165,7 @@ public class JobsAdminContactPhoneWebRequestBean implements JobsAdminContactPhon
 		this.setCellPhone(null);
 		this.setFax(null);
 		this.setLandLine(null);
-		this.setUser(null);
+		this.setContact(null);
 	}
 
 }
diff --git a/src/java/org/mxchange/jjobs/beans/phone/JobsAdminContactPhoneWebRequestController.java b/src/java/org/mxchange/jjobs/beans/phone/JobsAdminContactPhoneWebSessionController.java
similarity index 84%
rename from src/java/org/mxchange/jjobs/beans/phone/JobsAdminContactPhoneWebRequestController.java
rename to src/java/org/mxchange/jjobs/beans/phone/JobsAdminContactPhoneWebSessionController.java
index 1d881447..b0e7e9cd 100644
--- a/src/java/org/mxchange/jjobs/beans/phone/JobsAdminContactPhoneWebRequestController.java
+++ b/src/java/org/mxchange/jjobs/beans/phone/JobsAdminContactPhoneWebSessionController.java
@@ -22,7 +22,6 @@ import org.mxchange.jcontacts.contact.Contact;
 import org.mxchange.jphone.phonenumbers.cellphone.DialableCellphoneNumber;
 import org.mxchange.jphone.phonenumbers.fax.DialableFaxNumber;
 import org.mxchange.jphone.phonenumbers.landline.DialableLandLineNumber;
-import org.mxchange.jusercore.model.user.User;
 
 /**
  * An interface for a request web controller (bean) for administrative phone
@@ -30,8 +29,13 @@ import org.mxchange.jusercore.model.user.User;
  * <p>
  * @author Roland Haeder<roland@mxchange.org>
  */
-public interface JobsAdminContactPhoneWebRequestController extends Serializable {
+public interface JobsAdminContactPhoneWebSessionController extends Serializable {
 
+	/**
+	 * Getter for all contacts having current cellphone instance linked
+	 * <p>
+	 * @return List of all linked contacts
+	 */
 	List<Contact> allCellphoneContacts ();
 
 	/**
@@ -77,17 +81,17 @@ public interface JobsAdminContactPhoneWebRequestController extends Serializable
 	void setCellPhone (final DialableCellphoneNumber cellPhone);
 
 	/**
-	 * Getter for linked user account
+	 * Getter for linked contact account
 	 * <p>
-	 * @return Linked user account
+	 * @return Linked contact account
 	 */
-	User getUser ();
+	Contact getContact ();
 
 	/**
-	 * Setter for linked user account
+	 * Setter for linked contact account
 	 * <p>
-	 * @param user Linked user account
+	 * @param contact Linked contact account
 	 */
-	void setUser (final User user);
+	void setContact (final Contact contact);
 
 }
diff --git a/src/java/org/mxchange/jjobs/converter/contact/JobsContactConverter.java b/src/java/org/mxchange/jjobs/converter/contact/JobsContactConverter.java
index e8299c7d..04c07f9e 100644
--- a/src/java/org/mxchange/jjobs/converter/contact/JobsContactConverter.java
+++ b/src/java/org/mxchange/jjobs/converter/contact/JobsContactConverter.java
@@ -30,7 +30,6 @@ import org.mxchange.jcontacts.contact.ContactSessionBeanRemote;
 import org.mxchange.jcontacts.exceptions.ContactNotFoundException;
 import org.mxchange.jcoreeelogger.beans.local.logger.Log;
 import org.mxchange.jcoreeelogger.beans.local.logger.LoggerBeanLocal;
-import org.mxchange.jusercore.model.user.User;
 
 /**
  * Converter for contact id <-> valid contact instance
@@ -41,15 +40,15 @@ import org.mxchange.jusercore.model.user.User;
 public class JobsContactConverter implements Converter {
 
 	/**
-	 * Logger instance
+	 * User EJB
 	 */
-	@Log
-	private LoggerBeanLocal loggerBeanLocal;
+	private ContactSessionBeanRemote contactBean;
 
 	/**
-	 * User EJB
+	 * Logger instance
 	 */
-	private ContactSessionBeanRemote contactBean;
+	@Log
+	private LoggerBeanLocal loggerBeanLocal;
 
 	/**
 	 * Initialization of this converter
@@ -121,13 +120,13 @@ public class JobsContactConverter implements Converter {
 		if ((null == value) || ((String.valueOf(value)).isEmpty())) {
 			// Is null
 			return ""; //NOI18N
-		} else if (!(value instanceof User)) {
+		} else if (!(value instanceof Contact)) {
 			// Not same interface
-			throw new IllegalArgumentException(MessageFormat.format("value {0} does not implement User.", value)); //NOI18N
+			throw new IllegalArgumentException(MessageFormat.format("value {0} does not implement Contact.", value)); //NOI18N
 		}
 
 		// Return category id
-		return String.valueOf(((User) value).getUserId());
+		return String.valueOf(((Contact) value).getContactId());
 	}
 
 }
-- 
2.39.5