1 package net.sumaris.core.dao.administration.user;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import net.sumaris.core.dao.cache.CacheNames;
26 import net.sumaris.core.dao.technical.SortDirection;
27 import net.sumaris.core.model.administration.user.Department;
28 import net.sumaris.core.vo.administration.user.DepartmentVO;
29 import net.sumaris.core.vo.filter.DepartmentFilterVO;
30 import org.springframework.cache.annotation.CacheEvict;
31 import org.springframework.cache.annotation.CachePut;
32 import org.springframework.cache.annotation.Cacheable;
33 import org.springframework.cache.annotation.Caching;
34
35 import java.util.List;
36
37 public interface DepartmentDao {
38
39 List<DepartmentVO> findByFilter(DepartmentFilterVO filter,
40 int offset,
41 int size,
42 String sortAttribute,
43 SortDirection sortDirection);
44
45 @Cacheable(cacheNames = CacheNames.DEPARTMENT_BY_ID, key = "#id", unless="#result==null")
46 DepartmentVO get(int id);
47
48 @Cacheable(cacheNames = CacheNames.DEPARTMENT_BY_LABEL, key = "#label", unless="#result==null")
49 Department getByLabelOrNull(String label);
50
51 @Caching(evict = {
52 @CacheEvict(cacheNames = CacheNames.DEPARTMENT_BY_ID, key = "#id"),
53 @CacheEvict(cacheNames = CacheNames.DEPARTMENT_BY_LABEL, allEntries = true)
54 })
55 void delete(int id);
56
57 @Caching(put = {
58 @CachePut(cacheNames= CacheNames.DEPARTMENT_BY_ID, key="#source.id", condition = "#source != null && #source.id != null"),
59 @CachePut(cacheNames= CacheNames.DEPARTMENT_BY_LABEL, key="#source.label", condition = "#source != null && #source.id != null && #source.label != null")
60 })
61 DepartmentVO./../../../../../net/sumaris/core/vo/administration/user/DepartmentVO.html#DepartmentVO">DepartmentVO save(DepartmentVO source);
62
63 DepartmentVO toDepartmentVO(Department department);
64 }