package org.ovirt.engine.core.dao; import java.util.ArrayList; import java.util.List; import org.hibernate.Query; import org.ovirt.engine.core.common.businessentities.DbUser; import org.ovirt.engine.core.common.businessentities.ad_groups; import org.ovirt.engine.core.common.businessentities.roles; import org.ovirt.engine.core.compat.Guid; public class RoleDAOHibernateImpl extends BaseDAOHibernateImpl<roles, Guid> implements RoleDAO { public RoleDAOHibernateImpl() { super(roles.class); } @SuppressWarnings("unchecked") @Override public List<roles> getAllForAdElement(Guid id) { Guid[] ids = getUserAndGroupIdsForUser(id); if (ids.length == 0) { return new ArrayList<roles>(); } Query query = getSession().createQuery("from roles role, permissions perms " + "where perms.roleId = role.id " + "and perms.adElementId in ( :ids )"); query.setParameterList("ids", ids); return query.list(); } /** * Retrieves the IDs for all groups for the supplied user. * * @param userId * the user * @return a collection containing the ID of the user and all of his groups */ private Guid[] getUserAndGroupIdsForUser(Guid userId) { Query query = getSession().createQuery("from DbUser where id = :id"); query.setParameter("id", userId); DbUser user = (DbUser) query.uniqueResult(); if (user == null) { return new Guid[0]; } query = getSession().createQuery("from ad_groups where name in (:names)"); query.setParameterList("names", user.getGroupsAsArray()); @SuppressWarnings("unchecked") List<ad_groups> groups = query.list(); Guid[] result = new Guid[groups.size() + 1]; result[0] = userId; for (int index = 0; index < groups.size(); index++) { result[index + 1] = groups.get(index).getid(); } return result; } @SuppressWarnings("unchecked") @Override public List<roles> getForAdElement(Guid id) { Query query = getSession().createQuery("from roles role, permissions perms " + "where perms.roleId = role.id " + "and perms.adElementId = :id"); query.setParameter("id", id); return query.list(); } }