001 /**
002 * Copyright 2004-2012 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.hr.time.roles.service;
017
018 import org.kuali.hr.time.assignment.Assignment;
019 import org.kuali.hr.time.roles.TkRole;
020 import org.kuali.hr.time.roles.TkRoleGroup;
021 import org.springframework.cache.annotation.CacheEvict;
022 import org.springframework.cache.annotation.Cacheable;
023
024 import java.sql.Date;
025 import java.util.List;
026 import java.util.Set;
027
028 public interface TkRoleService {
029 /**
030 * Fetch all roles for a given Principal ID as of a particular date
031 * @param principalId
032 * @param asOfDate
033 * @return
034 */
035 @Cacheable(value= TkRole.CACHE_NAME, key="'principalId=' + #p0 + '|' + 'asOfDate=' + #p1")
036 public List<TkRole> getRoles(String principalId, Date asOfDate);
037
038 /**
039 * Fetch all inactive roles for a given Principal ID as of a particular date
040 * @param principalId
041 * @param asOfDate
042 * @return
043 */
044 @Cacheable(value= TkRole.CACHE_NAME, key="'{getInactiveRoles}' + 'principalId=' + #p0 + '|' + 'asOfDate=' + #p1")
045 public List<TkRole> getInactiveRoles(String principalId, Date asOfDate);
046 /**
047 * Fetch all roles for a given Principal ID and Role Name as of a particular date
048 * @param principalId
049 * @param roleName
050 * @param asOfDate
051 * @return
052 */
053 @Cacheable(value= TkRole.CACHE_NAME, key="'principalId=' + #p0 + '|' + 'roleName=' + #p1 + '|' + 'asOfDate=' + #p2")
054 public List<TkRole> getRoles(String principalId, String roleName, Date asOfDate);
055 /**
056 * Fetch all Roles for a given Work Area as of a particular date
057 * @param workArea
058 * @param asOfDate
059 * @return
060 */
061 @Cacheable(value= TkRole.CACHE_NAME, key="'workArea=' + #p0 + '|' + 'asOfDate=' + #p1")
062 public List<TkRole> getWorkAreaRoles(Long workArea, Date asOfDate);
063 /**
064 * Fetch all Roles for a given work area and role name as of a particular date
065 * @param workArea
066 * @param roleName
067 * @param asOfDate
068 * @return
069 */
070 @Cacheable(value= TkRole.CACHE_NAME, key="'workArea=' + #p0 + '|' + 'roleName=' + #p1 + '|' + 'asOfDate=' + #p2")
071 public List<TkRole> getWorkAreaRoles(Long workArea, String roleName, Date asOfDate);
072 /**
073 * Fetch all Inactive Roles for a given work area as of a particular date
074 * @param workArea
075 * @param asOfDate
076 * @return
077 */
078 @Cacheable(value= TkRole.CACHE_NAME, key="'{getInActiveWorkAreaRoles}' + 'workArea=' + #p0 + '|' + 'asOfDate=' + #p1")
079 public List<TkRole> getInActiveWorkAreaRoles(Long workArea, Date asOfDate);
080 /**
081 * Fetch all Inactive Roles for a given work area and role name as of a particular date
082 * @param workArea
083 * @param roleName
084 * @param asOfDate
085 * @return
086 */
087 @Cacheable(value= TkRole.CACHE_NAME, key="'{getInActiveWorkAreaRoles}' + 'workArea=' + #p0 + '|' + 'roleName=' + #p1 + '|' + 'asOfDate=' + #p2")
088 public List<TkRole> getInActiveWorkAreaRoles(Long workArea, String roleName, Date asOfDate);
089 /**
090 * Fetch all Roles for a given Department and Role Name as of a particular date
091 * @param department
092 * @param roleName
093 * @param asOfDate
094 * @return
095 */
096 @Cacheable(value= TkRole.CACHE_NAME, key="'department=' + #p0 + '|' + 'roleName=' + #p1 + '|' + 'asOfDate=' + #p2")
097 public List<TkRole> getDepartmentRoles(String department, String roleName, Date asOfDate);
098
099 /**
100 * Fetch all Inactive Roles for a given Department and Role Name as of a particular date
101 * @param department
102 * @param roleName
103 * @param asOfDate
104 * @return
105 */
106 @Cacheable(value= TkRole.CACHE_NAME, key="'{getDepartmentInactiveRoles}' + 'department=' + #p0 + '|' + 'roleName=' + #p1 + '|' + 'asOfDate=' + #p2")
107 public List<TkRole> getDepartmentInactiveRoles(String department, String roleName, Date asOfDate);
108 /**
109 * Fetch all Roles for a given Department of a particular date
110 * @param department
111 * @param asOfDate
112 * @return
113 */
114 @Cacheable(value= TkRole.CACHE_NAME, key="'department=' + #p0 + '|' + 'asOfDate=' + #p1")
115 public List<TkRole> getDepartmentRoles(String department, Date asOfDate);
116 /**
117 * Save or Update a given TkRole
118 * @param role
119 */
120 @CacheEvict(value={TkRole.CACHE_NAME, TkRoleGroup.CACHE_NAME}, allEntries = true)
121 public void saveOrUpdate(TkRole role);
122 /**
123 * Save or Update a List of TkRole objects
124 * @param roles
125 */
126 @CacheEvict(value={TkRole.CACHE_NAME, TkRoleGroup.CACHE_NAME}, allEntries = true)
127 public void saveOrUpdate(List<TkRole> roles);
128
129 /**
130 * Gets the list of principal IDs responsible for the provided assignment /
131 * role name combination.
132 *
133 * @param assignment the assignment to query
134 * @param roleName The role we are interested in.
135 * @param asOfDate effective date
136 * @return
137 */
138 public List<String> getResponsibleParties(Assignment assignment, String roleName, Date asOfDate);
139
140 /**
141 * Provides a unique set of work areas that this user is an approver for.
142 * @param principalId The principal to retrieve roles for.
143 * @param asOfDate effective date
144 * @return A Set of Long work area numbers.
145 */
146 @Cacheable(value= TkRole.CACHE_NAME, key="'{getWorkAreasForApprover}' + 'principalId=' + #p0 + '|' + 'asOfDate=' + #p1")
147 public Set<Long> getWorkAreasForApprover(String principalId, Date asOfDate);
148
149 /**
150 * Provides a unique set of principal ids that have active assignments in the
151 * given work areas.
152 * @param workAreas A set of work area numbers.
153 * @param asOfDate effective date
154 * @return A Set of String principal IDs.
155 */
156 public Set<String> getActivePrinciaplsForWorkAreas(Set<Long> workAreas, Date asOfDate);
157
158 /**
159 * Fetches Role by primary key
160 */
161 @Cacheable(value= TkRole.CACHE_NAME, key="'tkRoleId=' + #p0")
162 public TkRole getRole(String tkRoleId);
163
164 /**
165 * Fetches Role by position number
166 */
167 @Cacheable(value= TkRole.CACHE_NAME, key="'positionNumber=' + #p0")
168 public TkRole getRolesByPosition(String positionNumber);
169
170 @Cacheable(value= TkRole.CACHE_NAME, key="'{getInactiveRolesByPosition}' + 'positionNumber=' + #p0")
171 public TkRole getInactiveRolesByPosition(String positionNumber);
172
173 @Cacheable(value= TkRole.CACHE_NAME, key="'{getPositionRolesForWorkArea}' + 'workArea=' + #p0 + '|' + 'asOfDate=' + #p1")
174 public List<TkRole> getPositionRolesForWorkArea(Long workArea, Date asOfDate);
175
176 @Cacheable(value= TkRole.CACHE_NAME,
177 key="'principalId=' + #p0" +
178 "+ '|' + 'asOfDate=' + #p1" +
179 "+ '|' + 'roleName=' + #p2" +
180 "+ '|' + 'workArea=' + #p3" +
181 "+ '|' + 'department=' + #p4")
182 List<TkRole> getRoles(String principalId, Date asOfDate, String roleName, Long workArea, String department);
183 }