@Override public RolePermissionVO persist(final RolePermissionVO item) { item.setSortOrder(0); final List<RolePermissionVO> permissionsList = findAllByRoleIdSorted(item.getRoleId()); if (permissionsList != null && permissionsList.size() > 0) { RolePermission lastRule = permissionsList.get(permissionsList.size() - 1); item.setSortOrder(lastRule.getSortOrder() + 1); } return super.persist(item); }
@Override public boolean update(Role role, RolePermission rolePermission, Permission permission) { if (role == null || rolePermission == null || permission == null) { return false; } RolePermissionVO rolePermissionVO = findById(rolePermission.getId()); if (rolePermissionVO == null || role.getId() != rolePermission.getRoleId() || rolePermissionVO.getId() != rolePermission.getId()) { return false; } rolePermissionVO.setPermission(permission); return update(rolePermission.getId(), rolePermissionVO); }
@Override public List<RolePermissionVO> findAllByRoleIdSorted(final Long roleId) { final SearchCriteria<RolePermissionVO> sc = RolePermissionsSearch.create(); if (roleId != null && roleId > 0L) { sc.setParameters("roleId", roleId); } final Filter searchBySorted = new Filter(RolePermissionVO.class, "sortOrder", true, null, null); final List<RolePermissionVO> rolePermissionList = listBy(sc, searchBySorted); if (rolePermissionList == null) { return Collections.emptyList(); } return rolePermissionList; } }
private boolean updateSortOrder(final RolePermissionVO permissionBeingMoved, final RolePermissionVO parentPermission) { if (parentPermission != null && permissionBeingMoved.getId() == parentPermission.getId()) { return true; } final List<RolePermissionVO> newOrderedPermissionsList = new ArrayList<>(); // Null parent implies item needs to move to the top if (parentPermission == null) { newOrderedPermissionsList.add(permissionBeingMoved); } for (final RolePermissionVO permission : findAllByRoleIdSorted(permissionBeingMoved.getRoleId())) { if (permission.getId() == permissionBeingMoved.getId()) { continue; } newOrderedPermissionsList.add(permission); if (parentPermission != null && permission.getId() == parentPermission.getId()) { newOrderedPermissionsList.add(permissionBeingMoved); } } long sortOrder = 0L; for (final RolePermissionVO permission : newOrderedPermissionsList) { permission.setSortOrder(sortOrder++); if (!update(permission.getId(), permission)) { LOGGER.warn("Failed to update item's sort order with id:" + permission.getId() + " while moving permission with id:" + permissionBeingMoved.getId() + " to a new position"); return false; } } return true; }
public RolePermissionsDaoImpl() { super(); RolePermissionsSearch = createSearchBuilder(); RolePermissionsSearch.and("uuid", RolePermissionsSearch.entity().getUuid(), SearchCriteria.Op.EQ); RolePermissionsSearch.and("roleId", RolePermissionsSearch.entity().getRoleId(), SearchCriteria.Op.EQ); RolePermissionsSearch.and("sortOrder", RolePermissionsSearch.entity().getSortOrder(), SearchCriteria.Op.EQ); RolePermissionsSearch.done(); sortOrderAttribute = _allAttributes.get("sortOrder"); assert (sortOrderAttribute != null) : "Couldn't find one of these attributes"; }
@Override public Boolean doInTransaction(TransactionStatus status) { final String failMessage = "The role's rule permissions list has changed while you were making updates, aborted re-ordering of rules. Please try again."; final List<RolePermissionVO> currentOrder = findAllByRoleIdSorted(role.getId()); if (role.getId() < 1L || newOrder.size() != currentOrder.size()) { throw new CloudRuntimeException(failMessage); final int result = update(ub, sc, null); if (result < 1) { throw new CloudRuntimeException(failMessage);