package com.gallatinsystems.user.dao; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.jdo.PersistenceManager; import com.gallatinsystems.framework.dao.BaseDAO; import com.gallatinsystems.framework.servlet.PersistenceFilter; import com.gallatinsystems.survey.dao.SurveyUtils; import com.gallatinsystems.user.domain.UserAuthorization; public class UserAuthorizationDAO extends BaseDAO<UserAuthorization> { public UserAuthorizationDAO() { super(UserAuthorization.class); } /** * List the user authorizations that correspond to a specific object path or set of paths * * @param userId * @param objectPath * @return */ @SuppressWarnings("unchecked") public List<UserAuthorization> listByObjectPath(Long userId, String objectPath) { if (objectPath == null) { return Collections.emptyList(); } List<String> paths = SurveyUtils.listParentPaths(objectPath, true); paths.add(objectPath); // include path of the object when checking for authorizations PersistenceManager pm = PersistenceFilter.getManager(); String queryString = "userId == :p1 && :p2.contains(objectPath)"; javax.jdo.Query query = pm.newQuery(UserAuthorization.class, queryString); List<UserAuthorization> results = (List<UserAuthorization>) query.execute(userId, paths); return results; } /** * List the user authorizations * * @param userId * @param ancestorIds * @return */ @SuppressWarnings("unchecked") public List<UserAuthorization> listByObjectIds(Long userId, List<Long> ancestorIds) { if (ancestorIds == null || ancestorIds.isEmpty()) { return Collections.emptyList(); } PersistenceManager pm = PersistenceFilter.getManager(); String queryString = "userId == :p1 && :p2.contains(securedObjectId)"; javax.jdo.Query query = pm.newQuery(UserAuthorization.class, queryString); List<UserAuthorization> results = (List<UserAuthorization>) query.execute(userId, ancestorIds); return results; } /** * List the user authorizations that correspond to a specific user * * @param userId * @return */ public List<UserAuthorization> listByUser(Long userId) { return listByProperty("userId", userId, "Long"); } /** * Retrieve a specific UserAuthorization entity * * @param userId * @param roleId * @param secureObjectId * @return */ @SuppressWarnings("unchecked") public UserAuthorization findUserAuthorization(Long userId, Long roleId, Long secureObjectId) { PersistenceManager pm = PersistenceFilter.getManager(); javax.jdo.Query query = pm.newQuery(UserAuthorization.class); Map<String, Object> paramMap = new HashMap<String, Object>(); StringBuilder filterString = new StringBuilder(); StringBuilder paramString = new StringBuilder(); appendNonNullParam("userId", filterString, paramString, "Long", userId, paramMap); appendNonNullParam("roleId", filterString, paramString, "Long", roleId, paramMap); appendNonNullParam("securedObjectId", filterString, paramString, "Long", secureObjectId, paramMap); query.setFilter(filterString.toString()); query.declareParameters(paramString.toString()); List<UserAuthorization> authList = (List<UserAuthorization>) query.executeWithMap(paramMap); if (authList.isEmpty()) { return null; } else { return authList.get(0); } } /** * Find a list of UserAuthorization objects that contains the given roleId. This is used to test * that the role has been assigned regardless of which user it has been assigned to. * * @param roleId * @return */ public List<UserAuthorization> findFirstAssignedByRole(Long roleId) { PersistenceManager pm = PersistenceFilter.getManager(); javax.jdo.Query query = pm.newQuery(UserAuthorization.class); query.setFilter("roleId == roleIdParam"); query.declareParameters("Long roleIdParam"); query.setRange(0, 1); return (List<UserAuthorization>) query.execute(roleId); } /** * Wrapper for BaseDAO.save() * * @param auth * @return */ public UserAuthorization save(UserAuthorization auth) { return super.save(auth); } /** * Wrapper for BaseDAO.delete() * * @param auth */ public void delete(UserAuthorization auth) { super.delete(auth); } }