package com.megatim.apifdxweb.dao.ifaces.referentiel; import com.megatim.apifdxweb.model.searchentities.RoutageSearch; import com.megatim.fdxcommons.dao.ifaces.abstracts.CustomDAOIfaces; import com.megatim.fdxcommons.model.referentiel.Participant; import com.megatim.fdxcommons.model.referentiel.Routage; import com.megatim.fdxcommons.model.referentiel.RoutageId; import java.util.ArrayList; import java.util.List; import java.util.Optional; import javax.persistence.EntityManager; import javax.persistence.Query; /** * * @author ASUS */ public interface RoutageDAO extends CustomDAOIfaces { @Override EntityManager getEntityManager(); @Override public default Class getManagedEntityClass() { return (Routage.class); } @Override public default Routage getById(RoutageId id) { Query query = getEntityManager().createQuery("SELECT r FROM Routage r" + " LEFT JOIN FETCH r.groupeNoeudsEnvoi LEFT JOIN FETCH r.groupeNoeudsReception" + " LEFT JOIN FETCH r.groupeParticipantsEnvoi LEFT JOIN FETCH r.groupeParticipantsReception" + " LEFT JOIN FETCH r.noeudsEnvoi LEFT JOIN FETCH r.noeudsReception" + " LEFT JOIN FETCH r.groupeNoeudsReception LEFT JOIN FETCH r.participantsReception" + " LEFT JOIN FETCH r.groupeParticipantsReception LEFT JOIN FETCH r.participantsEnvoi" + " WHERE r.referentiel.version = :referentielVersion AND r.typeFichier.code = :codeTypeFichier"); query.setParameter("codeTypeFichier", id.getTypeFichier()); query.setParameter("referentielVersion", id.getReferentiel()); Optional optionalRoutage = query.getResultList().stream().findFirst(); if (optionalRoutage.isPresent()) { return optionalRoutage.get(); } else { return null; } } public default List getParticipantsForSend(String versionReferentiel, String codeTypeFichier) { List participantsEnvoi = new ArrayList<>(); Optional optRoutage = getEntityManager().createQuery("SELECT r FROM Routage r " + "LEFT JOIN r.participantsEnvoi p " + "LEFT JOIN r.noeudsEnvoi n " + "LEFT JOIN r.groupeParticipantsEnvoi gp LEFT JOIN gp.participants pa " + "LEFT JOIN r.groupeNoeudsEnvoi gn LEFT JOIN gn.noeuds no " + "WHERE r.referentiel.version = :versionReferentiel AND r.typeFichier.code = :codeTypeFichier ") .setParameter("versionReferentiel", versionReferentiel) .setParameter("codeTypeFichier", codeTypeFichier) .getResultList().stream().findFirst(); if (optRoutage.isPresent()) { Routage routage = optRoutage.get(); participantsEnvoi.addAll(routage.getParticipantsEnvoi()); routage.getNoeudsEnvoi().stream().forEach(n -> { participantsEnvoi.add(n.getParticipant()); }); routage.getGroupeNoeudsEnvoi().stream().forEach(gn -> gn.getNoeuds().stream().forEach(n -> participantsEnvoi.add(n.getParticipant()))); routage.getGroupeParticipantsEnvoi().stream().forEach(gp -> participantsEnvoi.addAll(gp.getParticipants())); } return participantsEnvoi; } default List getParticipantForReceive(String versionReferentiel, String codeTypeFichier) { List participantsReception = new ArrayList<>(); Optional optRoutage = getEntityManager().createQuery("SELECT r FROM Routage r " + "LEFT JOIN r.participantsReception p " + "LEFT JOIN r.noeudsReception n " + "LEFT JOIN r.groupeParticipantsReception gp LEFT JOIN gp.participants pa " + "LEFT JOIN r.groupeNoeudsReception gn LEFT JOIN gn.noeuds no " + "WHERE r.referentiel.version = :versionReferentiel AND r.typeFichier.code = :codeTypeFichier ") .setParameter("versionReferentiel", versionReferentiel) .setParameter("codeTypeFichier", codeTypeFichier) .getResultList().stream().findFirst(); if (optRoutage.isPresent()) { Routage routage = optRoutage.get(); participantsReception.addAll(routage.getParticipantsReception()); routage.getNoeudsReception().stream().forEach(n -> { participantsReception.add(n.getParticipant()); }); routage.getGroupeNoeudsReception().stream().forEach(gn -> gn.getNoeuds().stream().forEach(n -> participantsReception.add(n.getParticipant()))); routage.getGroupeParticipantsReception().stream().forEach(gp -> participantsReception.addAll(gp.getParticipants())); } return participantsReception; } Long countRoutageByReferentielTypeFichierForParticipantForReceive(String versionReferentiel, String codeTypeFichier, Participant participant); Long countRoutageByReferentielTypeFichierForParticipantForSend(String versionReferentiel, String codeTypeFichier, Participant participant); }