package com.megatim.fdxconsultation.core.impl.db; import com.megatim.fdxcommons.core.ifaces.db.ReferentielDataSaver; import com.megatim.fdxcommons.model.enumeration.CategorieFichier; import com.megatim.fdxcommons.model.integration.ColumnDefinition; import com.megatim.fdxcommons.model.pojo.ReferentielToImportData; import com.megatim.fdxcommons.model.integration.TableDefinition; import com.megatim.fdxcommons.model.referentiel.ApplicationSource; import com.megatim.fdxcommons.model.referentiel.ExtensionFichier; import com.megatim.fdxcommons.model.referentiel.GroupeNoeud; import com.megatim.fdxcommons.model.referentiel.GroupeParticipant; import com.megatim.fdxcommons.model.referentiel.Noeud; import com.megatim.fdxcommons.model.referentiel.Participant; import com.megatim.fdxcommons.model.referentiel.Pays; import com.megatim.fdxcommons.model.referentiel.Referentiel; import com.megatim.fdxcommons.model.referentiel.Routage; import com.megatim.fdxcommons.model.referentiel.StructureLigne; import com.megatim.fdxcommons.model.referentiel.TypeFichier; import com.megatim.fdxcommons.model.referentiel.ValidateurFichier; import com.megatim.fdxcommons.model.referentiel.ValidateurFichierConfiguration; import com.megatim.fdxcommons.model.referentiel.natureproduction.NatureProductionFichier; import com.megatim.fdxcommons.tools.exceptions.TypeFichierExistNotException; import com.megatim.fdxcommons.tools.exceptions.CommonRessourceNotFoundException; import com.megatim.fdxconsultation.core.ifaces.integration.ColumnDefinitionManager; import com.megatim.fdxconsultation.core.ifaces.integration.TableDefinitionManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.ApplicationSourceManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.ExtensionFichierManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.GroupeNoeudManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.GroupeParticipantManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.NoeudManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.ParticipantManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.PaysManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.ReferentielManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.RoutageManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.StructureLigneManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.TypeFichierManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.ValidateurFichierConfigurationManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.ValidateurFichierManager; import com.megatim.fdxconsultation.core.ifaces.referentiel.natureproduction.NatureProductionFichierManager; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; import javax.enterprise.context.Dependent; import javax.inject.Inject; /** * * @author ASUS */ @Dependent public class ReferentielDataSaverImpl implements ReferentielDataSaver { @Inject private ReferentielManager refManager; @Inject private ApplicationSourceManager appSourceManager; @Inject private ExtensionFichierManager extFichierManager; @Inject private GroupeNoeudManager groupeNoeudManager; @Inject private GroupeParticipantManager groupePartManager; @Inject private NoeudManager noeudManager; @Inject private ParticipantManager participantManager; @Inject private PaysManager paysManager; @Inject private RoutageManager routageManager; @Inject private TypeFichierManager typeFichierManager; @Inject private StructureLigneManager structLigneManager; @Inject private ValidateurFichierManager valFichManager; @Inject private ValidateurFichierConfigurationManager valFichConfManager; @Inject private ColumnDefinitionManager columnDefinitionManager; @Inject private TableDefinitionManager tableDefinitionManager; @Inject NatureProductionFichierManager natureProdFichManager; private Map referentielsMap; private Map typeFichiersMap; private Map paysMap; private Map participantsMap; private Map appSourcesMap; private Map extensionFichiersMap; private Map validateurFichiersMap; private Map validateurFichierConfsMap; private Map structLignesMap; private Map noeudsMap; private Map groupeNoeudsMap; private Map groupeParticipantsMap; private Map routagesMap; private Map columnDefinitionsMap; private Map natureProdFichsMap; @Override public void persist(ReferentielToImportData referentielToImportData) throws Exception { refManager.archiverReferentielEncours(); persistReferentiels(referentielToImportData.getReferentiels()); persistApplicationSources(referentielToImportData.getApplicationSources()); persistPayss(referentielToImportData.getPays()); persistExtensionFichiers(referentielToImportData.getExtensionFichiers()); persistParticipants(referentielToImportData.getParticipants()); persistTypeFichiers(referentielToImportData.getTypeFichiers()); // persistValidateurFichiers(referentielToImportData.getValidateurFichiers()); // // persistValidateurFichierConfigurations(referentielToImportData.getValidateurFichierConfigurations()); // // persitStructuresLignes(referentielToImportData.getStructureLignes()); persistNoeuds(referentielToImportData.getNoeuds()); persistGroupeNoeuds(referentielToImportData.getGroupeNoeuds()); persistGroupeParticipants(referentielToImportData.getGroupeParticipants()); persistRoutages(referentielToImportData.getRoutages()); persistTableDefinitions(referentielToImportData.getTableDefinitions()); persistColumnsDefinition(referentielToImportData.getTableDefinitions()); persistNatureProductionFichiers(referentielToImportData.getNatureProductionFichiers()); } private void persistReferentiels(List referentiels) throws Exception { referentielsMap = refManager.getAll(null).stream().collect(Collectors.toMap(Referentiel::getVersion, Function.identity())); if (referentiels != null) { for (Referentiel ref : referentiels) { Referentiel referentielFound = referentielsMap.get(ref.getVersion()); if (referentielFound == null) { refManager.save(ref); } } } } private void persistApplicationSources(List appSources) throws Exception { referentielsMap = refManager.getAll(null).stream().collect(Collectors.toMap(Referentiel::getVersion, Function.identity())); appSourcesMap = appSourceManager.getAll(null).stream().collect(Collectors.toMap(ApplicationSource::getLibelle, Function.identity())); if (appSources != null) { for (ApplicationSource appSource : appSources) { String referentielVersion = appSource.getReferentiel().getVersion(); Referentiel referentielFound = referentielsMap.get(referentielVersion); if (referentielFound == null) { throw new CommonRessourceNotFoundException("Le referentiel suivant est introuvable : " + referentielVersion); } ApplicationSource appSourceFound = appSourcesMap.get(appSource.getLibelle()); if (appSourceFound == null) { appSource.setReferentiel(referentielFound); appSourceManager.save(appSource); } } } } private void persistPayss(List payss) throws Exception { paysMap = paysManager.getAll(null).stream().collect(Collectors.toMap(Pays::getCode, Function.identity())); if (payss != null) { for (Pays p : payss) { String referentielVersion = p.getReferentiel().getVersion(); Referentiel referentielFound = referentielsMap.get(referentielVersion); if (referentielFound == null) { throw new CommonRessourceNotFoundException("La ressource Referentiel suivante est introuvable : " + referentielVersion); } Pays paysFound = paysMap.get(p.getCode()); if (paysFound == null) { p.setReferentiel(referentielFound); p.setParticipants(new HashSet<>()); paysManager.save(p); } } } } private void persistExtensionFichiers(List extFichiers) throws Exception { referentielsMap = refManager.getAll(null).stream().collect(Collectors.toMap(Referentiel::getVersion, Function.identity())); extensionFichiersMap = extFichierManager.getAll(null).stream().collect(Collectors.toMap(ExtensionFichier::getExtension, Function.identity())); if (extFichiers != null) { for (ExtensionFichier e : extFichiers) { String referentielVersion = e.getReferentiel().getVersion(); Referentiel referentielFound = referentielsMap.get(referentielVersion); if (referentielFound == null) { throw new CommonRessourceNotFoundException("Le referentiel suivant est introuvable : " + referentielVersion); } ExtensionFichier extFichierFound = extensionFichiersMap.get(e.getExtension()); if (extFichierFound == null) { e.setReferentiel(referentielFound); extFichierManager.save(e); } } } } private void persistParticipants(List participants) throws Exception { paysMap = paysManager.getAll(null).stream().collect(Collectors.toMap(Pays::getCode, Function.identity())); participantsMap = participantManager.getAll(null).stream().collect(Collectors.toMap(Participant::getCode, Function.identity())); if (participants != null) { for (Participant p : participants) { String referentielVersion = p.getReferentiel().getVersion(); String codePays = p.getPays().getCode(); Referentiel referentielFound = referentielsMap.get(referentielVersion); if (referentielFound == null) { throw new CommonRessourceNotFoundException("La ressource Referentiel suivante est introuvable : " + referentielVersion); } Pays paysFound = paysMap.get(codePays); if (paysFound == null) { throw new CommonRessourceNotFoundException("La ressource Pays suivante est introuvable : " + codePays); } Participant participantFound = participantsMap.get(p.getCode()); if (participantFound == null) { p.setPays(paysFound); p.setReferentiel(referentielFound); p.setNoeuds(new HashSet<>()); p.setRoutageEnvois(new HashSet<>()); p.setRoutageReceptions(new HashSet<>()); p.setGroupeParticipants(new HashSet<>()); participantManager.save(p); } } } } private void persistTypeFichiers(List typeFichiers) throws Exception { participantsMap = participantManager.getAll(null).stream().collect(Collectors.toMap(Participant::getCode, Function.identity())); typeFichiersMap = typeFichierManager.getAll(null).stream().collect(Collectors.toMap(TypeFichier::getCode, Function.identity())); if (typeFichiers != null) { for (TypeFichier typeFich : typeFichiers) { if (typeFich.getCategorieFichier().equals(CategorieFichier.STRUCTURE)) { String referentielVersion = typeFich.getReferentiel().getVersion(); String codeParticipant = typeFich.getParticipant().getCode(); Referentiel referentielFound = referentielsMap.get(referentielVersion); if (referentielFound == null) { throw new CommonRessourceNotFoundException("La ressource Referentiel suivante est introuvable : " + referentielVersion); } Participant participantFound = participantsMap.get(codeParticipant); if (participantFound == null) { throw new CommonRessourceNotFoundException("La ressource Participant suivante est introuvable : " + codeParticipant); } TypeFichier typeFichierFound = typeFichiersMap.get(typeFich.getCode()); if (typeFichierFound == null) { typeFich.setReferentiel(referentielFound); typeFich.setParticipant(participantFound); typeFich.setRoutages(new HashSet<>()); typeFich.setValidateurFichierConfigurations(new HashSet<>()); typeFich.setValidateurFichiers(new HashSet<>()); typeFichierManager.save(typeFich); } } } } } private void persistValidateurFichiers(List validateurFichiers) throws Exception { validateurFichiersMap = valFichManager.getAll(null).stream().collect(Collectors.toMap(ValidateurFichier::getId, Function.identity())); typeFichiersMap = typeFichierManager.getAll(null).stream().collect(Collectors.toMap(TypeFichier::getCode, Function.identity())); if (validateurFichiers != null) { for (ValidateurFichier val : validateurFichiers) { String codeTypeFichier = val.getTypeFichier().getCode(); TypeFichier typeFichierFound = typeFichiersMap.get(codeTypeFichier); if (typeFichierFound == null) { throw new TypeFichierExistNotException(codeTypeFichier); } ValidateurFichier valFichFound = validateurFichiersMap.get(val.getId()); if (valFichFound == null) { val.setTypeFichier(typeFichierFound); valFichManager.save(val); } } } } private void persistValidateurFichierConfigurations(List valFichConfs) throws TypeFichierExistNotException, Exception { validateurFichierConfsMap = valFichConfManager.getAll(null) .stream() .collect(Collectors.toMap(x -> x.getReferentiel().getVersion() + "-" + x.getTypeFichier().getCode(), Function.identity())); if (valFichConfs != null) { for (ValidateurFichierConfiguration valFichConf : valFichConfs) { String codeTypeFichier = valFichConf.getTypeFichier().getCode(); String referentielVersion = valFichConf.getReferentiel().getVersion(); Referentiel referentielFound = referentielsMap.get(referentielVersion); if (referentielFound == null) { throw new CommonRessourceNotFoundException("Le referentiel suivant est introuvable : " + referentielVersion); } TypeFichier typeFichierFound = typeFichiersMap.get(codeTypeFichier); if (typeFichierFound == null) { throw new TypeFichierExistNotException(codeTypeFichier); } ValidateurFichierConfiguration ValFichConfFound = validateurFichierConfsMap.get(valFichConf.getReferentiel().getVersion() + "-" + valFichConf.getTypeFichier().getCode()); if (ValFichConfFound == null) { valFichConf.setTypeFichier(typeFichierFound); valFichConf.setReferentiel(referentielFound); valFichConfManager.save(valFichConf); } } } } private void persitStructuresLignes(List structLignes) throws Exception { validateurFichiersMap = valFichManager.getAll(null).stream().collect(Collectors.toMap(ValidateurFichier::getId, Function.identity())); appSourcesMap = appSourceManager.getAll(null).stream().collect(Collectors.toMap(ApplicationSource::getLibelle, Function.identity())); structLignesMap = structLigneManager.getAll(null).stream().collect(Collectors.toMap(StructureLigne::getId, Function.identity())); if (structLignes != null) { for (StructureLigne s : structLignes) { String valFichierId = s.getValidateurFichier().getId(); String libelleAppSource = s.getApplicationSource().getLibelle(); ApplicationSource appSourceFound = appSourcesMap.get(libelleAppSource); if (appSourceFound == null) { throw new CommonRessourceNotFoundException("La ressource ApplicationSource suivante est introuvable : " + libelleAppSource); } ValidateurFichier valFichFound = validateurFichiersMap.get(valFichierId); if (valFichFound == null) { throw new CommonRessourceNotFoundException("La ressource ValidateurFichier suivante est introuvable : " + valFichierId); } StructureLigne structureLigneFound = structLignesMap.get(s.getId()); if (structureLigneFound == null) { s.setValidateurFichier(valFichFound); s.setApplicationSource(appSourceFound); structLigneManager.save(s); } } } } private void persistNoeuds(List noeuds) throws Exception { noeudsMap = noeudManager.getAll(null).stream().collect(Collectors.toMap(Noeud::getCode, Function.identity())); if (noeuds != null) { for (Noeud n : noeuds) { String referentielVersion = n.getReferentiel().getVersion(); String codeParticipant = n.getParticipant().getCode(); Referentiel referentielFound = referentielsMap.get(referentielVersion); if (referentielFound == null) { throw new CommonRessourceNotFoundException("La ressource Referentiel suivante est introuvable : " + referentielVersion); } Participant participantFound = participantsMap.get(codeParticipant); if (participantFound == null) { throw new CommonRessourceNotFoundException("La ressource Participant suivante est introuvable : " + codeParticipant); } Noeud noeudFound = noeudsMap.get(n.getCode()); if (noeudFound == null) { n.setReferentiel(referentielFound); n.setParticipant(participantFound); n.setGroupeNoeuds(new HashSet<>()); n.setRoutageEnvois(new HashSet<>()); n.setRoutageReceptions(new HashSet<>()); noeudManager.save(n); } } } } private void persistGroupeNoeuds(List groupeNoeuds) throws Exception { groupeNoeudsMap = groupeNoeudManager.getAll(null).stream().collect(Collectors.toMap(GroupeNoeud::getCode, Function.identity())); if (groupeNoeuds != null) { for (GroupeNoeud gn : groupeNoeuds) { String referentielVersion = gn.getReferentiel().getVersion(); Referentiel referentielFound = referentielsMap.get(referentielVersion); if (referentielFound == null) { throw new CommonRessourceNotFoundException("La ressource Referentiel suivante est introuvable : " + referentielVersion); } GroupeNoeud grpNoeudFound = groupeNoeudsMap.get(gn.getCode()); if (grpNoeudFound == null) { gn.setReferentiel(referentielFound); groupeNoeudManager.save(gn); } } } } private void persistGroupeParticipants(List groupeParticipants) throws Exception { groupeParticipantsMap = groupePartManager.getAll(null).stream().collect(Collectors.toMap(GroupeParticipant::getCode, Function.identity())); if (groupeParticipants != null) { for (GroupeParticipant gp : groupeParticipants) { String referentielVersion = gp.getReferentiel().getVersion(); Referentiel referentielFound = referentielsMap.get(referentielVersion); if (referentielFound == null) { throw new CommonRessourceNotFoundException("La ressource Referentiel suivante est introuvable : " + referentielVersion); } GroupeParticipant grpParticipantFound = groupeParticipantsMap.get(gp.getCode()); if (grpParticipantFound == null) { gp.setReferentiel(referentielFound); gp.setRoutageEnvois(new HashSet<>()); gp.setRoutageReceptions(new HashSet<>()); groupePartManager.save(gp); } } } } private void persistRoutages(List routages) throws Exception { typeFichiersMap = typeFichierManager.getAll(null).stream().collect(Collectors.toMap(TypeFichier::getCode, Function.identity())); routagesMap = routageManager.getAll(null) .stream() .collect(Collectors.toMap(x -> x.getReferentiel().getVersion() + "-" + x.getTypeFichier().getCode(), Function.identity())); if (routages != null) { for (Routage r : routages) { String referentielVersion = r.getReferentiel().getVersion(); String codeTypeFichier = r.getTypeFichier().getCode(); Referentiel referentielFound = referentielsMap.get(referentielVersion); if (referentielFound == null) { throw new CommonRessourceNotFoundException("Le referentiel suivant est introuvable : " + referentielVersion); } TypeFichier typeFichierFound = typeFichiersMap.get(codeTypeFichier); if (typeFichierFound == null) { throw new TypeFichierExistNotException(codeTypeFichier); } Routage routageFound = routagesMap.get(r.getReferentiel().getVersion() + "-" + r.getTypeFichier().getCode()); if (routageFound == null) { r.setReferentiel(referentielFound); r.setTypeFichier(typeFichierFound); routageManager.save(r); } } } } private void persistTableDefinitions(List tablesDefinition) { for (TableDefinition t : tablesDefinition) { if (t.getHeaderPresent() != null && t.getColumnDelimiter() != null && t.getLineDelimiter() != null) { tableDefinitionManager.save(t); } } } private void persistColumnsDefinition(List tablesDefinition) throws Exception { columnDefinitionsMap = columnDefinitionManager.getAll(null) .stream() .collect(Collectors.toMap(x -> x.getName() + "-" + x.getReferentielVersion() + "-" + x.getCodeTypeFichier(), Function.identity() )); if (tablesDefinition != null) { for (TableDefinition t : tablesDefinition) { for (ColumnDefinition c : t.getColumnDefinitions()) { ColumnDefinition colDefFound = columnDefinitionsMap.get(c.getName() + "-" + c.getReferentielVersion() + "-" + c.getCodeTypeFichier()); if (colDefFound == null) { columnDefinitionManager.save(c); } } } } } private void persistNatureProductionFichiers(List natureProductionFichs) throws TypeFichierExistNotException { natureProdFichsMap = natureProdFichManager.getAll(null) .stream() .collect(Collectors.toMap(x -> x.getReferentiel().getVersion() + "-" + x.getTypeFichier().getCode(), Function.identity())); if (natureProductionFichs != null) { for (NatureProductionFichier n : natureProductionFichs) { String referentielVersion = n.getReferentiel().getVersion(); String codeTypeFichier = n.getTypeFichier().getCode(); Referentiel referentielFound = referentielsMap.get(referentielVersion); if (referentielFound == null) { throw new CommonRessourceNotFoundException("Le referentiel suivant est introuvable : " + referentielVersion); } TypeFichier typeFichierFound = typeFichiersMap.get(codeTypeFichier); if (typeFichierFound == null) { throw new TypeFichierExistNotException(codeTypeFichier); } NatureProductionFichier natureProdFichFound = natureProdFichsMap.get(n.getReferentiel().getVersion() + "-" + n.getTypeFichier().getCode()); if (natureProdFichFound == null) { n.setReferentiel(referentielFound); n.setTypeFichier(typeFichierFound); natureProdFichManager.save(n); } } } } }