001 /**
002 * Copyright 2005-2015 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.kim.impl.role;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.joda.time.DateTime;
020 import org.kuali.rice.kim.api.group.GroupMember;
021 import org.kuali.rice.kim.impl.common.delegate.DelegateMemberBo;
022 import org.kuali.rice.kim.impl.common.delegate.DelegateTypeBo;
023 import org.kuali.rice.kim.impl.group.GroupMemberBo;
024
025 import java.sql.Timestamp;
026 import java.util.ArrayList;
027 import java.util.HashSet;
028 import java.util.List;
029 import java.util.Set;
030 import java.util.concurrent.TimeUnit;
031
032 public class RoleInternalServiceImpl extends RoleServiceBase implements RoleInternalService{
033 @Override
034 public void principalInactivated(String principalId) {
035 if (StringUtils.isBlank(principalId)) {
036 throw new IllegalArgumentException("principalId is null or blank");
037 }
038
039 long oneDayInMillis = TimeUnit.DAYS.toMillis(1);
040 Timestamp yesterday = new Timestamp(System.currentTimeMillis() - oneDayInMillis);
041
042 inactivatePrincipalRoleMemberships(principalId, yesterday);
043 inactivatePrincipalGroupMemberships(principalId, yesterday);
044 inactivatePrincipalDelegations(principalId, yesterday);
045 inactivateApplicationRoleMemberships(principalId, yesterday);
046 }
047
048 @Override
049 public void roleInactivated(String roleId) {
050 if (StringUtils.isBlank(roleId)) {
051 throw new IllegalArgumentException("roleId is null or blank");
052 }
053
054 long oneDayInMillis = TimeUnit.DAYS.toMillis(1);
055 Timestamp yesterday = new Timestamp(System.currentTimeMillis() - oneDayInMillis);
056
057 List<String> roleIds = new ArrayList<String>();
058 roleIds.add(roleId);
059 inactivateRoleMemberships(roleIds, yesterday);
060 inactivateRoleDelegations(roleIds, yesterday);
061 inactivateMembershipsForRoleAsMember(roleIds, yesterday);
062 }
063
064 private void inactivateRoleMemberships(List<String> roleIds, Timestamp yesterday) {
065 List<RoleMemberBo> roleMemberBoList = getStoredRoleMembersForRoleIds(roleIds, null, null);
066 for (RoleMemberBo roleMemberBo : roleMemberBoList) {
067 roleMemberBo.setActiveToDateValue(yesterday);
068 }
069 getBusinessObjectService().save(roleMemberBoList);
070 }
071
072 private void inactivateRoleDelegations(List<String> roleIds, Timestamp yesterday) {
073 List<DelegateTypeBo> delegations = getStoredDelegationImplsForRoleIds(roleIds);
074 for (DelegateTypeBo delegation : delegations) {
075 delegation.setActive(false);
076 for (DelegateMemberBo delegationMember : delegation.getMembers()) {
077 delegationMember.setActiveToDateValue(yesterday);
078 }
079 }
080 getBusinessObjectService().save(delegations);
081 }
082
083 private void inactivateMembershipsForRoleAsMember(List<String> roleIds, Timestamp yesterday) {
084 List<RoleMemberBo> roleMemberBoList = getStoredRoleMembershipsForRoleIdsAsMembers(roleIds, null);
085 for (RoleMemberBo roleMemberBo : roleMemberBoList) {
086 roleMemberBo.setActiveToDateValue(yesterday);
087 }
088 getBusinessObjectService().save(roleMemberBoList);
089 }
090
091 @Override
092 public void groupInactivated(String groupId) {
093 if (StringUtils.isBlank(groupId)) {
094 throw new IllegalArgumentException("groupId is null or blank");
095 }
096
097 long oneDayInMillis = TimeUnit.DAYS.toMillis(1);
098 Timestamp yesterday = new Timestamp(System.currentTimeMillis() - oneDayInMillis);
099
100 List<String> groupIds = new ArrayList<String>();
101 groupIds.add(groupId);
102 inactivatePrincipalGroupMemberships(groupIds, yesterday);
103 inactivateGroupRoleMemberships(groupIds, yesterday);
104 }
105
106 protected void inactivateApplicationRoleMemberships(String principalId, Timestamp yesterday) {
107
108 }
109
110 protected void inactivatePrincipalRoleMemberships(String principalId, Timestamp yesterday) {
111 // go through all roles and post-date them
112 List<RoleMemberBo> roleMembers = getStoredRolePrincipalsForPrincipalIdAndRoleIds(null, principalId, null);
113 Set<String> roleIds = new HashSet<String>(roleMembers.size());
114 for (RoleMemberBo roleMemberBo : roleMembers) {
115 roleMemberBo.setActiveToDateValue(yesterday);
116 roleIds.add(roleMemberBo.getRoleId()); // add to the set of IDs
117 }
118 getBusinessObjectService().save(roleMembers);
119 }
120
121 protected void inactivateGroupRoleMemberships(List<String> groupIds, Timestamp yesterday) {
122 List<RoleMemberBo> roleMemberBosOfGroupType = getStoredRoleGroupsForGroupIdsAndRoleIds(null, groupIds, null);
123 for (RoleMemberBo roleMemberbo : roleMemberBosOfGroupType) {
124 roleMemberbo.setActiveToDateValue(yesterday);
125 }
126 getBusinessObjectService().save(roleMemberBosOfGroupType);
127 }
128
129 protected void inactivatePrincipalGroupMemberships(String principalId, Timestamp yesterday) {
130 List<GroupMember> groupMembers = getRoleDao().getGroupPrincipalsForPrincipalIdAndGroupIds(null, principalId);
131 List<GroupMemberBo> groupMemberBoList = new ArrayList<GroupMemberBo>(groupMembers.size());
132 for (GroupMember gm : groupMembers) {
133 GroupMember.Builder builder = GroupMember.Builder.create(gm);
134 builder.setActiveToDate(new DateTime(yesterday.getTime()));
135 groupMemberBoList.add(GroupMemberBo.from(builder.build()));
136 }
137 getBusinessObjectService().save(groupMemberBoList);
138 }
139
140 protected void inactivatePrincipalGroupMemberships(List<String> groupIds, Timestamp yesterday) {
141 List<GroupMember> groupMembers = getRoleDao().getGroupMembers(groupIds);
142 List<GroupMemberBo> groupMemberBoList = new ArrayList<GroupMemberBo>(groupMembers.size());
143 for (GroupMember groupMember : groupMembers) {
144 GroupMember.Builder builder = GroupMember.Builder.create(groupMember);
145 builder.setActiveToDate(new DateTime(yesterday.getTime()));
146 groupMemberBoList.add(GroupMemberBo.from(builder.build()));
147 }
148 getBusinessObjectService().save(groupMemberBoList);
149 }
150
151 protected void inactivatePrincipalDelegations(String principalId, Timestamp yesterday) {
152 List<DelegateMemberBo> delegationMembers = getStoredDelegationPrincipalsForPrincipalIdAndDelegationIds(null,
153 principalId);
154 for (DelegateMemberBo delegateMemberBo : delegationMembers) {
155 delegateMemberBo.setActiveToDateValue(yesterday);
156 }
157 getBusinessObjectService().save(delegationMembers);
158 }
159 }