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