1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| public enum PeriodeDeTravail {
MATIN,
APRES_MIDI,
NUIT,
REPOS;
public static class Roulement {
private PeriodeDeTravail[] periods;
public Roulement(PeriodeDeTravail period, PeriodeDeTravail...periods) {
this.periods=new PeriodeDeTravail[periods.length+1];
this.periods[0]=Objects.requireNonNull(period);
for(int i=0; i<periods.length; i++) {
this.periods[i+1]=Objects.requireNonNull(periods[i]);
}
}
private PeriodeDeTravail get(int decalage) {
return periods[decalage%periods.length];
}
public PeriodeDeTravail of(LocalDate debut, LocalDate date) {
if( date.isAfter(debut) || date.equals(debut) ) {
return get(Period.between(debut, date).getDays());
}
else {
throw new IllegalArgumentException();
}
}
}
public static void main(String[] args) {
Roulement roulement = new Roulement(PeriodeDeTravail.MATIN,
PeriodeDeTravail.MATIN,
PeriodeDeTravail.APRES_MIDI,
PeriodeDeTravail.APRES_MIDI,
PeriodeDeTravail.NUIT,
PeriodeDeTravail.NUIT,
PeriodeDeTravail.REPOS,
PeriodeDeTravail.REPOS,
PeriodeDeTravail.REPOS);
// Démo-test
LocalDate now = LocalDate.now();
for(int i=0; i< 20; i++ ) {
System.out.format("J+%d : %s%n",i,roulement.of(now, now.plusDays(i)));
}
System.out.println("--");
LocalDate debut = LocalDate.of(2015, Month.MARCH, 1);
LocalDate date = LocalDate.of(2016, Month.MAY, 16);
System.out.format("Période pour le %1$td %1$tb %1$tY pour un roulement commençant le %2$td %2$tb %2$tY : ", date, debut);
System.out.println(roulement.of(debut, date));
}
} |
Partager