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.quadrige3.core.ProgressionCoreModel;
27  import fr.ifremer.quadrige3.synchro.service.client.vo.SynchroClientExportResult;
28  import fr.ifremer.quadrige3.synchro.service.client.vo.SynchroClientExportToFileResult;
29  import fr.ifremer.quadrige3.synchro.service.client.vo.SynchroClientImportFromFileResult;
30  import fr.ifremer.quadrige3.synchro.service.client.vo.SynchroClientImportResult;
31  import fr.ifremer.quadrige3.synchro.vo.SynchroChangesVO;
32  import fr.ifremer.quadrige3.synchro.vo.SynchroDateOperatorVO;
33  import fr.ifremer.quadrige3.synchro.vo.SynchroImportContextVO;
34  import org.springframework.transaction.annotation.Propagation;
35  import org.springframework.transaction.annotation.Transactional;
36  
37  import java.io.File;
38  import java.util.Date;
39  import java.util.Set;
40  
41  /**
42   * <p>
43   * SynchroClientService interface.
44   * </p>
45   * 
46   */
47  @Transactional(propagation = Propagation.REQUIRED)
48  public interface SynchroClientService {
49  
50  	/**
51  	 * Run the importation, from a temporary DB to the local DB.
52  	 * 
53  	 * The transaction is not created here. The method will execute
54  	 * SynchroClientInternalService.importFromTempDbTransactional
55  	 * see Mantis #29900
56  	 * 
57  	 * @param userId
58  	 *            the connected user
59  	 * @param dbDirToImport
60  	 *            the temporary DB directory
61  	 * @param importContext
62  	 *            import context
63  	 * @param dataRejectResolver
64  	 *            resolver that gives the strategy to resolve rejected rows
65  	 * @param progressionModel
66  	 *            a not null progression model
67  	 * @param progressionModelMaxCount
68  	 *            the maximum increment that should be used from the importation
69  	 * @return a {@link fr.ifremer.quadrige3.synchro.service.client.vo.SynchroClientImportResult} object.
70  	 */
71  	@Transactional(propagation = Propagation.NEVER)
72  	SynchroClientImportResult importFromTempDb(int userId,
73  											   File dbDirToImport,
74  											   SynchroImportContextVO importContext,
75  											   SynchroRejectedRowResolver dataRejectResolver,
76  											   ProgressionCoreModel progressionModel,
77  											   int progressionModelMaxCount);
78  
79  	/**
80  	 * Imports referential/data from server to local database.
81  	 * <p/>
82  	 * WARNING : Direct connection to Quadrige3 database (synchronization server will not be used).
83  	 * 
84  	 * The transaction is not created here. The method will execute
85  	 * SynchroClientInternalService.importFromServerDatabaseTransactional see Mantis #29900
86  	 * 
87  	 * @param userId
88  	 *            the user to synchronize
89  	 * @param importContext
90  	 *            import context
91  	 * @param dataRejectResolver
92  	 *            resolver that gives the strategy to resolve rejected rows
93  	 * @param progressionModel
94  	 *            a not null progression model
95  	 * @param progressionModelMaxCount
96  	 *            the maximum increment that should be used from the importation
97  	 * @return the result of the importation
98  	 */
99  	@Transactional(propagation = Propagation.NEVER)
100 	SynchroClientImportResult importFromServerDatabase(
101 			int userId,
102 			SynchroImportContextVO importContext,
103 			SynchroRejectedRowResolver dataRejectResolver,
104 			ProgressionCoreModel progressionModel,
105 			int progressionModelMaxCount);
106 
107 	/**
108 	 * Clean unused data and files :
109 	 * <ul>
110 	 * <li>data synchronized AND outside user access rights, and )</li>
111 	 * <li>files from user not connected since [today - N years>]</li>
112 	 * </ul>
113 	 * 
114 	 * @param userId
115 	 *            The connected user id
116 	 */
117 	void cleanUpUnusedData(int userId);
118 
119 	/**
120 	 * Creates a temporary database in the user export directory, exports local data to temp DB and returns a result
121 	 * object
122 	 * 
123 	 * @param userId
124 	 *            the user to synchronize
125 	 * @param programCodes
126 	 *            a {@link Set} object.
127 	 * @param enablePhotos
128 	 * @param progressionModel
129 	 *            a not null progression model
130 	 * @param progressionModelMaxCount
131 	 *            the maximum increment that should be used from the importation
132 	 * @return export result object
133 	 */
134 	SynchroClientExportResult exportDataToTempDb(int userId, Set<String> programCodes, boolean enablePhotos, ProgressionCoreModel progressionModel,
135 												 int progressionModelMaxCount);
136 
137 	/**
138 	 * Creates a temporary database in the user export directory, exports national referential (prog/strat) to temp DB
139 	 * and returns a result
140 	 * object
141 	 * 
142 	 * @param userId
143 	 *            the user to synchronize
144 	 * @param programCodes
145 	 *            a {@link Set} object.
146 	 * @param progressionModel
147  *            a not null progression model
148  * @param progressionModelMaxCount
149  *            the maximum increment that should be used from the importation
150  * @return export result object
151 	 */
152 	SynchroClientExportResult exportNationalProgramsToTempDb(int userId,
153 															 Set<String> programCodes,
154 															 ProgressionCoreModel progressionModel,
155 															 int progressionModelMaxCount);
156 
157 	/**
158 	 * Creates a temporary database, exports local data to temp DB, then export from temp to Quadrige, and returns an
159 	 * encapsulating result object
160 	 * 
161 	 * @param userId
162 	 *            the user to synchronize
163 	 * @param programCodes
164 	 *            a {@link Set} object.
165 	 * @param dataRejectResolver
166 	 *            resolver that gives the strategy to resolve rejected rows
167 	 * @param progressionModel
168 	 *            a not null progression model
169 	 * @param progressionModelMaxCount
170 	 *            the maximum increment that should be used from the importation
171 	 * @return a {@link fr.ifremer.quadrige3.synchro.service.client.vo.SynchroClientExportResult} object.
172 	 */
173 	SynchroClientExportResult exportToServerDatabase(int userId, Set<String> programCodes, SynchroRejectedRowResolver dataRejectResolver,
174 													 ProgressionCoreModel progressionModel,
175 													 int progressionModelMaxCount);
176 
177 	/**
178 	 * Finishes export: display rejects, deals with rejected rows re-import reverted Pks
179 	 * 
180 	 * @param userId
181 	 *            the user whose export synchronization must be finalized
182 	 * @param exportResult
183 	 *            export result (coming from a direct synchroniation or a direct one)
184 	 * @param rejectResolver
185 	 *            resolver that gives the strategy to resolve rejected rows
186 	 * @param synchroFailed
187 	 *            if true, this method will do nothing more than displaying reject error messages (if any rejects) using
188 	 *            the reject resolver
189 	 * @param runPkRevert
190 	 *            if true, at the end of the method Pks to be reverted will be re-imported
191 	 * @return true if one (or more) reject messages have been displayed. if <code>true</code>, the caller method do not
192 	 *         need to display a error again.
193 	 */
194 	boolean finishExportData(int userId, SynchroClientExportResult exportResult,
195 			SynchroRejectedRowResolver rejectResolver, boolean synchroFailed, boolean runPkRevert);
196 
197 	/**
198 	 * Export data into a file, and returns an encapsulating result object
199 	 * 
200 	 * @param userId
201 	 *            the user to synchronize
202 	 * @param file
203 	 *            Path to the file to create (should not exists).
204 	 * @param programCodes
205 	 *            programs to export that gives the strategy to resolve rejected rows
206 	 * @param dirtyOnly
207 	 *            a boolean.
208 	 * @param dateOperator
209 	 *            a {@link SynchroDateOperatorVO} object.
210 	 * @param startDate
211 	 *            a {@link Date} object.
212 	 * @param endDate
213 	 *            a {@link Date} object.
214 	 * @param progressionModel
215 	 *            a not null progression model
216 	 * @param progressionModelMaxCount
217 	 *            the maximum increment that should be used from the importation @return
218 	 * @return a {@link fr.ifremer.quadrige3.synchro.service.client.vo.SynchroClientExportToFileResult} object.
219 	 */
220 	SynchroClientExportToFileResult exportToFile(int userId, File file, Set<String> programCodes, boolean dirtyOnly,
221 												 SynchroDateOperatorVO dateOperator, Date startDate, Date endDate,
222 												 ProgressionCoreModel progressionModel, int progressionModelMaxCount);
223 
224 	/**
225 	 * Export data into a file, and returns an encapsulating result object
226 	 *
227 	 * @param userId
228 	 *            the user to synchronize
229 	 * @param file
230 	 *            Path to the file to create (should not exists).
231 	 * @param programCodes
232 	 *            programs to export that gives the strategy to resolve rejected rows
233 	 * @param dirtyOnly
234 	 *            a boolean.
235 	 * @param includeReferential
236 	 *            a boolean.
237 	 * @param dateOperator
238 	 *            a {@link SynchroDateOperatorVO} object.
239 	 * @param startDate
240 	 *            a {@link Date} object.
241 	 * @param endDate
242 	 *            a {@link Date} object.
243 	 * @param progressionModel
244 	 *            a not null progression model
245 	 * @param progressionModelMaxCount
246 	 *            the maximum increment that should be used from the importation @return
247 	 * @return a {@link fr.ifremer.quadrige3.synchro.service.client.vo.SynchroClientExportToFileResult} object.
248 	 */
249 	SynchroClientExportToFileResult exportToFile(int userId, File file, Set<String> programCodes, boolean dirtyOnly, boolean includeReferential,
250 												 SynchroDateOperatorVO dateOperator, Date startDate, Date endDate,
251 												 ProgressionCoreModel progressionModel, int progressionModelMaxCount);
252 
253 	/**
254 	 * Export local referential into a file, and returns an encapsulating result object
255 	 * 
256 	 * @param userId
257 	 *            the user to synchronize
258 	 * @param file
259 	 *            Path to the file to create (should not exists).
260 	 * @param programCodes
261 	 *            programs to export that gives the strategy to resolve rejected rows
262 	 * @param progressionModel
263 	 *            a not null progression model
264 	 * @param progressionModelMaxCount
265 	 *            the maximum increment that should be used from the importation
266 	 * @return a {@link fr.ifremer.quadrige3.synchro.service.client.vo.SynchroClientExportToFileResult} object.
267 	 */
268 	@Deprecated
269 	SynchroClientExportToFileResult exportReferentialToFile(int userId,
270 															File file,
271 															Set<String> programCodes,
272 															ProgressionCoreModel progressionModel,
273 															int progressionModelMaxCount);
274 
275 	/**
276 	 * Export all referential (local and national) into a file, and returns an encapsulating result object
277 	 * 
278 	 * @param userId
279 	 *            the user to synchronize
280 	 * @param file
281 	 *            Path to the file to create (should not exists).
282 	 * @param progressionModel
283 	 *            a not null progression model
284 	 * @param progressionModelMaxCount
285 	 *            the maximum increment that should be used from the importation
286 	 * @return a {@link fr.ifremer.quadrige3.synchro.service.client.vo.SynchroClientExportToFileResult} object.
287 	 */
288 	SynchroClientExportToFileResult exportAllReferentialToFile(int userId,
289 															   File file,
290 															   ProgressionCoreModel progressionModel,
291 															   int progressionModelMaxCount);
292 
293 	/**
294 	 * Imports referential/data from a DB file. Will use a basic referential resolver, that remap all
295 	 * duplicated entries.
296 	 * 
297 	 * @param userId
298 	 *            the connected user
299 	 * @param file
300 	 *            the DB file to import
301 	 * @param importContext
302 	 *            a {@link SynchroImportContextVO} object.
303 	 * @param dataRejectResolver
304  *            resolver that gives the strategy to resolve rejected rows, on data
305  * @param progressionModel
306  *            a not null progression model
307  * @param progressionModelMaxCount
308  *            the maximum increment that should be used from the importation
309  * @return the result of the importation
310 	 */
311 	SynchroClientImportFromFileResult importFromFile(
312 			int userId,
313 			File file,
314 			SynchroImportContextVO importContext,
315 			SynchroRejectedRowResolver dataRejectResolver,
316 			ProgressionCoreModel progressionModel,
317 			int progressionModelMaxCount);
318 
319 	/**
320 	 * Compute change log (for insert and update changes only) from a file to import
321 	 * 
322 	 * @param userId
323 	 *            a int.
324 	 * @param dbZipFile
325 	 *            a {@link File} object.
326 	 * @param importContext
327 	 *            a {@link SynchroImportContextVO} object.
328 	 * @param progressionModel progression model
329 	 * @param progressionModelMaxCount
330 	 *            a int.
331 	 * @return all insert and update changes from a file
332 	 */
333 	@Transactional(propagation = Propagation.NEVER)
334 	SynchroChangesVO getImportFileInsertAndUpdateChanges(
335 			int userId,
336 			File dbZipFile,
337 			SynchroImportContextVO importContext,
338 			ProgressionCoreModel progressionModel,
339 			int progressionModelMaxCount);
340 
341 	/**
342 	 * Compute change log (for delete changes only on referential) from a file to import
343 	 * 
344 	 * @param userId
345 	 *            a int.
346 	 * @param dbZipFile
347 	 *            a {@link File} object.
348 	 * @param importContext
349 	 *            a {@link SynchroImportContextVO} object.
350 	 * @param progressionModel progression model
351 	 * @param progressionModelMaxCount
352 	 *            a int.
353 	 * @return all delete changes from a file
354 	 */
355 	@Transactional(propagation = Propagation.NEVER)
356 	SynchroChangesVO getImportFileReferentialDeleteChanges(
357 			int userId,
358 			File dbZipFile,
359 			SynchroImportContextVO importContext,
360 			ProgressionCoreModel progressionModel,
361 			int progressionModelMaxCount);
362 
363 }