From 8987c930305be2b65144febebe739ec84bbecd63 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Roland=20H=C3=A4der?= <roland@mxchange.org>
Date: Thu, 27 Apr 2017 14:30:22 +0200
Subject: [PATCH] ported project to new libraries jaddressbook-share-core/lib
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Signed-off-by: Roland Häder <roland@mxchange.org>
---
 nbproject/build-impl.xml                      |   5 +-
 nbproject/genfiles.properties                 |   4 +-
 nbproject/project.properties                  |   6 +
 nbproject/project.xml                         |   7 +-
 .../AddressbookWebSessionBean.java            |  66 +++------
 .../AddressbookWebSessionController.java      |  39 +----
 .../AddressbookSharesWebSessionBean.java      | 135 +++++++++++++-----
 ...AddressbookSharesWebSessionController.java |  48 +++----
 .../addressbook/AddressbookIdValidator.java   |   4 +-
 web/guest/user/user_show_addressbook.xhtml    |   2 +-
 .../login_start_sharing_addressbook.xhtml     |   7 +-
 11 files changed, 159 insertions(+), 164 deletions(-)
 rename src/java/org/mxchange/addressbook/beans/{shares => addressbook/share}/AddressbookSharesWebSessionBean.java (80%)
 rename src/java/org/mxchange/addressbook/beans/{shares => addressbook/share}/AddressbookSharesWebSessionController.java (74%)

diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml
index 961c7991..453bca0e 100644
--- a/nbproject/build-impl.xml
+++ b/nbproject/build-impl.xml
@@ -1042,13 +1042,10 @@ exists or setup the property manually. For example like this:
     </target>
     <target depends="init,compile,compile-jsps,-pre-dist,-do-dist-with-manifest,-do-dist-without-manifest" name="do-dist"/>
     <target depends="init" if="dist.ear.dir" name="library-inclusion-in-manifest">
-        <copyfiles files="${reference.addressbook-core.jar}" iftldtodir="${build.web.dir}/WEB-INF" todir="${dist.ear.dir}/lib"/>
         <mkdir dir="${build.web.dir}/META-INF"/>
         <manifest file="${build.web.dir}/META-INF/MANIFEST.MF" mode="update"/>
     </target>
-    <target depends="init" name="library-inclusion-in-archive" unless="dist.ear.dir">
-        <copyfiles files="${reference.addressbook-core.jar}" todir="${build.web.dir}/WEB-INF/lib"/>
-    </target>
+    <target depends="init" name="library-inclusion-in-archive" unless="dist.ear.dir"/>
     <target depends="init" if="dist.ear.dir" name="-clean-webinf-lib">
         <delete dir="${build.web.dir}/WEB-INF/lib"/>
     </target>
diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties
index ce320316..f1e9f3a6 100644
--- a/nbproject/genfiles.properties
+++ b/nbproject/genfiles.properties
@@ -3,6 +3,6 @@ build.xml.script.CRC32=be5f34f7
 build.xml.stylesheet.CRC32=651128d4@1.68.1.1
 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
 # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=f07494a8
-nbproject/build-impl.xml.script.CRC32=8dc59c00
+nbproject/build-impl.xml.data.CRC32=25847443
+nbproject/build-impl.xml.script.CRC32=b9d55450
 nbproject/build-impl.xml.stylesheet.CRC32=99ea4b56@1.75.1.1
diff --git a/nbproject/project.properties b/nbproject/project.properties
index 203ad966..f0a373be 100644
--- a/nbproject/project.properties
+++ b/nbproject/project.properties
@@ -39,6 +39,8 @@ file.reference.cdi-api.jar=lib/cdi-api.jar
 file.reference.gf-client.jar=lib/gf-client.jar
 file.reference.jaddressbook-core.jar=lib/jaddressbook-core.jar
 file.reference.jaddressbook-lib.jar=lib/jaddressbook-lib.jar
+file.reference.jaddressbook-share-core.jar=lib/jaddressbook-share-core.jar
+file.reference.jaddressbook-share-lib.jar=lib/jaddressbook-share-lib.jar
 file.reference.jcontacts-business-core.jar=lib/jcontacts-business-core.jar
 file.reference.jcontacts-core.jar=lib/jcontacts-core.jar
 file.reference.jcontacts-lib.jar=lib/jcontacts-lib.jar
@@ -79,6 +81,8 @@ javac.classpath=\
     ${file.reference.juser-lib.jar}:\
     ${file.reference.jaddressbook-core.jar}:\
     ${file.reference.jaddressbook-lib.jar}:\
+    ${file.reference.jaddressbook-share-core.jar}:\
+    ${file.reference.jaddressbook-share-lib.jar}:\
     ${reference.addressbook-core.jar}:\
     ${reference.addressbook-lib.jar}:\
     ${reference.addressbook-mailer.jar}:\
@@ -134,6 +138,8 @@ runmain.jvmargs=
 source.encoding=UTF-8
 source.reference.jaddressbook-core.jar=../jaddressbook-core/src/
 source.reference.jaddressbook-lib.jar=../jaddressbook-lib/src/
+source.reference.jaddressbook-share-core.jar=../jaddressbook-share-core/src
+source.reference.jaddressbook-share-lib.jar=../jaddressbook-share-lib/src
 source.reference.jcontacts-business-core.jar=../jcontacts-business-core/src/
 source.reference.jcontacts-core.jar=../jcontacts-core/src/
 source.reference.jcontacts-lib.jar=../jcontacts-lib/src/
diff --git a/nbproject/project.xml b/nbproject/project.xml
index a7ea36a5..4d9d8bb4 100644
--- a/nbproject/project.xml
+++ b/nbproject/project.xml
@@ -45,9 +45,14 @@
                 <library dirs="200">
                     <file>${file.reference.jaddressbook-lib.jar}</file>
                 </library>
+                <library dirs="200">
+                    <file>${file.reference.jaddressbook-share-core.jar}</file>
+                </library>
+                <library dirs="200">
+                    <file>${file.reference.jaddressbook-share-lib.jar}</file>
+                </library>
                 <library dirs="200">
                     <file>${reference.addressbook-core.jar}</file>
-                    <path-in-war>WEB-INF/lib</path-in-war>
                 </library>
                 <library dirs="200">
                     <file>${reference.addressbook-lib.jar}</file>
diff --git a/src/java/org/mxchange/addressbook/beans/addressbook/AddressbookWebSessionBean.java b/src/java/org/mxchange/addressbook/beans/addressbook/AddressbookWebSessionBean.java
index 6a6b9fc2..e0363432 100644
--- a/src/java/org/mxchange/addressbook/beans/addressbook/AddressbookWebSessionBean.java
+++ b/src/java/org/mxchange/addressbook/beans/addressbook/AddressbookWebSessionBean.java
@@ -22,8 +22,6 @@ import java.util.Collections;
 import java.util.LinkedList;
 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.Event;
@@ -38,13 +36,13 @@ import javax.naming.NamingException;
 import org.mxchange.addressbook.beans.BaseAddressbookController;
 import org.mxchange.addressbook.beans.login.user.AddressbookUserLoginWebSessionController;
 import org.mxchange.addressbook.model.addressbook.AddressbookSessionBeanRemote;
-import org.mxchange.jaddressbookcore.events.addressbook.AddressbookLoadedEvent;
-import org.mxchange.jaddressbookcore.events.addressbook.ObservableAddressbookLoadedEvent;
-import org.mxchange.jaddressbookcore.exceptions.AddressbookNameAlreadyUsedException;
-import org.mxchange.jaddressbookcore.exceptions.AddressbookNotFoundException;
-import org.mxchange.jaddressbookcore.model.addressbook.Addressbook;
-import org.mxchange.jaddressbookcore.model.addressbook.UserAddressbook;
-import org.mxchange.jaddressbookcore.model.addressbook.entry.AddressbookEntry;
+import org.mxchange.jaddressbook.events.addressbook.AddressbookLoadedEvent;
+import org.mxchange.jaddressbook.events.addressbook.ObservableAddressbookLoadedEvent;
+import org.mxchange.jaddressbook.exceptions.AddressbookNameAlreadyUsedException;
+import org.mxchange.jaddressbook.exceptions.AddressbookNotFoundException;
+import org.mxchange.jaddressbook.model.addressbook.Addressbook;
+import org.mxchange.jaddressbook.model.addressbook.UserAddressbook;
+import org.mxchange.jaddressbook.model.addressbook.entry.AddressbookEntry;
 import org.mxchange.jusercore.events.login.ObservableUserLoggedInEvent;
 import org.mxchange.jusercore.model.user.User;
 
@@ -57,11 +55,6 @@ import org.mxchange.jusercore.model.user.User;
 @SessionScoped
 public class AddressbookWebSessionBean extends BaseAddressbookController implements AddressbookWebSessionController {
 
-	/**
-	 * Map for count of user's shared addresses
-	 */
-	private static ConcurrentMap<User, Integer> countSharesList;
-
 	/**
 	 * Serial number
 	 */
@@ -121,9 +114,6 @@ public class AddressbookWebSessionBean extends BaseAddressbookController impleme
 	public AddressbookWebSessionBean () {
 		// Call super constructor
 		super();
-
-		// Init list
-		AddressbookWebSessionBean.countSharesList = new ConcurrentHashMap<>(0);
 	}
 
 	@Override
@@ -164,7 +154,11 @@ public class AddressbookWebSessionBean extends BaseAddressbookController impleme
 		}
 	}
 
-	@Override
+	/**
+	 * Event being fired after an address book has been loaded
+	 * <p>
+	 * @param event Event being fired
+	 */
 	public void afterAddressbookLoadedEvent (@Observes final ObservableAddressbookLoadedEvent event) {
 		// event should not be null
 		if (null == event) {
@@ -197,7 +191,11 @@ public class AddressbookWebSessionBean extends BaseAddressbookController impleme
 		this.setAddressbook(book);
 	}
 
-	@Override
+	/**
+	 * Event being fired after user has logged-in
+	 * <p>
+	 * @param event Event being fired
+	 */
 	public void afterLoginEvent (@Observes final ObservableUserLoggedInEvent event) {
 		// Is the user logged in?
 		if (null == event) {
@@ -247,36 +245,6 @@ public class AddressbookWebSessionBean extends BaseAddressbookController impleme
 		return this.allEntries(addressbook).size();
 	}
 
-	@Override
-	public List<User> allUsersNotSharing () {
-		// Is the user logged in?
-		if (!this.userLoginController.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.userLoginController.getLoggedInUser(), this.getAddressbook());
-	}
-
-	@Override
-	public Integer countAllUserSharedAddressbooks (final User user) {
-		// Is there cache?
-		if (AddressbookWebSessionBean.countSharesList.containsKey(user)) {
-			// Return it instead
-			return AddressbookWebSessionBean.countSharesList.get(user);
-		}
-
-		// Call EJB ("expensive")
-		Integer count = this.addressbookBean.countAllUserSharedAddressbooks(user);
-
-		// Add to list
-		AddressbookWebSessionBean.countSharesList.put(user, count);
-
-		// Return it
-		return count;
-	}
-
 	@Override
 	public Addressbook getAddressbook () {
 		return this.addressbook;
diff --git a/src/java/org/mxchange/addressbook/beans/addressbook/AddressbookWebSessionController.java b/src/java/org/mxchange/addressbook/beans/addressbook/AddressbookWebSessionController.java
index 43d84c30..2bf8014c 100644
--- a/src/java/org/mxchange/addressbook/beans/addressbook/AddressbookWebSessionController.java
+++ b/src/java/org/mxchange/addressbook/beans/addressbook/AddressbookWebSessionController.java
@@ -19,11 +19,9 @@ package org.mxchange.addressbook.beans.addressbook;
 import java.io.Serializable;
 import java.util.Calendar;
 import java.util.List;
-import org.mxchange.jaddressbookcore.model.addressbook.Addressbook;
-import org.mxchange.jaddressbookcore.model.addressbook.entry.AddressbookEntry;
+import org.mxchange.jaddressbook.model.addressbook.Addressbook;
+import org.mxchange.jaddressbook.model.addressbook.entry.AddressbookEntry;
 import org.mxchange.jusercore.model.user.User;
-import org.mxchange.jaddressbookcore.events.addressbook.ObservableAddressbookLoadedEvent;
-import org.mxchange.jusercore.events.login.ObservableUserLoggedInEvent;
 
 /**
  * An interface for address book beans
@@ -139,31 +137,6 @@ public interface AddressbookWebSessionController extends Serializable {
 	 */
 	void setAddressbookCreated (final Calendar addressbookCreated);
 
-	/**
-	 * This method is called when an address book has been successfully loaded
-	 * from JPA.
-	 * <p>
-	 * @param event Event with address book instance
-	 */
-	void afterAddressbookLoadedEvent (final ObservableAddressbookLoadedEvent event);
-
-	/**
-	 * Count all shared address books by given user id
-	 * <p>
-	 * @param user User instance to look for
-	 * <p>
-	 * @return Count of user's shared address books
-	 */
-	Integer countAllUserSharedAddressbooks (final User user);
-
-	/**
-	 * This method is called when a user has successfully logged in his/her
-	 * account.
-	 * <p>
-	 * @param event
-	 */
-	void afterLoginEvent (final ObservableUserLoggedInEvent event);
-
 	/**
 	 * Checks if the user is logged in and if so if it matches the current
 	 * address book owner.
@@ -194,14 +167,6 @@ public interface AddressbookWebSessionController extends Serializable {
 	 */
 	void setAddressbook (final Addressbook addressbook);
 
-	/**
-	 * Retrieves a list of all users this user is not sharing this address book
-	 * with.
-	 * <p>
-	 * @return List of not sharing users
-	 */
-	List<User> allUsersNotSharing ();
-
 	/**
 	 * Checks wether an address book has been loaded by checking the id number.
 	 * <p>
diff --git a/src/java/org/mxchange/addressbook/beans/shares/AddressbookSharesWebSessionBean.java b/src/java/org/mxchange/addressbook/beans/addressbook/share/AddressbookSharesWebSessionBean.java
similarity index 80%
rename from src/java/org/mxchange/addressbook/beans/shares/AddressbookSharesWebSessionBean.java
rename to src/java/org/mxchange/addressbook/beans/addressbook/share/AddressbookSharesWebSessionBean.java
index eb1210a6..5f90d78c 100644
--- a/src/java/org/mxchange/addressbook/beans/shares/AddressbookSharesWebSessionBean.java
+++ b/src/java/org/mxchange/addressbook/beans/addressbook/share/AddressbookSharesWebSessionBean.java
@@ -14,12 +14,14 @@
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package org.mxchange.addressbook.beans.shares;
+package org.mxchange.addressbook.beans.addressbook.share;
 
 import java.text.MessageFormat;
 import java.util.Collections;
 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.Event;
@@ -32,17 +34,18 @@ import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 import org.mxchange.addressbook.beans.BaseAddressbookController;
+import org.mxchange.addressbook.beans.addressbook.AddressbookWebSessionController;
 import org.mxchange.addressbook.beans.login.user.AddressbookUserLoginWebSessionController;
-import org.mxchange.addressbook.model.shared.SharedAddressbooksSessionBeanRemote;
-import org.mxchange.jaddressbookcore.events.sharing.StartedAddressbookSharingEvent;
-import org.mxchange.jaddressbookcore.events.sharing.type.SharingType;
-import org.mxchange.jaddressbookcore.exceptions.UserAlreadySharingAddressbookException;
-import org.mxchange.jaddressbookcore.model.addressbook.Addressbook;
-import org.mxchange.jaddressbookcore.model.addressbook.shared.ShareableAddressbook;
+import org.mxchange.addressbook.model.shared.AddressbookShareSessionBeanRemote;
+import org.mxchange.jaddressbook.model.addressbook.Addressbook;
+import org.mxchange.jaddressbookshare.events.sharing.ObservableAddressbookSharingEvent;
+import org.mxchange.jaddressbookshare.events.sharing.StartedAddressbookSharingEvent;
+import org.mxchange.jaddressbookshare.events.sharing.type.SharingType;
+import org.mxchange.jaddressbookshare.exceptions.UserAlreadySharingAddressbookException;
+import org.mxchange.jaddressbookshare.model.addressbook.shared.ShareableAddressbook;
+import org.mxchange.jusercore.events.login.ObservableUserLoggedInEvent;
 import org.mxchange.jusercore.model.user.User;
 import org.mxchange.jusercore.model.user.profilemodes.ProfileMode;
-import org.mxchange.jaddressbookcore.events.sharing.ObservableAddressbookSharingEvent;
-import org.mxchange.jusercore.events.login.ObservableUserLoggedInEvent;
 
 /**
  * A bean for sharing address books with other users
@@ -53,31 +56,36 @@ import org.mxchange.jusercore.events.login.ObservableUserLoggedInEvent;
 @SessionScoped
 public class AddressbookSharesWebSessionBean extends BaseAddressbookController implements AddressbookSharesWebSessionController {
 
+	/**
+	 * Map for count of user's shared addresses
+	 */
+	private static ConcurrentMap<User, Integer> countSharesList;
+
 	/**
 	 * Serial number
 	 */
 	private static final long serialVersionUID = 19_868_976_871_976_780L;
 
 	/**
-	 * Cached flag whether the user is sharing address books
+	 * Address book controller
 	 */
-	private Boolean isUserSharing = null;
+	@Inject
+	private AddressbookWebSessionController addressbookBean;
 
 	/**
-	 * Login controller injection
+	 * Remote bean for sharing address books
 	 */
-	@Inject
-	private AddressbookUserLoginWebSessionController userLoginController;
+	private AddressbookShareSessionBeanRemote addressbookShareBean;
 
 	/**
-	 * Share instance
+	 * Cached flag whether the user is sharing address books
 	 */
-	private ShareableAddressbook share;
+	private Boolean isUserSharing = null;
 
 	/**
-	 * Remote bean for sharing address books
+	 * Share instance
 	 */
-	private SharedAddressbooksSessionBeanRemote shareBean;
+	private ShareableAddressbook share;
 
 	/**
 	 * A list of all user's shared (with others) address books
@@ -96,25 +104,26 @@ public class AddressbookSharesWebSessionBean extends BaseAddressbookController i
 	@Any
 	private Event<ObservableAddressbookSharingEvent> sharingEvent;
 
+	/**
+	 * Login controller injection
+	 */
+	@Inject
+	private AddressbookUserLoginWebSessionController userLoginController;
+
 	/**
 	 * Default constructor
 	 */
 	public AddressbookSharesWebSessionBean () {
-		// Try it
-		try {
-			// Get initial context
-			Context context = new InitialContext();
-
-			// Look up bean
-			this.shareBean = (SharedAddressbooksSessionBeanRemote) context.lookup("ejb/stateless-addressbook-share"); //NOI18N
-		} catch (final NamingException ex) {
-			// Continue to throw
-			throw new FaceletException(ex);
-		}
+		// Init list
+		countSharesList = new ConcurrentHashMap<>(0);
 	}
 
-	@Override
-	public void afterAdressbookShareEnded (@Observes final ObservableAddressbookSharingEvent event) {
+	/**
+	 * Observer method for ended sharing events
+	 * <p>
+	 * @param event Event instance
+	 */
+	public void afterAdressbookShareEndedEvent (@Observes final ObservableAddressbookSharingEvent event) {
 		// Validate parameter
 		if (null == event) {
 			// Throw NPE
@@ -134,8 +143,12 @@ public class AddressbookSharesWebSessionBean extends BaseAddressbookController i
 		this.sharedAddressbooks.remove(event.getShareableAddressbook());
 	}
 
-	@Override
-	public void afterAdressbookShareStarted (@Observes final ObservableAddressbookSharingEvent event) {
+	/**
+	 * Observer method for started sharing events
+	 * <p>
+	 * @param event Event instance
+	 */
+	public void afterAdressbookShareStartedEvent (@Observes final ObservableAddressbookSharingEvent event) {
 		// Validate parameter
 		if (null == event) {
 			// Throw NPE
@@ -155,7 +168,12 @@ public class AddressbookSharesWebSessionBean extends BaseAddressbookController i
 		this.sharedAddressbooks.add(event.getShareableAddressbook());
 	}
 
-	@Override
+	/**
+	 * This method is called when a user has successfully logged in his/her
+	 * account.
+	 * <p>
+	 * @param event Event instance
+	 */
 	public void afterLoginEvent (@Observes final ObservableUserLoggedInEvent event) {
 		// Is the user logged in?
 		if (null == event) {
@@ -167,7 +185,7 @@ public class AddressbookSharesWebSessionBean extends BaseAddressbookController i
 		}
 
 		// Init share list
-		this.sharedAddressbooks = this.shareBean.allSharedAddressbooks(event.getLoggedInUser());
+		this.sharedAddressbooks = this.addressbookShareBean.allSharedAddressbooks(event.getLoggedInUser());
 	}
 
 	@Override
@@ -181,6 +199,36 @@ public class AddressbookSharesWebSessionBean extends BaseAddressbookController i
 		return Collections.unmodifiableList(this.sharedAddressbooks);
 	}
 
+	@Override
+	public List<User> allUsersNotSharing () {
+		// Is the user logged in?
+		if (!this.userLoginController.isUserLoggedIn()) {
+			// Not logged in
+			throw new FaceletException("This method can only be called as logged-in user."); //NOI18N
+		}
+
+		// Call EJB
+		return this.addressbookShareBean.allUsersNotSharing(this.userLoginController.getLoggedInUser(), this.addressbookBean.getAddressbook());
+	}
+
+	@Override
+	public Integer countAllUserSharedAddressbooks (final User user) {
+		// Is there cache?
+		if (countSharesList.containsKey(user)) {
+			// Return it instead
+			return countSharesList.get(user);
+		}
+
+		// Call EJB ("expensive")
+		Integer count = this.addressbookShareBean.countAllUserSharedAddressbooks(user);
+
+		// Add to list
+		countSharesList.put(user, count);
+
+		// Return it
+		return count;
+	}
+
 	@Override
 	public ShareableAddressbook getShare () {
 		return this.share;
@@ -206,6 +254,18 @@ public class AddressbookSharesWebSessionBean extends BaseAddressbookController i
 	 */
 	@PostConstruct
 	public void init () {
+		// Try it
+		try {
+			// Get initial context
+			Context context = new InitialContext();
+
+			// Look up bean
+			this.addressbookShareBean = (AddressbookShareSessionBeanRemote) context.lookup("ejb/stateless-addressbook-share"); //NOI18N
+		} catch (final NamingException ex) {
+			// Continue to throw
+			throw new FaceletException(ex);
+		}
+
 	}
 
 	@Override
@@ -230,7 +290,7 @@ public class AddressbookSharesWebSessionBean extends BaseAddressbookController i
 		}
 
 		// Call the proper bean
-		this.isUserSharing = this.shareBean.isUserSharingAddressbooks(this.userLoginController.getLoggedInUser());
+		this.isUserSharing = this.addressbookShareBean.isUserSharingAddressbooks(this.userLoginController.getLoggedInUser());
 
 		// Return it
 		return this.isUserSharing;
@@ -276,7 +336,7 @@ public class AddressbookSharesWebSessionBean extends BaseAddressbookController i
 
 		try {
 			// Init sharing
-			ShareableAddressbook shared = this.shareBean.startSharing(user, addressbook);
+			ShareableAddressbook shared = this.addressbookShareBean.startSharing(user, addressbook);
 
 			// TODO Set it here
 			this.setShare(shared);
@@ -342,4 +402,5 @@ public class AddressbookSharesWebSessionBean extends BaseAddressbookController i
 			throw new IllegalArgumentException(MessageFormat.format("event.shareableAddressbook.shareUserSharee.userId={0} is invalid", event.getShareableAddressbook().getShareUserOwner().getUserId())); //NOI18N
 		}
 	}
+
 }
diff --git a/src/java/org/mxchange/addressbook/beans/shares/AddressbookSharesWebSessionController.java b/src/java/org/mxchange/addressbook/beans/addressbook/share/AddressbookSharesWebSessionController.java
similarity index 74%
rename from src/java/org/mxchange/addressbook/beans/shares/AddressbookSharesWebSessionController.java
rename to src/java/org/mxchange/addressbook/beans/addressbook/share/AddressbookSharesWebSessionController.java
index f3dd5048..18b44edc 100644
--- a/src/java/org/mxchange/addressbook/beans/shares/AddressbookSharesWebSessionController.java
+++ b/src/java/org/mxchange/addressbook/beans/addressbook/share/AddressbookSharesWebSessionController.java
@@ -14,15 +14,13 @@
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-package org.mxchange.addressbook.beans.shares;
+package org.mxchange.addressbook.beans.addressbook.share;
 
 import java.io.Serializable;
 import java.util.List;
-import org.mxchange.jaddressbookcore.model.addressbook.Addressbook;
-import org.mxchange.jaddressbookcore.model.addressbook.shared.ShareableAddressbook;
+import org.mxchange.jaddressbook.model.addressbook.Addressbook;
+import org.mxchange.jaddressbookshare.model.addressbook.shared.ShareableAddressbook;
 import org.mxchange.jusercore.model.user.User;
-import org.mxchange.jaddressbookcore.events.sharing.ObservableAddressbookSharingEvent;
-import org.mxchange.jusercore.events.login.ObservableUserLoggedInEvent;
 
 /**
  * Controller interface sharing address books
@@ -31,28 +29,6 @@ import org.mxchange.jusercore.events.login.ObservableUserLoggedInEvent;
  */
 public interface AddressbookSharesWebSessionController extends Serializable {
 
-	/**
-	 * Observer method for ended sharing events
-	 * <p>
-	 * @param event Event instance
-	 */
-	void afterAdressbookShareEnded (final ObservableAddressbookSharingEvent event);
-
-	/**
-	 * Observer method for started sharing events
-	 * <p>
-	 * @param event Event instance
-	 */
-	void afterAdressbookShareStarted (final ObservableAddressbookSharingEvent event);
-
-	/**
-	 * This method is called when a user has successfully logged in his/her
-	 * account.
-	 * <p>
-	 * @param event
-	 */
-	void afterLoginEvent (final ObservableUserLoggedInEvent event);
-
 	/**
 	 * Returns a list of all address books the user is sharing with others.
 	 * <p>
@@ -119,4 +95,22 @@ public interface AddressbookSharesWebSessionController extends Serializable {
 	 * @return Redirect target
 	 */
 	String startSharing (final User user, final Addressbook addressbook);
+
+	/**
+	 * Count all shared address books by given user id
+	 * <p>
+	 * @param user User instance to look for
+	 * <p>
+	 * @return Count of user's shared address books
+	 */
+	Integer countAllUserSharedAddressbooks (final User user);
+
+	/**
+	 * Retrieves a list of all users this user is not sharing this address book
+	 * with.
+	 * <p>
+	 * @return List of not sharing users
+	 */
+	List<User> allUsersNotSharing ();
+
 }
diff --git a/src/java/org/mxchange/addressbook/validator/addressbook/AddressbookIdValidator.java b/src/java/org/mxchange/addressbook/validator/addressbook/AddressbookIdValidator.java
index 78db21b3..ab8caeef 100644
--- a/src/java/org/mxchange/addressbook/validator/addressbook/AddressbookIdValidator.java
+++ b/src/java/org/mxchange/addressbook/validator/addressbook/AddressbookIdValidator.java
@@ -26,8 +26,8 @@ import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 import org.mxchange.addressbook.model.addressbook.AddressbookSessionBeanRemote;
-import org.mxchange.jaddressbookcore.exceptions.AddressbookNotFoundException;
-import org.mxchange.jaddressbookcore.model.addressbook.Addressbook;
+import org.mxchange.jaddressbook.exceptions.AddressbookNotFoundException;
+import org.mxchange.jaddressbook.model.addressbook.Addressbook;
 import org.mxchange.jcoreee.validator.number.BaseLongValidator;
 import org.mxchange.jcoreeelogger.beans.local.logger.Log;
 import org.mxchange.jcoreeelogger.beans.local.logger.LoggerBeanLocal;
diff --git a/web/guest/user/user_show_addressbook.xhtml b/web/guest/user/user_show_addressbook.xhtml
index 0ebf6524..68315390 100644
--- a/web/guest/user/user_show_addressbook.xhtml
+++ b/web/guest/user/user_show_addressbook.xhtml
@@ -14,7 +14,7 @@
 		</f:viewParam>
 	</f:metadata>
 
-	<ui:composition template="/WEB-INF/templates/#{userLoginController.templateType}/#{userLoginController.templateType}_base.tpl">
+	<ui:composition template="/WEB-INF/templates/#{userLoginController.baseTemplatePathName}/#{userLoginController.baseTemplatePathName}_base.tpl">
 		<ui:define name="login_title">
 			<h:outputText value="#{msg.PAGE_TITLE_USER_SHOW_ADDRESSBOOK}" />
 		</ui:define>
diff --git a/web/user/login_start_sharing_addressbook.xhtml b/web/user/login_start_sharing_addressbook.xhtml
index 6eb82de6..16d25385 100644
--- a/web/user/login_start_sharing_addressbook.xhtml
+++ b/web/user/login_start_sharing_addressbook.xhtml
@@ -5,10 +5,9 @@
 	xmlns="http://www.w3.org/1999/xhtml"
 	  xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
 	  xmlns:h="http://xmlns.jcp.org/jsf/html"
-	  xmlns:f="http://xmlns.jcp.org/jsf/core"
-	  xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
+	  xmlns:f="http://xmlns.jcp.org/jsf/core">
 
-	<ui:composition template="/WEB-INF/templates/#{userLoginController.templateType}/#{userLoginController.templateType}_base.tpl">
+	<ui:composition template="/WEB-INF/templates/#{userLoginController.baseTemplatePathName}/#{userLoginController.baseTemplatePathName}_base.tpl">
 		<ui:define name="login_title">
 			<h:outputText value="#{msg.PAGE_TITLE_LOGIN_START_SHARING_ADDRESSBOOK}" />
 		</ui:define>
@@ -28,7 +27,7 @@
 					<div class="para">
 						<h:outputText id="userNotLoggedIn" class="notice" value="#{msg.USER_NOT_LOGGED_IN}" rendered="#{not userLoginController.isUserLoggedIn()}" />
 
-						<h:dataTable id="userList" headerClass="table_header_column" var="user" value="#{addressbookController.allUsersNotSharing()}" rendered="#{userLoginController.isUserLoggedIn() and not empty addressbookController.addressbook and not userLoginController.isInvisible()}">
+						<h:dataTable id="userList" headerClass="table_header_column" var="user" value="#{addressbookShareController.allUsersNotSharing()}" rendered="#{userLoginController.isUserLoggedIn() and not empty addressbookController.addressbook and not userLoginController.isInvisible()}">
 
 							<h:column>
 								<f:facet name="header">
-- 
2.39.5