All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.linkare.commons.dao.security.impl.GroupDAO Maven / Gradle / Ivy

Go to download

Project containing the base domain model for security concerns in JPA projects.

The newest version!
package com.linkare.commons.dao.security.impl;

import static com.linkare.commons.jpa.security.Group.FIND_BY_NAME_QUERYNAME;
import static com.linkare.commons.jpa.security.Group.QUERY_PARAM_NAME;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;

import com.linkare.commons.dao.jpa.GenericDAO;
import com.linkare.commons.dao.security.GroupService;
import com.linkare.commons.jpa.security.Group;
import com.linkare.commons.jpa.security.User;
import com.linkare.commons.utils.BooleanResult;
import com.linkare.commons.utils.EqualityUtils;

/**
 * 
 * @author Paulo Zenida - Linkare TI
 * 
 */
public class GroupDAO extends GenericDAO implements GroupService {

    public static final String ERROR_NAME_ALREADY_EXISTING = "error.name.already.existing";

    private UserDAO userDAO;

    /**
     * 
     * @param em
     *            the entity manager to set.
     */
    public GroupDAO(final EntityManager em) {
	super(em);
	this.userDAO = new UserDAO(em);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected BooleanResult canCreate(final Group group) {
	final Group otherGroup = findByName(group.getName());
	if (otherGroup != null) {
	    return new BooleanResult(Boolean.FALSE, ERROR_NAME_ALREADY_EXISTING);
	}
	return super.canCreate(group);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected BooleanResult canEdit(final Group group) {
	final Group otherGroup = findByName(group.getName());
	if (!EqualityUtils.equals(group, otherGroup)) {
	    return new BooleanResult(Boolean.FALSE, ERROR_NAME_ALREADY_EXISTING);
	}
	return super.canEdit(group);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Group findByName(final String name) {
	try {
	    return (Group) getEntityManager().createNamedQuery(FIND_BY_NAME_QUERYNAME).setParameter(QUERY_PARAM_NAME, name).getSingleResult();
	} catch (NoResultException e) {
	    return null;
	}
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public List getNonMembers(final List members) {
	final List result = userDAO.findAll();
	result.removeAll(members);
	return result;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Group setUsersMembership(final Group group, final List users) {
	final Group mergedGroup = getEntityManager().merge(group);
	mergedGroup.setChildPrincipalsMembership(users);
	return mergedGroup;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void addUser(final Group group, final Long userId) {
	getEntityManager().merge(group);
	User user = userDAO.find(userId);
	if (user != null) {
	    group.addDirectChild(user);
	    getEntityManager().merge(group);
	}
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void removeUser(final Group group, final Long userId) {
	User user = userDAO.find(userId);
	if (user != null) {
	    group.removeDirectChild(user);
	    getEntityManager().merge(group);
	}
    }

    /**
     * @return the userDAO
     */
    public UserDAO getUserDAO() {
	return userDAO;
    }

    /**
     * @param userDAO
     *            the userDAO to set
     */
    public void setUserDAO(UserDAO userDAO) {
	this.userDAO = userDAO;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy