1 package fr.ifremer.quadrige2.synchro.service.client; 2 3 /*- 4 * #%L 5 * Quadrige2 Core :: Quadrige2 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.quadrige2.synchro.service.client.vo.SynchroClientExportResult; 27 import fr.ifremer.quadrige2.synchro.service.client.vo.SynchroClientExportToFileResult; 28 import fr.ifremer.quadrige2.synchro.service.client.vo.SynchroClientImportFromFileResult; 29 import fr.ifremer.quadrige2.synchro.service.client.vo.SynchroClientImportResult; 30 import fr.ifremer.quadrige2.synchro.vo.SynchroChangesVO; 31 import fr.ifremer.quadrige2.synchro.vo.SynchroDateOperatorVO; 32 import fr.ifremer.quadrige2.synchro.vo.SynchroImportContextVO; 33 import org.nuiton.jaxx.application.type.ApplicationProgressionModel; 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.quadrige2.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 ApplicationProgressionModel progressionModel, 77 int progressionModelMaxCount); 78 79 /** 80 * Imports referential/data from server to local database. 81 * <p/> 82 * WARNING : Direct connection to Quadrige2 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 ApplicationProgressionModel 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 progressionModel 126 * a not null progression model 127 * @param progressionModelMaxCount 128 * the maximum increment that should be used from the importation 129 * @return export result object 130 * @param programCodes 131 * a {@link java.util.Set} object. 132 */ 133 SynchroClientExportResult exportDataToTempDb(int userId, Set<String> programCodes, ApplicationProgressionModel progressionModel, 134 int progressionModelMaxCount); 135 136 /** 137 * Creates a temporary database in the user export directory, exports national referential (prog/strat) to temp DB 138 * and returns a result 139 * object 140 * 141 * @param userId 142 * the user to synchronize 143 * @param progressionModel 144 * a not null progression model 145 * @param progressionModelMaxCount 146 * the maximum increment that should be used from the importation 147 * @return export result object 148 * @param programCodes 149 * a {@link java.util.Set} object. 150 */ 151 SynchroClientExportResult exportNationalProgramsToTempDb(int userId, 152 Set<String> programCodes, 153 ApplicationProgressionModel progressionModel, 154 int progressionModelMaxCount); 155 156 /** 157 * Creates a temporary database, exports local data to temp DB, then export from temp to Quadrige2, and returns an 158 * encapsulating result object 159 * 160 * @param userId 161 * the user to synchronize 162 * @param dataRejectResolver 163 * resolver that gives the strategy to resolve rejected rows 164 * @param progressionModel 165 * a not null progression model 166 * @param progressionModelMaxCount 167 * the maximum increment that should be used from the importation 168 * @param programCodes 169 * a {@link java.util.Set} object. 170 * @return a {@link fr.ifremer.quadrige2.synchro.service.client.vo.SynchroClientExportResult} object. 171 */ 172 SynchroClientExportResult exportToServerDatabase(int userId, Set<String> programCodes, SynchroRejectedRowResolver dataRejectResolver, 173 ApplicationProgressionModel progressionModel, 174 int progressionModelMaxCount); 175 176 /** 177 * Finishes export: display rejects, deals with rejected rows re-import reverted Pks 178 * 179 * @param userId 180 * the user whose export synchronization must be finalized 181 * @param exportResult 182 * export result (coming from a direct synchroniation or a direct one) 183 * @param rejectResolver 184 * resolver that gives the strategy to resolve rejected rows 185 * @param synchroFailed 186 * if true, this method will do nothing more than displaying reject error messages (if any rejects) using 187 * the reject resolver 188 * @param runPkRevert 189 * if true, at the end of the method Pks to be reverted will be re-imported 190 * @return true if one (or more) reject messages have been displayed. if <code>true</code>, the caller method do not 191 * need to display a error again. 192 */ 193 boolean finishExportData(int userId, SynchroClientExportResult exportResult, 194 SynchroRejectedRowResolver rejectResolver, boolean synchroFailed, boolean runPkRevert); 195 196 /** 197 * Export data into a file, and returns an encapsulating result object 198 * 199 * @param userId 200 * the user to synchronize 201 * @param file 202 * Path to the file to create (should not exists). 203 * @param programCodes 204 * programs to export that gives the strategy to resolve rejected rows 205 * @param dirtyOnly 206 * a boolean. 207 * @param dateOperator 208 * a {@link fr.ifremer.quadrige2.synchro.vo.SynchroDateOperatorVO} object. 209 * @param startDate 210 * a {@link java.util.Date} object. 211 * @param endDate 212 * a {@link java.util.Date} object. 213 * @param progressionModel 214 * a not null progression model 215 * @param progressionModelMaxCount 216 * the maximum increment that should be used from the importation @return 217 * @return a {@link fr.ifremer.quadrige2.synchro.service.client.vo.SynchroClientExportToFileResult} object. 218 */ 219 SynchroClientExportToFileResult exportToFile(int userId, File file, Set<String> programCodes, boolean dirtyOnly, 220 SynchroDateOperatorVO dateOperator, Date startDate, Date endDate, 221 ApplicationProgressionModel progressionModel, int progressionModelMaxCount); 222 223 /** 224 * Export local referential into a file, and returns an encapsulating result object 225 * 226 * @param userId 227 * the user to synchronize 228 * @param file 229 * Path to the file to create (should not exists). 230 * @param programCodes 231 * programs to export that gives the strategy to resolve rejected rows 232 * @param progressionModel 233 * a not null progression model 234 * @param progressionModelMaxCount 235 * the maximum increment that should be used from the importation 236 * @return a {@link fr.ifremer.quadrige2.synchro.service.client.vo.SynchroClientExportToFileResult} object. 237 */ 238 SynchroClientExportToFileResult exportReferentialToFile(int userId, 239 File file, 240 Set<String> programCodes, 241 ApplicationProgressionModel progressionModel, 242 int progressionModelMaxCount); 243 244 /** 245 * Export all referential (local and national) into a file, and returns an encapsulating result object 246 * 247 * @param userId 248 * the user to synchronize 249 * @param file 250 * Path to the file to create (should not exists). 251 * @param progressionModel 252 * a not null progression model 253 * @param progressionModelMaxCount 254 * the maximum increment that should be used from the importation 255 * @return a {@link fr.ifremer.quadrige2.synchro.service.client.vo.SynchroClientExportToFileResult} object. 256 */ 257 SynchroClientExportToFileResult exportAllReferentialToFile(int userId, 258 File file, 259 ApplicationProgressionModel progressionModel, 260 int progressionModelMaxCount); 261 262 /** 263 * Imports referential/data from a DB file. Will use a basic referential resolver, that remap all 264 * duplicated entries. 265 * 266 * @param userId 267 * the connected user 268 * @param file 269 * the DB file to import 270 * @param dataRejectResolver 271 * resolver that gives the strategy to resolve rejected rows, on data 272 * @param progressionModel 273 * a not null progression model 274 * @param progressionModelMaxCount 275 * the maximum increment that should be used from the importation 276 * @return the result of the importation 277 * @param importContext 278 * a {@link fr.ifremer.quadrige2.synchro.vo.SynchroImportContextVO} object. 279 */ 280 SynchroClientImportFromFileResult importFromFile( 281 int userId, 282 File file, 283 SynchroImportContextVO importContext, 284 SynchroRejectedRowResolver dataRejectResolver, 285 ApplicationProgressionModel progressionModel, 286 int progressionModelMaxCount); 287 288 /** 289 * Compute change log (for insert and update changes only) from a file to import 290 * 291 * @param userId 292 * a int. 293 * @param dbZipFile 294 * a {@link java.io.File} object. 295 * @param importContext 296 * a {@link fr.ifremer.quadrige2.synchro.vo.SynchroImportContextVO} object. 297 * @param progressionModel 298 * @param progressionModelMaxCount 299 * a int. 300 * @return all insert and update changes from a file 301 */ 302 @Transactional(propagation = Propagation.NEVER) 303 SynchroChangesVO getImportFileInsertAndUpdateChanges( 304 int userId, 305 File dbZipFile, 306 SynchroImportContextVO importContext, 307 ApplicationProgressionModel progressionModel, 308 int progressionModelMaxCount); 309 310 /** 311 * Compute change log (for delete changes only on referential) from a file to import 312 * 313 * @param userId 314 * a int. 315 * @param dbZipFile 316 * a {@link java.io.File} object. 317 * @param importContext 318 * a {@link fr.ifremer.quadrige2.synchro.vo.SynchroImportContextVO} object. 319 * @param progressionModel 320 * @param progressionModelMaxCount 321 * a int. 322 * @return all delete changes from a file 323 */ 324 @Transactional(propagation = Propagation.NEVER) 325 SynchroChangesVO getImportFileReferentialDeleteChanges( 326 int userId, 327 File dbZipFile, 328 SynchroImportContextVO importContext, 329 ApplicationProgressionModel progressionModel, 330 int progressionModelMaxCount); 331 332 }