1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kim.impl.responsibility;
17
18 import org.kuali.rice.kew.api.KewApiServiceLocator;
19 import org.kuali.rice.kim.api.KimConstants;
20 import org.kuali.rice.kim.api.responsibility.Responsibility;
21 import org.kuali.rice.kim.api.responsibility.ResponsibilityService;
22 import org.kuali.rice.kim.api.role.RoleResponsibility;
23 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
24 import org.kuali.rice.kim.impl.role.RoleMemberBo;
25 import org.kuali.rice.kim.impl.role.RoleResponsibilityBo;
26 import org.kuali.rice.krad.service.BusinessObjectService;
27 import org.kuali.rice.krad.service.KRADServiceLocator;
28
29 import java.util.ArrayList;
30 import java.util.Collections;
31 import java.util.HashSet;
32 import java.util.List;
33 import java.util.Map;
34 import java.util.Set;
35
36 public class ResponsibilityInternalServiceImpl implements ResponsibilityInternalService {
37
38 private BusinessObjectService businessObjectService;
39 private ResponsibilityService responsibilityService;
40
41 @Override
42 public RoleMemberBo saveRoleMember(RoleMemberBo roleMember){
43
44
45 List<RoleResponsibility> oldRoleResp = getRoleResponsibilities(roleMember.getRoleId());
46
47
48 RoleMemberBo member = getBusinessObjectService().save( roleMember );
49
50
51
52 List<RoleResponsibility> newRoleResp = getRoleResponsibilities(roleMember.getRoleId());
53
54 updateActionRequestsForResponsibilityChange(getChangedRoleResponsibilityIds(oldRoleResp, newRoleResp));
55
56 return member;
57 }
58 @Override
59 public void removeRoleMember(RoleMemberBo roleMember){
60
61 List<RoleResponsibility> oldRoleResp = getRoleResponsibilities(roleMember.getRoleId());
62
63
64 getBusinessObjectService().delete( roleMember );
65
66
67
68 List<RoleResponsibility> newRoleResp = getRoleResponsibilities(roleMember.getRoleId());
69
70 updateActionRequestsForResponsibilityChange(getChangedRoleResponsibilityIds(oldRoleResp, newRoleResp));
71 }
72
73 @Override
74 @SuppressWarnings("unchecked")
75 public void updateActionRequestsForRoleChange(String roleId) {
76 List<RoleResponsibility> newRoleResp = getRoleResponsibilities(roleId);
77
78 updateActionRequestsForResponsibilityChange(getChangedRoleResponsibilityIds(Collections.EMPTY_LIST, newRoleResp));
79 }
80
81
82
83
84
85
86
87 @Override
88 public void updateActionRequestsForResponsibilityChange(Set<String> responsibilityIds) {
89 KewApiServiceLocator.getResponsibilityChangeQueue().responsibilitiesChanged(responsibilityIds);
90 }
91
92 @SuppressWarnings("unchecked")
93 public List<RoleResponsibility> getRoleResponsibilities(String roleId){
94 List<RoleResponsibilityBo> rrBoList =
95 (List<RoleResponsibilityBo>)getBusinessObjectService()
96 .findMatching(RoleResponsibilityBo.class, Collections.singletonMap(KimConstants.PrimaryKeyConstants.SUB_ROLE_ID, roleId));
97 List<RoleResponsibility> result = new ArrayList<RoleResponsibility>( rrBoList.size() );
98 for ( RoleResponsibilityBo bo : rrBoList ) {
99 result.add( RoleResponsibilityBo.to(bo) );
100 }
101 return result;
102 }
103
104
105
106
107
108
109
110
111
112 protected Set<String> getChangedRoleResponsibilityIds(
113 List<RoleResponsibility> oldRespList,
114 List<RoleResponsibility> newRespList) {
115 Set<String> lRet = new HashSet<String>();
116
117 for (RoleResponsibility resp : oldRespList) {
118 lRet.add(resp.getResponsibilityId());
119 }
120 for (RoleResponsibility resp : newRespList) {
121 lRet.add(resp.getResponsibilityId());
122 }
123
124 return lRet;
125 }
126
127 protected BusinessObjectService getBusinessObjectService() {
128 if ( businessObjectService == null ) {
129 businessObjectService = KRADServiceLocator.getBusinessObjectService();
130 }
131 return businessObjectService;
132 }
133
134 protected ResponsibilityService getResponsibilityService() {
135 if ( responsibilityService == null ) {
136 responsibilityService = KimApiServiceLocator.getResponsibilityService();
137 }
138 return responsibilityService;
139 }
140
141 @Override
142 public boolean areActionsAtAssignmentLevel(Responsibility responsibility ) {
143 Map<String, String> details = responsibility.getAttributes();
144 if ( details == null ) {
145 return false;
146 }
147 String actionDetailsAtRoleMemberLevel = details.get( KimConstants.AttributeConstants.ACTION_DETAILS_AT_ROLE_MEMBER_LEVEL );
148 return Boolean.valueOf(actionDetailsAtRoleMemberLevel);
149 }
150
151 @Override
152 public boolean areActionsAtAssignmentLevelById( String responsibilityId ) {
153 Responsibility responsibility = getResponsibilityService().getResponsibility(responsibilityId);
154 if ( responsibility == null ) {
155 return false;
156 }
157 return areActionsAtAssignmentLevel(responsibility);
158 }
159
160 }