Coverage Report - org.kuali.rice.kim.impl.role.RoleDaoOjb
 
Classes in this File Line Coverage Branch Coverage Complexity
RoleDaoOjb
0%
0/424
0%
0/314
5.906
 
 1  
 package org.kuali.rice.kim.impl.role;
 2  
 
 3  
 import org.apache.commons.collections.CollectionUtils;
 4  
 import org.apache.commons.lang.StringUtils;
 5  
 import org.apache.ojb.broker.query.Criteria;
 6  
 import org.apache.ojb.broker.query.Query;
 7  
 import org.apache.ojb.broker.query.QueryFactory;
 8  
 import org.apache.ojb.broker.query.ReportQueryByCriteria;
 9  
 import org.joda.time.DateTime;
 10  
 import org.kuali.rice.core.api.criteria.Predicate;
 11  
 import org.kuali.rice.core.api.criteria.PredicateFactory;
 12  
 import org.kuali.rice.core.api.criteria.QueryByCriteria;
 13  
 import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb;
 14  
 import org.kuali.rice.kim.api.group.GroupMember;
 15  
 import org.kuali.rice.kim.api.identity.entity.EntityDefault;
 16  
 import org.kuali.rice.kim.api.identity.principal.Principal;
 17  
 import org.kuali.rice.kim.api.permission.Permission;
 18  
 import org.kuali.rice.kim.api.responsibility.Responsibility;
 19  
 import org.kuali.rice.kim.api.responsibility.ResponsibilityQueryResults;
 20  
 import org.kuali.rice.kim.api.responsibility.ResponsibilityService;
 21  
 import org.kuali.rice.kim.api.role.Role;
 22  
 import org.kuali.rice.kim.api.role.RoleMember;
 23  
 import org.kuali.rice.kim.api.role.RoleMembership;
 24  
 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
 25  
 import org.kuali.rice.kim.impl.common.delegate.DelegateBo;
 26  
 import org.kuali.rice.kim.impl.common.delegate.DelegateMemberBo;
 27  
 import org.kuali.rice.kim.util.KIMPropertyConstants;
 28  
 import org.kuali.rice.kim.util.KimConstants;
 29  
 
 30  
 import java.sql.Timestamp;
 31  
 import java.util.ArrayList;
 32  
 import java.util.Collection;
 33  
 import java.util.HashMap;
 34  
 import java.util.List;
 35  
 import java.util.Map;
 36  
 import java.util.Map.Entry;
 37  
 
 38  
 import static org.kuali.rice.core.api.criteria.PredicateFactory.*;
 39  
 
 40  0
 public class RoleDaoOjb extends PlatformAwareDaoBaseOjb implements RoleDao {
 41  
     /**
 42  
      * Adds SubCriteria to the Query Criteria using the role qualification passed in
 43  
      *
 44  
      * @param c             The Query Criteria object to be used
 45  
      * @param qualification The role qualification
 46  
      */
 47  
     private void addSubCriteriaBasedOnRoleQualification(Criteria c, Map<String, String> qualification) {
 48  0
         if (qualification != null && CollectionUtils.isNotEmpty(qualification.keySet())) {
 49  0
             for (Map.Entry<String, String> qualifier : qualification.entrySet()) {
 50  0
                 Criteria subCrit = new Criteria();
 51  0
                 if (StringUtils.isNotEmpty(qualifier.getValue())) {
 52  0
                     String value = (qualifier.getValue()).replace('*', '%');
 53  0
                     subCrit.addLike("attributeValue", value);
 54  0
                     subCrit.addEqualTo("kimAttributeId", qualifier.getKey());
 55  0
                     ReportQueryByCriteria subQuery = QueryFactory.newReportQuery(RoleMemberAttributeDataBo.class, subCrit);
 56  0
                     c.addExists(subQuery);
 57  
                 }
 58  0
             }
 59  
         }
 60  0
     }
 61  
 
 62  
     @SuppressWarnings("unchecked")
 63  
     public List<RoleMemberBo> getRolePrincipalsForPrincipalIdAndRoleIds(Collection<String> roleIds, String principalId, Map<String, String> qualification) {
 64  
 
 65  0
         Criteria c = new Criteria();
 66  
 
 67  0
         if (roleIds != null) {
 68  0
             c.addIn(KIMPropertyConstants.RoleMember.ROLE_ID, roleIds);
 69  
         }
 70  0
         if (principalId != null) {
 71  0
             c.addEqualTo(KIMPropertyConstants.RoleMember.MEMBER_ID, principalId);
 72  
         }
 73  0
         c.addEqualTo(KIMPropertyConstants.RoleMember.MEMBER_TYPE_CODE, Role.PRINCIPAL_MEMBER_TYPE);
 74  0
         addSubCriteriaBasedOnRoleQualification(c, qualification);
 75  
 
 76  0
         Query query = QueryFactory.newQuery(RoleMemberBo.class, c);
 77  0
         Collection<RoleMemberBo> coll = getPersistenceBrokerTemplate().getCollectionByQuery(query);
 78  0
         ArrayList<RoleMemberBo> results = new ArrayList<RoleMemberBo>(coll.size());
 79  0
         for (RoleMemberBo rm : coll) {
 80  0
             if (rm.isActive(new Timestamp(System.currentTimeMillis()))) {
 81  0
                 results.add(rm);
 82  
             }
 83  
         }
 84  0
         return results;
 85  
     }
 86  
 
 87  
     public List<GroupMember> getGroupPrincipalsForPrincipalIdAndGroupIds(Collection<String> groupIds, String principalId) {
 88  0
         List<String> groupIdValues = new ArrayList<String>();
 89  0
         List<GroupMember> groupPrincipals = new ArrayList<GroupMember>();
 90  0
         if (groupIds != null
 91  
                 && principalId == null) {
 92  0
             groupIdValues = new ArrayList<String>(groupIds);
 93  0
         } else if (principalId != null) {
 94  0
             groupIdValues = KimApiServiceLocator.getGroupService().getGroupIdsForPrincipal(principalId);
 95  
         }
 96  0
         if (groupIdValues != null
 97  
                 && groupIdValues.size() > 0) {
 98  0
             Collection<GroupMember> groupMembers = KimApiServiceLocator.getGroupService().getMembers(groupIdValues);
 99  0
             for (GroupMember groupMembershipInfo : groupMembers) {
 100  0
                 if (principalId != null) {
 101  0
                     if (StringUtils.equals(groupMembershipInfo.getTypeCode(), Role.PRINCIPAL_MEMBER_TYPE)
 102  
                             && StringUtils.equals(principalId, groupMembershipInfo.getMemberId())
 103  
                             && groupMembershipInfo.isActive(new DateTime())) {
 104  0
                         groupPrincipals.add(groupMembershipInfo);
 105  
                     }
 106  
                 } else {
 107  0
                     groupPrincipals.add(groupMembershipInfo);
 108  
                 }
 109  
             }
 110  
         }
 111  0
         return groupPrincipals;
 112  
     }
 113  
 
 114  
     public List<GroupMember> getGroupMembers(Collection<String> groupIds) {
 115  0
         List<GroupMember> groupMembers = new ArrayList<GroupMember>();
 116  0
         if (groupIds != null) {
 117  0
             List<String> groupIdValues = new ArrayList<String>(groupIds);
 118  
 
 119  0
             if (groupIdValues.size() > 0) {
 120  
 
 121  0
                 Collection<GroupMember> groupMemberships = KimApiServiceLocator.getGroupService().getMembers(groupIdValues);
 122  
 
 123  0
                 if (!CollectionUtils.isEmpty(groupMemberships)) {
 124  0
                     for (GroupMember groupMembershipInfo : groupMemberships) {
 125  0
                         if (StringUtils.equals(groupMembershipInfo.getTypeCode(), Role.GROUP_MEMBER_TYPE)
 126  
                                 && groupMembershipInfo.isActive(new DateTime())) {
 127  0
                             groupMembers.add(groupMembershipInfo);
 128  
                         }
 129  
                     }
 130  
                 }
 131  
             }
 132  
         }
 133  0
         return groupMembers;
 134  
     }
 135  
 
 136  
     @SuppressWarnings("unchecked")
 137  
     public List<RoleMemberBo> getRoleGroupsForGroupIdsAndRoleIds(Collection<String> roleIds, Collection<String> groupIds, Map<String, String> qualification) {
 138  0
         Criteria c = new Criteria();
 139  0
         if (roleIds != null && !roleIds.isEmpty()) {
 140  0
             c.addIn(KIMPropertyConstants.RoleMember.ROLE_ID, roleIds);
 141  
         }
 142  0
         if (groupIds != null && !groupIds.isEmpty()) {
 143  0
             c.addIn(KIMPropertyConstants.RoleMember.MEMBER_ID, groupIds);
 144  
         }
 145  0
         c.addEqualTo(KIMPropertyConstants.RoleMember.MEMBER_TYPE_CODE, Role.GROUP_MEMBER_TYPE);
 146  0
         addSubCriteriaBasedOnRoleQualification(c, qualification);
 147  
 
 148  0
         Query query = QueryFactory.newQuery(RoleMemberBo.class, c);
 149  0
         Collection<RoleMemberBo> coll = getPersistenceBrokerTemplate().getCollectionByQuery(query);
 150  0
         ArrayList<RoleMemberBo> results = new ArrayList<RoleMemberBo>(coll.size());
 151  0
         for (RoleMemberBo rm : coll) {
 152  0
             if (rm.isActive(new Timestamp(System.currentTimeMillis()))) {
 153  0
                 results.add(rm);
 154  
             }
 155  
         }
 156  0
         return results;
 157  
     }
 158  
 
 159  
     @SuppressWarnings("unchecked")
 160  
     public Map<String, DelegateBo> getDelegationImplMapFromRoleIds(Collection<String> roleIds) {
 161  0
         HashMap<String, DelegateBo> results = new HashMap<String, DelegateBo>();
 162  0
         if (roleIds != null && !roleIds.isEmpty()) {
 163  0
             Criteria c = new Criteria();
 164  0
             c.addIn(KIMPropertyConstants.Delegation.ROLE_ID, roleIds);
 165  0
             c.addEqualTo(KIMPropertyConstants.Delegation.ACTIVE, Boolean.TRUE);
 166  0
             Query query = QueryFactory.newQuery(DelegateBo.class, c);
 167  0
             Collection<DelegateBo> coll = getPersistenceBrokerTemplate().getCollectionByQuery(query);
 168  0
             for (DelegateBo delegateBo : coll) {
 169  0
                 results.put(delegateBo.getDelegationId(), delegateBo);
 170  
             }
 171  
         }
 172  0
         return results;
 173  
     }
 174  
 
 175  
     @SuppressWarnings("unchecked")
 176  
     public List<DelegateBo> getDelegationBosForRoleIds(Collection<String> roleIds) {
 177  0
         List<DelegateBo> results = new ArrayList<DelegateBo>();
 178  0
         if (roleIds != null && !roleIds.isEmpty()) {
 179  0
             Criteria c = new Criteria();
 180  0
             c.addIn(KIMPropertyConstants.Delegation.ROLE_ID, roleIds);
 181  0
             c.addEqualTo(KIMPropertyConstants.Delegation.ACTIVE, Boolean.TRUE);
 182  0
             Query query = QueryFactory.newQuery(DelegateBo.class, c);
 183  0
             Collection<DelegateBo> coll = getPersistenceBrokerTemplate().getCollectionByQuery(query);
 184  0
             for (DelegateBo delegateBo : coll) {
 185  0
                 results.add(delegateBo);
 186  
             }
 187  
         }
 188  0
         return results;
 189  
     }
 190  
 
 191  
     @SuppressWarnings("unchecked")
 192  
     public List<DelegateMemberBo> getDelegationPrincipalsForPrincipalIdAndDelegationIds(
 193  
             Collection<String> delegationIds, String principalId) {
 194  0
         Criteria c = new Criteria();
 195  
 
 196  0
         if (principalId != null) {
 197  0
             c.addEqualTo(KIMPropertyConstants.DelegationMember.MEMBER_ID, principalId);
 198  
         }
 199  0
         c.addEqualTo(KIMPropertyConstants.DelegationMember.MEMBER_TYPE_CODE, Role.PRINCIPAL_MEMBER_TYPE);
 200  0
         if (delegationIds != null && !delegationIds.isEmpty()) {
 201  0
             c.addIn(KIMPropertyConstants.DelegationMember.DELEGATION_ID, delegationIds);
 202  
         }
 203  0
         Query query = QueryFactory.newQuery(DelegateMemberBo.class, c);
 204  0
         Collection<DelegateMemberBo> coll = getPersistenceBrokerTemplate().getCollectionByQuery(query);
 205  0
         ArrayList<DelegateMemberBo> results = new ArrayList<DelegateMemberBo>(coll.size());
 206  0
         for (DelegateMemberBo rm : coll) {
 207  0
             if (rm.isActive(new Timestamp(System.currentTimeMillis()))) {
 208  0
                 results.add(rm);
 209  
             }
 210  
         }
 211  0
         return results;
 212  
     }
 213  
 
 214  
     @SuppressWarnings("unchecked")
 215  
     public List<DelegateMemberBo> getDelegationGroupsForGroupIdsAndDelegationIds(
 216  
             Collection<String> delegationIds, List<String> groupIds) {
 217  0
         Criteria c = new Criteria();
 218  0
         if (delegationIds != null && !delegationIds.isEmpty()) {
 219  0
             c.addIn(KIMPropertyConstants.DelegationMember.DELEGATION_ID, delegationIds);
 220  
         }
 221  0
         if (groupIds != null && !groupIds.isEmpty()) {
 222  0
             c.addIn(KIMPropertyConstants.DelegationMember.MEMBER_ID, groupIds);
 223  
         }
 224  0
         c.addEqualTo(KIMPropertyConstants.DelegationMember.MEMBER_TYPE_CODE, Role.GROUP_MEMBER_TYPE);
 225  0
         Query query = QueryFactory.newQuery(DelegateMemberBo.class, c);
 226  0
         Collection<DelegateMemberBo> coll = getPersistenceBrokerTemplate().getCollectionByQuery(query);
 227  0
         ArrayList<DelegateMemberBo> results = new ArrayList<DelegateMemberBo>(coll.size());
 228  0
         for (DelegateMemberBo rm : coll) {
 229  0
             if (rm.isActive(new Timestamp(System.currentTimeMillis()))) {
 230  0
                 results.add(rm);
 231  
             }
 232  
         }
 233  0
         return results;
 234  
     }
 235  
 
 236  
     @SuppressWarnings("unchecked")
 237  
     public List<RoleMemberBo> getRoleMembersForRoleIds(Collection<String> roleIds, String memberTypeCode, Map<String, String> qualification) {
 238  0
         Criteria c = new Criteria();
 239  
 
 240  0
         if (roleIds != null && !roleIds.isEmpty()) {
 241  0
             c.addIn(KIMPropertyConstants.RoleMember.ROLE_ID, roleIds);
 242  
         }
 243  0
         if (memberTypeCode != null) {
 244  0
             c.addEqualTo(KIMPropertyConstants.RoleMember.MEMBER_TYPE_CODE, memberTypeCode);
 245  
         }
 246  0
         addSubCriteriaBasedOnRoleQualification(c, qualification);
 247  
 
 248  0
         Query query = QueryFactory.newQuery(RoleMemberBo.class, c);
 249  0
         Collection<RoleMemberBo> coll = getPersistenceBrokerTemplate().getCollectionByQuery(query);
 250  0
         ArrayList<RoleMemberBo> results = new ArrayList<RoleMemberBo>(coll.size());
 251  0
         for (RoleMemberBo rm : coll) {
 252  0
             if (rm.isActive(new Timestamp(System.currentTimeMillis()))) {
 253  0
                 results.add(rm);
 254  
             }
 255  
         }
 256  0
         return results;
 257  
     }
 258  
 
 259  
     @SuppressWarnings("unchecked")
 260  
     public List<RoleMemberBo> getRoleMembershipsForRoleIdsAsMembers(Collection<String> roleIds, Map<String, String> qualification) {
 261  0
         Criteria c = new Criteria();
 262  
 
 263  0
         if (roleIds != null && !roleIds.isEmpty()) {
 264  0
             c.addIn(KIMPropertyConstants.RoleMember.MEMBER_ID, roleIds);
 265  
         }
 266  0
         c.addEqualTo(KIMPropertyConstants.RoleMember.MEMBER_TYPE_CODE, KimConstants.KimUIConstants.MEMBER_TYPE_ROLE_CODE);
 267  0
         addSubCriteriaBasedOnRoleQualification(c, qualification);
 268  
 
 269  0
         Query query = QueryFactory.newQuery(RoleMemberBo.class, c);
 270  0
         Collection<RoleMemberBo> coll = getPersistenceBrokerTemplate().getCollectionByQuery(query);
 271  0
         ArrayList<RoleMemberBo> results = new ArrayList<RoleMemberBo>(coll.size());
 272  0
         for (RoleMemberBo rm : coll) {
 273  0
             if (rm.isActive(new Timestamp(System.currentTimeMillis()))) {
 274  0
                 results.add(rm);
 275  
             }
 276  
         }
 277  0
         return results;
 278  
     }
 279  
 
 280  
     @SuppressWarnings("unchecked")
 281  
     public List<RoleMemberBo> getRoleMembershipsForMemberId(String memberType, String memberId, Map<String, String> qualification) {
 282  0
         Criteria c = new Criteria();
 283  0
         List<RoleMemberBo> parentRoleMembers = new ArrayList<RoleMemberBo>();
 284  
 
 285  0
         if (StringUtils.isEmpty(memberId)
 286  
                 || StringUtils.isEmpty(memberType)) {
 287  0
             return parentRoleMembers;
 288  
         }
 289  
 
 290  0
         c.addEqualTo(KIMPropertyConstants.RoleMember.MEMBER_ID, memberId);
 291  0
         c.addEqualTo(KIMPropertyConstants.RoleMember.MEMBER_TYPE_CODE, memberType);
 292  0
         addSubCriteriaBasedOnRoleQualification(c, qualification);
 293  
 
 294  0
         Query query = QueryFactory.newQuery(RoleMemberBo.class, c);
 295  0
         Collection<RoleMemberBo> coll = getPersistenceBrokerTemplate().getCollectionByQuery(query);
 296  0
         ArrayList<RoleMemberBo> results = new ArrayList<RoleMemberBo>(coll.size());
 297  0
         for (RoleMemberBo rm : coll) {
 298  0
             if (rm.isActive(new Timestamp(System.currentTimeMillis()))) {
 299  0
                 results.add(rm);
 300  
             }
 301  
         }
 302  0
         return results;
 303  
     }
 304  
 
 305  
     @SuppressWarnings("unchecked")
 306  
     public List<RoleMemberBo> getRoleMembersForRoleIdsWithFilters(Collection<String> roleIds, String principalId, List<String> groupIds, Map<String, String> qualification) {
 307  0
         Criteria c = new Criteria();
 308  
 
 309  0
         if (roleIds != null && !roleIds.isEmpty()) {
 310  0
             c.addIn(KIMPropertyConstants.RoleMember.ROLE_ID, roleIds);
 311  
         }
 312  0
         Criteria orSet = new Criteria();
 313  0
         orSet.addEqualTo(KIMPropertyConstants.RoleMember.MEMBER_TYPE_CODE, Role.ROLE_MEMBER_TYPE);
 314  0
         Criteria principalCheck = new Criteria();
 315  0
         if (principalId != null) {
 316  0
             principalCheck.addEqualTo(KIMPropertyConstants.RoleMember.MEMBER_ID, principalId);
 317  
         }
 318  0
         principalCheck.addEqualTo(KIMPropertyConstants.RoleMember.MEMBER_TYPE_CODE, Role.PRINCIPAL_MEMBER_TYPE);
 319  0
         orSet.addOrCriteria(principalCheck);
 320  0
         Criteria groupCheck = new Criteria();
 321  0
         if (groupIds != null && !groupIds.isEmpty()) {
 322  0
             groupCheck.addIn(KIMPropertyConstants.RoleMember.MEMBER_ID, groupIds);
 323  
         }
 324  0
         groupCheck.addEqualTo(KIMPropertyConstants.RoleMember.MEMBER_TYPE_CODE, Role.GROUP_MEMBER_TYPE);
 325  0
         orSet.addOrCriteria(groupCheck);
 326  0
         c.addAndCriteria(orSet);
 327  0
         addSubCriteriaBasedOnRoleQualification(c, qualification);
 328  
 
 329  0
         Query query = QueryFactory.newQuery(RoleMemberBo.class, c);
 330  0
         Collection<RoleMemberBo> coll = getPersistenceBrokerTemplate().getCollectionByQuery(query);
 331  0
         ArrayList<RoleMemberBo> results = new ArrayList<RoleMemberBo>(coll.size());
 332  0
         for (RoleMemberBo rm : coll) {
 333  0
             if (rm.isActive(new Timestamp(System.currentTimeMillis()))) {
 334  0
                 results.add(rm);
 335  
             }
 336  
         }
 337  0
         return results;
 338  
     }
 339  
 
 340  
     @SuppressWarnings("unchecked")
 341  
     public Map<String, List<DelegateMemberBo>> getDelegationMembersForDelegationIds(
 342  
             List<String> delegationIds) {
 343  0
         Criteria c = new Criteria();
 344  0
         if (delegationIds != null && !delegationIds.isEmpty()) {
 345  0
             c.addIn(KIMPropertyConstants.DelegationMember.DELEGATION_ID, delegationIds);
 346  
         }
 347  0
         Query query = QueryFactory.newQuery(DelegateMemberBo.class, c);
 348  0
         Collection<DelegateMemberBo> coll = getPersistenceBrokerTemplate().getCollectionByQuery(query);
 349  0
         HashMap<String, List<DelegateMemberBo>> result = new HashMap<String, List<DelegateMemberBo>>();
 350  0
         for (DelegateMemberBo dp : coll) {
 351  0
             if (dp.isActive(new Timestamp(System.currentTimeMillis()))) {
 352  0
                 if (!result.containsKey(dp.getDelegationId())) {
 353  0
                     result.put(dp.getDelegationId(), new ArrayList<DelegateMemberBo>());
 354  
                 }
 355  0
                 result.get(dp.getDelegationId()).add(dp);
 356  
             }
 357  
         }
 358  0
         return result;
 359  
     }
 360  
 
 361  
     public List<RoleBo> getRoles(Map<String, String> fieldValues) {
 362  0
         Criteria criteria = new Criteria();
 363  0
         Map<String, Map<String, String>> criteriaMap = setupCritMaps(fieldValues);
 364  
 
 365  
 //      List lookupNames = boEntry.getLookupDefinition().getLookupFieldNames();
 366  0
         Map<String, String> lookupNames = criteriaMap.get("lookupNames");
 367  0
         for (Map.Entry<String, String> entry : lookupNames.entrySet()) {
 368  0
             if (StringUtils.isNotBlank(entry.getValue())) {
 369  0
                 if (!entry.getKey().equals(KIMPropertyConstants.Principal.PRINCIPAL_NAME)) {
 370  0
                     addLikeToCriteria(criteria, entry.getKey(), entry.getValue());
 371  
                 } else {
 372  0
                     List<String> roleIds = getRoleIdsForPrincipalName(entry.getValue());
 373  0
                     if (roleIds != null && !roleIds.isEmpty()) {
 374  0
                         criteria.addIn(KimConstants.PrimaryKeyConstants.ID, roleIds);
 375  
                     } else {
 376  
                         // TODO : if no role id found that means principalname not matched, need to do something to force to return empty list
 377  0
                         roleIds.add("NOTFOUND");
 378  0
                         criteria.addIn(KimConstants.PrimaryKeyConstants.ID, roleIds);
 379  
                     }
 380  0
                 }
 381  
             }
 382  
         }
 383  0
         if (!criteriaMap.get("attr").isEmpty()) {
 384  0
             String kimTypeId = null;
 385  0
             for (Map.Entry<String, String> entry : fieldValues.entrySet()) {
 386  0
                 if (entry.getKey().equals("kimTypeId")) {
 387  0
                     kimTypeId = entry.getValue();
 388  0
                     break;
 389  
                 }
 390  
             }
 391  0
             setupAttrCriteria(criteria, criteriaMap.get("attr"), kimTypeId);
 392  
         }
 393  0
         if (!criteriaMap.get("perm").isEmpty()) {
 394  0
             criteria.addExists(setupPermCriteria(criteriaMap.get("perm")));
 395  
         }
 396  0
         if (!criteriaMap.get("resp").isEmpty()) {
 397  0
             criteria.addExists(setupRespCriteria(criteriaMap.get("resp")));
 398  
         }
 399  0
         if (!criteriaMap.get("group").isEmpty()) {
 400  0
             criteria.addExists(setupGroupCriteria(criteriaMap.get("group")));
 401  
         }
 402  
 
 403  0
         Query q = QueryFactory.newQuery(RoleBo.class, criteria);
 404  
 
 405  0
         return (List) getPersistenceBrokerTemplate().getCollectionByQuery(q);
 406  
     }
 407  
 
 408  
 
 409  
     private List<String> getPrincipalIdsForPrincipalName(String principalName) {
 410  0
         QueryByCriteria.Builder qb = QueryByCriteria.Builder.create();
 411  0
         qb.setPredicates(equal("principals.principalName", principalName));
 412  0
         List<EntityDefault> entities = KimApiServiceLocator.getIdentityService().findEntityDefaults(qb.build()).getResults();
 413  
 
 414  0
         List<String> principalIds = new ArrayList<String>();
 415  0
         for (EntityDefault entity : entities) {
 416  0
             for (Principal principal : entity.getPrincipals()) {
 417  0
                 principalIds.add(principal.getPrincipalId());
 418  
             }
 419  
         }
 420  
 
 421  0
         return principalIds;
 422  
 
 423  
     }
 424  
 
 425  
     private List<String> getRoleIdsForPrincipalName(String value) {
 426  0
         String principalName = value.replace('*', '%');
 427  0
         List<String> roleIds = new ArrayList<String>();
 428  0
         Criteria memberSubCrit = new Criteria();
 429  0
         QueryByCriteria.Builder qb = QueryByCriteria.Builder.create();
 430  0
         qb.setPredicates(equal("principals.principalName", principalName));
 431  0
         List<EntityDefault> entities = KimApiServiceLocator.getIdentityService().findEntityDefaults(qb.build()).getResults();
 432  0
         if (entities == null
 433  
                 || entities.size() == 0) {
 434  0
             return roleIds;
 435  
         }
 436  
 
 437  0
         List<String> principalIds = new ArrayList<String>();
 438  0
         for (EntityDefault entity : entities) {
 439  0
             for (Principal principal : entity.getPrincipals()) {
 440  0
                 principalIds.add(principal.getPrincipalId());
 441  
             }
 442  
         }
 443  0
         if (principalIds != null && !principalIds.isEmpty()) {
 444  0
             memberSubCrit.addEqualTo(KIMPropertyConstants.RoleMember.MEMBER_TYPE_CODE, Role.PRINCIPAL_MEMBER_TYPE);
 445  0
             memberSubCrit.addIn(KIMPropertyConstants.RoleMember.MEMBER_ID, principalIds);
 446  
 
 447  0
             ReportQueryByCriteria memberSubQuery = QueryFactory.newReportQuery(RoleMemberBo.class, memberSubCrit);
 448  0
             for (RoleMemberBo roleMbr : (List<RoleMemberBo>) getPersistenceBrokerTemplate().getCollectionByQuery(memberSubQuery)) {
 449  0
                 if (roleMbr.isActive(new Timestamp(System.currentTimeMillis())) && !roleIds.contains(roleMbr.getRoleId())) {
 450  0
                     roleIds.add(roleMbr.getRoleId());
 451  
                 }
 452  
             }
 453  
         }
 454  
 
 455  0
         List<String> groupIds = new ArrayList<String>();
 456  0
         for (String principalId : principalIds) {
 457  0
             List<String> principalGroupIds = KimApiServiceLocator.getGroupService().getGroupIdsForPrincipal(principalId);
 458  0
             for (String groupId : principalGroupIds) {
 459  0
                 if (!groupIds.contains(groupId)) {
 460  0
                     groupIds.add(groupId);
 461  
                 }
 462  
             }
 463  0
         }
 464  
 
 465  0
         if (groupIds != null && !groupIds.isEmpty()) {
 466  0
             Criteria grpRoleCrit = new Criteria();
 467  0
             grpRoleCrit.addEqualTo(KIMPropertyConstants.RoleMember.MEMBER_TYPE_CODE, Role.GROUP_MEMBER_TYPE);
 468  0
             grpRoleCrit.addIn(KIMPropertyConstants.RoleMember.MEMBER_ID, groupIds);
 469  
 
 470  0
             ReportQueryByCriteria memberSubQuery = QueryFactory.newReportQuery(RoleMemberBo.class, grpRoleCrit);
 471  
 
 472  0
             for (RoleMemberBo roleMbr : (List<RoleMemberBo>) getPersistenceBrokerTemplate().getCollectionByQuery(memberSubQuery)) {
 473  0
                 if (roleMbr.isActive(new Timestamp(System.currentTimeMillis())) && !roleIds.contains(roleMbr.getRoleId())) {
 474  0
                     roleIds.add(roleMbr.getRoleId());
 475  
                 }
 476  
             }
 477  
         }
 478  
 
 479  0
         return roleIds;
 480  
     }
 481  
 
 482  
     private Map<String, Map<String, String>> setupCritMaps(Map<String, String> fieldValues) {
 483  
 
 484  0
         Map<String, Map<String, String>> critMap = new HashMap<String, Map<String, String>>();
 485  0
         List<String> permFieldName = new ArrayList<String>();
 486  0
         permFieldName.add("permName");
 487  0
         permFieldName.add("permNamespaceCode");
 488  0
         permFieldName.add("permTmplName");
 489  0
         permFieldName.add("permTmplNamespaceCode");
 490  0
         List<String> respFieldName = new ArrayList<String>();
 491  0
         respFieldName.add("respName");
 492  0
         respFieldName.add("respNamespaceCode");
 493  0
         respFieldName.add("respTmplName");
 494  0
         respFieldName.add("respTmplNamespaceCode");
 495  0
         Map<String, String> permFieldMap = new HashMap<String, String>();
 496  0
         Map<String, String> respFieldMap = new HashMap<String, String>();
 497  0
         Map<String, String> attrFieldMap = new HashMap<String, String>();
 498  0
         Map<String, String> groupFieldMap = new HashMap<String, String>();
 499  0
         Map<String, String> lookupNamesMap = new HashMap<String, String>();
 500  
 
 501  0
         for (Map.Entry<String, String> entry : fieldValues.entrySet()) {
 502  0
             if (StringUtils.isNotBlank(entry.getValue())) {
 503  0
                 String nameValue = entry.getValue().replace('*', '%');
 504  0
                 if (permFieldName.contains(entry.getKey())) {
 505  0
                     permFieldMap.put(entry.getKey(), nameValue);
 506  0
                 } else if (respFieldName.contains(entry.getKey())) {
 507  0
                     respFieldMap.put(entry.getKey(), nameValue);
 508  0
                 } else if (entry.getKey().startsWith(KimConstants.AttributeConstants.GROUP_NAME)) {
 509  0
                     groupFieldMap.put(entry.getKey(), nameValue);
 510  0
                 } else if (entry.getKey().contains(".")) {
 511  0
                     attrFieldMap.put(entry.getKey(), nameValue);
 512  
                 } else {
 513  0
                     lookupNamesMap.put(entry.getKey(), nameValue);
 514  
                 }
 515  0
             }
 516  
         }
 517  
 
 518  0
         critMap.put("perm", permFieldMap);
 519  0
         critMap.put("resp", respFieldMap);
 520  0
         critMap.put("group", groupFieldMap);
 521  0
         critMap.put("attr", attrFieldMap);
 522  0
         critMap.put("lookupNames", lookupNamesMap);
 523  0
         return critMap;
 524  
     }
 525  
 
 526  
 
 527  
     private void setupAttrCriteria(Criteria crit, Map<String, String> attrCrit, String kimTypeId) {
 528  0
         for (Map.Entry<String, String> entry : attrCrit.entrySet()) {
 529  0
             Criteria subCrit = new Criteria();
 530  0
             addLikeToCriteria(subCrit, "attributes.attributeValue", entry.getValue());
 531  0
             addEqualToCriteria(subCrit, "attributes.kimAttributeId", entry.getKey().substring(entry.getKey().indexOf(".") + 1, entry.getKey().length()));
 532  0
             addEqualToCriteria(subCrit, "attributes.kimTypeId", kimTypeId);
 533  0
             subCrit.addEqualToField("roleId", Criteria.PARENT_QUERY_PREFIX + "roleId");
 534  0
             crit.addExists(QueryFactory.newReportQuery(RoleMemberBo.class, subCrit));
 535  0
         }
 536  0
     }
 537  
 
 538  
     private ReportQueryByCriteria setupPermCriteria(Map<String, String> permCrit) {
 539  
 
 540  0
         Map<String, String> searchCrit = new HashMap<String, String>();
 541  
 
 542  0
         for (Map.Entry<String, String> entry : permCrit.entrySet()) {
 543  0
             if (entry.getKey().equals("permTmplName") || entry.getKey().equals("permTmplNamespaceCode")) {
 544  0
                 if (entry.getKey().equals("permTmplName")) {
 545  0
                     searchCrit.put("template." + KimConstants.UniqueKeyConstants.PERMISSION_TEMPLATE_NAME, entry.getValue());
 546  
 
 547  
                 } else {
 548  0
                     searchCrit.put("template." + KimConstants.UniqueKeyConstants.NAMESPACE_CODE, entry.getValue());
 549  
                 }
 550  
             }
 551  
 
 552  0
             if (entry.getKey().equals("permName") || entry.getKey().equals("permNamespaceCode")) {
 553  0
                 if (entry.getKey().equals("permName")) {
 554  0
                     searchCrit.put(KimConstants.UniqueKeyConstants.PERMISSION_NAME, entry.getValue());
 555  
                 } else {
 556  0
                     searchCrit.put(KimConstants.UniqueKeyConstants.NAMESPACE_CODE, entry.getValue());
 557  
 
 558  
                 }
 559  
             }
 560  
         }
 561  
 
 562  0
         List<Permission> permList = KimApiServiceLocator.getPermissionService().lookupPermissions(searchCrit, true);
 563  0
         List<String> roleIds = null;
 564  
 
 565  0
         if (permList != null && !permList.isEmpty()) {
 566  0
             roleIds = KimApiServiceLocator.getPermissionService().getRoleIdsForPermissions(permList);
 567  
         }
 568  
 
 569  0
         if (roleIds == null || roleIds.isEmpty()) {
 570  0
             roleIds = new ArrayList<String>();
 571  0
             roleIds.add("-1"); // this forces a blank return.
 572  
         }
 573  
 
 574  0
         Criteria memberSubCrit = new Criteria();
 575  0
         memberSubCrit.addIn("roleId", roleIds);
 576  0
         memberSubCrit.addEqualToField("roleId", Criteria.PARENT_QUERY_PREFIX + "roleId");
 577  0
         return QueryFactory.newReportQuery(RoleBo.class, memberSubCrit);
 578  
 
 579  
     }
 580  
 
 581  
     private ReportQueryByCriteria setupRespCriteria(Map<String, String> respCrit) {
 582  0
         QueryByCriteria.Builder queryByCriteriaBuilder = QueryByCriteria.Builder.create();
 583  0
         List<Predicate> predicates = new ArrayList<Predicate>();
 584  0
         for (Map.Entry<String, String> entry : respCrit.entrySet()) {
 585  0
             if (entry.getKey().equals("respTmplName") || entry.getKey().equals("respTmplNamespaceCode")) {
 586  0
                 if (entry.getKey().equals("respTmplName")) {
 587  0
                     predicates.add(PredicateFactory.equal("template" + KimConstants.UniqueKeyConstants.RESPONSIBILITY_TEMPLATE_NAME, entry.getValue()));
 588  
                 } else {
 589  0
                     predicates.add(PredicateFactory.equal("template." + KimConstants.UniqueKeyConstants.NAMESPACE_CODE, entry.getValue()));
 590  
                 }
 591  
             }
 592  0
             if (entry.getKey().equals("respName") || entry.getKey().equals("respNamespaceCode")) {
 593  0
                 if (entry.getKey().equals("respName")) {
 594  0
                     predicates.add(PredicateFactory.equal(KimConstants.UniqueKeyConstants.RESPONSIBILITY_NAME, entry.getValue()));
 595  
                 } else {
 596  0
                     predicates.add(PredicateFactory.equal(KimConstants.UniqueKeyConstants.NAMESPACE_CODE, entry.getValue()));
 597  
                 }
 598  
             }
 599  
         }
 600  0
         queryByCriteriaBuilder.setPredicates(PredicateFactory.and(predicates.toArray(new Predicate[predicates.size()])));
 601  
 
 602  0
         ResponsibilityService responsibilityService = KimApiServiceLocator.getResponsibilityService();
 603  0
         ResponsibilityQueryResults results = responsibilityService.findResponsibilities(queryByCriteriaBuilder.build());
 604  0
         List<Responsibility> responsibilities = results.getResults();
 605  
 
 606  
 
 607  0
         List<String> roleIds = new ArrayList<String>();
 608  0
         for (Responsibility responsibility : responsibilities) {
 609  0
             roleIds.addAll(responsibilityService.getRoleIdsForResponsibility(responsibility.getId(), null));
 610  
         }
 611  
 
 612  0
         if (roleIds.isEmpty()) {
 613  0
             roleIds.add("-1"); // this forces a blank return.
 614  
         }
 615  
 
 616  0
         Criteria memberSubCrit = new Criteria();
 617  0
         memberSubCrit.addIn("roleId", roleIds);
 618  0
         memberSubCrit.addEqualToField("roleId", Criteria.PARENT_QUERY_PREFIX + "roleId");
 619  0
         return QueryFactory.newReportQuery(RoleBo.class, memberSubCrit);
 620  
 
 621  
     }
 622  
 
 623  
     private ReportQueryByCriteria setupGroupCriteria(Map<String,String> groupCrit) {
 624  
 
 625  
        //Map<String,String> searchCrit = new HashMap<String, String>();
 626  0
        final QueryByCriteria.Builder searchCrit = QueryByCriteria.Builder.create();
 627  0
        for (Entry<String, String> entry : groupCrit.entrySet()) {
 628  0
                        if (entry.getKey().equals(KimConstants.AttributeConstants.GROUP_NAME)) {
 629  
                                //searchCrit.put(entry.getKey(), entry.getValue());
 630  0
                    searchCrit.setPredicates(equal(entry.getKey(), entry.getValue()));
 631  
                        } else { // the namespace code for the group field is named something besides the default. Set it to the default.
 632  
                                //searchCrit.put(KimConstants.AttributeConstants.NAMESPACE_CODE, entry.getValue());
 633  0
                    searchCrit.setPredicates(equal(KimConstants.AttributeConstants.NAMESPACE_CODE, entry.getValue()));
 634  
 
 635  
                        }
 636  
        }
 637  
 
 638  0
        Criteria crit = new Criteria();
 639  
 
 640  0
        List<String> groupIds = KimApiServiceLocator.getGroupService().findGroupIds(searchCrit.build());
 641  
 
 642  0
        if(groupIds == null || groupIds.isEmpty()){
 643  0
                groupIds = new ArrayList<String>();
 644  0
                groupIds.add("-1");  // this forces a blank return.
 645  
        }
 646  0
        crit.addIn("memberId", groupIds);
 647  0
        crit.addEqualToField("roleId", Criteria.PARENT_QUERY_PREFIX + "roleId");
 648  
 
 649  0
                 return QueryFactory.newReportQuery(RoleMemberBo.class, crit);
 650  
 
 651  
    }
 652  
 
 653  
     private void addLikeToCriteria(Criteria criteria, String propertyName, String propertyValue) {
 654  0
         String[] keyValues = getCaseInsensitiveValues(propertyName, propertyValue);
 655  0
         criteria.addLike(keyValues[0], keyValues[1]);
 656  0
     }
 657  
 
 658  
     private void addEqualToCriteria(Criteria criteria, String propertyName, String propertyValue) {
 659  0
         String[] keyValues = getCaseInsensitiveValues(propertyName, propertyValue);
 660  0
         criteria.addEqualTo(keyValues[0], keyValues[1]);
 661  0
     }
 662  
 
 663  
     private String[] getCaseInsensitiveValues(String propertyName, String propertyValue) {
 664  0
         String[] keyValues = new String[2];
 665  0
         keyValues[0] = propertyName == null ? "" : getDbPlatform().getUpperCaseFunction() + "(" + propertyName + ")";
 666  0
         keyValues[1] = propertyValue == null ? "" : propertyValue.toUpperCase();
 667  0
         return keyValues;
 668  
     }
 669  
 
 670  
     @SuppressWarnings("unchecked")
 671  
     protected List<RoleMemberBo> getRoleMemberImpls(Map<String, String> fieldValues) {
 672  0
         Criteria queryCriteria = new Criteria();
 673  0
         List<String> memberIds = new ArrayList<String>();
 674  0
         if (hasExtraRoleMemberCriteria(fieldValues)) {
 675  0
             String memberName = fieldValues.get(KimConstants.KimUIConstants.MEMBER_NAME);
 676  0
             String memberNamespaceCode = fieldValues.get(KimConstants.KimUIConstants.MEMBER_NAMESPACE_CODE);
 677  
             //Only name or namespace fields are provided in search
 678  
             //member type code is not provided
 679  0
             List<RoleBo> roles = getRoleMembersRoles(memberNamespaceCode, memberName);
 680  0
             if (roles != null) {
 681  0
                 for (RoleBo role : roles) {
 682  0
                     memberIds.add(role.getId());
 683  
                 }
 684  
             }
 685  
 
 686  0
             memberIds.addAll(this.getPrincipalIdsForPrincipalName(memberName));
 687  
 
 688  0
             memberIds.addAll(getRoleMembersGroupIds(memberNamespaceCode, memberName));
 689  
 
 690  0
             if (memberIds != null && !memberIds.isEmpty()) {
 691  0
                 queryCriteria.addIn(KIMPropertyConstants.RoleMember.MEMBER_ID, memberIds);
 692  
             }
 693  
         }
 694  0
         if (hasCoreRoleMemberCriteria(fieldValues)) {
 695  0
             String roleMemberId = fieldValues.get(KimConstants.PrimaryKeyConstants.ROLE_MEMBER_ID);
 696  0
             String roleId = fieldValues.get(KimConstants.PrimaryKeyConstants.SUB_ROLE_ID);
 697  0
             String memberId = fieldValues.get(KimConstants.PrimaryKeyConstants.MEMBER_ID);
 698  0
             String memberTypeCode = fieldValues.get(KIMPropertyConstants.KimMember.MEMBER_TYPE_CODE);
 699  0
             String activeFromDate = fieldValues.get(KIMPropertyConstants.KimMember.ACTIVE_FROM_DATE);
 700  0
             String activeToDate = fieldValues.get(KIMPropertyConstants.KimMember.ACTIVE_TO_DATE);
 701  
             //role member id, role id, member id, member type code, active dates are provided in search
 702  0
             if (StringUtils.isNotEmpty(roleMemberId)) {
 703  0
                 addEqualToCriteria(queryCriteria, KimConstants.PrimaryKeyConstants.ROLE_MEMBER_ID, roleMemberId);
 704  
             }
 705  0
             if (StringUtils.isNotEmpty(roleId)) {
 706  0
                 addEqualToCriteria(queryCriteria, KimConstants.PrimaryKeyConstants.SUB_ROLE_ID, roleId);
 707  
             }
 708  0
             if (StringUtils.isNotEmpty(memberId)) {
 709  0
                 addEqualToCriteria(queryCriteria, KimConstants.PrimaryKeyConstants.MEMBER_ID, memberId);
 710  
             }
 711  0
             if (StringUtils.isNotEmpty(memberTypeCode)) {
 712  0
                 addEqualToCriteria(queryCriteria, KIMPropertyConstants.KimMember.MEMBER_TYPE_CODE, memberTypeCode);
 713  
             }
 714  0
             if (StringUtils.isNotEmpty(activeFromDate)) {
 715  0
                 queryCriteria.addGreaterOrEqualThan(KIMPropertyConstants.KimMember.ACTIVE_FROM_DATE, activeFromDate);
 716  
             }
 717  0
             if (StringUtils.isNotEmpty(activeToDate)) {
 718  0
                 queryCriteria.addLessOrEqualThan(KIMPropertyConstants.KimMember.ACTIVE_TO_DATE, activeToDate);
 719  
             }
 720  
         }
 721  0
         Query q = QueryFactory.newQuery(RoleMemberBo.class, queryCriteria);
 722  0
         return (List<RoleMemberBo>) getPersistenceBrokerTemplate().getCollectionByQuery(q);
 723  
     }
 724  
 
 725  
     public List<RoleMembership> getRoleMembers(Map<String, String> fieldValues) {
 726  0
         List<RoleMemberBo> roleMembers = getRoleMemberImpls(fieldValues);
 727  0
         List<RoleMembership> roleMemberships = new ArrayList<RoleMembership>();
 728  0
         for (RoleMemberBo roleMember : roleMembers) {
 729  0
             RoleMembership roleMembership = RoleMembership.Builder.create(
 730  
                     roleMember.getRoleId(),
 731  
                     roleMember.getRoleMemberId(),
 732  
                     roleMember.getMemberId(),
 733  
                     roleMember.getMemberTypeCode(),
 734  
                     roleMember.getAttributes())
 735  
                     .build();
 736  0
             roleMemberships.add(roleMembership);
 737  0
         }
 738  0
         return roleMemberships;
 739  
     }
 740  
 
 741  
     public List<RoleMember> getRoleMembersCompleteInfo(Map<String, String> fieldValues) {
 742  0
         List<RoleMemberBo> roleMembers = getRoleMemberImpls(fieldValues);
 743  0
         List<RoleMember> roleMembersCompleteInfo = new ArrayList<RoleMember>();
 744  0
         for (RoleMemberBo roleMember : roleMembers) {
 745  0
             roleMembersCompleteInfo.add(RoleMemberBo.to(roleMember));
 746  
         }
 747  0
         return roleMembersCompleteInfo;
 748  
     }
 749  
 
 750  
     private boolean hasCoreRoleMemberCriteria(Map<String, String> fieldValues) {
 751  0
         return StringUtils.isNotEmpty(fieldValues.get(KimConstants.PrimaryKeyConstants.ROLE_MEMBER_ID)) ||
 752  
                 StringUtils.isNotEmpty(fieldValues.get(KimConstants.PrimaryKeyConstants.SUB_ROLE_ID)) ||
 753  
                 StringUtils.isNotEmpty(fieldValues.get(KimConstants.PrimaryKeyConstants.MEMBER_ID)) ||
 754  
                 StringUtils.isNotEmpty(fieldValues.get(KIMPropertyConstants.KimMember.MEMBER_TYPE_CODE)) ||
 755  
                 StringUtils.isNotEmpty(fieldValues.get(KIMPropertyConstants.KimMember.ACTIVE_FROM_DATE)) ||
 756  
                 StringUtils.isNotEmpty(fieldValues.get(KIMPropertyConstants.KimMember.ACTIVE_TO_DATE));
 757  
     }
 758  
 
 759  
     private boolean hasExtraRoleMemberCriteria(Map<String, String> fieldValues) {
 760  0
         return StringUtils.isNotEmpty(fieldValues.get(KimConstants.KimUIConstants.MEMBER_NAME)) ||
 761  
                 StringUtils.isNotEmpty(fieldValues.get(KimConstants.KimUIConstants.MEMBER_NAMESPACE_CODE));
 762  
     }
 763  
 
 764  
     @SuppressWarnings("unchecked")
 765  
     private List<RoleBo> getRoleMembersRoles(String memberNamespaceCode, String memberName) {
 766  0
         Criteria queryCriteria = new Criteria();
 767  0
         addEqualToCriteria(queryCriteria, KimConstants.UniqueKeyConstants.NAMESPACE_CODE, memberNamespaceCode);
 768  0
         addEqualToCriteria(queryCriteria, KimConstants.UniqueKeyConstants.NAME, memberName);
 769  0
         Query q = QueryFactory.newQuery(RoleBo.class, queryCriteria);
 770  0
         return (List<RoleBo>) getPersistenceBrokerTemplate().getCollectionByQuery(q);
 771  
     }
 772  
 
 773  
     private List<String> getRoleMembersGroupIds(String memberNamespaceCode, String memberName){
 774  
 
 775  
        /*Map<String,String> searchCrit = new HashMap<String, String>();
 776  
         searchCrit.put(KimConstants.AttributeConstants.GROUP_NAME, memberName);
 777  
         searchCrit.put(KimConstants.AttributeConstants.NAMESPACE_CODE, memberNamespaceCode);*/
 778  0
        QueryByCriteria.Builder builder = QueryByCriteria.Builder.create();
 779  0
        builder.setPredicates(and(
 780  
                    like(KimConstants.AttributeConstants.GROUP_NAME, memberName),
 781  
                    like(KimConstants.AttributeConstants.NAMESPACE_CODE, memberNamespaceCode)));
 782  0
         return KimApiServiceLocator.getGroupService().findGroupIds(builder.build());
 783  
    }
 784  
 }