1 package fr.ifremer.dali.dao.administration.strategy;
2
3 /*
4 * #%L
5 * Dali :: 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.dali.dto.configuration.programStrategy.*;
28 import fr.ifremer.dali.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.Date;
36 import java.util.List;
37 import java.util.Set;
38
39 /**
40 * <p>DaliStrategyDao interface.</p>
41 *
42 * @author Ludovic
43 */
44 public interface DaliStrategyDao {
45 /** Constant <code>PMFM_STRATEGIES_BY_PROG_LOC_DATE_CACHE="pmfmStrategiesByProgramLocationDate"</code> */
46 String PMFM_STRATEGIES_BY_PROG_LOC_DATE_CACHE = "pmfm_strategies_by_program_location_date";
47
48 /**
49 * <p>getStrategiesByProgramCode.</p>
50 *
51 * @param programCode a {@link java.lang.String} object.
52 * @return a {@link java.util.List} object.
53 */
54 List<StrategyDTO> getStrategiesByProgramCode(String programCode);
55
56 /**
57 * <p>getAppliedStrategiesByProgramCode.</p>
58 *
59 * @param programCode a {@link java.lang.String} object.
60 * @return a {@link java.util.List} object.
61 */
62 List<AppliedStrategyDTO> getAppliedStrategiesByProgramCode(String programCode);
63
64 /**
65 * <p>getAppliedStrategiesByStrategyId.</p>
66 *
67 * @param strategyId a {@link java.lang.Integer} object.
68 * @return a {@link java.util.List} object.
69 */
70 List<AppliedStrategyDTO> getAppliedStrategiesByStrategyId(Integer strategyId);
71
72 /**
73 * <p>getAppliedPeriodsByStrategyId.</p>
74 *
75 * @param strategyId a {@link java.lang.Integer} object.
76 * @return a {@link java.util.List} object.
77 */
78 List<AppliedStrategyDTO> getAppliedPeriodsByStrategyId(Integer strategyId);
79
80 /**
81 * <p>getAllAppliedPeriodsByProgramCode.</p>
82 *
83 * @param programCode a {@link java.lang.String} object.
84 * @return a {@link com.google.common.collect.Multimap} object.
85 */
86 Multimap<Integer, AppliedStrategyDTO> getAllAppliedPeriodsByProgramCode(String programCode);
87
88 /**
89 * <p>getPmfmsAppliedStrategy.</p>
90 *
91 * @param strategyId a {@link java.lang.Integer} object.
92 * @return a {@link java.util.List} object.
93 */
94 List<PmfmStrategyDTO> getPmfmsAppliedStrategy(Integer strategyId);
95
96 /**
97 * <p>getPmfmStrategiesByProgramCodeAndLocation.</p>
98 *
99 * @param programCode a {@link String} object.
100 * @param monitoringLocationId a {@link Integer} object.
101 * @param date a {@link Date} object.
102 * @return a {@link java.util.List} object.
103 */
104 @Cacheable(value = PMFM_STRATEGIES_BY_PROG_LOC_DATE_CACHE)
105 Set<PmfmStrategyDTO> getPmfmStrategiesByProgramCodeAndLocation(String programCode, Integer monitoringLocationId, LocalDate date);
106
107 /**
108 * Retrieve all PMFM strategies that are applied on given programs and date range
109 *
110 * @param programCodes program codes
111 * @param startDate
112 * @param endDate
113 * @return set of pmfm strategies
114 */
115 Set<PmfmStrategyDTO> getPmfmStrategiesByProgramCodesAndDates(Collection<String> programCodes, LocalDate startDate, LocalDate endDate);
116
117 /**
118 * Retrieve all strategies that are applied on the given program and monitoring location
119 *
120 * @param programCode (can be null)
121 * @param monitoringLocationId a int.
122 * @return a {@link java.util.List} object.
123 */
124 List<ProgStratDTO> getAppliedStrategiesByProgramCodeAndMonitoringLocationId(String programCode, int monitoringLocationId);
125
126 /**
127 * Get the unique analysis department for this applied strategy
128 *
129 * @param appliedStrategyId the applied strategy id
130 * @return the analysis department
131 */
132 DepartmentDTO getAnalysisDepartmentByAppliedStrategyId(int appliedStrategyId);
133
134 /**
135 * <p>saveStrategies.</p>
136 *
137 * @param program a {@link fr.ifremer.dali.dto.configuration.programStrategy.ProgramDTO} object.
138 */
139 @Caching(evict = {
140 @CacheEvict(value = DaliStrategyDao.PMFM_STRATEGIES_BY_PROG_LOC_DATE_CACHE, allEntries = true)
141 })
142 void saveStrategies(ProgramDTO program);
143
144 /**
145 * <p>removeByProgramCode.</p>
146 *
147 * @param programCode a {@link java.lang.String} object.
148 */
149 @Caching(evict = {
150 @CacheEvict(value = DaliStrategyDao.PMFM_STRATEGIES_BY_PROG_LOC_DATE_CACHE, allEntries = true)
151 })
152 void removeByProgramCode(String programCode);
153
154 /**
155 * <p>removeByStrategyIds.</p>
156 *
157 * @param strategyIds a {@link java.util.Collection} object.
158 */
159 @Caching(evict = {
160 @CacheEvict(value = DaliStrategyDao.PMFM_STRATEGIES_BY_PROG_LOC_DATE_CACHE, allEntries = true)
161 })
162 void removeByStrategyIds(Collection<Integer> strategyIds);
163
164 /**
165 * <p>deleteAppliedStrategies.</p>
166 *
167 * @param appliedStrategyIds a {@link java.util.Collection} object.
168 */
169 @Caching(evict = {
170 @CacheEvict(value = DaliStrategyDao.PMFM_STRATEGIES_BY_PROG_LOC_DATE_CACHE, allEntries = true)
171 })
172 void deleteAppliedStrategies(Collection<Integer> appliedStrategyIds);
173
174 /**
175 * <p>deleteAppliedStrategies.</p>
176 *
177 * @param programCode a {@link java.lang.String} object.
178 * @param monitoringLocationIds a {@link java.util.Collection} object.
179 */
180 void deleteAppliedStrategies(String programCode, Collection<Integer> monitoringLocationIds);
181
182 /**
183 * <p>saveStrategyByLocation.</p>
184 *
185 * @param strategy a {@link fr.ifremer.dali.dto.configuration.programStrategy.ProgStratDTO} object.
186 * @param locationId a int.
187 */
188 void saveStrategyByLocation(ProgStratDTO strategy, int locationId);
189 }