/*
* Copyright 2011, Nabil Benothman, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package com.ubike.services.impl;
import com.ubike.model.Account;
import com.ubike.model.Authority;
import com.ubike.model.UbikeGroup;
import com.ubike.model.MemberShip;
import com.ubike.model.UbikeUser;
import com.ubike.services.UserManagerLocal;
import com.ubike.util.Role;
import com.ubike.util.Util;
import java.util.LinkedList;
import java.util.Collection;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
/**
* {@code UserManagerBean}
* <p />
* Created on Jun 6, 2011 at 7:17:22 PM
*
* @author <a href="mailto:nabil.benothman@gmail.com">Nabil Benothman</a>
*/
@Stateless
public class UserManagerBean implements UserManagerLocal {
@PersistenceContext(unitName = "ubikeEJB")
private EntityManager em;
/**
* Persist the given object in the database
* @param o The Object to be persisted
*/
private void persist(Object o) {
em.persist(o);
em.flush();
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#addUser(com.ubike.model.UbikeUser)
*/
@Override
public void addUser(UbikeUser user) {
persist(user);
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#addGroup(com.ubike.model.UbikeGroup)
*/
@Override
public boolean addGroup(UbikeGroup group) {
try {
persist(group);
return true;
} catch (Exception exp) {
return false;
}
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#leaveGroup(com.ubike.model.MemberShip)
*/
@Override
public boolean leaveGroup(MemberShip m) {
try {
MemberShip tmp = em.find(MemberShip.class, m.getId());
if (tmp != null) {
UbikeUser user = tmp.getMember();
user.getMemberShips().remove(tmp);
UbikeGroup group = tmp.getGroup();
group.getMemberShips().remove(tmp);
em.remove(tmp);
user = (UbikeUser) updateEntity(user);
group = (UbikeGroup) updateEntity(group);
return true;
}
return false;
} catch (Exception exp) {
System.err.println("UserManagerBean error-> " + exp);
return false;
}
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#createAccount(com.ubike.model.UbikeUser,
* java.lang.String, java.lang.String)
*/
@Override
public boolean createAccount(UbikeUser ubikeUser, String username, String password) {
Account account = this.getByUserName(username);
if (account == null) {
try {
account = new Account(username, ubikeUser);
List<Authority> authorities = new LinkedList<Authority>();
authorities.add(new Authority(account, username, "ROLE_USER"));
authorities.add(new Authority(account, username, "USER_ACCESS"));
account.setAuthorities(authorities);
account.setSalt(username);
account.setPassword(password);
persist(account);
return true;
} catch (Exception exp) {
System.err.println("create account error " + exp.getMessage());
return false;
}
}
return false;
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#login( java.lang.String, java.lang.String)
*/
@Override
public UbikeUser login(String username, String password) {
try {
Account account = getByUserName(username);
if (account != null && account.getPassword().equals(Util.encrypt(password + "{" + username + "}", Util.SHA_512))) {
account.setLoggedIn(true);
return account.getOwner();
}
} catch (Exception exp) {
System.err.println("No Login found for ( " + username + ", " + password + ")");
}
return null;
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#logout(java.lang.Long)
*/
@Override
public boolean logout(long id) {
Account account = (Account) this.getAccountById(id);
if (account != null) {
account.setLoggedIn(false);
em.flush();
return true;
}
return false;
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#getByUserName(java.lang.String)
*/
@Override
public Account getByUserName(String username) {
try {
return (Account) em.createNamedQuery("Account.getByUsername").
setParameter("param", username).getSingleResult();
} catch (Exception e) {
}
return null;
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#changePassword(java.lang.Long,
* java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public boolean changePassword(long id, String oldPass, String newPass, String confirm) {
Account account = (Account) this.getAccountById(id);
if (account != null) {
if (account.getPassword().equals(Util.encrypt(
account.getSalt() + oldPass)) && newPass.equals(confirm)) {
account.setPassword(newPass);
em.flush();
return true;
}
return false;
}
return false;
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#removeUser(com.ubike.model.UbikeUser)
*/
@Override
public boolean removeUser(UbikeUser user) {
try {
UbikeUser o = getUserById(user.getId());
if (o != null) {
em.remove(o);
return true;
}
} catch (Exception exp) {
}
return false;
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#removeGroup(com.ubike.model.UbikeGroup)
*/
@Override
public boolean removeGroup(UbikeGroup group) {
try {
UbikeGroup o = getGroupById(group.getId());
if (o != null) {
em.remove(o);
return true;
}
} catch (Exception exp) {
}
return false;
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#updateEntity(java.lang.Object)
*/
@Override
public Object updateEntity(Object entity) {
return em.merge(entity);
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#getUserById(java.lang.Long)
*/
@Override
public UbikeUser getUserById(long id) {
return (UbikeUser) em.find(UbikeUser.class, id);
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#getAllUsers()
*/
@Override
public Collection<UbikeUser> getAllUsers() {
try {
return (Collection<UbikeUser>) em.createNamedQuery("user.getAll").getResultList();
} catch (Exception exp) {
}
return new LinkedList<UbikeUser>();
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#getAllGroups()
*/
@Override
public Collection<UbikeGroup> getAllGroups() {
try {
return (Collection<UbikeGroup>) em.createNamedQuery("Group.getAll").getResultList();
} catch (Exception exp) {
}
return new LinkedList<UbikeGroup>();
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#getAccountById(java.lang.Long)
*/
@Override
public Account getAccountById(long id) {
return (Account) em.find(Account.class, id);
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#getGroupById(java.lang.Long)
*/
@Override
public UbikeGroup getGroupById(long id) {
return (UbikeGroup) em.find(UbikeGroup.class, id);
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#getMemberShip(java.lang.Long, java.lang.Long)
*/
@Override
public MemberShip getMemberShip(long userId, long groupId) {
try {
return (MemberShip) em.createNamedQuery("MemberShip.getByGroupUser").
setParameter("userId", userId).setParameter("groupId", groupId).getSingleResult();
} catch (Exception exp) {
System.out.println("[UserManagerBean#getMemberShip(long, long)] error -> " + exp.getMessage());
}
return null;
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#addMember(com.ubike.model.UbikeGroup, com.ubike.model.UbikeUser)
*/
@Override
public boolean addMember(UbikeGroup group, UbikeUser member) {
MemberShip m = getMemberShip(member.getId(), group.getId());
if (m == null) {
try {
m = new MemberShip(member, group, Role.Member);
persist(m);
return true;
} catch (Exception exp) {
System.out.println("[UserManagerBean#addMember(UbikeGroup, UbikeUser)] error -> " + exp.getMessage());
}
}
return false;
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#getGroupByName(java.lang.String)
*/
@Override
public UbikeGroup getGroupByName(String name) {
try {
return (UbikeGroup) em.createNamedQuery("Group.getByName").setParameter(
"param", name).getSingleResult();
} catch (Exception exp) {
}
return null;
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#getGroupMemberShips(java.lang.Long)
*/
@Override
public Collection<MemberShip> getGroupMemberShips(long groupId) {
try {
return (Collection<MemberShip>) em.createNamedQuery("MemberShip.getByGroup").
setParameter("groupId", groupId).getResultList();
} catch (Exception exp) {
}
return new LinkedList<MemberShip>();
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#getUserMemberShip(java.lang.Long)
*/
@Override
public Collection<MemberShip> getUserMemberShips(long userId) {
try {
return (Collection<MemberShip>) em.createNamedQuery("MemberShip.getByUser").
setParameter("userId", userId).getResultList();
} catch (Exception exp) {
}
return new LinkedList<MemberShip>();
}
/* (non-Javadoc)
* @see com.ubike.services.UserManagerLocal#getUserWithMemberShip(java.lang.Long)
*/
public UbikeUser getUserWithMemberShip(long userId) {
try {
// TODO test query -> does not works yet
return (UbikeUser) em.createNamedQuery("user.getWithMemberShips").setParameter(
"userId", userId).getSingleResult();
} catch (Exception exp) {
System.err.println(exp);
}
return null;
}
}