AXOPEN

Java – Création d’une liste de semaine

La classe Calendar de Java s’avère bien utilie pour pouvoir manipuler des dates.

Ainsi, par exemple si vous souhaitez créer une liste de semaine vous pouvez vous y prendre de la sorte :

// Avec en paramètre le Nombre de semaine à afficher avant et après
public List getListSemaine(Calendar pCalendar, int pNombreSemaineAvant, int pNombreSemaineApres) {
  // Calcul d’une liste de semaines
  List<SemaineDTO> lListeSemaine = new ArrayList<SemaineDTO>(1 + pNombreSemaineAvant + pNombreSemaineApres);
  SemaineDTO lSemaineDTO = null;
          
  // Récupération des semaines avant
  if (pNombreSemaineAvant > 0) {
     pCalendar.add(Calendar.WEEK_OF_YEAR, (0 – pNombreSemaineAvant));
     lSemaineDTO = this.getSemaineByDate(pCalendar, pLocale, pContextDTO);
     lListeSemaine.add(lSemaineDTO);
     for (int i = 0; i < (pNombreSemaineAvant – 1); i++) {
        // On monte d’une semaine
        pCalendar.add(Calendar.WEEK_OF_YEAR, 1);
        lSemaineDTO = getSemaineByDate(pCalendar, pLocale, pContextDTO);
        lListeSemaine.add(lSemaineDTO);
     }
  }
          
  // Semaine en cours
  pCalendar.add(Calendar.WEEK_OF_YEAR, 1);
  lSemaineDTO = getSemaineByDate(pCalendar, pLocale, pContextDTO);
  lListeSemaine.add(lSemaineDTO);
          
  // Récupération des semaines après
  for (int i = 0; i < pNombreSemaineApres; i++) {
     // On monte d’une semaine
     pCalendar.add(Calendar.WEEK_OF_YEAR, 1);
     lSemaineDTO = getSemaineByDate(pCalendar, pLocale, pContextDTO);
     lListeSemaine.add(lSemaineDTO);
  }
}

J’ai pour ma part ensuite créer un objet DTO permettant de stocker chaque semaine. Cet objet est alimenté par la fonction suivante :

    public SemaineDTO getSemaineByDate(Calendar pCalendar) {
        SemaineDTO lSemaineDTO = new SemaineDTO();
        lSemaineDTO.setAnnee(pCalendar.get(Calendar.YEAR));
        lSemaineDTO.setMois(pCalendar.get(Calendar.MONTH));
        lSemaineDTO.setNumeroSemaine(pCalendar.get(Calendar.WEEK_OF_YEAR));


        // Obtention du premier jour de la semaine
        pCalendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        lSemaineDTO.setDateDebut(pCalendar.getTime());


        // Obtention du dernier jour de la semaine
        pCalendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        lSemaineDTO.setDateFin(pCalendar.getTime());
        
        return lSemaineDTO;
    }

Cet object SemaineDTO contient les propriétés suivantes :

    private int mNumeroSemaine;
    private int mMois;
    private int mAnnee;
    private Date mDateDebut;
    private Date mDateFin;

Ce qui permet ensuite de créer facilement une liste de semaine ayant la forme suivante :

semaine

Il est alors simple de créer une fonction pour gérer les boutons précédent et suivant en indiquant + ou – une semaine :

Soit moveSemaineFilter(-1) pour passer à une semaine précédente et moveSemaineFilter(-1) pour une semaine suivante.

Voici le code de cette fonction :

public void moveSemaineFilter(Long NbSemaine) {
        // Récupération des paramètres
        int lNombreSemaineAvant = 3;
        int lNombreSemaineApres = 3;
        
        // Récupération de la date en cours
        Calendar lCalendar = Calendar.getInstance();
        Calendar lCalendar2 = Calendar.getInstance();
        lCalendar.setTime(mRdvFilter.getSemaine().getDateDebut());
        
        // La date en cours doit être modifiée
        lCalendar.add(Calendar.WEEK_OF_YEAR, NbSemaine.intValue());
        lCalendar2.setTime(lCalendar.getTime());

        // Rechargement de la liste des semaines
        mListeSemaine.getListSemaine(lCalendar, lNombreSemaineAvant, lNombreSemaineApres);
        
        // Modification de la semaine par défaut
        mFilter.setSemaine(getSemaineByDate(lCalendar2));
    }