1 package net.sumaris.core.dao.data;
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.technical.model.IEntity;
26 import net.sumaris.core.model.data.Landing;
27 import net.sumaris.core.vo.data.LandingVO;
28 import org.springframework.data.jpa.domain.Specification;
29 import org.springframework.data.repository.NoRepositoryBean;
30
31 import java.util.Date;
32
33 @NoRepositoryBean
34 public interface LandingRepositoryExtend extends IEntityConverter<Landing, LandingVO> {
35
36 default Specification<Landing> hasObservedLocationId(Integer observedLocationId) {
37 if (observedLocationId == null) return null;
38 return (root, query, cb) -> cb.equal(root.get(Landing.Fields.OBSERVED_LOCATION).get(IEntity.Fields.ID), observedLocationId);
39 }
40
41 default Specification<Landing> hasTripId(Integer tripId) {
42 if (tripId == null) return null;
43 return (root, query, cb) -> cb.equal(root.get(Landing.Fields.TRIP).get(IEntity.Fields.ID), tripId);
44 }
45
46 default Specification<Landing> hasLocationId(Integer locationId) {
47 if (locationId == null) return null;
48 return (root, query, cb) -> cb.equal(root.get(Landing.Fields.LOCATION).get(IEntity.Fields.ID), locationId);
49 }
50
51 default Specification<Landing> betweenDate(Date startDate, Date endDate) {
52 if (startDate == null && endDate == null) return null;
53 return (root, query, cb) -> {
54 if (startDate != null && endDate != null) {
55 return cb.and(
56 cb.greaterThanOrEqualTo(root.get(Landing.Fields.DATE_TIME), startDate),
57 cb.lessThanOrEqualTo(root.get(Landing.Fields.DATE_TIME), endDate)
58 );
59 } else if (startDate == null && endDate != null) {
60 return cb.lessThanOrEqualTo(root.get(Landing.Fields.DATE_TIME), endDate);
61 } else {
62 return cb.greaterThanOrEqualTo(root.get(Landing.Fields.DATE_TIME), startDate);
63 }
64 };
65 }
66
67 LandingVO toVO(Landing landing);
68
69 }