package com.sap.pto.dao; import java.util.Locale; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.NonUniqueResultException; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sap.pto.adapters.PersistenceAdapter; import com.sap.pto.dao.entities.User; public class UserDAO extends BasicDAO<User> { private static final Logger logger = LoggerFactory.getLogger(UserDAO.class); public static User getUserByUserName(String userName) { EntityManager em = PersistenceAdapter.getEntityManager(); User user = getUserByUserName(userName, em); return user; } public static User getUserByUserName(String userName, EntityManager em) { try { return (User) em.createNamedQuery(User.QUERY_BYUSERNAME) .setParameter("userName", StringUtils.lowerCase(userName, Locale.ENGLISH)).getSingleResult(); } catch (NoResultException e) { return null; } catch (NonUniqueResultException e) { logger.error("User appears multiple times. This could mean severe database corruption. Fix immediately.", e); throw e; } } public static User getUserByMailKey(String key) { EntityManager em = PersistenceAdapter.getEntityManager(); User user = getUserByMailKey(key, em); return user; } public static User getUserByMailKey(String key, EntityManager em) { try { return (User) em.createNamedQuery(User.QUERY_BYMAILKEY).setParameter("key", StringUtils.lowerCase(key, Locale.ENGLISH)) .getSingleResult(); } catch (NoResultException e) { return null; } catch (NonUniqueResultException e) { logger.error("Mail key appears multiple times. This could mean severe database corruption. Fix immediately.", e); throw e; } } public static User getUserByMail(String email) { EntityManager em = PersistenceAdapter.getEntityManager(); User user = getUserByMail(email, em); return user; } public static User getUserByMail(String email, EntityManager em) { if (email == null) { return null; } String cleanMail = email; if (cleanMail.contains("<")) { cleanMail = email.substring(email.indexOf("<") + 1, email.indexOf(">")); } try { return (User) em.createNamedQuery(User.QUERY_BYMAIL).setParameter("email", StringUtils.lowerCase(cleanMail, Locale.ENGLISH)) .getSingleResult(); } catch (NoResultException e) { return null; } catch (NonUniqueResultException e) { logger.error("User appears multiple times. This could mean severe database corruption. Fix immediately.", e); throw e; } } }