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<TypeFichier> 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<TypeFichier> optionalTypeFichier = query.getResultList().stream().findFirst();
|
return optionalTypeFichier.isPresent() ? optionalTypeFichier.get() : null;
|
}
|
|
@Override
|
public List<ParticipantToFichierDto> getParticpantToFichierDto(String username) {
|
String referentielVersion = getReferentielVersion();
|
if (referentielVersion == null) {
|
return new ArrayList<>();
|
}
|
|
List<Tuple> 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;
|
}
|
}
|