View Javadoc
1   package fr.ifremer.quadrige3.synchro.service.client;
2   
3   /*-
4    * #%L
5    * Quadrige3 Core :: Quadrige3 Client Core
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2017 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 fr.ifremer.common.synchro.service.SynchroResult;
27  import fr.ifremer.quadrige3.core.ProgressionCoreModel;
28  import fr.ifremer.quadrige3.core.exception.BadUpdateDtException;
29  import fr.ifremer.quadrige3.core.exception.DataLockedException;
30  import fr.ifremer.quadrige3.core.exception.QuadrigeBusinessException;
31  import fr.ifremer.quadrige3.core.exception.QuadrigeTechnicalException;
32  import fr.ifremer.quadrige3.core.security.AuthenticationInfo;
33  import fr.ifremer.quadrige3.core.vo.administration.program.ProgramVO;
34  import fr.ifremer.quadrige3.core.vo.administration.user.QuserVO;
35  import fr.ifremer.quadrige3.core.vo.data.survey.CampaignVO;
36  import fr.ifremer.quadrige3.core.vo.system.generalCondition.GeneralConditionVO;
37  import fr.ifremer.quadrige3.core.vo.system.rule.RuleListVO;
38  import fr.ifremer.quadrige3.synchro.vo.SynchroExportContextVO;
39  import fr.ifremer.quadrige3.synchro.vo.SynchroImportContextVO;
40  import fr.ifremer.quadrige3.synchro.vo.SynchroProgressionVO;
41  import org.springframework.transaction.annotation.Propagation;
42  import org.springframework.transaction.annotation.Transactional;
43  
44  import java.io.File;
45  import java.util.Collection;
46  import java.util.Date;
47  import java.util.List;
48  import java.util.Set;
49  
50  /**
51   * <p>
52   * SynchroRestClientService interface.
53   * </p>
54   */
55  @Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
56  public interface SynchroRestClientService {
57  
58      /**
59       * Return data on the authenticated person
60       *
61       * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
62       * @return could be null if network error
63       * @throws QuadrigeTechnicalException if network problem
64       */
65      QuserVO getUser(AuthenticationInfo authenticationInfo) throws QuadrigeTechnicalException;
66  
67      /**
68       * Return user's programs (programs with read access rights)
69       *
70       * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
71       * @return could be null if network error
72       * @throws QuadrigeTechnicalException if network problem
73       */
74      List<ProgramVO> getReadableProgramsForUser(AuthenticationInfo authenticationInfo) throws QuadrigeTechnicalException;
75  
76      /**
77       * Return user's programs (programs with read/write access rights)
78       *
79       * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
80       * @return could be null if network error
81       * @throws QuadrigeTechnicalException if network problem
82       */
83      List<ProgramVO> getWritableProgramsForUser(AuthenticationInfo authenticationInfo) throws QuadrigeTechnicalException;
84  
85      /**
86       * Return the list of programs configured by the synchro server
87       *
88       * @param authenticationInfo the authentication info
89       * @return the compatible program codes
90       * @throws QuadrigeTechnicalException if network problem
91       */
92      Set<String> getCompatibleProgramCodes(AuthenticationInfo authenticationInfo) throws QuadrigeTechnicalException;
93  
94      /**
95       * Return a remote programs
96       *
97       * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
98       * @param progCd             program code
99       * @return could be null if network error
100      * @throws QuadrigeTechnicalException if network problem
101      */
102     ProgramVO getProgramByCode(AuthenticationInfo authenticationInfo, String progCd) throws QuadrigeTechnicalException;
103 
104     /**
105      * Check is there is updates on referential data
106      *
107      * @param authenticationInfo User authentication data
108      * @param importContextVO    the context to check
109      * @return a new context with updated attributes (<code>withReferential</code> and <code>withData</code>)
110      * @throws QuadrigeTechnicalException if network problem
111      */
112     SynchroImportContextVO checkImportContext(AuthenticationInfo authenticationInfo, SynchroImportContextVO importContextVO)
113             throws QuadrigeTechnicalException;
114 
115     /**
116      * Check is there is updates on data
117      *
118      * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
119      * @param importContextVO    a {@link fr.ifremer.quadrige3.synchro.vo.SynchroImportContextVO} object.
120      * @return a new context with updated attributes <code>withData</code>
121      * @throws QuadrigeTechnicalException if any.
122      */
123     SynchroImportContextVO checkImportDataContext(AuthenticationInfo authenticationInfo,
124                                                   SynchroImportContextVO importContextVO) throws QuadrigeTechnicalException;
125 
126     /**
127      * Check that the given version is compatible with the synchronization server version. If not, throw a
128      * QuadrigeBusinessException
129      *
130      * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
131      * @throws QuadrigeBusinessException  if version is not compatible
132      * @throws QuadrigeTechnicalException if network problem
133      */
134     void checkVersion(AuthenticationInfo authenticationInfo) throws QuadrigeTechnicalException, QuadrigeBusinessException;
135 
136     /**
137      * Send an acknowledge to the remote server (e.g. to delete temporary files, ...)
138      *
139      * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
140      * @param importContextVO    a {@link fr.ifremer.quadrige3.synchro.vo.SynchroImportContextVO} object.
141      * @throws QuadrigeTechnicalException if any.
142      */
143     void acknowledgeImport(AuthenticationInfo authenticationInfo, SynchroImportContextVO importContextVO) throws QuadrigeTechnicalException;
144 
145     /**
146      * Send a file to server
147      *
148      * @param authenticationInfo a {@link AuthenticationInfo} object.
149      * @param fileToUpload       a {@link File} object.
150      * @param progressionModel   a {@link ProgressionCoreModel} object.
151      * @throws QuadrigeTechnicalException if any.
152      */
153     void uploadExportFile(AuthenticationInfo authenticationInfo, File fileToUpload, ProgressionCoreModel progressionModel)
154             throws QuadrigeTechnicalException;
155 
156     /**
157      * Start a new importation on the server
158      *
159      * @param authenticationInfo a {@link AuthenticationInfo} object.
160      * @param importContextVO    a {@link SynchroImportContextVO} object.
161      * @param progressionModel   a {@link ProgressionCoreModel} object.
162      * @return a {@link fr.ifremer.quadrige3.synchro.vo.SynchroProgressionVO} object.
163      */
164     SynchroProgressionVO startImport(AuthenticationInfo authenticationInfo,
165                                      SynchroImportContextVO importContextVO,
166                                      ProgressionCoreModel progressionModel);
167 
168     /**
169      * Stop a importation running on server
170      *
171      * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
172      * @param importJobId        a {@link java.lang.String} object.
173      */
174     void stopImport(AuthenticationInfo authenticationInfo, String importJobId);
175 
176     /**
177      * <p>
178      * start export on server, then wait the end.
179      * </p>
180      *
181      * @param authenticationInfo a {@link AuthenticationInfo} object.
182      * @param exportContextVO    a {@link SynchroExportContextVO} object.
183      * @param progressionModel   a {@link ProgressionCoreModel} object.
184      * @return a {@link fr.ifremer.quadrige3.synchro.vo.SynchroProgressionVO} object.
185      */
186     SynchroProgressionVO startExport(AuthenticationInfo authenticationInfo,
187                                      SynchroExportContextVO exportContextVO,
188                                      ProgressionCoreModel progressionModel)
189     ;
190 
191     /**
192      * <p>
193      * Wait end of a started export on server.
194      * </p>
195      *
196      * @param authenticationInfo a {@link AuthenticationInfo} object.
197      * @param exportJobId        the job id
198      * @param progressionModel   a {@link ProgressionCoreModel} object.
199      * @return a {@link fr.ifremer.quadrige3.synchro.vo.SynchroProgressionVO} object.
200      */
201     SynchroProgressionVO getExportLastStatus(AuthenticationInfo authenticationInfo,
202                                              String exportJobId,
203                                              ProgressionCoreModel progressionModel) throws Exception;
204 
205     /**
206      * <p>
207      * downloadExportResult.
208      * </p>
209      *
210      * @param authenticationInfo a {@link AuthenticationInfo} object.
211      * @param context            a {@link SynchroExportContextVO} object.
212      * @param progressionModel   a {@link ProgressionCoreModel} object.
213      * @return a {@link fr.ifremer.common.synchro.service.SynchroResult} object.
214      * @throws java.lang.Exception if any.
215      */
216     SynchroResult downloadExportResult(AuthenticationInfo authenticationInfo,
217                                        SynchroExportContextVO context,
218                                        ProgressionCoreModel progressionModel) throws Exception;
219 
220     /**
221      * Download photo
222      *
223      * @param authenticationInfo authentication info
224      * @param photoRemoteId the photo remote id
225      * @param targetFile the target file
226      * @param progressionModel progression model
227      * @return true if successfully downloaded
228      * @throws Exception if any
229      */
230     boolean downloadPhoto(AuthenticationInfo authenticationInfo,
231                           int photoRemoteId,
232                           String targetFile,
233                           ProgressionCoreModel progressionModel) throws Exception;
234 
235     /**
236      * Stop a exportation running on server
237      *
238      * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
239      * @param exportJobId        a {@link java.lang.String} object.
240      * @throws java.lang.Exception if any.
241      */
242     void stopExport(AuthenticationInfo authenticationInfo, String exportJobId);
243 
244     /**
245      * <p>
246      * acknowledgeExport.
247      * </p>
248      *
249      * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
250      * @param context            a {@link fr.ifremer.quadrige3.synchro.vo.SynchroExportContextVO} object.
251      */
252     void acknowledgeExport(AuthenticationInfo authenticationInfo, SynchroExportContextVO context);
253 
254     /**
255      * Save programs remotely
256      *
257      * @param programs           a {@link java.util.List} object.
258      * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
259      * @return a {@link java.util.List} object.
260      */
261     @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
262     List<ProgramVO> savePrograms(AuthenticationInfo authenticationInfo, List<ProgramVO> programs);
263 
264     /**
265      * Clean referential updateDt cache, on remote server.
266      * This is useful to force importation without waiting cache time duration
267      *
268      * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
269      */
270     void clearReferentialUpdateDateCache(AuthenticationInfo authenticationInfo);
271 
272     Date getReferentialUpdateDate(AuthenticationInfo authenticationInfo);
273 
274     /**
275      * Save campaign remotely
276      *
277      * @param campaigns          a {@link java.util.List} object.
278      * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
279      * @return a {@link java.util.List} object.
280      * @throws BadUpdateDtException                                    if any.
281      * @throws fr.ifremer.quadrige3.core.exception.DataLockedException if any.
282      */
283     @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
284     List<CampaignVO> saveCampaigns(AuthenticationInfo authenticationInfo, Collection<CampaignVO> campaigns);
285 
286     /**
287      * Delete campaign remotely
288      *
289      * @param campaignIds        a {@link java.util.List} object.
290      * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
291      * @throws DataLockedException if any.
292      */
293     @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
294     void deleteCampaigns(AuthenticationInfo authenticationInfo, Collection<Integer> campaignIds);
295 
296     /**
297      * Save rule lists remotely
298      *
299      * @param ruleLists          a {@link java.util.List} object.
300      * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
301      * @return a {@link java.util.List} object.
302      * @throws BadUpdateDtException if any.
303      * @throws DataLockedException  if any.
304      */
305     @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
306     List<RuleListVO> saveRuleLists(AuthenticationInfo authenticationInfo, Collection<RuleListVO> ruleLists);
307 
308     /**
309      * Delete rule lists remotely
310      *
311      * @param ruleListCds        a {@link java.util.List} object.
312      * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
313      * @throws DataLockedException if any.
314      */
315     @Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
316     void deleteRuleLists(AuthenticationInfo authenticationInfo, Collection<String> ruleListCds);
317 
318     /**
319      * Get the rule list by its code
320      *
321      * @param authenticationInfo a {@link fr.ifremer.quadrige3.core.security.AuthenticationInfo} object.
322      * @param ruleListCode       the rule list code
323      * @return the existing rule list
324      */
325     RuleListVO getRuleListByCode(AuthenticationInfo authenticationInfo, String ruleListCode);
326 
327     GeneralConditionVO getLastNonAcceptedGeneralCondition(AuthenticationInfo authenticationInfo);
328 
329     void acceptGeneralCondition(AuthenticationInfo authenticationInfo, int id);
330 }