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