Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package mesclasses.handlers; import java.time.LocalDate; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import mesclasses.model.Eleve; import mesclasses.model.EleveData; import mesclasses.model.Mot; import mesclasses.model.Seance; import mesclasses.model.Trimestre; import mesclasses.util.NodeUtil; import org.apache.commons.lang3.StringUtils; /** * * @author rrrt3491 */ public class StatsHandler { private final ModelHandler model; private static StatsHandler handler; public static void init() { handler = new StatsHandler(); } public static StatsHandler getInstance() { if (handler == null) { init(); } return handler; } private StatsHandler() { model = ModelHandler.getInstance(); } /** * retourne les donnes d'un lves sur la priode donne * @param eleve * @param start * @param end * @return */ public Stream<EleveData> getDonneesForPeriode(Eleve eleve, LocalDate start, LocalDate end) { return eleve.getData().stream().filter(d -> NodeUtil.isBetween(d.getDateAsDate(), start, end)); } /**************************** RAPPORTS ********************************/ /** * retourne toutes les seances d'un lve avec absence, sur un trimestre * @param eleve * @param trimestre * @return */ public List<Seance> getSeancesWithAbsenceOnTrimestre(Eleve eleve, Trimestre trimestre) { return getDonneesForPeriode(eleve, trimestre.getStartAsDate(), trimestre.getEndAsDate()) .filter(d -> d.isAbsent()).map(d -> d.getSeance()).collect(Collectors.toList()); } /** * retourne toutes les seances d'un lve avec retard, sur un trimestre * @param eleve * @param trimestre * @return */ public List<Seance> getSeancesWithRetardOnTrimestre(Eleve eleve, Trimestre trimestre) { return getDonneesForPeriode(eleve, trimestre.getStartAsDate(), trimestre.getEndAsDate()) .filter(d -> d.getRetard() > 0).map(d -> d.getSeance()).collect(Collectors.toList()); } /** * retourne toutes les seances d'un lve avec travail non fait, sur un trimestre * @param eleve * @param trimestre * @return */ public List<Seance> getSeancesWithTravailOnTrimestre(Eleve eleve, Trimestre trimestre) { return getDonneesForPeriode(eleve, trimestre.getStartAsDate(), trimestre.getEndAsDate()) .filter(d -> d.isTravailPasFait()).map(d -> d.getSeance()).collect(Collectors.toList()); } /** * retourne toutes les seances d'un lve avec oubli de matriel d'un lve, sur un trimestre * @param eleve * @param trimestre * @return */ public List<Seance> getSeancesWithOubliOnTrimestre(Eleve eleve, Trimestre trimestre) { return getDonneesForPeriode(eleve, trimestre.getStartAsDate(), trimestre.getEndAsDate()) .filter(d -> StringUtils.isNotBlank(d.getOubliMateriel())).map(d -> d.getSeance()) .collect(Collectors.toList()); } /** * retourne toutes les seances d'un lve avec exclusion, sur un trimestre * @param eleve * @param trimestre * @return */ public List<Seance> getSeancesWithExclusionOnTrimestre(Eleve eleve, Trimestre trimestre) { return getDonneesForPeriode(eleve, trimestre.getStartAsDate(), trimestre.getEndAsDate()) .filter(d -> d.isExclus()).map(d -> d.getSeance()).collect(Collectors.toList()); } /**************************** SEANCES ********************************/ /** * retourne toutes les seances d'un lve avec travail non fait, du debut du trimestre la date fournie * @param eleve * @param date * @return */ public List<Seance> getSeancesWithTravailUntil(Eleve eleve, LocalDate date) { Trimestre trim = model.getForDate(date); return getDonneesForPeriode(eleve, trim.getStartAsDate(), date).filter(d -> d.isTravailPasFait()) .map(d -> d.getSeance()).collect(Collectors.toList()); } /** * retourne toutes les seances d'un lve avec retard, du debut du trimestre la date fournie * @param eleve * @param date * @return */ public List<Seance> getSeancesWithRetardUntil(Eleve eleve, LocalDate date) { Trimestre trim = model.getForDate(date); return getDonneesForPeriode(eleve, trim.getStartAsDate(), date).filter(d -> d.getRetard() > 0) .map(d -> d.getSeance()).collect(Collectors.toList()); } /** * retourne toutes les seances d'un lve avec oubli de matriel d'un lve, du debut du trimestre la date fournie * @param eleve * @param date * @return */ public List<Seance> getSeancesWithOubliUntil(Eleve eleve, LocalDate date) { Trimestre trim = model.getForDate(date); return getDonneesForPeriode(eleve, trim.getStartAsDate(), date) .filter(d -> StringUtils.isNotBlank(d.getOubliMateriel())).map(d -> d.getSeance()) .collect(Collectors.toList()); } /** * retourne tous les mots d'un lve, du dbut du trimestre la date fournie * @param eleve * @param date * @return */ public List<Mot> getMotsUntil(Eleve eleve, LocalDate date) { Trimestre trim = model.getForDate(date); return eleve.getMots().filtered(m -> { return NodeUtil.isBetween(m.getDate(), trim.getStartAsDate(), date); }); } /** * retourne le nombre de sances avec travail non fait d'un lve, du dbut du trimestre la date fournie * @param eleve * @param date * @return */ public int getNbTravailUntil(Eleve eleve, LocalDate date) { return getSeancesWithTravailUntil(eleve, date).size(); } /** * retourne le nombre de sances avec retard d'un lve, du dbut du trimestre la date fournie * @param eleve * @param date * @return */ public int getNbRetardsUntil(Eleve eleve, LocalDate date) { return getSeancesWithRetardUntil(eleve, date).size(); } /** * retourne le nombre de sances avec oubli de matriel d'un lve, du dbut du trimestre la date fournie * @param eleve * @param date * @return */ public int getNbOublisUntil(Eleve eleve, LocalDate date) { return getSeancesWithOubliUntil(eleve, date).size(); } }