View Javadoc
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 }