package com.megatim.fdxconsultation.dao.impl.referentiel; import com.megatim.fdxcommons.model.referentiel.Referentiel; import com.megatim.fdxcommons.model.referentiel.TypeFichier; import com.megatim.fdxconsultation.dao.ifaces.referentiel.ReferentielDAO; import com.megatim.fdxconsultation.dao.ifaces.referentiel.TypeFichierConsultationDAO; import com.megatim.fdxconsultation.model.dto.ParticipantToFichierDto; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import javax.ejb.Stateless; import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import javax.persistence.Tuple; /** * * @author ASUS */ @Stateless public class TypeFichierDAOImpl implements TypeFichierConsultationDAO { @PersistenceContext(unitName = "fdxConsultationPersistenceUnit") protected EntityManager em; @Inject private ReferentielDAO referentielDAO; public TypeFichierDAOImpl() { } @Override public EntityManager getEntityManager() { return em; } @Override public Class getManagedEntityClass() { return (TypeFichier.class); } @Override public TypeFichier getById(String id) { Query query = em.createQuery("SELECT t from TypeFichier t" + " LEFT JOIN FETCH t.routages LEFT JOIN FETCH t.validateurFichiers " + " LEFT JOIN FETCH t.validateurFichierConfigurations" + " WHERE t.code = :code"); query.setParameter("code", id); Optional optionalTypeFichier = query.getResultList().stream().findFirst(); return optionalTypeFichier.isPresent() ? optionalTypeFichier.get() : null; } @Override public List getParticpantToFichierDto(String username) { String referentielVersion = getReferentielVersion(); if (referentielVersion == null) { return new ArrayList<>(); } List results = em.createQuery("SELECT t.participant.code, t.code AS code " + "FROM TypeFichier t " + "WHERE code IN (SELECT c.codeTypeFichier FROM ColumnDefinition c WHERE c.referentielVersion = :referentielVersion) " + "AND t IN (SELECT t1 FROM User u LEFT JOIN u.typeFichiers t1 WHERE u.userName = :username)", Tuple.class) .setParameter("referentielVersion", referentielVersion) .setParameter("username", username) .getResultList(); return results.stream().map(t -> { ParticipantToFichierDto dto = new ParticipantToFichierDto(t.get(0, String.class), t.get(1, String.class)); return dto; }).collect(Collectors.toList()); } private String getReferentielVersion() { Referentiel refEncours = referentielDAO.getReferentielEnCours(); return refEncours != null ? refEncours.getVersion() : null; } }