import org.lilie.services.eliot.securite.AutorisationException
import org.lilie.services.eliot.textes.CahierDeTextesImport
import org.lilie.services.eliot.applications.textes.importexport.erreur.TextesErreurGenerale
+import org.springframework.transaction.TransactionStatus
+import org.lilie.services.eliot.textes.CahierDeTextes
+import org.hibernate.SessionFactory
/**
* Service principal des imports de cahiers de textes depuis des fichiers XML
TextesXml03Service textesXml03Service
TextesImportTransformService textesImportTransformService
TextesImportLoaderService textesImportLoaderService
+ SessionFactory sessionFactory
/**
* Importe les données de l'application eliot-textes
}
listeCahiers.each {CahierDeTextesInfo cdt ->
- importeCdt(securiteSession, cdt, rapportPrincipal, cahierDeTextesImport)
+ executeDansTransaction(rapportPrincipal){
+ importeCdt(securiteSession, cdt, rapportPrincipal, cahierDeTextesImport)
+ }
}
- // si un seul cahier est en échec, l'import de tous les cahiers sera rollbacké
- if (rapportPrincipal.nombreCdtCreer < rapportPrincipal.nombreCdtParse){
- rapportPrincipal.nombreCdtCreer = 0
- rapportPrincipal.listWarnings = []
- } else {
- textesImportLoaderService.metAJourDateFinImport(cahierDeTextesImport)
- }
+ textesImportLoaderService.metAJourDateFinImport(cahierDeTextesImport)
return rapportPrincipal
CahierDeTextesInfo cahierInfo,
TextesImportRapport rapportPrincipal,
CahierDeTextesImport cahierDeTextesImport) {
+ // vide la liste des warnings temporaires
+ rapportPrincipal.listWarningsTemporaires = []
- try {
- rapportPrincipal.incNombreCdtParse()
+ rapportPrincipal.incNombreCdtParse()
- ImportCahierCommand cahierCommand = textesImportTransformService.transform(
- cahierInfo,
- rapportPrincipal
- )
+ ImportCahierCommand cahierCommand = textesImportTransformService.transform(
+ cahierInfo,
+ rapportPrincipal
+ )
- textesImportLoaderService.load(
- securiteSession,
- cahierCommand,
- cahierDeTextesImport
- )
+ textesImportLoaderService.load(
+ securiteSession,
+ cahierCommand,
+ cahierDeTextesImport
+ )
- rapportPrincipal.incNombreCdtCreer()
- }
- catch (CahierDeTextesInvalideException e) {
- traiteErreurConnue(e, rapportPrincipal)
- }
- catch (RecherchePersonneUniqueException e) {
- traiteErreurConnue(e, rapportPrincipal)
- }
- catch (CreationContenuException e) {
- traiteErreurConnue(e, rapportPrincipal)
- }
- catch (AutorisationException e){
- traiteErreurConnue(e, rapportPrincipal)
- }
- catch (Exception e) {
- traiteErreurInconnue(e, rapportPrincipal)
+ rapportPrincipal.incNombreCdtCreer()
+
+ // passe les warnings de l'état temporaire à l'état permanent
+ if (rapportPrincipal.listWarningsTemporaires.size() > 0){
+ rapportPrincipal.listWarnings << rapportPrincipal.listWarningsTemporaires
}
}
rapportPrincipal.ajouterErreur(new TextesErreurInconnue(erreur: e))
}
+
+ /**
+ * Exécution transactionnelle
+ * @param rapport
+ * @param closure
+ */
+ private void executeDansTransaction(TextesImportRapport rapportPrincipal,
+ Closure closure) {
+ CahierDeTextes.withTransaction { TransactionStatus status ->
+ try {
+ closure()
+ sessionFactory.currentSession.flush()
+ }
+ catch (CahierDeTextesInvalideException e) {
+ status.setRollbackOnly()
+ traiteErreurConnue(e, rapportPrincipal)
+ }
+ catch (RecherchePersonneUniqueException e) {
+ status.setRollbackOnly()
+ traiteErreurConnue( e, rapportPrincipal)
+ }
+ catch (CreationContenuException e) {
+ status.setRollbackOnly()
+ traiteErreurConnue(e, rapportPrincipal)
+ }
+ catch (AutorisationException e){
+ status.setRollbackOnly()
+ traiteErreurConnue(e, rapportPrincipal)
+ }
+ catch (Exception e) {
+ status.setRollbackOnly()
+ traiteErreurInconnue(e, rapportPrincipal)
+ }
+ }
+ }
}