From 4a8acfe3cd684141200a72999ce5c6d1c46bed10 Mon Sep 17 00:00:00 2001 From: Jerome Villiseck Date: Tue, 6 Feb 2024 16:47:42 +0100 Subject: [PATCH 1/5] =?UTF-8?q?Suppression=20des=20accents=20dans=20le=20f?= =?UTF-8?q?ichier=20xml=20log4j=20provoquant=20l'arr=C3=AAt=20des=20logs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/main/resources/log4j2-dev.xml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/web/src/main/resources/log4j2-dev.xml b/web/src/main/resources/log4j2-dev.xml index 5b6327f2..3f8d7fe0 100644 --- a/web/src/main/resources/log4j2-dev.xml +++ b/web/src/main/resources/log4j2-dev.xml @@ -30,10 +30,10 @@ %5p %d{ISO8601} [%t][%x] %c - %m%n - + - Si la date du filePattern necessite un nouveau fichier --> @@ -42,7 +42,7 @@ + mais on garde les ${keepMostRecentFile} fichiers plus recent ou les ${keepMostRecentSize} plus recent--> @@ -63,10 +63,10 @@ %5p %d{ISO8601} [%t][%x] %c - %m%n - + - Si la date du filePattern necessite un nouveau fichier --> @@ -75,7 +75,7 @@ + mais on garde les ${keepMostRecentFile} fichier plus recent ou les ${keepMostRecentSize} plus recent--> @@ -96,10 +96,10 @@ %5p %d{ISO8601} [%t][%x] %c - %m%n - + - Si la date du filePattern necessite un nouveau fichier --> @@ -108,7 +108,7 @@ + mais on garde les ${keepMostRecentFile} fichiers plus recent ou les ${keepMostRecentSize} plus recent--> From 80e1244a80aa642233021cc14d59e1c491f5e46a Mon Sep 17 00:00:00 2001 From: Jerome Villiseck Date: Wed, 7 Feb 2024 09:43:48 +0100 Subject: [PATCH 2/5] Heure conteneur --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index aef0d6d8..1464d16d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -55,6 +55,7 @@ RUN dnf install langpacks-fr glibc-all-langpacks -y ENV LANG fr_FR.UTF-8 ENV LANGUAGE fr_FR:fr ENV LC_ALL fr_FR.UTF-8 +ENV TZ=Europe/Paris # systeme pour les crontab # cronie: remplacant de crond qui support le CTRL+C dans docker (sans ce système c'est compliqué de stopper le conteneur) @@ -66,8 +67,8 @@ COPY ./docker/batch/tasks.tmpl /etc/cron.d/tasks.tmpl RUN dnf install -y java-11-openjdk RUN dnf install -y tzdata && \ - ln -fs /usr/share/zoneinfo/Europe/Paris /etc/localtime && \ - echo "Europe/Paris" > /etc/timezone + ln -fs /usr/share/zoneinfo/$TZ /etc/localtime && \ + echo $TZ > /etc/timezone COPY ./docker/batch/itemBatchRestartJobs.sh /scripts/itemBatchRestartJobs.sh RUN chmod +x /scripts/itemBatchRestartJobs.sh From 3be4cd71e362b55b707cd2e5e2b68272f3ded838 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Feb 2024 00:20:25 +0000 Subject: [PATCH 3/5] Bump org.postgresql:postgresql from 42.5.1 to 42.7.2 in /core Bumps [org.postgresql:postgresql](https://github.com/pgjdbc/pgjdbc) from 42.5.1 to 42.7.2. - [Release notes](https://github.com/pgjdbc/pgjdbc/releases) - [Changelog](https://github.com/pgjdbc/pgjdbc/blob/master/CHANGELOG.md) - [Commits](https://github.com/pgjdbc/pgjdbc/commits) --- updated-dependencies: - dependency-name: org.postgresql:postgresql dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/pom.xml b/core/pom.xml index 2a8a203d..87e6997f 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -36,7 +36,7 @@ org.postgresql postgresql - 42.5.1 + 42.7.2 com.fasterxml.jackson.core From 4f05a7d74a23a33e74c48303807db54a6b304346 Mon Sep 17 00:00:00 2001 From: pierre-maraval Date: Thu, 21 Mar 2024 09:08:39 +0100 Subject: [PATCH 4/5] =?UTF-8?q?Refactor=20:=20Mise=20=C3=A0=20jour=20libra?= =?UTF-8?q?irie=20AccesCbs=20-=20Adaptation=20des=20constructions=20d'exem?= =?UTF-8?q?plaires=20-=20fix=20des=20TU=20en=20supprimant=20les=20STR=5F1F?= =?UTF-8?q?=20et=20STR=5F1E=20devenus=20inutiles=20D=C3=A9placement=20de?= =?UTF-8?q?=20m=C3=A9thodes=20de=20construction=20des=20exemplaires=20dans?= =?UTF-8?q?=20les=20m=C3=A9thodes=20sous=20retry=20prise=20en=20compte=20d?= =?UTF-8?q?e=20l'exception=20li=C3=A9e=20=C3=A0=20une=20erreur=20de=20comm?= =?UTF-8?q?unication=20avec=20le=20CBS,=20et=20mise=20en=20place=20d'un=20?= =?UTF-8?q?retry=20dans=20ce=20cas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/fr/abes/item/BatchConfiguration.java | 21 --- .../fr/abes/item/restart/JobExecutionDto.java | 13 -- .../restart/SelectJobsToRestartTasklet.java | 164 ---------------- .../abes/item/restart/StepExecutionDto.java | 17 -- .../traitement/GenererFichierTasklet.java | 3 +- .../fr/abes/item/traitement/ProxyRetry.java | 176 +++++++++++++++--- .../LignesFichierProcessor.java | 103 +++------- .../java/fr/abes/item/constant/Constant.java | 4 +- .../abes/item/entities/item/DemandeExemp.java | 4 +- .../item/entities/item/IndexRecherche.java | 2 +- .../fr/abes/item/entities/item/TypeExemp.java | 2 +- .../item/service/IDemandeExempService.java | 5 +- .../item/service/IDemandeModifService.java | 6 +- .../item/service/IDemandeRecouvService.java | 9 +- .../abes/item/service/ITraitementService.java | 18 +- .../item/service/factory/StrategyFactory.java | 2 +- .../service/impl/DemandeExempService.java | 12 +- .../service/impl/DemandeModifService.java | 23 +-- .../service/impl/DemandeRecouvService.java | 9 +- .../abes/item/service/impl/StatusService.java | 3 +- .../item/service/impl/TraitementService.java | 87 +++++---- .../fr/abes/item/utilitaire/Utilitaires.java | 4 +- .../item/service/TestDemandeExempService.java | 47 ++--- .../item/service/TestTraitementService.java | 103 ++++++---- .../abes/item/utilitaire/testUtilitaires.java | 9 +- pom.xml | 2 +- .../RestResponseEntityExceptionHandler.java | 3 +- .../fr/abes/item/web/IDemandeRestService.java | 3 +- .../item/web/impl/DemandeRestService.java | 20 +- 29 files changed, 381 insertions(+), 493 deletions(-) delete mode 100644 batch/src/main/java/fr/abes/item/restart/JobExecutionDto.java delete mode 100644 batch/src/main/java/fr/abes/item/restart/SelectJobsToRestartTasklet.java delete mode 100644 batch/src/main/java/fr/abes/item/restart/StepExecutionDto.java diff --git a/batch/src/main/java/fr/abes/item/BatchConfiguration.java b/batch/src/main/java/fr/abes/item/BatchConfiguration.java index 85d6dc54..f1c49d3f 100644 --- a/batch/src/main/java/fr/abes/item/BatchConfiguration.java +++ b/batch/src/main/java/fr/abes/item/BatchConfiguration.java @@ -1,10 +1,6 @@ package fr.abes.item; import fr.abes.item.constant.Constant; -import fr.abes.item.entities.item.DemandeExemp; -import fr.abes.item.entities.item.DemandeModif; -import fr.abes.item.entities.item.DemandeRecouv; -import fr.abes.item.restart.SelectJobsToRestartTasklet; import fr.abes.item.service.service.ServiceProvider; import fr.abes.item.traitement.*; import fr.abes.item.traitement.model.LigneFichierDtoExemp; @@ -118,13 +114,6 @@ public Job jobTraiterLigneFichierRecouv(ItemReader itemReader, ItemProcessor ite .build().build(); } - // Job de relance des Jobs en état Unknown - @Bean - public Job jobRelanceJobsUnknown() { - return jobs.get(Constant.SPRING_BATCH_JOB_RESTART_JOBS_UNKNOW).incrementer(incrementer()) - .start(stepSelectJobsToRestart()) - .build(); - } // Job d'export des statistiques mensuelles @Bean @@ -253,13 +242,6 @@ public Step stepExportStatistiques() { .build(); } - @Bean - public Step stepSelectJobsToRestart() { - return stepBuilderFactory - .get("stepSelectJobsToRestart").allowStartIfComplete(true) - .tasklet(selectJobsToRestartTasklet()) - .build(); - } //Steps d'archivage automatique des demandes @Bean @@ -352,9 +334,6 @@ public AuthentifierSurSudocTasklet authentifierSurSudocTasklet() @Bean public ExportStatistiquesTasklet exportStatistiquesTasklet() { return new ExportStatistiquesTasklet(); } - @Bean - public SelectJobsToRestartTasklet selectJobsToRestartTasklet() { return new SelectJobsToRestartTasklet(jdbcTemplate, service); } - //Archivage automatique des demandes @Bean diff --git a/batch/src/main/java/fr/abes/item/restart/JobExecutionDto.java b/batch/src/main/java/fr/abes/item/restart/JobExecutionDto.java deleted file mode 100644 index 325ccdcb..00000000 --- a/batch/src/main/java/fr/abes/item/restart/JobExecutionDto.java +++ /dev/null @@ -1,13 +0,0 @@ -package fr.abes.item.restart; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Getter -@Setter -@NoArgsConstructor -public class JobExecutionDto { - private Long jobExecutionId; - private String context; -} diff --git a/batch/src/main/java/fr/abes/item/restart/SelectJobsToRestartTasklet.java b/batch/src/main/java/fr/abes/item/restart/SelectJobsToRestartTasklet.java deleted file mode 100644 index 22053a41..00000000 --- a/batch/src/main/java/fr/abes/item/restart/SelectJobsToRestartTasklet.java +++ /dev/null @@ -1,164 +0,0 @@ -package fr.abes.item.restart; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import fr.abes.item.constant.Constant; -import fr.abes.item.constant.TYPE_DEMANDE; -import fr.abes.item.entities.item.Demande; -import fr.abes.item.mail.IMailer; -import fr.abes.item.mail.MailDto; -import fr.abes.item.mail.impl.Mailer; -import fr.abes.item.service.factory.StrategyFactory; -import fr.abes.item.service.service.ServiceProvider; -import lombok.extern.slf4j.Slf4j; -import org.springframework.batch.core.ExitStatus; -import org.springframework.batch.core.StepContribution; -import org.springframework.batch.core.StepExecution; -import org.springframework.batch.core.StepExecutionListener; -import org.springframework.batch.core.launch.NoSuchJobException; -import org.springframework.batch.core.scope.context.ChunkContext; -import org.springframework.batch.core.step.tasklet.Tasklet; -import org.springframework.batch.repeat.RepeatStatus; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.core.RowMapper; - -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -@Slf4j -public class SelectJobsToRestartTasklet implements Tasklet, StepExecutionListener { - private final JdbcTemplate jdbcTemplate; - - private final ServiceProvider service; - - @Autowired - private StrategyFactory factory; - - @Value("${mail.admin}") - private String mailAdmin; - - public SelectJobsToRestartTasklet(JdbcTemplate jdbcTemplate, ServiceProvider service) { - this.service = service; - this.jdbcTemplate = jdbcTemplate; - } - - @Override - public void beforeStep(StepExecution stepExecution) { - } - - @Override - public ExitStatus afterStep(StepExecution stepExecution) { - return stepExecution.getExitStatus(); - } - - @Override - public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - List jobExecutionsModif = findRunningJobExecutions(Constant.SPRING_BATCH_JOB_MODIF_NAME); - List listDemandes = new ArrayList<>(); - List finalListDemandes1 = listDemandes; - jobExecutionsModif.forEach(j -> { - //on récupère le numéro de la demande de modif à modifier - String numDemande = extractNumDemandeModif(j); - //si le numéro de la demande a été trouvé et que la demande est en cours de traitement - if (!numDemande.equals("") && service.getDemandeModif().findById(Integer.parseInt(numDemande)).getEtatDemande().getId() == Constant.ETATDEM_ENCOURS) { - //on repasse la demande en attente de traitement - Demande demande = service.getDemandeModif().findById(Integer.parseInt(numDemande)); - demande.setEtatDemande(service.getReference().findEtatDemandeById(Constant.ETATDEM_ATTENTE)); - service.getDemandeModif().save(demande); - log.info("Redémarrage job sur la demande " + demande.getNumDemande()); - finalListDemandes1.add(demande.getNumDemande()); - } - }); - envoiMail(listDemandes.stream().distinct().collect(Collectors.toList()), TYPE_DEMANDE.MODIF); - - listDemandes = new ArrayList<>(); - List jobExecutionsExemp = findRunningJobExecutions(Constant.SPRING_BATCH_JOB_EXEMP_NAME); - List finalListDemandes2 = listDemandes; - jobExecutionsExemp.forEach(j -> { - //on récupère le numéro de la demande d'exemplarisation à modifier - String numDemande = extractNumDemandeExemp(j); - if (!numDemande.equals("") && service.getDemandeExemp().findById(Integer.parseInt(numDemande)).getEtatDemande().getId() == Constant.ETATDEM_ENCOURS) { - //on repasse la demande en attente de traitement - Demande demande = service.getDemandeExemp().findById(Integer.parseInt(numDemande)); - demande.setEtatDemande(service.getReference().findEtatDemandeById(Constant.ETATDEM_ATTENTE)); - service.getDemandeExemp().save(demande); - log.info("Redémarrage job sur la demande " + demande.getNumDemande()); - finalListDemandes2.add(demande.getNumDemande()); - } - }); - envoiMail(listDemandes.stream().distinct().collect(Collectors.toList()), TYPE_DEMANDE.EXEMP); - - listDemandes = new ArrayList<>(); - List jobExecutionsRecouv = findRunningJobExecutions(Constant.SPRING_BATCH_JOB_RECOU_NAME); - List finalListDemandes = listDemandes; - jobExecutionsRecouv.forEach(j -> { - //on récupère le numéro de la demande de recouvrement à modifier - String numDemande = extractNumDemandeRecouv(j); - if (!numDemande.equals("") && service.getDemandeRecouv().findById(Integer.parseInt(numDemande)).getEtatDemande().getId() == Constant.ETATDEM_ENCOURS) { - //on repasse la demande en attente de traitement - Demande demande = service.getDemandeRecouv().findById(Integer.parseInt(numDemande)); - demande.setEtatDemande(service.getReference().findEtatDemandeById(Constant.ETATDEM_ATTENTE)); - service.getDemandeRecouv().save(demande); - log.info("Redémarrage job sur la demande " + demande.getNumDemande()); - finalListDemandes.add(demande.getNumDemande()); - } - }); - envoiMail(listDemandes.stream().distinct().collect(Collectors.toList()), TYPE_DEMANDE.RECOUV); - - return RepeatStatus.FINISHED; - } - - private void envoiMail(List listDemandes, TYPE_DEMANDE type_demande) { - if (listDemandes.size() > 0) { - IMailer mailer = factory.getStrategy(IMailer.class, type_demande); - log.info("envoi du mail à " + mailAdmin + " pour type " + type_demande); - mailer.mailRestartJob(listDemandes); - } - } - - private String extractNumDemandeRecouv(String context) { - return context.substring(context.indexOf("RECOUV\",\"id\":") + 13, context.indexOf("}}")); - } - - private String extractNumDemandeExemp(String context) { - return context.substring(context.indexOf("EXEMP\",\"id\":") + 12, context.indexOf("}}")); - } - - private String extractNumDemandeModif(String context) { - return context.substring(context.indexOf("MODIF\",\"id\":") + 12, context.indexOf("}}")); - } - - private List findRunningJobExecutions(String jobName) { - //on récupère les jobs en cours d'exécution - List resultats = new ArrayList<>(); - Stream jobExecutionDto = jdbcTemplate.queryForStream("SELECT C.JOB_EXECUTION_ID as EXECUTION_ID, C.SERIALIZED_CONTEXT as CONTEXT from BATCH_JOB_EXECUTION E, BATCH_JOB_EXECUTION_CONTEXT C, BATCH_JOB_INSTANCE I where E.JOB_EXECUTION_ID=C.JOB_EXECUTION_ID AND E.JOB_INSTANCE_ID=I.JOB_INSTANCE_ID and I.JOB_NAME=? and E.START_TIME is not NULL and E.END_TIME is NULL AND E.STATUS='STARTED' and E.EXIT_CODE='UNKNOWN' order by E.JOB_EXECUTION_ID desc", new JobExecutionRowMapper(), jobName); - Calendar now = Calendar.getInstance(); - now.add(Calendar.MINUTE, -10); - jobExecutionDto.forEach(j -> { - //sur le job trouvé, on vérifie s'il existe un step en cours d'exécution et qui n'a pas été mis à jour depuis 1 heure - Integer steps = jdbcTemplate.queryForObject("select count(STEP_EXECUTION_ID) from BATCH_STEP_EXECUTION where JOB_EXECUTION_ID = ? and EXIT_CODE='EXECUTING' and END_TIME is null and LAST_UPDATED < ?", Integer.class, j.getJobExecutionId(), now.getTime()); - if (steps > 0) { - //si on trouve encore un step qui respecte la condition, on retourne le contexte du job pour pouvoir retrouver le numéro de la demande à modifier - resultats.add(j.getContext()); - } - }); - return resultats; - } - - private class JobExecutionRowMapper implements RowMapper { - @Override - public JobExecutionDto mapRow(ResultSet rs, int rowNum) throws SQLException { - JobExecutionDto dto = new JobExecutionDto(); - - dto.setJobExecutionId(rs.getLong("EXECUTION_ID")); - dto.setContext(rs.getString("CONTEXT")); - - return dto; - } - } -} diff --git a/batch/src/main/java/fr/abes/item/restart/StepExecutionDto.java b/batch/src/main/java/fr/abes/item/restart/StepExecutionDto.java deleted file mode 100644 index 21d5bc97..00000000 --- a/batch/src/main/java/fr/abes/item/restart/StepExecutionDto.java +++ /dev/null @@ -1,17 +0,0 @@ -package fr.abes.item.restart; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import java.util.Date; - -@Getter -@Setter -@NoArgsConstructor -public class StepExecutionDto { - private String stepName; - private Date endTime; - private Date lastUpdated; - -} diff --git a/batch/src/main/java/fr/abes/item/traitement/GenererFichierTasklet.java b/batch/src/main/java/fr/abes/item/traitement/GenererFichierTasklet.java index 6691925d..4f1a04fd 100644 --- a/batch/src/main/java/fr/abes/item/traitement/GenererFichierTasklet.java +++ b/batch/src/main/java/fr/abes/item/traitement/GenererFichierTasklet.java @@ -95,7 +95,7 @@ public void beforeStep(StepExecution stepExecution) { */ @Override public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { - log.warn(Constant.ENTER_EXECUTE_FROM_GENEREFICHIER); + log.info(Constant.ENTER_EXECUTE_FROM_GENEREFICHIER); try { String nomFichier = this.genererFichier(); //NOM FICHIER DEMANDE GENERE @@ -144,7 +144,6 @@ private String genererFichier() throws IOException, FileTypeException, QueryToSu case EXEMP: DemandeExemp demandeExemp = (DemandeExemp) demande; LigneFichierDtoExemp ligneFichierDtoExemp = new LigneFichierDtoExemp((LigneFichierExemp) ligne); - log.warn(ligneFichierDtoExemp.getIndexRecherche()); ligneFichierDtoExemp.setRequete(getServiceProvider().getDemandeExemp().getQueryToSudoc(demandeExemp.getIndexRecherche().getCode(), demandeExemp.getTypeExemp().getLibelle(), ligneFichierDtoExemp.getIndexRecherche().split(";"))); out.println(ligneFichierDtoExemp.getValeurToWriteInFichierResultat(demande, nbPpnInFileResult)); break; diff --git a/batch/src/main/java/fr/abes/item/traitement/ProxyRetry.java b/batch/src/main/java/fr/abes/item/traitement/ProxyRetry.java index 31f0bb19..fb28e7d7 100644 --- a/batch/src/main/java/fr/abes/item/traitement/ProxyRetry.java +++ b/batch/src/main/java/fr/abes/item/traitement/ProxyRetry.java @@ -1,71 +1,185 @@ package fr.abes.item.traitement; import fr.abes.cbs.exception.CBSException; +import fr.abes.cbs.exception.CommException; +import fr.abes.cbs.exception.ZoneException; +import fr.abes.cbs.notices.DonneeLocale; +import fr.abes.cbs.notices.Exemplaire; +import fr.abes.cbs.notices.Zone; import fr.abes.item.constant.Constant; +import fr.abes.item.constant.TYPE_DEMANDE; +import fr.abes.item.entities.item.DemandeExemp; +import fr.abes.item.entities.item.DemandeModif; +import fr.abes.item.entities.item.DemandeRecouv; +import fr.abes.item.entities.item.LigneFichierModif; +import fr.abes.item.exception.QueryToSudocException; +import fr.abes.item.service.factory.StrategyFactory; import fr.abes.item.service.service.ServiceProvider; +import fr.abes.item.traitement.model.ILigneFichierDtoMapper; +import fr.abes.item.traitement.model.LigneFichierDtoExemp; +import fr.abes.item.traitement.model.LigneFichierDtoModif; +import fr.abes.item.traitement.model.LigneFichierDtoRecouv; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; import org.springframework.retry.annotation.Backoff; import org.springframework.retry.annotation.Retryable; import org.springframework.stereotype.Component; +import java.sql.SQLException; +import java.util.List; + @Slf4j @Component public class ProxyRetry { @Autowired @Getter - ServiceProvider service; + private ServiceProvider service; + + @Autowired + private StrategyFactory factory; /** * permet de retenter plusieurs fois la connexion à CBS * - * @param login - * @throws CBSException + * @param login login d'authentification + * @throws CBSException erreur de validation CBS + * @throws CommException erreur de communication avec le CBS */ - @Retryable - public void authenticate(String login) throws CBSException { + @Retryable(include = CommException.class, exclude = CBSException.class, backoff = @Backoff(delay = 1000, multiplier = 2)) + public void authenticate(String login) throws CBSException, CommException { log.warn(Constant.PROXY_AUTHENTICATION_WITH_LOGIN + login); getService().getTraitement().authenticate(login); } + @Retryable + public void disconnect() throws CBSException { + getService().getTraitement().disconnect(); + } /** * Méthode de modification d'un exemplaire existant dans le CBS (4 tentatives max) - * @param noticeTraitee notice modifiée - * @param epn epn de la notice à modifier - * @throws CBSException : erreur CBS + * + * @param demande demande de modification + * @param ligneFichierDtoModif dto de la ligne fichier à modifier + * @throws CBSException : erreur CBS + * @throws CommException : erreur de communication avec le CBS */ - @Retryable(maxAttempts = 4, include = Exception.class, - exclude = CBSException.class, backoff = @Backoff(delay = 1000, multiplier = 2) ) - public void saveExemplaire(String noticeTraitee, String epn) throws CBSException { - getService().getTraitement().saveExemplaire(noticeTraitee, epn); + @Retryable(maxAttempts = 4, include = CommException.class, exclude = {CBSException.class, ZoneException.class}, backoff = @Backoff(delay = 1000, multiplier = 2) ) + public void saveExemplaire(DemandeModif demande, LigneFichierDtoModif ligneFichierDtoModif) throws CBSException, CommException, ZoneException { + ILigneFichierDtoMapper ligneFichierDtoMapper = factory.getStrategy(ILigneFichierDtoMapper.class, TYPE_DEMANDE.MODIF); + try { + //récupération de la exemplaire correpondant à la ligne du fichier en cours + Exemplaire exemplaire = getService().getTraitement().getNoticeFromEPN(ligneFichierDtoModif.getEpn()); + //modification de la exemplaire d'exemplaire + Exemplaire noticeTraitee = getService().getDemandeModif().getNoticeTraitee(demande, exemplaire, (LigneFichierModif) ligneFichierDtoMapper.getLigneFichierEntity(ligneFichierDtoModif)); + getService().getTraitement().saveExemplaire(noticeTraitee.toString(), ligneFichierDtoModif.getEpn()); + } catch (CommException ex) { + log.error("Erreur de communication avec le CBS sur demande modif " + demande.getId() + " / ligne fichier n°" + ligneFichierDtoModif.getNumLigneFichier()); + //si un pb de communication avec le CBS est détecté, on se reconnecte, et on renvoie l'exception pour que le retry retente la méthode + this.disconnect(); + this.authenticate("M" + demande.getRcr()); + throw ex; + } } /** * Méthode permettant la création d'un nouvel exemplaire et du bloc de donnée locale dans le CBS (4 tentatives max) - * @param numEx numéro de l'exemplaire à créer (pour lancer la commande cre exx - * @param noticeACreer chaine de la notice d'exemplaire à créer - * @param donneeLocale chaine du bloc de donnée locale à créer ou rajouter au bloc existant - * @param modDonneeLocale indicateur de modification du bloc de donnée locale + * @param demande demande d'exemplarisation à traiter + * @param ligneFichierDtoExemp ligne fichier à traiter * @throws CBSException : erreur CBS + * @throws ZoneException : erreur de construction de la notice + * @throws CommException : erreur de communication avec le CBS */ - @Retryable(maxAttempts = 4, include = Exception.class, - exclude = CBSException.class, backoff = @Backoff(delay = 1000, multiplier = 2) ) - public void newExemplaire(String numEx, String noticeACreer, String donneeLocale, boolean modDonneeLocale) throws CBSException { - //si on a des données locales à créer - String donneesLocalesToCreate = donneeLocale.substring(1, donneeLocale.length()-1); - //création de l'exemplaire - getService().getTraitement().getCbs().creerExemplaire(numEx); - getService().getTraitement().getCbs().newExemplaire(noticeACreer.substring(1, noticeACreer.length()-1)); - if (!donneesLocalesToCreate.isEmpty()) { - //s'il y a des données locales existantes, on modifie - if (modDonneeLocale) { - getService().getTraitement().getCbs().modLoc(donneesLocalesToCreate); + @Retryable(maxAttempts = 4, include = CommException.class, + exclude = {CBSException.class, ZoneException.class}, backoff = @Backoff(delay = 1000, multiplier = 2) ) + public void newExemplaire(DemandeExemp demande, LigneFichierDtoExemp ligneFichierDtoExemp) throws CBSException, ZoneException, CommException { + try { + ligneFichierDtoExemp.setRequete(getService().getDemandeExemp().getQueryToSudoc(demande.getIndexRecherche().getCode(), demande.getTypeExemp().getLibelle(), ligneFichierDtoExemp.getIndexRecherche().split(";"))); + //lancement de la requête de récupération de la notice dans le CBS + String numEx = getService().getDemandeExemp().launchQueryToSudoc(demande, ligneFichierDtoExemp.getIndexRecherche()); + ligneFichierDtoExemp.setNbReponses(getService().getDemandeExemp().getNbReponses()); + if (ligneFichierDtoExemp.getNbReponses() == 1) { + ligneFichierDtoExemp.setListePpn(getService().getTraitement().getCbs().getPpnEncours()); } else { - //s'il n'y a pas de donnée locale dans la notice, on crée le bloc - getService().getTraitement().getCbs().creerDonneeLocale(); - getService().getTraitement().getCbs().newLoc(donneesLocalesToCreate); + ligneFichierDtoExemp.setListePpn(getService().getTraitement().getCbs().getListePpn().toString()); + } + + String exemplaire = getService().getDemandeExemp().creerExemplaireFromHeaderEtValeur(demande.getListeZones(), ligneFichierDtoExemp.getValeurZone(), demande.getRcr(), numEx); + String donneeLocale = getService().getDemandeExemp().creerDonneesLocalesFromHeaderEtValeur(demande.getListeZones(), ligneFichierDtoExemp.getValeurZone()); + getService().getTraitement().getCbs().creerExemplaire(numEx); + getService().getTraitement().getCbs().newExemplaire(exemplaire); + if (!donneeLocale.isEmpty()) { + //s'il y a des données locales existantes, on modifie + if (getService().getDemandeExemp().hasDonneeLocaleExistante()) { + getService().getTraitement().getCbs().modLoc(donneeLocale); + } else { + //s'il n'y a pas de donnée locale dans la notice, on crée le bloc + getService().getTraitement().getCbs().creerDonneeLocale(); + getService().getTraitement().getCbs().newLoc(donneeLocale); + } + } + ligneFichierDtoExemp.setNumExemplaire(numEx); + ligneFichierDtoExemp.setL035(getL035fromDonneesLocales(donneeLocale)); + ligneFichierDtoExemp.setRetourSudoc(Constant.EXEMPLAIRE_CREE); + } catch (QueryToSudocException e) { + ligneFichierDtoExemp.setNbReponses(getService().getDemandeExemp().getNbReponses()); + ligneFichierDtoExemp.setListePpn(getService().getTraitement().getCbs().getListePpn().toString().replace(';', ',')); + ligneFichierDtoExemp.setRetourSudoc(""); + } catch (DataAccessException d) { + if (d.getRootCause() instanceof SQLException) { + SQLException sqlEx = (SQLException) d.getRootCause(); + log.error("Erreur SQL : " + sqlEx.getErrorCode()); + log.error(sqlEx.getSQLState() + "|" + sqlEx.getMessage() + "|" + sqlEx.getLocalizedMessage()); + } + } catch (CommException ex) { + log.error("Erreur de communication avec le CBS sur demande exemp " + demande.getId() + " / ligne fichier n°" + ligneFichierDtoExemp.getNumLigneFichier()); + //si un pb de communication avec le CBS est détecté, on se reconnecte, et on renvoie l'exception pour que le retry retente la méthode + this.disconnect(); + this.authenticate("M" + demande.getRcr()); + throw ex; + } + } + + private String getL035fromDonneesLocales(String donneeLocale) throws ZoneException { + DonneeLocale donneeLocale1 = new DonneeLocale(donneeLocale); + List listeL035 = donneeLocale1.findZones("L035"); + if (!listeL035.isEmpty()) { + return listeL035.get(listeL035.size() - 1).findSubLabel("$a"); + } + return null; + } + + /** + * Méthode permettant de traiter une ligne d'une demande de recouvrement + * @param demande demande de recouvrement à traiter + * @param ligneFichierDtoRecouv ligne fichier à traiter + * @throws CBSException : erreur CBS + * @throws QueryToSudocException : erreur dans le type d'index de recherche + * @throws CommException : erreur de communication avec le CBS + */ + @Retryable(maxAttempts = 4, include = CommException.class, + exclude = {CBSException.class, QueryToSudocException.class}, backoff = @Backoff(delay = 1000, multiplier = 2) ) + public void recouvExemplaire(DemandeRecouv demande, LigneFichierDtoRecouv ligneFichierDtoRecouv) throws CommException, QueryToSudocException, CBSException { + ligneFichierDtoRecouv.setRequete(getService().getDemandeRecouv().getQueryToSudoc(demande.getIndexRecherche().getCode(), ligneFichierDtoRecouv.getIndexRecherche().split(";"))); + try { + ligneFichierDtoRecouv.setNbReponses(getService().getDemandeRecouv().launchQueryToSudoc(demande.getIndexRecherche().getCode(), ligneFichierDtoRecouv.getIndexRecherche())); + switch (ligneFichierDtoRecouv.getNbReponses()) { + case 0: + ligneFichierDtoRecouv.setListePpn(""); + break; + case 1: + ligneFichierDtoRecouv.setListePpn(getService().getTraitement().getCbs().getPpnEncours()); + break; + default: + ligneFichierDtoRecouv.setListePpn(getService().getTraitement().getCbs().getListePpn().toString().replace(';', ',')); } + } catch (CommException ex) { + log.error("Erreur de communication avec le CBS sur demande recouv " + demande.getId() + " / ligne fichier n°" + ligneFichierDtoRecouv.getNumLigneFichier()); + //si un pb de communication avec le CBS est détecté, on se reconnecte, et on renvoie l'exception pour que le retry retente la méthode + this.disconnect(); + this.authenticate("M" + demande.getRcr()); + throw ex; } } diff --git a/batch/src/main/java/fr/abes/item/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java b/batch/src/main/java/fr/abes/item/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java index 1e7a7b53..217fc0f0 100644 --- a/batch/src/main/java/fr/abes/item/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java +++ b/batch/src/main/java/fr/abes/item/traitement/traiterlignesfichierchunk/LignesFichierProcessor.java @@ -1,18 +1,23 @@ package fr.abes.item.traitement.traiterlignesfichierchunk; import fr.abes.cbs.exception.CBSException; +import fr.abes.cbs.exception.CommException; import fr.abes.cbs.exception.ZoneException; -import fr.abes.cbs.notices.DonneeLocale; -import fr.abes.cbs.notices.Zone; import fr.abes.item.constant.Constant; import fr.abes.item.constant.TYPE_DEMANDE; -import fr.abes.item.entities.item.*; +import fr.abes.item.entities.item.Demande; +import fr.abes.item.entities.item.DemandeExemp; +import fr.abes.item.entities.item.DemandeModif; +import fr.abes.item.entities.item.DemandeRecouv; import fr.abes.item.exception.QueryToSudocException; import fr.abes.item.service.IDemandeService; import fr.abes.item.service.factory.StrategyFactory; import fr.abes.item.service.service.ServiceProvider; -import fr.abes.item.traitement.*; -import fr.abes.item.traitement.model.*; +import fr.abes.item.traitement.ProxyRetry; +import fr.abes.item.traitement.model.LigneFichierDto; +import fr.abes.item.traitement.model.LigneFichierDtoExemp; +import fr.abes.item.traitement.model.LigneFichierDtoModif; +import fr.abes.item.traitement.model.LigneFichierDtoRecouv; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.hibernate.exception.ConstraintViolationException; @@ -27,7 +32,6 @@ import org.springframework.stereotype.Component; import java.sql.SQLException; -import java.util.List; @Slf4j @Component @@ -76,8 +80,8 @@ public LigneFichierDto process(LigneFichierDto ligneFichierDto) { default: return processDemandeRecouv(ligneFichierDto); } - } catch (CBSException e) { - log.error(Constant.ERROR_FROM_SUDOC_REQUEST_OR_METHOD_SAVEXEMPLAIRE + e.toString()); + } catch (CBSException | ZoneException | QueryToSudocException | CommException e) { + log.error(Constant.ERROR_FROM_SUDOC_REQUEST_OR_METHOD_SAVEXEMPLAIRE + e); ligneFichierDto.setRetourSudoc(e.getMessage()); } catch (JDBCConnectionException | ConstraintViolationException j) { log.error("Erreur hibernate JDBC"); @@ -89,7 +93,7 @@ public LigneFichierDto process(LigneFichierDto ligneFichierDto) { log.error(sqlEx.getSQLState() + "|" + sqlEx.getMessage() + "|" + sqlEx.getLocalizedMessage()); } } catch (Exception e) { - log.error(Constant.ERROR_FROM_RECUP_NOTICETRAITEE + e.toString()); + log.error(Constant.ERROR_FROM_RECUP_NOTICETRAITEE + e); ligneFichierDto.setRetourSudoc(e.getMessage()); } return ligneFichierDto; @@ -100,18 +104,15 @@ public LigneFichierDto process(LigneFichierDto ligneFichierDto) { * * @param ligneFichierDto ligne du fichier sur laquelle lancer le traitement de modification * @return la DTO de la ligne fichier modifiée en fonction du résultat du traitement - * @throws CBSException + * @throws CBSException : erreur CBS + * @throws ZoneException : erreur de construction de la notice + * @throws CommException : erreur de communication avec le CBS */ - private LigneFichierDtoModif processDemandeModif(LigneFichierDto ligneFichierDto) throws CBSException, ZoneException { + private LigneFichierDtoModif processDemandeModif(LigneFichierDto ligneFichierDto) throws CBSException, ZoneException, CommException { DemandeModif demandeModif = (DemandeModif) demande; - ILigneFichierDtoMapper ligneFichierDtoMapper = factory.getStrategy(ILigneFichierDtoMapper.class, TYPE_DEMANDE.MODIF); LigneFichierDtoModif ligneFichierDtoModif = (LigneFichierDtoModif) ligneFichierDto; - //récupération de la notice correpondant à la ligne du fichier en cours - String notice = getService().getTraitement().getNoticeFromEPN(ligneFichierDtoModif.getEpn()); - //modification de la notice d'exemplaire - String noticetraitee = getService().getDemandeModif().getNoticeTraitee(demandeModif, notice, (LigneFichierModif) ligneFichierDtoMapper.getLigneFichierEntity(ligneFichierDtoModif)); //sauvegarde la notice modifiée - this.proxyRetry.saveExemplaire(noticetraitee, ligneFichierDtoModif.getEpn()); + this.proxyRetry.saveExemplaire(demandeModif, ligneFichierDtoModif); ligneFichierDtoModif.setRetourSudoc(Constant.EXEMPLAIRE_MODIFIE); return ligneFichierDtoModif; } @@ -121,79 +122,31 @@ private LigneFichierDtoModif processDemandeModif(LigneFichierDto ligneFichierDto * * @param ligneFichierDto ligne du fichier sur laquelle lancer le traitement d'exemplarisation * @return la DTO de la ligne fichier modifiée en fonction du résultat du traitement - * @throws CBSException - * @throws QueryToSudocException 0 ou plus de 1 résultat à la requête che + * @throws CBSException : erreur CBS + * @throws ZoneException : erreur de construction de la notice + * @throws CommException : erreur de communication avec le CBS */ - private LigneFichierDtoExemp processDemandeExemp(LigneFichierDto ligneFichierDto) throws Exception { + private LigneFichierDtoExemp processDemandeExemp(LigneFichierDto ligneFichierDto) throws CBSException, ZoneException, CommException { DemandeExemp demandeExemp = (DemandeExemp) this.demande; - LigneFichierDtoExemp ligneFichierDtoExemp = (LigneFichierDtoExemp) ligneFichierDto; - try { - ligneFichierDtoExemp.setRequete(getService().getDemandeExemp().getQueryToSudoc(demandeExemp.getIndexRecherche().getCode(), demandeExemp.getTypeExemp().getLibelle(), ligneFichierDtoExemp.getIndexRecherche().split(";"))); - //lancement de la requête de récupération de la notice dans le CBS - String numEx = getService().getDemandeExemp().launchQueryToSudoc(demandeExemp, ligneFichierDtoExemp.getIndexRecherche()); - ligneFichierDtoExemp.setNbReponses(getService().getDemandeExemp().getNbReponses()); - switch (ligneFichierDtoExemp.getNbReponses()) { - case 1: - ligneFichierDtoExemp.setListePpn(getService().getTraitement().getCbs().getPpnEncours()); - break; - default: - ligneFichierDtoExemp.setListePpn(getService().getTraitement().getCbs().getListePpn().toString()); - } - - String exemplaire = getService().getDemandeExemp().creerExemplaireFromHeaderEtValeur(demandeExemp.getListeZones(), ligneFichierDtoExemp.getValeurZone(), demandeExemp.getRcr(), numEx); - String donneeLocale = getService().getDemandeExemp().creerDonneesLocalesFromHeaderEtValeur(demandeExemp.getListeZones(), ligneFichierDtoExemp.getValeurZone()); - - this.proxyRetry.newExemplaire(numEx, exemplaire, donneeLocale, getService().getDemandeExemp().hasDonneeLocaleExistante()); - ligneFichierDtoExemp.setNumExemplaire(numEx); - ligneFichierDtoExemp.setL035(getL035fromDonneesLocales(donneeLocale)); - ligneFichierDtoExemp.setRetourSudoc(Constant.EXEMPLAIRE_CREE); - } catch (QueryToSudocException e) { - ligneFichierDtoExemp.setNbReponses(getService().getDemandeExemp().getNbReponses()); - ligneFichierDtoExemp.setListePpn(getService().getTraitement().getCbs().getListePpn().toString().replace(';', ',')); - ligneFichierDtoExemp.setRetourSudoc(""); - } catch (DataAccessException d) { - if (d.getRootCause() instanceof SQLException) { - SQLException sqlEx = (SQLException) d.getRootCause(); - log.error("Erreur SQL : " + sqlEx.getErrorCode()); - log.error(sqlEx.getSQLState() + "|" + sqlEx.getMessage() + "|" + sqlEx.getLocalizedMessage()); - } - } + this.proxyRetry.newExemplaire(demandeExemp, ligneFichierDtoExemp); return ligneFichierDtoExemp; } - private String getL035fromDonneesLocales(String donneeLocale) throws ZoneException { - DonneeLocale donneeLocale1 = new DonneeLocale(donneeLocale); - List listeL035 = donneeLocale1.findZones("L035"); - if (listeL035.size() > 0) { - return listeL035.get(listeL035.size() - 1).findSubLabel("$a"); - } - return null; - } /** * Méthode permettant de lancer le test de recouvrement pour une ligne du fichier * * @param ligneFichierDto ligne du fichier sur laquelle lancer la requête * @return la DTO ligneFichier mise à jour en fonction du résultat de la requête che - * @throws CBSException + * @throws CBSException : erreur CBS + * @throws QueryToSudocException : erreur dans le type d'index de recherche + * @throws CommException : erreur de communication avec le CBS */ - private LigneFichierDtoRecouv processDemandeRecouv(LigneFichierDto ligneFichierDto) throws CBSException, QueryToSudocException { + private LigneFichierDtoRecouv processDemandeRecouv(LigneFichierDto ligneFichierDto) throws CBSException, QueryToSudocException, CommException { DemandeRecouv demandeRecouv = (DemandeRecouv) this.demande; LigneFichierDtoRecouv ligneFichierDtoRecouv = (LigneFichierDtoRecouv) ligneFichierDto; - ligneFichierDtoRecouv.setRequete(getService().getDemandeRecouv().getQueryToSudoc(demandeRecouv.getIndexRecherche().getCode(), ligneFichierDtoRecouv.getIndexRecherche().split(";"))); - ligneFichierDtoRecouv.setNbReponses(getService().getDemandeRecouv().launchQueryToSudoc(demandeRecouv.getIndexRecherche().getCode(), ligneFichierDtoRecouv.getIndexRecherche())); - switch (ligneFichierDtoRecouv.getNbReponses()) { - case 0: - ligneFichierDtoRecouv.setListePpn(""); - break; - case 1: - ligneFichierDtoRecouv.setListePpn(getService().getTraitement().getCbs().getPpnEncours()); - break; - default: - ligneFichierDtoRecouv.setListePpn(getService().getTraitement().getCbs().getListePpn().toString().replace(';', ',')); - } - + this.proxyRetry.recouvExemplaire(demandeRecouv, ligneFichierDtoRecouv); return ligneFichierDtoRecouv; } } diff --git a/core/src/main/java/fr/abes/item/constant/Constant.java b/core/src/main/java/fr/abes/item/constant/Constant.java index 2b68c0c3..bc2cbd2d 100644 --- a/core/src/main/java/fr/abes/item/constant/Constant.java +++ b/core/src/main/java/fr/abes/item/constant/Constant.java @@ -43,8 +43,8 @@ public class Constant implements Serializable { public static final String EXEMPLAIRE_MODIFIE = "Le traitement a été effectué."; public static final String MSG = "message : "; public static final String FILE_END = "Fin du fichier."; - public static final String TEXTE_991_MODIF = "Exemplaire modifié automatiquement."; - public static final String TEXTE_991_CREA = "Exemplaire créé en masse par ITEM."; + public static final String TEXTE_991_MODIF = "Exemplaire modifié automatiquement"; + public static final String TEXTE_991_CREA = "Exemplaire créé en masse par ITEM"; public static final String AUCUNE_DEMANDE = "AUCUNE DEMANDE"; public static final String DEFAULT = "default"; public static final String DEMANDE = "La demande "; diff --git a/core/src/main/java/fr/abes/item/entities/item/DemandeExemp.java b/core/src/main/java/fr/abes/item/entities/item/DemandeExemp.java index 1d991bb7..15c9d367 100644 --- a/core/src/main/java/fr/abes/item/entities/item/DemandeExemp.java +++ b/core/src/main/java/fr/abes/item/entities/item/DemandeExemp.java @@ -17,7 +17,7 @@ @Table(name="DEMANDE_EXEMP") public class DemandeExemp extends Demande{ - @ManyToOne + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "DEM_TYPE_EXEMP") private TypeExemp typeExemp; @@ -27,7 +27,7 @@ public class DemandeExemp extends Demande{ @OneToMany(mappedBy = "demandeExemp", fetch = FetchType.LAZY, cascade = CascadeType.REMOVE) private Set journalDemandes; - @ManyToOne + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "DEM_INDEX_RECHERCHE") private IndexRecherche indexRecherche; diff --git a/core/src/main/java/fr/abes/item/entities/item/IndexRecherche.java b/core/src/main/java/fr/abes/item/entities/item/IndexRecherche.java index dcfa6888..ca340dc0 100644 --- a/core/src/main/java/fr/abes/item/entities/item/IndexRecherche.java +++ b/core/src/main/java/fr/abes/item/entities/item/IndexRecherche.java @@ -33,7 +33,7 @@ public class IndexRecherche implements Serializable, GenericEntity { @Column(name = "INDEX_ZONES") private Integer indexZones; - @ManyToMany + @ManyToMany(fetch = FetchType.EAGER) @JoinTable(name = "INDEX_RECHERCHE_TYPE_EXEMP", joinColumns = @JoinColumn(name = "NUM_INDEX_RECHERCHE"), inverseJoinColumns = @JoinColumn(name = "NUM_TYPE_EXEMP")) diff --git a/core/src/main/java/fr/abes/item/entities/item/TypeExemp.java b/core/src/main/java/fr/abes/item/entities/item/TypeExemp.java index d1722218..a7b73564 100644 --- a/core/src/main/java/fr/abes/item/entities/item/TypeExemp.java +++ b/core/src/main/java/fr/abes/item/entities/item/TypeExemp.java @@ -28,7 +28,7 @@ public class TypeExemp implements Serializable, GenericEntity { @OneToMany(mappedBy = "typeExemp", fetch = FetchType.LAZY) private Set demandes; - @ManyToMany + @ManyToMany(fetch = FetchType.EAGER) @JoinTable(name = "INDEX_RECHERCHE_TYPE_EXEMP", joinColumns = @JoinColumn(name = "NUM_TYPE_EXEMP"), inverseJoinColumns = @JoinColumn(name = "NUM_INDEX_RECHERCHE")) diff --git a/core/src/main/java/fr/abes/item/service/IDemandeExempService.java b/core/src/main/java/fr/abes/item/service/IDemandeExempService.java index 2dfdb723..b9d97f0e 100644 --- a/core/src/main/java/fr/abes/item/service/IDemandeExempService.java +++ b/core/src/main/java/fr/abes/item/service/IDemandeExempService.java @@ -1,6 +1,7 @@ package fr.abes.item.service; import fr.abes.cbs.exception.CBSException; +import fr.abes.cbs.exception.CommException; import fr.abes.cbs.exception.ZoneException; import fr.abes.item.entities.item.*; import fr.abes.item.exception.DemandeCheckingException; @@ -41,9 +42,9 @@ public interface IDemandeExempService extends IDemandeService{ boolean hasDonneeLocaleExistante(); - String[] getNoticeExemplaireAvantApres(DemandeExemp demande, LigneFichierExemp ligneFichier) throws CBSException, ZoneException; + String[] getNoticeExemplaireAvantApres(DemandeExemp demande, LigneFichierExemp ligneFichier) throws CBSException, ZoneException, CommException; - String creerExemplaireFromHeaderEtValeur(String header, String valeur, String rcr, String numExemp) throws Exception; + String creerExemplaireFromHeaderEtValeur(String header, String valeur, String rcr, String numExemp) throws CBSException, ZoneException; String creerDonneesLocalesFromHeaderEtValeur(String header, String valeur) throws ZoneException; diff --git a/core/src/main/java/fr/abes/item/service/IDemandeModifService.java b/core/src/main/java/fr/abes/item/service/IDemandeModifService.java index cde535c2..4cd2f2f7 100644 --- a/core/src/main/java/fr/abes/item/service/IDemandeModifService.java +++ b/core/src/main/java/fr/abes/item/service/IDemandeModifService.java @@ -1,7 +1,9 @@ package fr.abes.item.service; import fr.abes.cbs.exception.CBSException; +import fr.abes.cbs.exception.CommException; import fr.abes.cbs.exception.ZoneException; +import fr.abes.cbs.notices.Exemplaire; import fr.abes.item.entities.item.*; import fr.abes.item.exception.DemandeCheckingException; import fr.abes.item.exception.FileCheckingException; @@ -46,9 +48,9 @@ public interface IDemandeModifService extends IDemandeService{ LigneFichierModif getLigneFichier(DemandeModif demandeModif, Integer numLigne); - String getNoticeInitiale(DemandeModif demandeModif, String epn) throws CBSException; + Exemplaire getNoticeInitiale(DemandeModif demandeModif, String epn) throws CBSException, CommException, ZoneException; - String getNoticeTraitee(DemandeModif demandeModif, String noticeInit, LigneFichierModif ligneFichierModif) throws ZoneException; + Exemplaire getNoticeTraitee(DemandeModif demandeModif, Exemplaire noticeInit, LigneFichierModif ligneFichierModif) throws ZoneException; String stockerFichier(MultipartFile file, Demande demande) throws IOException, FileTypeException, FileCheckingException, DemandeCheckingException; diff --git a/core/src/main/java/fr/abes/item/service/IDemandeRecouvService.java b/core/src/main/java/fr/abes/item/service/IDemandeRecouvService.java index dde9af78..b9136476 100644 --- a/core/src/main/java/fr/abes/item/service/IDemandeRecouvService.java +++ b/core/src/main/java/fr/abes/item/service/IDemandeRecouvService.java @@ -1,7 +1,10 @@ package fr.abes.item.service; -import fr.abes.cbs.exception.CBSException; -import fr.abes.item.entities.item.*; +import fr.abes.cbs.exception.CommException; +import fr.abes.item.entities.item.Demande; +import fr.abes.item.entities.item.DemandeRecouv; +import fr.abes.item.entities.item.EtatDemande; +import fr.abes.item.entities.item.Utilisateur; import fr.abes.item.exception.DemandeCheckingException; import fr.abes.item.exception.FileCheckingException; import fr.abes.item.exception.FileTypeException; @@ -15,7 +18,7 @@ public interface IDemandeRecouvService extends IDemandeService { String stockerFichier(MultipartFile file, Demande demande) throws IOException, FileTypeException, FileCheckingException, DemandeCheckingException; - int launchQueryToSudoc(String codeIndex, String valeurs) throws CBSException, QueryToSudocException; + int launchQueryToSudoc(String codeIndex, String valeurs) throws QueryToSudocException, CommException; String getQueryToSudoc(String codeIndex, String[] tabValeurs) throws QueryToSudocException; diff --git a/core/src/main/java/fr/abes/item/service/ITraitementService.java b/core/src/main/java/fr/abes/item/service/ITraitementService.java index c02e75ac..80e9cd08 100644 --- a/core/src/main/java/fr/abes/item/service/ITraitementService.java +++ b/core/src/main/java/fr/abes/item/service/ITraitementService.java @@ -1,7 +1,9 @@ package fr.abes.item.service; import fr.abes.cbs.exception.CBSException; +import fr.abes.cbs.exception.CommException; import fr.abes.cbs.exception.ZoneException; +import fr.abes.cbs.notices.Exemplaire; import fr.abes.cbs.process.ProcessCBS; import fr.abes.item.entities.item.Traitement; @@ -26,21 +28,21 @@ public interface ITraitementService { ProcessCBS getCbs(); - void authenticate(String login) throws CBSException; + void authenticate(String login) throws CBSException, CommException; - String getNoticeFromEPN(String epn) throws CBSException; + Exemplaire getNoticeFromEPN(String epn) throws CBSException, CommException, ZoneException; - String creerNouvelleZone(String notice, String tag, String subTag, String valeur) throws ZoneException; + Exemplaire creerNouvelleZone(Exemplaire notice, String tag, String subTag, String valeur) throws ZoneException; - String supprimerZone(String notice, String tag) throws ZoneException; + Exemplaire supprimerZone(Exemplaire notice, String tag) throws ZoneException; - String supprimerSousZone(String notice, String tag, String subTag) throws ZoneException; + Exemplaire supprimerSousZone(Exemplaire notice, String tag, String subTag) throws ZoneException; - String creerSousZone(String notice, String tag, String subTag, String valeur) throws ZoneException; + Exemplaire creerSousZone(Exemplaire notice, String tag, String subTag, String valeur) throws ZoneException; - String remplacerSousZone(String notice, String tag, String subTag, String valeur) throws ZoneException; + Exemplaire remplacerSousZone(Exemplaire notice, String tag, String subTag, String valeur) throws ZoneException; - String saveExemplaire(String noticeModifiee, String epn) throws CBSException; + String saveExemplaire(String noticeModifiee, String epn) throws CBSException, CommException; void disconnect() throws CBSException; diff --git a/core/src/main/java/fr/abes/item/service/factory/StrategyFactory.java b/core/src/main/java/fr/abes/item/service/factory/StrategyFactory.java index 9f80b70b..9f8273f9 100644 --- a/core/src/main/java/fr/abes/item/service/factory/StrategyFactory.java +++ b/core/src/main/java/fr/abes/item/service/factory/StrategyFactory.java @@ -126,7 +126,7 @@ private Object findStrategyMatchingTypeDemande(List strategyBeans, TYPE_ //Only iterate the profiles if a profile has been selected for (TYPE_DEMANDE type_demande : strategyAnnotation.typeDemande()) { if (type_demande == currentTypeDemande) { - log.debug(Constant.STRATEGY_OF_TYPE_FOUND + strategyAnnotation.type() + Constant.STRATEGY_MATCHING_PROFILE + currentTypeDemande); + //log.debug(Constant.STRATEGY_OF_TYPE_FOUND + strategyAnnotation.type() + Constant.STRATEGY_MATCHING_PROFILE + currentTypeDemande); return bean; } } diff --git a/core/src/main/java/fr/abes/item/service/impl/DemandeExempService.java b/core/src/main/java/fr/abes/item/service/impl/DemandeExempService.java index 81664094..33533e34 100644 --- a/core/src/main/java/fr/abes/item/service/impl/DemandeExempService.java +++ b/core/src/main/java/fr/abes/item/service/impl/DemandeExempService.java @@ -1,13 +1,13 @@ package fr.abes.item.service.impl; import fr.abes.cbs.exception.CBSException; +import fr.abes.cbs.exception.CommException; import fr.abes.cbs.exception.ZoneException; import fr.abes.cbs.notices.DonneeLocale; import fr.abes.cbs.notices.Exemplaire; import fr.abes.cbs.notices.Zone; import fr.abes.cbs.notices.ZoneEtatColl; import fr.abes.cbs.utilitaire.Constants; -import fr.abes.cbs.utilitaire.Utilitaire; import fr.abes.item.components.Fichier; import fr.abes.item.components.FichierEnrichiExemp; import fr.abes.item.constant.Constant; @@ -360,7 +360,7 @@ public Demande closeDemande(Demande demande) throws DemandeCheckingException { * @param ligneFichier ligneFichier à traiter * @return la chaine de l'exemplaire construit, ou message d'erreur */ - public String[] getNoticeExemplaireAvantApres(DemandeExemp demande, LigneFichierExemp ligneFichier) throws CBSException { + public String[] getNoticeExemplaireAvantApres(DemandeExemp demande, LigneFichierExemp ligneFichier) throws CBSException, CommException { try { getService().getTraitement().authenticate("M" + demande.getRcr()); String numEx = launchQueryToSudoc(demande, ligneFichier.getIndexRecherche()); @@ -372,7 +372,7 @@ public String[] getNoticeExemplaireAvantApres(DemandeExemp demande, LigneFichier Utilitaires.removeNonPrintableCharacters(donneeLocaleExistante).replace("\r", "\r\n") + "\r\n" + exemplairesExistants.replace("\r", "\r\n"), //2*r\n\ comptent pour un saut de ligne //L'indice 2 retourne le bloc de données locales et l'exemplaire à créer creerDonneesLocalesFromHeaderEtValeur(demande.getListeZones(), ligneFichier.getValeurZone()).replace("\r", "\r\n") + "\r\n" + - Utilitaire.recupEntre(creerExemplaireFromHeaderEtValeur(demande.getListeZones(), ligneFichier.getValeurZone(), demande.getRcr(), numEx), Constants.STR_1F, Constants.STR_0D + Constants.STR_1E).replace("\r", "\r\n"), + creerExemplaireFromHeaderEtValeur(demande.getListeZones(), ligneFichier.getValeurZone(), demande.getRcr(), numEx).replace("\r", "\r\n"), }; //Si l'utilisateur n'a pas autorisé la création d'exemplaires multiples sur les notices de cette demande associée à ce RCR en cas d'exemplaires déjà présents @@ -394,11 +394,11 @@ public String launchQueryToSudoc(DemandeExemp demande, String valeurs) throws CB String query = getQueryToSudoc(demande.getIndexRecherche().getCode(), demande.getTypeExemp().getLibelle(), tabvaleurs); //TODO insérer la requête pour sauver la requête en base - if (query != "") { + if (!query.isEmpty()) { try { getService().getTraitement().getCbs().search(query); nbReponses = getService().getTraitement().getCbs().getNbNotices(); - } catch (CBSException e) { + } catch (CommException e) { nbReponses = 0; } switch (nbReponses) { @@ -576,7 +576,7 @@ public String creerExemplaireFromHeaderEtValeur(String header, String valeurZone } else { if (!((("").equals(valeurEnCours)) || (valeurEnCours.charAt(0) == (char) 0))) { //cas ou le header en cours est une sous zone seule - if (exemp.findZones(zonePrecedente).size() != 0) { + if (!exemp.findZones(zonePrecedente).isEmpty()) { exemp.addSousZone(zonePrecedente, headerEnCours, valeurEnCours); } else { exemp.addZone(zonePrecedente, headerEnCours, valeurEnCours, getDao().getZonesAutorisees().getIndicateursByTypeExempAndLabelZone(zonePrecedente).toCharArray()); diff --git a/core/src/main/java/fr/abes/item/service/impl/DemandeModifService.java b/core/src/main/java/fr/abes/item/service/impl/DemandeModifService.java index 2242a98e..beb57003 100644 --- a/core/src/main/java/fr/abes/item/service/impl/DemandeModifService.java +++ b/core/src/main/java/fr/abes/item/service/impl/DemandeModifService.java @@ -1,7 +1,9 @@ package fr.abes.item.service.impl; import fr.abes.cbs.exception.CBSException; +import fr.abes.cbs.exception.CommException; import fr.abes.cbs.exception.ZoneException; +import fr.abes.cbs.notices.Exemplaire; import fr.abes.item.components.Fichier; import fr.abes.item.components.FichierEnrichiModif; import fr.abes.item.components.FichierInitial; @@ -304,12 +306,12 @@ public LigneFichierModif getLigneFichier(DemandeModif demandeModif, Integer numL * Méthode de récupération d'une notice par son EPN * * @param demandeModif utilisée pour récupérer le RCR qui servira pour la construction du login Manager CBS - * @param epn epn de la notice à chercher + * @param epn epn de la notice à chercher * @return La notice trouvée dans le CBS * @throws CBSException : erreur CBS */ @Override - public String getNoticeInitiale(DemandeModif demandeModif, String epn) throws CBSException { + public Exemplaire getNoticeInitiale(DemandeModif demandeModif, String epn) throws CBSException, CommException, ZoneException { try { getService().getTraitement().authenticate('M' + demandeModif.getRcr()); // appel getNoticeFromEPN sur EPN récupéré @@ -324,27 +326,26 @@ public String getNoticeInitiale(DemandeModif demandeModif, String epn) throws CB * Méthode de modification d'une notice en fonction du traitement * * @param demandeModif permet de récupérer le traitement à lancer sur la notice - * @param noticeInit notice récupérée du Sudoc sur laquelle on effectue le traitement + * @param exemplaire notice récupérée du Sudoc sur laquelle on effectue le traitement * @param ligneFichierModif informations à intégrer à la notice à traiter * @return la notice modifiée */ @Override - public String getNoticeTraitee(DemandeModif demandeModif, String noticeInit, LigneFichierModif ligneFichierModif) throws ZoneException { - String exempStr = Utilitaires.getExempFromNotice(noticeInit, ligneFichierModif.getEpn()); + public Exemplaire getNoticeTraitee(DemandeModif demandeModif, Exemplaire exemplaire, LigneFichierModif ligneFichierModif) throws ZoneException { switch (demandeModif.getTraitement().getNomMethode()) { case "creerNouvelleZone": - return getService().getTraitement().creerNouvelleZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); + return getService().getTraitement().creerNouvelleZone(exemplaire, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); case "supprimerZone": - return getService().getTraitement().supprimerZone(exempStr, demandeModif.getZone()); + return getService().getTraitement().supprimerZone(exemplaire, demandeModif.getZone()); case "supprimerSousZone": - return getService().getTraitement().supprimerSousZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone()); + return getService().getTraitement().supprimerSousZone(exemplaire, demandeModif.getZone(), demandeModif.getSousZone()); case "ajoutSousZone": - return getService().getTraitement().creerSousZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); + return getService().getTraitement().creerSousZone(exemplaire, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); case "remplacerSousZone": - return getService().getTraitement().remplacerSousZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); + return getService().getTraitement().remplacerSousZone(exemplaire, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); default: } - return ""; + return null; } /** diff --git a/core/src/main/java/fr/abes/item/service/impl/DemandeRecouvService.java b/core/src/main/java/fr/abes/item/service/impl/DemandeRecouvService.java index d2eb7758..f44311c3 100644 --- a/core/src/main/java/fr/abes/item/service/impl/DemandeRecouvService.java +++ b/core/src/main/java/fr/abes/item/service/impl/DemandeRecouvService.java @@ -1,11 +1,14 @@ package fr.abes.item.service.impl; -import fr.abes.cbs.exception.CBSException; +import fr.abes.cbs.exception.CommException; import fr.abes.item.components.Fichier; import fr.abes.item.components.FichierEnrichiRecouv; import fr.abes.item.constant.Constant; import fr.abes.item.constant.TYPE_DEMANDE; -import fr.abes.item.entities.item.*; +import fr.abes.item.entities.item.Demande; +import fr.abes.item.entities.item.DemandeRecouv; +import fr.abes.item.entities.item.EtatDemande; +import fr.abes.item.entities.item.Utilisateur; import fr.abes.item.exception.DemandeCheckingException; import fr.abes.item.exception.FileCheckingException; import fr.abes.item.exception.FileTypeException; @@ -289,7 +292,7 @@ private int getPreviousState(int etatDemande) { } @Override - public int launchQueryToSudoc(String codeIndex, String valeurs) throws CBSException, QueryToSudocException { + public int launchQueryToSudoc(String codeIndex, String valeurs) throws CommException, QueryToSudocException { String[] tabvaleurs = valeurs.split(";"); String query = getQueryToSudoc(codeIndex, tabvaleurs); getService().getTraitement().getCbs().search(query); diff --git a/core/src/main/java/fr/abes/item/service/impl/StatusService.java b/core/src/main/java/fr/abes/item/service/impl/StatusService.java index 251001c5..d8d158ce 100644 --- a/core/src/main/java/fr/abes/item/service/impl/StatusService.java +++ b/core/src/main/java/fr/abes/item/service/impl/StatusService.java @@ -1,6 +1,7 @@ package fr.abes.item.service.impl; import fr.abes.cbs.exception.CBSException; +import fr.abes.cbs.exception.CommException; import fr.abes.cbs.process.ProcessCBS; import fr.abes.item.constant.Constant; import fr.abes.item.service.IStatusService; @@ -48,7 +49,7 @@ public Boolean getCbsConnectionStatus(){ try { cbs.authenticate(serveurSudoc, portSudoc, login, Constant.PASSSUDOC); return true; - } catch (CBSException e) { + } catch (CBSException | CommException e) { log.error("serveur " + serveurSudoc + " : " + e.getMessage()); return false; } diff --git a/core/src/main/java/fr/abes/item/service/impl/TraitementService.java b/core/src/main/java/fr/abes/item/service/impl/TraitementService.java index 6eb31cc0..e8e815a5 100644 --- a/core/src/main/java/fr/abes/item/service/impl/TraitementService.java +++ b/core/src/main/java/fr/abes/item/service/impl/TraitementService.java @@ -1,8 +1,10 @@ package fr.abes.item.service.impl; import fr.abes.cbs.exception.CBSException; +import fr.abes.cbs.exception.CommException; import fr.abes.cbs.exception.ZoneException; import fr.abes.cbs.notices.Exemplaire; +import fr.abes.cbs.notices.NoticeConcrete; import fr.abes.cbs.notices.Zone; import fr.abes.cbs.process.ProcessCBS; import fr.abes.cbs.utilitaire.Constants; @@ -14,6 +16,7 @@ import fr.abes.item.utilitaire.Utilitaires; import lombok.Getter; import lombok.extern.slf4j.Slf4j; +import org.apache.logging.log4j.Level; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -21,6 +24,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import java.util.Optional; @Slf4j @Service @@ -31,8 +35,6 @@ public class TraitementService implements ITraitementService { @Value("${sudoc.port}") private String portSudoc; - - private String datePattern = "dd-MM-yyyy HH:mm"; @Getter private ProcessCBS cbs; @@ -45,108 +47,111 @@ public TraitementService() { } @Override - public void authenticate(String login) throws CBSException { + public void authenticate(String login) throws CBSException, CommException { this.cbs.authenticate(serveurSudoc, portSudoc, login, Constant.PASSSUDOC); + log.debug("je suis authentifié"); } /** * Méthode de recherche d'un EPN et de récupération du premier exemplaire d'une notice + * * @param epn : epn à rechercher * @return notice d'exemplaire trouvée * @throws CBSException : Erreur CBS */ @Override - public String getNoticeFromEPN(String epn) throws CBSException { + public Exemplaire getNoticeFromEPN(String epn) throws CBSException, CommException, ZoneException { cbs.search("che EPN " + epn); if (cbs.getNbNotices() == 1) { - String noticeEpn = cbs.getClientCBS().mod("1", String.valueOf(cbs.getLotEncours())); - String numEx = Utilitaires.getNumExFromExemp(Utilitaires.getExempFromNotice(noticeEpn, epn)); - String resu = cbs.getClientCBS().modE(numEx, String.valueOf(cbs.getLotEncours())); - cbs.back(); - String resu2 = Utilitaire.recupEntre(resu, Constants.VTXTE, Constants.STR_0D + Constants.STR_0D + Constants.STR_1E); - return Constants.STR_1F + resu2.substring(resu2.indexOf("e" + numEx)) + Constants.STR_0D + Constants.STR_1E; + NoticeConcrete noticeEpn = cbs.editerNoticeConcrete("1"); + Optional exempOpt = noticeEpn.getExemplaires().stream().filter(exemplaire -> exemplaire.findZone("A99", 0).getValeur().equals(epn)).findFirst(); + if (exempOpt.isPresent()) + return exempOpt.get(); + else { + log.error(epn + " pas trouvé"); + throw new CBSException(Level.ERROR, Constant.ERR_FILE_NOTICE_EPN_NUMBER); + } } - else - throw new CBSException(Constant.CBS_PREFIX + Constants.VERROR, Constant.ERR_FILE_NOTICE_EPN_NUMBER); + return null; } /** * Méthode permettant d'ajouter une zone / sous zone dans une notice d'exemplaire - * @param notice notice à modifier + * + * @param exemp notice à modifier * @return notice avec nouvelle zone / sous zone préfixée de STR_1F */ @Override - public String creerNouvelleZone(String notice, String tag, String subTag, String valeur) throws ZoneException { - Exemplaire exemp = new Exemplaire(notice); + public Exemplaire creerNouvelleZone(Exemplaire exemp, String tag, String subTag, String valeur) throws ZoneException { exemp.addZone(tag, subTag, valeur); exemp = ajout991(exemp); - return exemp.toString(); + return exemp; } /** * Méthode permettant la suppression d'une zone dans une notice d'exemplaire - * @param notice notice biblio + exemplaires - * @param tag zone à supprimer + * + * @param exemp notice biblio + exemplaires + * @param tag zone à supprimer * @return chaine de l'exemplaire modifié préfixé par STR_1F */ @Override - public String supprimerZone(String notice, String tag) throws ZoneException { - Exemplaire exemp = new Exemplaire(notice); + public Exemplaire supprimerZone(Exemplaire exemp, String tag) throws ZoneException { exemp.deleteZone(tag); exemp = ajout991(exemp); - return exemp.toString(); + return exemp; } /** * Méthode permettant la suppression d'une sous-zone dans une notice d'exemplaire - * @param notice notice biblio + exemplaires - * @param tag zone qui contient la sous-zone + * + * @param exemp notice biblio + exemplaires + * @param tag zone qui contient la sous-zone * @param subTag zone à supprimer * @return chaine de l'exemplaire modifié préfixé par STR_1F */ @Override - public String supprimerSousZone(String notice, String tag, String subTag) throws ZoneException { - Exemplaire exemp = new Exemplaire(notice); + public Exemplaire supprimerSousZone(Exemplaire exemp, String tag, String subTag) throws ZoneException { exemp.deleteSousZone(tag, subTag); exemp = ajout991(exemp); - return exemp.toString(); + return exemp; } /** * Méthode permettant la création d'une sous-zone dans une notice d'exemplaire - * @param notice notice biblio + exemplaires - * @param tag zone qui contient la sous-zone + * + * @param exemp notice biblio + exemplaires + * @param tag zone qui contient la sous-zone * @param subTag sous-zone à créer * @param valeur valeur associée à la sous zone (la sous-zone est la clé) - * @return + * @return l'exemplaire modifié */ @Override - public String creerSousZone(String notice, String tag, String subTag, String valeur) throws ZoneException { - Exemplaire exemp = new Exemplaire(notice); + public Exemplaire creerSousZone(Exemplaire exemp, String tag, String subTag, String valeur) throws ZoneException { exemp.addSousZone(tag, subTag, valeur); exemp = ajout991(exemp); - return exemp.toString(); + return exemp; } /** * Méthode permettant le remplacement d'une sous-zone dans une notice d'exemplaire - * @param notice notice biblio + exemplaires - * @param tag zone qui contient la sous-zone + * + * @param exemp notice biblio + exemplaires + * @param tag zone qui contient la sous-zone * @param subTag sous-zone à remplacer * @param valeur valeur associée à la sous zone (la sous-zone est la clé) - * @return + * @return l'exemplaire modifié */ @Override - public String remplacerSousZone(String notice, String tag, String subTag, String valeur) throws ZoneException { - Exemplaire exemp = new Exemplaire(notice); + public Exemplaire remplacerSousZone(Exemplaire exemp, String tag, String subTag, String valeur) throws ZoneException { try { exemp.replaceSousZone(tag, subTag, valeur); exemp = ajout991(exemp); } catch (NullPointerException ex) { log.debug("Zone / sous zone absente de la notice à modifier"); } - return exemp.toString(); + return exemp; } /** @@ -155,6 +160,7 @@ public String remplacerSousZone(String notice, String tag, String subTag, String * @return exemplaire modifié */ public Exemplaire ajout991(Exemplaire exemp) throws ZoneException { + String datePattern = "dd-MM-yyyy HH:mm"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat(datePattern); String date = simpleDateFormat.format(new Date()); char[] indicateurs = new char[2]; @@ -177,9 +183,10 @@ public Exemplaire ajout991(Exemplaire exemp) throws ZoneException { * @throws CBSException : erreur CBS */ @Override - public String saveExemplaire(String noticeModifiee, String epn) throws CBSException { + public String saveExemplaire(String noticeModifiee, String epn) throws CBSException, CommException { String numEx = Utilitaires.getNumExFromExemp(noticeModifiee); String noticeModifieeClean = "e" + numEx + Utilitaire.recupEntre(noticeModifiee, 'e' + numEx, Constants.STR_1E); + log.debug(epn + " sauvegarde exemplaire"); return cbs.modifierExemp(noticeModifieeClean, numEx); } @@ -195,7 +202,7 @@ public void disconnect() throws CBSException { /** * Retourner l'ensemble de la liste des traitements disponibles - * @return + * @return liste de tous les traitements */ @Override public List findAll() { diff --git a/core/src/main/java/fr/abes/item/utilitaire/Utilitaires.java b/core/src/main/java/fr/abes/item/utilitaire/Utilitaires.java index e53f4363..71081e3f 100644 --- a/core/src/main/java/fr/abes/item/utilitaire/Utilitaires.java +++ b/core/src/main/java/fr/abes/item/utilitaire/Utilitaires.java @@ -10,8 +10,6 @@ import fr.abes.item.exception.FileCheckingException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.apache.tomcat.util.buf.Utf8Decoder; -import org.apache.tomcat.util.buf.Utf8Encoder; import java.io.IOException; import java.util.ArrayList; @@ -87,7 +85,7 @@ public static String checkBom(String chaine) { * @return numéro d'exemplaire dans la notice correspondant à l'epn (format xx sans le e) */ public static String getNumExFromExemp(String exemp) { - return exemp.substring(2, 4); + return exemp.substring(1, 3); } /** diff --git a/core/src/test/java/fr/abes/item/service/TestDemandeExempService.java b/core/src/test/java/fr/abes/item/service/TestDemandeExempService.java index 03838532..e399c88f 100644 --- a/core/src/test/java/fr/abes/item/service/TestDemandeExempService.java +++ b/core/src/test/java/fr/abes/item/service/TestDemandeExempService.java @@ -2,7 +2,6 @@ import fr.abes.cbs.exception.CBSException; import fr.abes.cbs.exception.ZoneException; -import fr.abes.cbs.utilitaire.Constants; import fr.abes.item.constant.Constant; import fr.abes.item.dao.impl.DaoProvider; import fr.abes.item.service.impl.DemandeExempService; @@ -44,46 +43,42 @@ void getExempWithOneValue() throws ZoneException, CBSException { String header = "930 $c"; String valeur = "test"; - assertThat(demandeService.creerExemplaireFromHeaderEtValeur(header, valeur, RCR, NUMEXEMP)).contains(Constants.STR_1F + + assertThat(demandeService.creerExemplaireFromHeaderEtValeur(header, valeur, RCR, NUMEXEMP)).contains( "e01 $bx\r" + "930 ##$b341725201$ctest\r" + - "991 ##$a" + Constant.TEXTE_991_CREA + " le " + formater.format(aujourdhui) + "\r" + - Constants.STR_1E); + "991 ##$a" + Constant.TEXTE_991_CREA + " le " + formater.format(aujourdhui) + "\r"); } @Test void getExempWithOneZoneAndTwoSousZones() throws ZoneException, CBSException { String header = "930 $d;$c"; String valeur = "testd;testc"; - assertThat(demandeService.creerExemplaireFromHeaderEtValeur(header, valeur, RCR, NUMEXEMP)).contains(Constants.STR_1F + + assertThat(demandeService.creerExemplaireFromHeaderEtValeur(header, valeur, RCR, NUMEXEMP)).contains( "e01 $bx\r" + "930 ##$b341725201$ctestc$dtestd\r" + - "991 ##$a" + Constant.TEXTE_991_CREA + " le " + formater.format(aujourdhui) + "\r" + - Constants.STR_1E); + "991 ##$a" + Constant.TEXTE_991_CREA + " le " + formater.format(aujourdhui) + "\r"); } @Test void getExempWithTwoZonesAndOneSousZone() throws ZoneException, CBSException { String header = "930 $d;915 $a"; String valeur = "testd;testa"; - assertThat(demandeService.creerExemplaireFromHeaderEtValeur(header, valeur, RCR, NUMEXEMP)).contains(Constants.STR_1F + + assertThat(demandeService.creerExemplaireFromHeaderEtValeur(header, valeur, RCR, NUMEXEMP)).contains( "e01 $bx\r" + "915 ##$atesta\r" + "930 ##$b341725201$dtestd\r" + - "991 ##$a" + Constant.TEXTE_991_CREA + " le " + formater.format(aujourdhui) + "\r" + - Constants.STR_1E); + "991 ##$a" + Constant.TEXTE_991_CREA + " le " + formater.format(aujourdhui) + "\r"); } @Test void getExempWithTwoZonesAndTwoSousZone() throws ZoneException, CBSException { String header = "930 $d;$c;915 $a;$b"; String valeur = "testd;testc;test2;test3"; - assertThat(demandeService.creerExemplaireFromHeaderEtValeur(header, valeur, RCR, NUMEXEMP)).contains(Constants.STR_1F + + assertThat(demandeService.creerExemplaireFromHeaderEtValeur(header, valeur, RCR, NUMEXEMP)).contains( "e01 $bx\r" + "915 ##$atest2$btest3\r" + "930 ##$b341725201$ctestc$dtestd\r" + - "991 ##$a" + Constant.TEXTE_991_CREA + " le " + formater.format(aujourdhui) + "\r" + - Constants.STR_1E); + "991 ##$a" + Constant.TEXTE_991_CREA + " le " + formater.format(aujourdhui) + "\r"); } @Test @@ -91,13 +86,12 @@ void getExempWithThreeZonesAndTwoSousZone() throws ZoneException, CBSException { String header = "E317 $a;E856 $u;$9;930 $j"; String valeur = "DeGruyter LN;http://buadistant;2018-145;g;"; String notice = demandeService.creerExemplaireFromHeaderEtValeur(header, valeur, RCR, NUMEXEMP); - assertThat(notice).contains(Constants.STR_1F + + assertThat(notice).contains( "e01 $bx\r" + "930 ##$b341725201$jg\r" + "991 ##$a" + Constant.TEXTE_991_CREA + " le " + formater.format(aujourdhui) + "\r" + "E317 ##$aDeGruyter LN\r" + - "E856 ##$uhttp://buadistant$92018-145\r" + - Constants.STR_1E); + "E856 ##$uhttp://buadistant$92018-145\r"); } @Test @@ -105,13 +99,11 @@ void getExempWithALotOfEverything() throws ZoneException, CBSException { String header = "930 $d;$c;915 $a;$b"; String valeur = "testd;testc;test2;test3"; String notice = demandeService.creerExemplaireFromHeaderEtValeur(header, valeur, RCR, NUMEXEMP); - assertThat(notice).isEqualTo(Constants.STR_1F + + assertThat(notice).isEqualTo( "e01 $bx\r" + "915 ##$atest2$btest3\r" + "930 ##$b341725201$ctestc$dtestd\r" + - "991 ##$a" + Constant.TEXTE_991_CREA + " le " + formater.format(aujourdhui) + "\r" + - Constants.STR_1E - ); + "991 ##$a" + Constant.TEXTE_991_CREA + " le " + formater.format(aujourdhui) + "\r"); } @Test @@ -119,16 +111,14 @@ void getExempWithALotOfEverything2() throws ZoneException, CBSException { String header = "E856$u;$l;$z;930$a;$j;955 41$a;$k;$4;991$a;E702$3"; String valeur = "https://federation.unimes.fr:8443/login?url=https://rd.springer.com/journal/766;UN | DIP;[Springer Journal Archives - Licence Nationale - Accès UNîmes] (1996)-(2014);Springer Journal Archives;g;1996;2014;Springer Journal Archives;Springer-revues-UN;test"; String notice = demandeService.creerExemplaireFromHeaderEtValeur(header, valeur, RCR, NUMEXEMP); - assertThat(notice).isEqualTo(Constants.STR_1F + + assertThat(notice).isEqualTo( "e01 $bx\r" + "930 ##$b341725201$aSpringer Journal Archives$jg\r" + "955 ##$a1996$k2014$4Springer Journal Archives\r" + "991 ##$aSpringer-revues-UN\r" + "991 ##$a" + Constant.TEXTE_991_CREA + " le " + formater.format(aujourdhui) + "\r" + "E702 ##$3test\r" + - "E856 ##$lUN | DIP$uhttps://federation.unimes.fr:8443/login?url=https://rd.springer.com/journal/766$z[Springer Journal Archives - Licence Nationale - Accès UNîmes] (1996)-(2014)\r" + - Constants.STR_1E - ); + "E856 ##$lUN | DIP$uhttps://federation.unimes.fr:8443/login?url=https://rd.springer.com/journal/766$z[Springer Journal Archives - Licence Nationale - Accès UNîmes] (1996)-(2014)\r"); } @Test @@ -140,7 +130,7 @@ void getExempWithMaxZonesAndSouszones() throws ZoneException, CBSException { // WHEN String notice = demandeService.creerExemplaireFromHeaderEtValeur(header, valeur, RCR, NUMEXEMP); // THEN - assertThat(notice).isEqualTo(Constants.STR_1F + + assertThat(notice).isEqualTo( "e01 $bx\r" + "915 ##$a915a$b915b\r" + "917 ##$a917a\r" + @@ -150,7 +140,7 @@ void getExempWithMaxZonesAndSouszones() throws ZoneException, CBSException { "999 ##$a999a$b999b$c999c$i999i$o999o$s999s$z999z\r" + "E316 ##$aE316a\r" + "E317 ##$aE317a\r" + - "E319 ##$aE319a$bE319b$cE319c$dE319d$xE319x\r" + Constants.STR_1E); + "E319 ##$aE319a$bE319b$cE319c$dE319d$xE319x\r"); } @Test @@ -159,11 +149,10 @@ void getExempWithSomeEmptyTag() throws ZoneException, CBSException { String valeur = ";DROIT;SDR;M31733;a"; String notice = demandeService.creerExemplaireFromHeaderEtValeur(header, valeur, RCR, NUMEXEMP); - assertThat(notice).isEqualTo(Constants.STR_1F + + assertThat(notice).isEqualTo( "e01 $bx\r" + "930 ##$b341725201$cDROIT$dSDR$aM31733$ja\r" + - "991 ##$a" + Constant.TEXTE_991_CREA + " le " + formater.format(aujourdhui) + "\r" + - Constants.STR_1E); + "991 ##$a" + Constant.TEXTE_991_CREA + " le " + formater.format(aujourdhui) + "\r"); } diff --git a/core/src/test/java/fr/abes/item/service/TestTraitementService.java b/core/src/test/java/fr/abes/item/service/TestTraitementService.java index 2ca5a16a..e76182ac 100644 --- a/core/src/test/java/fr/abes/item/service/TestTraitementService.java +++ b/core/src/test/java/fr/abes/item/service/TestTraitementService.java @@ -1,15 +1,15 @@ package fr.abes.item.service; -import fr.abes.cbs.exception.CBSException; import fr.abes.cbs.exception.ZoneException; import fr.abes.cbs.notices.Exemplaire; +import fr.abes.cbs.notices.TYPE_NOTICE; +import fr.abes.cbs.notices.Zone; import fr.abes.cbs.utilitaire.Constants; import fr.abes.item.service.impl.TraitementService; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.io.IOException; import java.util.Properties; import static org.assertj.core.api.Assertions.assertThat; @@ -29,72 +29,107 @@ static void initAll() { @DisplayName("test creerNouvelleZone") @Test void creerNouvelleZone() throws ZoneException { - StringBuilder noticeInit = new StringBuilder(Constants.STR_1F).append("e01 $a17-09-18$bx\r" + - "930 ##$b341720001\r" + - "A97 17-09-18 10:51:56.000\r" + - "A98 341720001:17-09-18\r" + - "A99 618828249\r").append(Constants.STR_0D + Constants.STR_0D + Constants.STR_1E); - String result = tManager.creerNouvelleZone(noticeInit.toString(), "915", "$a", "1"); - assertThat(result).startsWith(Constants.STR_1F + "e01 $a17-09-18$bx\r" + + Exemplaire noticeInit = new Exemplaire(); + Zone e01 = new Zone("e01", TYPE_NOTICE.EXEMPLAIRE); + e01.addSubLabel("$a", "17-09-18"); + e01.addSubLabel("$b", "x"); + Zone zone930 = new Zone("930", TYPE_NOTICE.EXEMPLAIRE, new char[]{'#', '#'}); + zone930.addSubLabel("$b", "341720001"); + Zone zoneA97 = new Zone("A97", TYPE_NOTICE.EXEMPLAIRE, "17-09-18 10:51:56.000"); + Zone zoneA98 = new Zone("A98", TYPE_NOTICE.EXEMPLAIRE, "341720001:17-09-18"); + Zone zoneA99 = new Zone("A99", TYPE_NOTICE.EXEMPLAIRE, "618828249"); + + noticeInit.addZone(e01); + noticeInit.addZone(zone930); + noticeInit.addZone(zoneA97); + noticeInit.addZone(zoneA98); + noticeInit.addZone(zoneA99); + + Exemplaire result = tManager.creerNouvelleZone(noticeInit, "915", "$a", "1"); + assertThat(result.toString()).startsWith("e01 $a17-09-18$bx\r" + "915 $a1\r" + "930 ##$b341720001\r" + "991 ##$a"); - assertThat(result).endsWith("A97 17-09-18 10:51:56.000\r" + + assertThat(result.toString()).endsWith("A97 17-09-18 10:51:56.000\r" + "A98 341720001:17-09-18\r" + - "A99 618828249\r" + Constants.STR_1E); + "A99 618828249\r"); } @DisplayName("test creerNouvelleZoneWithRepetableTag") @Test void creerNouvelleZoneWithRepeatableTag() throws ZoneException { - StringBuilder noticeInit = new StringBuilder(Constants.STR_1F).append("e01 $a17-09-18$bx\r" + - "930 ##$b341720001\r" + - "A97 17-09-18 10:51:56.000\r" + - "A98 341720001:17-09-18\r" + - "A99 618828249\r").append(Constants.STR_0D + Constants.STR_0D + Constants.STR_1E); - String result = tManager.creerNouvelleZone(noticeInit.toString(), "930", "$c", "test"); - assertThat(result).startsWith(Constants.STR_1F + "e01 $a17-09-18$bx\r" + + Exemplaire noticeInit = new Exemplaire(); + Zone e01 = new Zone("e01", TYPE_NOTICE.EXEMPLAIRE); + e01.addSubLabel("$a", "17-09-18"); + e01.addSubLabel("$b", "x"); + Zone zone930 = new Zone("930", TYPE_NOTICE.EXEMPLAIRE, new char[]{'#', '#'}); + zone930.addSubLabel("$b", "341720001"); + Zone zoneA97 = new Zone("A97", TYPE_NOTICE.EXEMPLAIRE, "17-09-18 10:51:56.000"); + Zone zoneA98 = new Zone("A98", TYPE_NOTICE.EXEMPLAIRE, "341720001:17-09-18"); + Zone zoneA99 = new Zone("A99", TYPE_NOTICE.EXEMPLAIRE, "618828249"); + + noticeInit.addZone(e01); + noticeInit.addZone(zone930); + noticeInit.addZone(zoneA97); + noticeInit.addZone(zoneA98); + noticeInit.addZone(zoneA99); + + Exemplaire result = tManager.creerNouvelleZone(noticeInit, "930", "$c", "test"); + assertThat(result.toString()).startsWith("e01 $a17-09-18$bx\r" + "930 ##$b341720001\r" + "930 $ctest\r" + "991 ##$a"); - assertThat(result).endsWith("A97 17-09-18 10:51:56.000\r" + + assertThat(result.toString()).endsWith("A97 17-09-18 10:51:56.000\r" + "A98 341720001:17-09-18\r" + - "A99 618828249\r" + Constants.STR_1E); + "A99 618828249\r"); } @DisplayName("test supprimerZone") @Test public void supprimerZone() throws ZoneException { - StringBuilder notice = new StringBuilder().append(Constants.STR_1F + - "e02 $a02-12-05$bx\r" + - "930 ##$b340322102$a791 ETH$ju\r" + - "991 $aExemplaire créé automatiquement par l'ABES\r" + - "A97 02-12-05 10:01:06.000\r" + - "A98 340322102:02-12-05\r" + - "A99 248333186" + Constants.STR_0D + Constants.STR_1E); - String result = tManager.supprimerZone(notice.toString(), "991"); - assertThat(result).startsWith(Constants.STR_1F + + Exemplaire noticeInit = new Exemplaire(); + Zone e01 = new Zone("e02", TYPE_NOTICE.EXEMPLAIRE); + e01.addSubLabel("$a", "02-12-05"); + e01.addSubLabel("$b", "x"); + Zone zone930 = new Zone("930", TYPE_NOTICE.EXEMPLAIRE, new char[]{'#', '#'}); + zone930.addSubLabel("$b", "340322102"); + zone930.addSubLabel("$a", "791 ETH"); + zone930.addSubLabel("$j", "u"); + Zone zone991 = new Zone("991", TYPE_NOTICE.EXEMPLAIRE); + zone991.addSubLabel("$a", "Exemplaire créé automatiquement par l'ABES"); + Zone zoneA97 = new Zone("A97", TYPE_NOTICE.EXEMPLAIRE, "02-12-05 10:01:06.000"); + Zone zoneA98 = new Zone("A98", TYPE_NOTICE.EXEMPLAIRE, "340322102:02-12-05"); + Zone zoneA99 = new Zone("A99", TYPE_NOTICE.EXEMPLAIRE, "248333186"); + + noticeInit.addZone(e01); + noticeInit.addZone(zone930); + noticeInit.addZone(zone991); + noticeInit.addZone(zoneA97); + noticeInit.addZone(zoneA98); + noticeInit.addZone(zoneA99); + + Exemplaire result = tManager.supprimerZone(noticeInit, "991"); + assertThat(result.toString()).startsWith( "e02 $a02-12-05$bx\r" + "930 ##$b340322102$a791 ETH$ju\r" + "991 ##$a"); - assertThat(result).endsWith( + assertThat(result.toString()).endsWith( "A97 02-12-05 10:01:06.000\r" + "A98 340322102:02-12-05\r" + - "A99 248333186\r" + Constants.STR_1E - ); + "A99 248333186\r"); } @DisplayName("Test ajout 991") @Test public void ajout991() throws ZoneException { - StringBuilder notice = new StringBuilder().append(Constants.STR_1F + + StringBuilder notice = new StringBuilder().append( "e02 $a02-12-05$bx\r" + "930 ##$b340322102$a791 ETH$ju\r" + "991 ##$aExemplaire créé automatiquement par l'ABES\r" + "A97 02-12-05 10:01:06.000\r" + "A98 340322102:02-12-05\r" + - "A99 248333186" + Constants.STR_0D + Constants.STR_1E); + "A99 248333186" + Constants.STR_0D); Exemplaire exemp = new Exemplaire(notice.toString()); String newExemp = tManager.ajout991(exemp).toString(); assertThat(newExemp).containsOnlyOnce("991 ##$aExemplaire modifié automatiquement"); diff --git a/core/src/test/java/fr/abes/item/utilitaire/testUtilitaires.java b/core/src/test/java/fr/abes/item/utilitaire/testUtilitaires.java index 0b40d9de..3a5fe62c 100644 --- a/core/src/test/java/fr/abes/item/utilitaire/testUtilitaires.java +++ b/core/src/test/java/fr/abes/item/utilitaire/testUtilitaires.java @@ -10,13 +10,10 @@ import org.junit.jupiter.api.Test; import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; class testUtilitaires { @DisplayName("checkExtensionExe") @@ -54,12 +51,12 @@ void checkChaineAvecBom() { @DisplayName("getNumExFromExempOneEx") @Test void getNumExFromExempOneEx() { - String noticeInit = Constants.STR_1F + "e01 $a17-09-18$bx\r" + + String noticeInit = "e01 $a17-09-18$bx\r" + "930 ##$b341720001\r" + "A97 17-09-18 10:51:56.000\r" + "A98 341720001:17-09-18\r" + "A99 618828249\r" + - Constants.STR_0D + Constants.STR_0D + Constants.STR_1E; + Constants.STR_0D + Constants.STR_0D; assertThat(Utilitaires.getNumExFromExemp(noticeInit)).isEqualTo("01"); } diff --git a/pom.xml b/pom.xml index 2f38a024..50370880 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ fr.abes.api-communes AccesCbs - 2.5.18 + 2.5.53 diff --git a/web/src/main/java/fr/abes/item/exception/RestResponseEntityExceptionHandler.java b/web/src/main/java/fr/abes/item/exception/RestResponseEntityExceptionHandler.java index 15bf9dfc..ebcd9a6d 100644 --- a/web/src/main/java/fr/abes/item/exception/RestResponseEntityExceptionHandler.java +++ b/web/src/main/java/fr/abes/item/exception/RestResponseEntityExceptionHandler.java @@ -1,6 +1,7 @@ package fr.abes.item.exception; import fr.abes.cbs.exception.CBSException; +import fr.abes.cbs.exception.ZoneException; import fr.abes.item.constant.Constant; import lombok.extern.slf4j.Slf4j; import org.springframework.data.rest.webmvc.support.ExceptionMessage; @@ -30,7 +31,7 @@ public ResponseEntity handleMiscFailures(Throwable t) { @ExceptionHandler({ DemandeCheckingException.class }) public ResponseEntity handleBadConditionsFailures(Throwable t) { return errorResponse(t, HttpStatus.PRECONDITION_FAILED);} - @ExceptionHandler({ CBSException.class, QueryToSudocException.class }) + @ExceptionHandler({ CBSException.class, ZoneException.class, QueryToSudocException.class }) public ResponseEntity handleBadRequestFailures(Throwable t) {return errorResponse(t, HttpStatus.BAD_REQUEST);} @ExceptionHandler({ ConstraintViolationException.class }) diff --git a/web/src/main/java/fr/abes/item/web/IDemandeRestService.java b/web/src/main/java/fr/abes/item/web/IDemandeRestService.java index 9bbebfe2..cd3075e9 100644 --- a/web/src/main/java/fr/abes/item/web/IDemandeRestService.java +++ b/web/src/main/java/fr/abes/item/web/IDemandeRestService.java @@ -1,6 +1,7 @@ package fr.abes.item.web; import fr.abes.cbs.exception.CBSException; +import fr.abes.cbs.exception.CommException; import fr.abes.cbs.exception.ZoneException; import fr.abes.item.constant.TYPE_DEMANDE; import fr.abes.item.entities.item.*; @@ -71,7 +72,7 @@ String uploadDemande(@RequestParam(required = false, defaultValue = "MODIF") TYP @GetMapping("/simulerLigne") @ApiOperation(value = "permet de simuler la modification d'un exemplaire", notes="pour un exemplaire donné du fichier enrichi, renvoie un tableau contenant la notice avant et après modification") - String[] simulerLigne(@RequestParam(required = false, defaultValue = "MODIF") TYPE_DEMANDE type, @RequestParam Integer numDemande, @RequestParam Integer numLigne, HttpServletRequest request) throws CBSException, UserExistException, ForbiddenException, QueryToSudocException, ZoneException; + String[] simulerLigne(@RequestParam(required = false, defaultValue = "MODIF") TYPE_DEMANDE type, @RequestParam Integer numDemande, @RequestParam Integer numLigne, HttpServletRequest request) throws CBSException, UserExistException, ForbiddenException, QueryToSudocException, ZoneException, CommException; @GetMapping("/passerEnAttente") @ApiOperation(value = "permet de modifier le statut de la demande pour la passer à : en attente") diff --git a/web/src/main/java/fr/abes/item/web/impl/DemandeRestService.java b/web/src/main/java/fr/abes/item/web/impl/DemandeRestService.java index 71c04674..9f40d9e5 100644 --- a/web/src/main/java/fr/abes/item/web/impl/DemandeRestService.java +++ b/web/src/main/java/fr/abes/item/web/impl/DemandeRestService.java @@ -1,16 +1,15 @@ package fr.abes.item.web.impl; import fr.abes.cbs.exception.CBSException; +import fr.abes.cbs.exception.CommException; import fr.abes.cbs.exception.ZoneException; -import fr.abes.cbs.utilitaire.Constants; -import fr.abes.cbs.utilitaire.Utilitaire; +import fr.abes.cbs.notices.Exemplaire; import fr.abes.item.constant.Constant; import fr.abes.item.constant.TYPE_DEMANDE; import fr.abes.item.entities.item.*; import fr.abes.item.exception.*; import fr.abes.item.security.CheckAccessToServices; import fr.abes.item.security.JwtTokenProvider; -import fr.abes.item.utilitaire.Utilitaires; import fr.abes.item.web.AbstractRestService; import fr.abes.item.web.IDemandeRestService; import lombok.extern.slf4j.Slf4j; @@ -306,25 +305,22 @@ public String uploadDemande(TYPE_DEMANDE type, MultipartFile file, Integer numDe @Override @GetMapping("/simulerLigne") public String[] simulerLigne(TYPE_DEMANDE type, @RequestParam Integer numDemande, @RequestParam Integer numLigne, HttpServletRequest request) - throws CBSException, UserExistException, ForbiddenException, ZoneException { + throws CBSException, UserExistException, ForbiddenException, ZoneException, CommException { checkAccessToServices.autoriserAccesDemandeParIln(numDemande, request.getAttribute(Constant.USER_NUM).toString()); switch (type) { case MODIF: try { LigneFichierModif ligneFichierModif = getService().getDemandeModif().getLigneFichier((DemandeModif) getService().getDemandeModif().findById(numDemande), numLigne); /*Notice init := notice avant traitement*/ - String noticeInit = getService().getDemandeModif().getNoticeInitiale((DemandeModif) getService().getDemandeModif().findById(numDemande), ligneFichierModif.getEpn()); - noticeInit = getService().getDemandeModif().getSeparationBetweenBlocks(noticeInit); /*Gestion des espaces zones locales zones système*/ - + Exemplaire noticeInit = getService().getDemandeModif().getNoticeInitiale((DemandeModif) getService().getDemandeModif().findById(numDemande), ligneFichierModif.getEpn()); + String noticeInitStr = noticeInit.toString().replace("\r", "\r\n"); /*Notice traitée := notice après traitement*/ - String noticeTraitee = getService().getDemandeModif().getNoticeTraitee((DemandeModif) getService().getDemandeModif().findById(numDemande), noticeInit, ligneFichierModif); - noticeTraitee = getService().getDemandeModif().getSeparationBetweenBlocks((noticeTraitee)); + Exemplaire noticeTraitee = getService().getDemandeModif().getNoticeTraitee((DemandeModif) getService().getDemandeModif().findById(numDemande), noticeInit, ligneFichierModif); - String numEx = Utilitaires.getNumExFromExemp(noticeInit); return new String[]{ getService().getTraitement().getCbs().getPpnEncours(), - Utilitaire.recupEntre(Utilitaire.recupEntre(noticeInit, Constants.STR_1F, Constants.STR_0D + Constants.STR_1E), 'e' + numEx, "").replace("\r", "\r\n"), - Utilitaire.recupEntre(Utilitaire.recupEntre(noticeTraitee, Constants.STR_1F, Constants.STR_0D + Constants.STR_1E), 'e' + numEx, "").replace("\r", "\r\n") + noticeInitStr, + noticeTraitee.toString().replace("\r", "\r\n") }; } catch (NullPointerException ex) { throw new NullPointerException(Constant.FILE_END); From d5af8619fba14979a5d3f684215c8ea2994b496e Mon Sep 17 00:00:00 2001 From: pierre-maraval Date: Thu, 21 Mar 2024 10:56:29 +0100 Subject: [PATCH 5/5] =?UTF-8?q?Fix=20:=20modification=20de=20notices=20d'e?= =?UTF-8?q?xemplaires=20suite=20=C3=A0=20upgrade=20accesCbs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/abes/item/traitement/ProxyRetry.java | 2 +- .../item/service/IDemandeModifService.java | 4 +- .../abes/item/service/ITraitementService.java | 12 +- .../service/impl/DemandeModifService.java | 15 +- .../item/service/impl/TraitementService.java | 354 +++++++++--------- .../fr/abes/item/utilitaire/Utilitaires.java | 4 +- .../item/service/TestTraitementService.java | 84 ++--- .../abes/item/utilitaire/testUtilitaires.java | 2 +- .../item/web/impl/DemandeRestService.java | 4 +- 9 files changed, 224 insertions(+), 257 deletions(-) diff --git a/batch/src/main/java/fr/abes/item/traitement/ProxyRetry.java b/batch/src/main/java/fr/abes/item/traitement/ProxyRetry.java index fb28e7d7..c1a87585 100644 --- a/batch/src/main/java/fr/abes/item/traitement/ProxyRetry.java +++ b/batch/src/main/java/fr/abes/item/traitement/ProxyRetry.java @@ -70,7 +70,7 @@ public void saveExemplaire(DemandeModif demande, LigneFichierDtoModif ligneFichi ILigneFichierDtoMapper ligneFichierDtoMapper = factory.getStrategy(ILigneFichierDtoMapper.class, TYPE_DEMANDE.MODIF); try { //récupération de la exemplaire correpondant à la ligne du fichier en cours - Exemplaire exemplaire = getService().getTraitement().getNoticeFromEPN(ligneFichierDtoModif.getEpn()); + String exemplaire = getService().getTraitement().getNoticeFromEPN(ligneFichierDtoModif.getEpn()); //modification de la exemplaire d'exemplaire Exemplaire noticeTraitee = getService().getDemandeModif().getNoticeTraitee(demande, exemplaire, (LigneFichierModif) ligneFichierDtoMapper.getLigneFichierEntity(ligneFichierDtoModif)); getService().getTraitement().saveExemplaire(noticeTraitee.toString(), ligneFichierDtoModif.getEpn()); diff --git a/core/src/main/java/fr/abes/item/service/IDemandeModifService.java b/core/src/main/java/fr/abes/item/service/IDemandeModifService.java index 4cd2f2f7..c93fd4c5 100644 --- a/core/src/main/java/fr/abes/item/service/IDemandeModifService.java +++ b/core/src/main/java/fr/abes/item/service/IDemandeModifService.java @@ -48,9 +48,9 @@ public interface IDemandeModifService extends IDemandeService{ LigneFichierModif getLigneFichier(DemandeModif demandeModif, Integer numLigne); - Exemplaire getNoticeInitiale(DemandeModif demandeModif, String epn) throws CBSException, CommException, ZoneException; + String getNoticeInitiale(DemandeModif demandeModif, String epn) throws CBSException, CommException, ZoneException; - Exemplaire getNoticeTraitee(DemandeModif demandeModif, Exemplaire noticeInit, LigneFichierModif ligneFichierModif) throws ZoneException; + Exemplaire getNoticeTraitee(DemandeModif demandeModif, String noticeInit, LigneFichierModif ligneFichierModif) throws ZoneException; String stockerFichier(MultipartFile file, Demande demande) throws IOException, FileTypeException, FileCheckingException, DemandeCheckingException; diff --git a/core/src/main/java/fr/abes/item/service/ITraitementService.java b/core/src/main/java/fr/abes/item/service/ITraitementService.java index 80e9cd08..8d19abd8 100644 --- a/core/src/main/java/fr/abes/item/service/ITraitementService.java +++ b/core/src/main/java/fr/abes/item/service/ITraitementService.java @@ -30,17 +30,17 @@ public interface ITraitementService { void authenticate(String login) throws CBSException, CommException; - Exemplaire getNoticeFromEPN(String epn) throws CBSException, CommException, ZoneException; + String getNoticeFromEPN(String epn) throws CBSException, CommException, ZoneException; - Exemplaire creerNouvelleZone(Exemplaire notice, String tag, String subTag, String valeur) throws ZoneException; + Exemplaire creerNouvelleZone(String notice, String tag, String subTag, String valeur) throws ZoneException; - Exemplaire supprimerZone(Exemplaire notice, String tag) throws ZoneException; + Exemplaire supprimerZone(String notice, String tag) throws ZoneException; - Exemplaire supprimerSousZone(Exemplaire notice, String tag, String subTag) throws ZoneException; + Exemplaire supprimerSousZone(String notice, String tag, String subTag) throws ZoneException; - Exemplaire creerSousZone(Exemplaire notice, String tag, String subTag, String valeur) throws ZoneException; + Exemplaire creerSousZone(String notice, String tag, String subTag, String valeur) throws ZoneException; - Exemplaire remplacerSousZone(Exemplaire notice, String tag, String subTag, String valeur) throws ZoneException; + Exemplaire remplacerSousZone(String notice, String tag, String subTag, String valeur) throws ZoneException; String saveExemplaire(String noticeModifiee, String epn) throws CBSException, CommException; diff --git a/core/src/main/java/fr/abes/item/service/impl/DemandeModifService.java b/core/src/main/java/fr/abes/item/service/impl/DemandeModifService.java index beb57003..6575a0d5 100644 --- a/core/src/main/java/fr/abes/item/service/impl/DemandeModifService.java +++ b/core/src/main/java/fr/abes/item/service/impl/DemandeModifService.java @@ -311,7 +311,7 @@ public LigneFichierModif getLigneFichier(DemandeModif demandeModif, Integer numL * @throws CBSException : erreur CBS */ @Override - public Exemplaire getNoticeInitiale(DemandeModif demandeModif, String epn) throws CBSException, CommException, ZoneException { + public String getNoticeInitiale(DemandeModif demandeModif, String epn) throws CBSException, CommException, ZoneException { try { getService().getTraitement().authenticate('M' + demandeModif.getRcr()); // appel getNoticeFromEPN sur EPN récupéré @@ -331,18 +331,19 @@ public Exemplaire getNoticeInitiale(DemandeModif demandeModif, String epn) throw * @return la notice modifiée */ @Override - public Exemplaire getNoticeTraitee(DemandeModif demandeModif, Exemplaire exemplaire, LigneFichierModif ligneFichierModif) throws ZoneException { + public Exemplaire getNoticeTraitee(DemandeModif demandeModif, String exemplaire, LigneFichierModif ligneFichierModif) throws ZoneException { + String exempStr = Utilitaires.getExempFromNotice(exemplaire, ligneFichierModif.getEpn()); switch (demandeModif.getTraitement().getNomMethode()) { case "creerNouvelleZone": - return getService().getTraitement().creerNouvelleZone(exemplaire, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); + return getService().getTraitement().creerNouvelleZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); case "supprimerZone": - return getService().getTraitement().supprimerZone(exemplaire, demandeModif.getZone()); + return getService().getTraitement().supprimerZone(exempStr, demandeModif.getZone()); case "supprimerSousZone": - return getService().getTraitement().supprimerSousZone(exemplaire, demandeModif.getZone(), demandeModif.getSousZone()); + return getService().getTraitement().supprimerSousZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone()); case "ajoutSousZone": - return getService().getTraitement().creerSousZone(exemplaire, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); + return getService().getTraitement().creerSousZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); case "remplacerSousZone": - return getService().getTraitement().remplacerSousZone(exemplaire, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); + return getService().getTraitement().remplacerSousZone(exempStr, demandeModif.getZone(), demandeModif.getSousZone(), ligneFichierModif.getValeurZone()); default: } return null; diff --git a/core/src/main/java/fr/abes/item/service/impl/TraitementService.java b/core/src/main/java/fr/abes/item/service/impl/TraitementService.java index e8e815a5..3c38f8a8 100644 --- a/core/src/main/java/fr/abes/item/service/impl/TraitementService.java +++ b/core/src/main/java/fr/abes/item/service/impl/TraitementService.java @@ -4,7 +4,6 @@ import fr.abes.cbs.exception.CommException; import fr.abes.cbs.exception.ZoneException; import fr.abes.cbs.notices.Exemplaire; -import fr.abes.cbs.notices.NoticeConcrete; import fr.abes.cbs.notices.Zone; import fr.abes.cbs.process.ProcessCBS; import fr.abes.cbs.utilitaire.Constants; @@ -24,195 +23,202 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; -import java.util.Optional; @Slf4j @Service public class TraitementService implements ITraitementService { - @Value("${sudoc.serveur}") - private String serveurSudoc; + @Value("${sudoc.serveur}") + private String serveurSudoc; - @Value("${sudoc.port}") - private String portSudoc; + @Value("${sudoc.port}") + private String portSudoc; - @Getter - private ProcessCBS cbs; + @Getter + private ProcessCBS cbs; - @Autowired @Getter - private DaoProvider dao; + @Autowired + @Getter + private DaoProvider dao; - public TraitementService() { - cbs = new ProcessCBS(); + public TraitementService() { + cbs = new ProcessCBS(); } - @Override - public void authenticate(String login) throws CBSException, CommException { - this.cbs.authenticate(serveurSudoc, portSudoc, login, Constant.PASSSUDOC); - log.debug("je suis authentifié"); - } - - /** - * Méthode de recherche d'un EPN et de récupération du premier exemplaire d'une notice - * - * @param epn : epn à rechercher - * @return notice d'exemplaire trouvée - * @throws CBSException : Erreur CBS - */ - @Override - public Exemplaire getNoticeFromEPN(String epn) throws CBSException, CommException, ZoneException { - cbs.search("che EPN " + epn); - if (cbs.getNbNotices() == 1) { - NoticeConcrete noticeEpn = cbs.editerNoticeConcrete("1"); - Optional exempOpt = noticeEpn.getExemplaires().stream().filter(exemplaire -> exemplaire.findZone("A99", 0).getValeur().equals(epn)).findFirst(); - if (exempOpt.isPresent()) - return exempOpt.get(); - else { - log.error(epn + " pas trouvé"); - throw new CBSException(Level.ERROR, Constant.ERR_FILE_NOTICE_EPN_NUMBER); - } - } - return null; - } - - /** - * Méthode permettant d'ajouter une zone / sous zone dans une notice d'exemplaire - * - * @param exemp notice à modifier - * @return notice avec nouvelle zone / sous zone préfixée de STR_1F - */ - @Override - public Exemplaire creerNouvelleZone(Exemplaire exemp, String tag, String subTag, String valeur) throws ZoneException { - exemp.addZone(tag, subTag, valeur); - exemp = ajout991(exemp); - return exemp; - } - - /** - * Méthode permettant la suppression d'une zone dans une notice d'exemplaire - * - * @param exemp notice biblio + exemplaires - * @param tag zone à supprimer - * @return chaine de l'exemplaire modifié préfixé par STR_1F - */ - @Override - public Exemplaire supprimerZone(Exemplaire exemp, String tag) throws ZoneException { - exemp.deleteZone(tag); - exemp = ajout991(exemp); - return exemp; - } - - /** - * Méthode permettant la suppression d'une sous-zone dans une notice d'exemplaire - * - * @param exemp notice biblio + exemplaires - * @param tag zone qui contient la sous-zone - * @param subTag zone à supprimer - * @return chaine de l'exemplaire modifié préfixé par STR_1F - */ - @Override - public Exemplaire supprimerSousZone(Exemplaire exemp, String tag, String subTag) throws ZoneException { - exemp.deleteSousZone(tag, subTag); - exemp = ajout991(exemp); - return exemp; - } - - - /** - * Méthode permettant la création d'une sous-zone dans une notice d'exemplaire - * - * @param exemp notice biblio + exemplaires - * @param tag zone qui contient la sous-zone - * @param subTag sous-zone à créer - * @param valeur valeur associée à la sous zone (la sous-zone est la clé) - * @return l'exemplaire modifié - */ - @Override - public Exemplaire creerSousZone(Exemplaire exemp, String tag, String subTag, String valeur) throws ZoneException { - exemp.addSousZone(tag, subTag, valeur); - exemp = ajout991(exemp); - return exemp; - } - - /** - * Méthode permettant le remplacement d'une sous-zone dans une notice d'exemplaire - * - * @param exemp notice biblio + exemplaires - * @param tag zone qui contient la sous-zone - * @param subTag sous-zone à remplacer - * @param valeur valeur associée à la sous zone (la sous-zone est la clé) - * @return l'exemplaire modifié - */ - @Override - public Exemplaire remplacerSousZone(Exemplaire exemp, String tag, String subTag, String valeur) throws ZoneException { - try { - exemp.replaceSousZone(tag, subTag, valeur); - exemp = ajout991(exemp); - } catch (NullPointerException ex) { - log.debug("Zone / sous zone absente de la notice à modifier"); - } - return exemp; - } - - /** - * Ajout d'une zone 991 $a indiquant la modification de la notice par le programme - * @param exemp exemplaire à modifier - * @return exemplaire modifié - */ - public Exemplaire ajout991(Exemplaire exemp) throws ZoneException { - String datePattern = "dd-MM-yyyy HH:mm"; - SimpleDateFormat simpleDateFormat = new SimpleDateFormat(datePattern); - String date = simpleDateFormat.format(new Date()); - char[] indicateurs = new char[2]; - indicateurs[0] = '#';indicateurs[1] = '#'; - String valeurToInsert = Constant.TEXTE_991_MODIF + " le " + date; - List listZone = exemp.findZoneWithPattern("991", "$a", Constant.TEXTE_991_MODIF); - if (listZone.isEmpty()) { - exemp.addZone("991", "$a", valeurToInsert, indicateurs); - } - else { - exemp.replaceSousZoneWithValue("991", "$a", Constant.TEXTE_991_MODIF, valeurToInsert); - } - return exemp; - } - - /** - * méthode de validation de la sauvegarde d'un exemplaire - * @param noticeModifiee notice à sauvegarder - * @return : retour CBS - * @throws CBSException : erreur CBS - */ - @Override - public String saveExemplaire(String noticeModifiee, String epn) throws CBSException, CommException { - String numEx = Utilitaires.getNumExFromExemp(noticeModifiee); - String noticeModifieeClean = "e" + numEx + Utilitaire.recupEntre(noticeModifiee, 'e' + numEx, Constants.STR_1E); - log.debug(epn + " sauvegarde exemplaire"); - return cbs.modifierExemp(noticeModifieeClean, numEx); - } - - - /** - * Deconnexion du client CBS (sudoc) - */ - @Override + @Override + public void authenticate(String login) throws CBSException, CommException { + this.cbs.authenticate(serveurSudoc, portSudoc, login, Constant.PASSSUDOC); + log.debug("je suis authentifié"); + } + + /** + * Méthode de recherche d'un EPN et de récupération du premier exemplaire d'une notice + * + * @param epn : epn à rechercher + * @return notice d'exemplaire trouvée + * @throws CBSException : Erreur CBS + */ + @Override + public String getNoticeFromEPN(String epn) throws CBSException, CommException, ZoneException { + cbs.search("che EPN " + epn); + if (cbs.getNbNotices() == 1) { + String noticeEpn = cbs.getClientCBS().mod("1", String.valueOf(cbs.getLotEncours())); + String numEx = Utilitaires.getNumExFromExemp(Utilitaires.getExempFromNotice(noticeEpn, epn)); + String resu = cbs.getClientCBS().modE(numEx, String.valueOf(cbs.getLotEncours())); + cbs.back(); + String resu2 = Utilitaire.recupEntre(resu, Constants.VTXTE, Constants.STR_0D + Constants.STR_1E); + return Constants.STR_1F + resu2.substring(resu2.indexOf("e" + numEx)) + Constants.STR_0D + Constants.STR_1E; + } else { + log.error(epn + " pas trouvé"); + throw new CBSException(Level.ERROR, Constant.ERR_FILE_NOTICE_EPN_NUMBER); + } + } + + /** + * Méthode permettant d'ajouter une zone / sous zone dans une notice d'exemplaire + * + * @param exemp notice à modifier + * @return notice avec nouvelle zone / sous zone préfixée de STR_1F + */ + @Override + public Exemplaire creerNouvelleZone(String exemp, String tag, String subTag, String valeur) throws ZoneException { + Exemplaire exemplaire = new Exemplaire(exemp); + exemplaire.addZone(tag, subTag, valeur); + exemplaire = ajout991(exemplaire); + return exemplaire; + } + + /** + * Méthode permettant la suppression d'une zone dans une notice d'exemplaire + * + * @param exemp notice biblio + exemplaires + * @param tag zone à supprimer + * @return chaine de l'exemplaire modifié préfixé par STR_1F + */ + @Override + public Exemplaire supprimerZone(String exemp, String tag) throws ZoneException { + Exemplaire exemplaire = new Exemplaire(exemp); + exemplaire.deleteZone(tag); + exemplaire = ajout991(exemplaire); + return exemplaire; + } + + /** + * Méthode permettant la suppression d'une sous-zone dans une notice d'exemplaire + * + * @param exemp notice biblio + exemplaires + * @param tag zone qui contient la sous-zone + * @param subTag zone à supprimer + * @return chaine de l'exemplaire modifié préfixé par STR_1F + */ + @Override + public Exemplaire supprimerSousZone(String exemp, String tag, String subTag) throws ZoneException { + Exemplaire exemplaire = new Exemplaire(exemp); + exemplaire.deleteSousZone(tag, subTag); + exemplaire = ajout991(exemplaire); + return exemplaire; + } + + + /** + * Méthode permettant la création d'une sous-zone dans une notice d'exemplaire + * + * @param exemp notice biblio + exemplaires + * @param tag zone qui contient la sous-zone + * @param subTag sous-zone à créer + * @param valeur valeur associée à la sous zone (la sous-zone est la clé) + * @return l'exemplaire modifié + */ + @Override + public Exemplaire creerSousZone(String exemp, String tag, String subTag, String valeur) throws ZoneException { + Exemplaire exemplaire = new Exemplaire(exemp); + exemplaire.addSousZone(tag, subTag, valeur); + exemplaire = ajout991(exemplaire); + return exemplaire; + } + + /** + * Méthode permettant le remplacement d'une sous-zone dans une notice d'exemplaire + * + * @param exemp notice biblio + exemplaires + * @param tag zone qui contient la sous-zone + * @param subTag sous-zone à remplacer + * @param valeur valeur associée à la sous zone (la sous-zone est la clé) + * @return l'exemplaire modifié + */ + @Override + public Exemplaire remplacerSousZone(String exemp, String tag, String subTag, String valeur) throws ZoneException { + Exemplaire exemplaire = new Exemplaire(exemp); + try { + exemplaire.replaceSousZone(tag, subTag, valeur); + exemplaire = ajout991(exemplaire); + } catch (NullPointerException ex) { + log.debug("Zone / sous zone absente de la notice à modifier"); + } + return exemplaire; + } + + /** + * Ajout d'une zone 991 $a indiquant la modification de la notice par le programme + * + * @param exemp exemplaire à modifier + * @return exemplaire modifié + */ + public Exemplaire ajout991(Exemplaire exemp) throws ZoneException { + String datePattern = "dd-MM-yyyy HH:mm"; + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(datePattern); + String date = simpleDateFormat.format(new Date()); + char[] indicateurs = new char[2]; + indicateurs[0] = '#'; + indicateurs[1] = '#'; + String valeurToInsert = Constant.TEXTE_991_MODIF + " le " + date; + List listZone = exemp.findZoneWithPattern("991", "$a", Constant.TEXTE_991_MODIF); + if (listZone.isEmpty()) { + exemp.addZone("991", "$a", valeurToInsert, indicateurs); + } else { + exemp.replaceSousZoneWithValue("991", "$a", Constant.TEXTE_991_MODIF, valeurToInsert); + } + return exemp; + } + + /** + * méthode de validation de la sauvegarde d'un exemplaire + * + * @param noticeModifiee notice à sauvegarder + * @return : retour CBS + * @throws CBSException : erreur CBS + */ + @Override + public String saveExemplaire(String noticeModifiee, String epn) throws CBSException, CommException { + String numEx = Utilitaires.getNumExFromExemp(noticeModifiee); + log.debug(epn + " sauvegarde exemplaire"); + return cbs.modifierExemp(noticeModifiee, numEx); + } + + + /** + * Deconnexion du client CBS (sudoc) + */ + @Override public void disconnect() throws CBSException { - cbs.getClientCBS().disconnect(); + cbs.getClientCBS().disconnect(); } - /** - * Retourner l'ensemble de la liste des traitements disponibles - * @return liste de tous les traitements - */ - @Override - public List findAll() { - return dao.getTraitement().findAll(); - } + /** + * Retourner l'ensemble de la liste des traitements disponibles + * + * @return liste de tous les traitements + */ + @Override + public List findAll() { + return dao.getTraitement().findAll(); + } - @Override - public Integer findTraitementByDemandeId(Integer id){ - return dao.getTraitement().findTraitementByDemandeModifId(id); - } + @Override + public Integer findTraitementByDemandeId(Integer id) { + return dao.getTraitement().findTraitementByDemandeModifId(id); + } } diff --git a/core/src/main/java/fr/abes/item/utilitaire/Utilitaires.java b/core/src/main/java/fr/abes/item/utilitaire/Utilitaires.java index 71081e3f..55d3ef3f 100644 --- a/core/src/main/java/fr/abes/item/utilitaire/Utilitaires.java +++ b/core/src/main/java/fr/abes/item/utilitaire/Utilitaires.java @@ -101,8 +101,8 @@ public static String getExempFromNotice(String notice, String epn) { if (listExemps[i].contains("A99 " + epn)) { //la fin de la chaine est différente en fonction de si l'exemplaire trouvé est le dernier ou non, on adapte le retour en fonction return (listExemps[i].contains(Constants.STR_1E + Constants.VMC)) - ? listExemps[i].substring(listExemps[i].indexOf(Constants.STR_1F), listExemps[i].indexOf(Constants.STR_1E + Constants.VMC)) + Constants.STR_1E - : listExemps[i].substring(listExemps[i].indexOf(Constants.STR_1F)); + ? listExemps[i].substring(listExemps[i].indexOf(Constants.STR_1F) + 1, listExemps[i].indexOf(Constants.STR_1E + Constants.VMC)) + Constants.STR_1E + : listExemps[i].substring(listExemps[i].indexOf(Constants.STR_1F) + 1); } } return ""; diff --git a/core/src/test/java/fr/abes/item/service/TestTraitementService.java b/core/src/test/java/fr/abes/item/service/TestTraitementService.java index e76182ac..28c70343 100644 --- a/core/src/test/java/fr/abes/item/service/TestTraitementService.java +++ b/core/src/test/java/fr/abes/item/service/TestTraitementService.java @@ -2,8 +2,6 @@ import fr.abes.cbs.exception.ZoneException; import fr.abes.cbs.notices.Exemplaire; -import fr.abes.cbs.notices.TYPE_NOTICE; -import fr.abes.cbs.notices.Zone; import fr.abes.cbs.utilitaire.Constants; import fr.abes.item.service.impl.TraitementService; import org.junit.jupiter.api.BeforeAll; @@ -29,23 +27,12 @@ static void initAll() { @DisplayName("test creerNouvelleZone") @Test void creerNouvelleZone() throws ZoneException { - Exemplaire noticeInit = new Exemplaire(); - Zone e01 = new Zone("e01", TYPE_NOTICE.EXEMPLAIRE); - e01.addSubLabel("$a", "17-09-18"); - e01.addSubLabel("$b", "x"); - Zone zone930 = new Zone("930", TYPE_NOTICE.EXEMPLAIRE, new char[]{'#', '#'}); - zone930.addSubLabel("$b", "341720001"); - Zone zoneA97 = new Zone("A97", TYPE_NOTICE.EXEMPLAIRE, "17-09-18 10:51:56.000"); - Zone zoneA98 = new Zone("A98", TYPE_NOTICE.EXEMPLAIRE, "341720001:17-09-18"); - Zone zoneA99 = new Zone("A99", TYPE_NOTICE.EXEMPLAIRE, "618828249"); - - noticeInit.addZone(e01); - noticeInit.addZone(zone930); - noticeInit.addZone(zoneA97); - noticeInit.addZone(zoneA98); - noticeInit.addZone(zoneA99); - - Exemplaire result = tManager.creerNouvelleZone(noticeInit, "915", "$a", "1"); + StringBuilder noticeInit = new StringBuilder().append("e01 $a17-09-18$bx\r" + + "930 ##$b341720001\r" + + "A97 17-09-18 10:51:56.000\r" + + "A98 341720001:17-09-18\r" + + "A99 618828249\r").append(Constants.STR_0D + Constants.STR_0D); + Exemplaire result = tManager.creerNouvelleZone(noticeInit.toString(), "915", "$a", "1"); assertThat(result.toString()).startsWith("e01 $a17-09-18$bx\r" + "915 $a1\r" + "930 ##$b341720001\r" + @@ -58,23 +45,12 @@ void creerNouvelleZone() throws ZoneException { @DisplayName("test creerNouvelleZoneWithRepetableTag") @Test void creerNouvelleZoneWithRepeatableTag() throws ZoneException { - Exemplaire noticeInit = new Exemplaire(); - Zone e01 = new Zone("e01", TYPE_NOTICE.EXEMPLAIRE); - e01.addSubLabel("$a", "17-09-18"); - e01.addSubLabel("$b", "x"); - Zone zone930 = new Zone("930", TYPE_NOTICE.EXEMPLAIRE, new char[]{'#', '#'}); - zone930.addSubLabel("$b", "341720001"); - Zone zoneA97 = new Zone("A97", TYPE_NOTICE.EXEMPLAIRE, "17-09-18 10:51:56.000"); - Zone zoneA98 = new Zone("A98", TYPE_NOTICE.EXEMPLAIRE, "341720001:17-09-18"); - Zone zoneA99 = new Zone("A99", TYPE_NOTICE.EXEMPLAIRE, "618828249"); - - noticeInit.addZone(e01); - noticeInit.addZone(zone930); - noticeInit.addZone(zoneA97); - noticeInit.addZone(zoneA98); - noticeInit.addZone(zoneA99); - - Exemplaire result = tManager.creerNouvelleZone(noticeInit, "930", "$c", "test"); + StringBuilder noticeInit = new StringBuilder().append("e01 $a17-09-18$bx\r" + + "930 ##$b341720001\r" + + "A97 17-09-18 10:51:56.000\r" + + "A98 341720001:17-09-18\r" + + "A99 618828249\r").append(Constants.STR_0D + Constants.STR_0D + Constants.STR_1E); + Exemplaire result = tManager.creerNouvelleZone(noticeInit.toString(), "930", "$c", "test"); assertThat(result.toString()).startsWith("e01 $a17-09-18$bx\r" + "930 ##$b341720001\r" + "930 $ctest\r" + @@ -88,28 +64,14 @@ void creerNouvelleZoneWithRepeatableTag() throws ZoneException { @DisplayName("test supprimerZone") @Test public void supprimerZone() throws ZoneException { - Exemplaire noticeInit = new Exemplaire(); - Zone e01 = new Zone("e02", TYPE_NOTICE.EXEMPLAIRE); - e01.addSubLabel("$a", "02-12-05"); - e01.addSubLabel("$b", "x"); - Zone zone930 = new Zone("930", TYPE_NOTICE.EXEMPLAIRE, new char[]{'#', '#'}); - zone930.addSubLabel("$b", "340322102"); - zone930.addSubLabel("$a", "791 ETH"); - zone930.addSubLabel("$j", "u"); - Zone zone991 = new Zone("991", TYPE_NOTICE.EXEMPLAIRE); - zone991.addSubLabel("$a", "Exemplaire créé automatiquement par l'ABES"); - Zone zoneA97 = new Zone("A97", TYPE_NOTICE.EXEMPLAIRE, "02-12-05 10:01:06.000"); - Zone zoneA98 = new Zone("A98", TYPE_NOTICE.EXEMPLAIRE, "340322102:02-12-05"); - Zone zoneA99 = new Zone("A99", TYPE_NOTICE.EXEMPLAIRE, "248333186"); - - noticeInit.addZone(e01); - noticeInit.addZone(zone930); - noticeInit.addZone(zone991); - noticeInit.addZone(zoneA97); - noticeInit.addZone(zoneA98); - noticeInit.addZone(zoneA99); - - Exemplaire result = tManager.supprimerZone(noticeInit, "991"); + StringBuilder notice = new StringBuilder().append( + "e02 $a02-12-05$bx\r" + + "930 ##$b340322102$a791 ETH$ju\r" + + "991 $aExemplaire créé automatiquement par l'ABES\r" + + "A97 02-12-05 10:01:06.000\r" + + "A98 340322102:02-12-05\r" + + "A99 248333186" + Constants.STR_0D); + Exemplaire result = tManager.supprimerZone(notice.toString(), "991"); assertThat(result.toString()).startsWith( "e02 $a02-12-05$bx\r" + "930 ##$b340322102$a791 ETH$ju\r" + @@ -117,7 +79,8 @@ public void supprimerZone() throws ZoneException { assertThat(result.toString()).endsWith( "A97 02-12-05 10:01:06.000\r" + "A98 340322102:02-12-05\r" + - "A99 248333186\r"); + "A99 248333186\r" + ); } @DisplayName("Test ajout 991") @@ -136,7 +99,4 @@ public void ajout991() throws ZoneException { assertThat(newExemp).containsOnlyOnce("991 ##$aExemplaire créé automatiquement par l'ABES"); } - - - } diff --git a/core/src/test/java/fr/abes/item/utilitaire/testUtilitaires.java b/core/src/test/java/fr/abes/item/utilitaire/testUtilitaires.java index 3a5fe62c..786c36e4 100644 --- a/core/src/test/java/fr/abes/item/utilitaire/testUtilitaires.java +++ b/core/src/test/java/fr/abes/item/utilitaire/testUtilitaires.java @@ -85,7 +85,7 @@ void getExempFromNotice() { "A98 301892102:02-12-05" + "A99 248398830" + Constants.STR_1E + Constants.VMC; - assertThat(Utilitaires.getExempFromNotice(noticeDeuxExemp, epn)).isEqualTo(Constants.STR_1F + + assertThat(Utilitaires.getExempFromNotice(noticeDeuxExemp, epn)).isEqualTo( "e03 $a02-12-05$bx" + "930 ##$b301892102$a306.485 ETH$ju" + "A97 02-12-05 16:22:37.000 " + diff --git a/web/src/main/java/fr/abes/item/web/impl/DemandeRestService.java b/web/src/main/java/fr/abes/item/web/impl/DemandeRestService.java index 9f40d9e5..aba11c8a 100644 --- a/web/src/main/java/fr/abes/item/web/impl/DemandeRestService.java +++ b/web/src/main/java/fr/abes/item/web/impl/DemandeRestService.java @@ -312,8 +312,8 @@ public String[] simulerLigne(TYPE_DEMANDE type, @RequestParam Integer numDemande try { LigneFichierModif ligneFichierModif = getService().getDemandeModif().getLigneFichier((DemandeModif) getService().getDemandeModif().findById(numDemande), numLigne); /*Notice init := notice avant traitement*/ - Exemplaire noticeInit = getService().getDemandeModif().getNoticeInitiale((DemandeModif) getService().getDemandeModif().findById(numDemande), ligneFichierModif.getEpn()); - String noticeInitStr = noticeInit.toString().replace("\r", "\r\n"); + String noticeInit = getService().getDemandeModif().getNoticeInitiale((DemandeModif) getService().getDemandeModif().findById(numDemande), ligneFichierModif.getEpn()); + String noticeInitStr = noticeInit.replace("\r", "\r\n"); /*Notice traitée := notice après traitement*/ Exemplaire noticeTraitee = getService().getDemandeModif().getNoticeTraitee((DemandeModif) getService().getDemandeModif().findById(numDemande), noticeInit, ligneFichierModif);