package org.societies.webapp.service; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.societies.api.comm.xmpp.interfaces.ICommManager; import org.societies.api.identity.IIdentity; import org.societies.webapp.ILoginListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Service; import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.SessionScoped; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * @author Maria Mannion, Paddy Skillen */ @Service @Scope("Session") @SessionScoped // JSF @ManagedBean // JSF public class UserService implements Serializable { private static Logger log = LoggerFactory.getLogger(UserService.class); @Autowired @ManagedProperty(value = "#{commMngrRef}") private ICommManager commMngrRef; public final List<ILoginListener> loginListeners = new ArrayList<ILoginListener>(); private boolean userLoggedIn; private String username; private String userID; private IIdentity identity; public UserService() { log.info("UserService constructor"); userLoggedIn = false; } @SuppressWarnings("UnusedDeclaration") public ICommManager getCommMngrRef() { return commMngrRef; } @SuppressWarnings("UnusedDeclaration") public void setCommMngrRef(ICommManager commMngrRef) { this.commMngrRef = commMngrRef; } @SuppressWarnings("UnusedDeclaration") public boolean addLoginListener(ILoginListener loginListener) { synchronized (loginListeners) { return loginListeners.add(loginListener); } } @SuppressWarnings("UnusedDeclaration") public boolean removeLoginListener(ILoginListener loginListener) { synchronized (loginListeners) { return loginListeners.remove(loginListener); } } public String getUsername() { return username; } public String getUserID() { return userID; } public boolean isUserLoggedIn() { return userLoggedIn; } public IIdentity getIdentity() { return identity; } public void login() { if (isUserLoggedIn()) { logout(); } IIdentity identity = commMngrRef.getIdManager().getThisNetworkNode(); if (identity == null) { clearCurrentUser(); return; } String userID = identity.getBareJid(); String username = userID.substring(0, userID.indexOf('.')); this.userLoggedIn = true; this.identity = identity; this.userID = userID; this.username = username; // let listeners know for (ILoginListener listener : loginListeners) { try { listener.userLoggedIn(); } catch (Exception ex) { log.error("Exception in login listener", ex); // do nothing? } } } public void logout() { clearCurrentUser(); // let listeners know for (ILoginListener listener : loginListeners) { try { listener.userLoggedOut(); } catch (Exception ex) { log.error("Exception in logout listener", ex); // do nothing? } } } private void clearCurrentUser() { this.userLoggedIn = false; this.identity = null; this.userID = null; this.username = null; } }