1 package fr.ifremer.reefdb.dao.administration.strategy;
2
3 /*
4 * #%L
5 * Reef DB :: Core
6 * $Id:$
7 * $HeadURL:$
8 * %%
9 * Copyright (C) 2014 - 2015 Ifremer
10 * %%
11 * This program is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Affero General Public License as published by
13 * the Free Software Foundation, either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU Affero General Public License
22 * along with this program. If not, see <http://www.gnu.org/licenses/>.
23 * #L%
24 */
25
26 import com.google.common.collect.Multimap;
27 import fr.ifremer.reefdb.dto.configuration.programStrategy.*;
28 import fr.ifremer.reefdb.dto.referential.DepartmentDTO;
29 import org.springframework.cache.annotation.CacheEvict;
30 import org.springframework.cache.annotation.Cacheable;
31 import org.springframework.cache.annotation.Caching;
32
33 import java.time.LocalDate;
34 import java.util.Collection;
35 import java.util.List;
36 import java.util.Set;
37
38 /**
39 * <p>ReefDbStrategyDao interface.</p>
40 *
41 * @author Ludovic
42 */
43 public interface ReefDbStrategyDao {
44 String PMFM_STRATEGIES_BY_PROG_LOC_DATE_CACHE = "pmfm_strategies_by_program_location_date";
45
46 /**
47 * <p>getStrategiesByProgramCode.</p>
48 *
49 * @param programCode a {@link java.lang.String} object.
50 * @return a {@link java.util.List} object.
51 */
52 List<StrategyDTO> getStrategiesByProgramCode(String programCode);
53
54 /**
55 * <p>getAppliedStrategiesByProgramCode.</p>
56 *
57 * @param programCode a {@link java.lang.String} object.
58 * @return a {@link java.util.List} object.
59 */
60 List<AppliedStrategyDTO> getAppliedStrategiesByProgramCode(String programCode);
61
62 /**
63 * <p>getAppliedStrategiesByStrategyId.</p>
64 *
65 * @param strategyId a {@link java.lang.Integer} object.
66 * @return a {@link java.util.List} object.
67 */
68 List<AppliedStrategyDTO> getAppliedStrategiesByStrategyId(Integer strategyId);
69
70 /**
71 * <p>getAppliedPeriodsByStrategyId.</p>
72 *
73 * @param strategyId a {@link java.lang.Integer} object.
74 * @return a {@link java.util.List} object.
75 */
76 List<AppliedStrategyDTO> getAppliedPeriodsByStrategyId(Integer strategyId);
77
78 /**
79 * <p>getAllAppliedPeriodsByProgramCode.</p>
80 *
81 * @param programCode a {@link java.lang.String} object.
82 * @return a {@link com.google.common.collect.Multimap} object.
83 */
84 Multimap<Integer, AppliedStrategyDTO> getAllAppliedPeriodsByProgramCode(String programCode);
85
86 /**
87 * <p>getPmfmsAppliedStrategy.</p>
88 *
89 * @param strategyId a {@link java.lang.Integer} object.
90 * @return a {@link java.util.List} object.
91 */
92 List<PmfmStrategyDTO> getPmfmsAppliedStrategy(Integer strategyId);
93
94 /**
95 * <p>getPmfmStrategiesByProgramCodeAndLocation.</p>
96 *
97 * @param programCode a {@link String} object.
98 * @param monitoringLocationId a {@link Integer} object.
99 * @param date a {@link LocalDate} object.
100 * @return a {@link java.util.List} object.
101 */
102 @Cacheable(value = PMFM_STRATEGIES_BY_PROG_LOC_DATE_CACHE)
103 Set<PmfmStrategyDTO> getPmfmStrategiesByProgramCodeAndLocation(String programCode, Integer monitoringLocationId, LocalDate date);
104
105 /**
106 * Retrieve all PMFM strategies that are applied on given programs and date range
107 *
108 * @param programCodes program codes
109 * @param startDate
110 * @param endDate
111 * @return set of pmfm strategies
112 */
113 Set<PmfmStrategyDTO> getPmfmStrategiesByProgramCodesAndDates(Collection<String> programCodes, LocalDate startDate, LocalDate endDate);
114
115 /**
116 * Retrieve all strategies that are applied on the given program and monitoring location
117 *
118 * @param programCode (can be null)
119 * @param monitoringLocationId a int.
120 * @return a {@link java.util.List} object.
121 */
122 List<ProgStratDTO> getStrategiesByProgramCodeAndMonitoringLocationId(String programCode, int monitoringLocationId);
123
124 /**
125 * Get the unique analysis department for this applied strategy
126 *
127 * @param appliedStrategyId the applied strategy id
128 * @return the analysis department
129 */
130 DepartmentDTO getAnalysisDepartmentByAppliedStrategyId(int appliedStrategyId);
131
132 /**
133 * Get the unique analysis department for this applied strategy and pmfm
134 *
135 * @param appliedStrategyId the applied strategy id
136 * @param pmfmIds
137 * @return the analysis department
138 */
139 DepartmentDTO getAnalysisDepartmentByAppliedStrategyIdAndPmfmIds(int appliedStrategyId, Collection<Integer> pmfmIds);
140
141 /**
142 * <p>saveStrategies.</p>
143 *
144 * @param program a {@link fr.ifremer.reefdb.dto.configuration.programStrategy.ProgramDTO} object.
145 */
146 @Caching(evict = {
147 @CacheEvict(value = ReefDbStrategyDao.PMFM_STRATEGIES_BY_PROG_LOC_DATE_CACHE, allEntries = true)
148 })
149 void saveStrategies(ProgramDTO program);
150
151 /**
152 * <p>removeByProgramCode.</p>
153 *
154 * @param programCode a {@link java.lang.String} object.
155 */
156 @Caching(evict = {
157 @CacheEvict(value = ReefDbStrategyDao.PMFM_STRATEGIES_BY_PROG_LOC_DATE_CACHE, allEntries = true)
158 })
159 void removeByProgramCode(String programCode);
160
161 /**
162 * <p>removeByStrategyIds.</p>
163 *
164 * @param strategyIds a {@link java.util.Collection} object.
165 */
166 @Caching(evict = {
167 @CacheEvict(value = ReefDbStrategyDao.PMFM_STRATEGIES_BY_PROG_LOC_DATE_CACHE, allEntries = true)
168 })
169 void removeByStrategyIds(Collection<Integer> strategyIds);
170
171 /**
172 * <p>deleteAppliedStrategies.</p>
173 *
174 * @param appliedStrategyIds a {@link java.util.Collection} object.
175 */
176 @Caching(evict = {
177 @CacheEvict(value = ReefDbStrategyDao.PMFM_STRATEGIES_BY_PROG_LOC_DATE_CACHE, allEntries = true)
178 })
179 void deleteAppliedStrategies(Collection<Integer> appliedStrategyIds);
180
181 /**
182 * <p>deleteAppliedStrategies.</p>
183 *
184 * @param programCode a {@link java.lang.String} object.
185 * @param monitoringLocationIds a {@link java.util.Collection} object.
186 */
187 void deleteAppliedStrategies(String programCode, Collection<Integer> monitoringLocationIds);
188
189 /**
190 * <p>saveStrategyByLocation.</p>
191 *
192 * @param strategy a {@link fr.ifremer.reefdb.dto.configuration.programStrategy.ProgStratDTO} object.
193 * @param locationId a int.
194 */
195 void saveStrategyByLocation(ProgStratDTO strategy, int locationId);
196
197 }