@@ -49,6 +49,9 @@ public class KbartListener {
49
49
@ Value ("${sudoc.signalDb}" )
50
50
private String signalDb ;
51
51
52
+ @ Value ("${sudoc.nbNoticesParLot}" )
53
+ private int nbNoticesParLot ;
54
+
52
55
private final UtilsMapper mapper ;
53
56
54
57
@@ -288,6 +291,15 @@ public void listenKbartToDeleteFromKafka(ConsumerRecord<String, GenericRecord> p
288
291
}
289
292
}
290
293
294
+ /**
295
+ * Méthode permettant de délier les notices liées à une notice bouquet, cette méthode ne traite qu'un lot de 1000 notices maximum
296
+ * @param service méthodes permettant d'accéder au cbs
297
+ * @param provider provider
298
+ * @param packageName nom du package supprimé
299
+ * @param listError liste des erreurs éventuelles
300
+ * @throws CBSException erreur de validation du cbs
301
+ * @throws CommException erreur de communication avec le cbs
302
+ */
291
303
@ Retryable (maxAttempts = 4 , retryFor = CommException .class , noRetryFor = {CBSException .class }, backoff = @ Backoff (delay = 1000 , multiplier = 2 ))
292
304
private void traiterNoticesADelier (SudocService service , String provider , String packageName , List <String > listError ) throws CBSException , CommException {
293
305
try {
@@ -297,9 +309,18 @@ private void traiterNoticesADelier(SudocService service, String provider, String
297
309
//boucle sur les notices liées à partir de la seconde (la première étant la notice bouquet elle-même)
298
310
int nbNoticesLiees = service .getNoticesLiees ();
299
311
log .debug ("nombre de notices liées : " + nbNoticesLiees );
300
- for (int i = 2 ; i <= nbNoticesLiees ; i ++) {
312
+ int nbNoticesADelier = (nbNoticesLiees < this .nbNoticesParLot ) ? nbNoticesLiees : this .nbNoticesParLot ;
313
+ for (int i = 2 ; i <= nbNoticesADelier ; i ++) {
301
314
suppressionLien469 (service , listError , i , ppnNoticeBouquet );
302
315
}
316
+ //condition de sortie de la boucle récursive : il reste moins de notices à délier que le nombre plancher
317
+ if (nbNoticesLiees > this .nbNoticesParLot ) {
318
+ log .debug ("lot traité, déco / reco du cbs pour traitement lot suivant" );
319
+ service .disconnect ();
320
+ service .authenticate (serveurSudoc , portSudoc , loginSudoc , passwordSudoc );
321
+ //l'intégralité du lot n'a pas été traité, on rappelle la méthode en récursif pour traiter le lot suivant
322
+ traiterNoticesADelier (service , provider , packageName , listError );
323
+ }
303
324
} catch (CommException | IOException ex ) {
304
325
service .decoRecoCbs (serveurSudoc , portSudoc , loginSudoc , passwordSudoc , ex );
305
326
}
0 commit comments