package fr.lirmm.aren.service.framadate; import fr.lirmm.aren.model.Comment; import fr.lirmm.aren.model.framadate.FDChoice; import fr.lirmm.aren.model.framadate.FDTheme; import fr.lirmm.aren.service.AbstractService; import javax.enterprise.context.ApplicationScoped; import javax.persistence.TypedQuery; import javax.ws.rs.NotFoundException; import java.util.HashSet; import java.util.List; import java.util.Set; @ApplicationScoped public class FDThemeService extends AbstractService { public FDThemeService() { super(FDTheme.class); } private TypedQuery generateQuery(Long themeId, boolean withChoices, boolean withVotes){ TypedQuery query = getEntityManager().createQuery("SELECT ft " +"FROM FDTheme ft " +(withChoices? "LEFT JOIN FETCH ft.choices co " : "") +(withVotes? "LEFT JOIN FETCH co.votes vo " : "") + (themeId != null ? "WHERE ft.id = :themeId " : "WHERE ft.id IS NOT NULL ") , FDTheme.class ) ; if (themeId != null) { query.setParameter("themeId", themeId); } return query ; } public Set findAll(boolean withChoices, boolean withVotes) { return new HashSet(generateQuery(null, withChoices,withVotes).getResultList()); } @Override public void edit(FDTheme fdTheme) { super.edit(fdTheme); } public FDTheme find(Long fdPollId, boolean withChoices, boolean withVotes) { List results = generateQuery(fdPollId, withChoices,withVotes).getResultList(); if (results.isEmpty()) { throw new NotFoundException(); } return results.get(0); } /** * * @param fdThemeId */ public void clear(Long fdThemeId) { this.transactionBegin(); List choices = getEntityManager().createQuery("SELECT c " + "FROM FDChoice c " + "WHERE c.themeId.id = :fdThemeId ", FDChoice.class) .setParameter("fdThemeId", fdThemeId) .getResultList(); if (!choices.isEmpty()) { for(FDChoice choice : choices){ this.clearVotes(choice.getId()); } } try{ getEntityManager().createQuery("DELETE FROM FDChoice fdChoice " + "WHERE fdChoice.themeId.id = :fdThemeId") .setParameter("fdThemeId", fdThemeId) .executeUpdate(); getEntityManager().createQuery("DELETE FROM FDTheme fdTheme " + "WHERE fdTheme.id = :fdThemeId") .setParameter("fdThemeId", fdThemeId) .executeUpdate(); }catch(Exception ex){ System.err.println("Erreur : "+ex.getMessage()); } this.commit(); } /** * * @param fdChoiceId */ public void clearVotes(Long fdChoiceId) { this.transactionBegin(); getEntityManager().createQuery("DELETE FROM FDVote fdVote " + "WHERE fdVote.subThemeId.id = :fdChoiceId") .setParameter("fdChoiceId", fdChoiceId) .executeUpdate(); this.commit(); } }