Skip to content

Package: MonatlicherSerientermin

MonatlicherSerientermin

nameinstructionbranchcomplexitylinemethod
MonatlicherSerientermin(KalenderEintrag)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
berechneKalenderEintraegeZumTag(LocalDate)
M: 0 C: 49
100%
M: 0 C: 6
100%
M: 0 C: 4
100%
M: 0 C: 10
100%
M: 0 C: 1
100%
create(KalenderEintrag)
M: 0 C: 25
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 5
100%
M: 0 C: 1
100%

Coverage

1: package zeit.serientermin;
2:
3: import zeit.ZeitUtils;
4: import zeit.eintraege.KalenderEintrag;
5: import zeit.eintraege.Zeitraum;
6:
7: import java.time.LocalDate;
8: import java.time.LocalDateTime;
9: import java.time.LocalTime;
10: import java.util.Collection;
11: import java.util.Collections;
12:
13: /**
14: * Klasse die einen monatlichen Serientermin repräsentiert.
15: * D.h. der entsprechende Kalendereintrag wiederholt sich immer am gleichen Tag des jeweiligen Monats.
16: * z.B. Kalendereintrag 10.04.2018 10:00Uhr - 10.04.2018 12:00 Uhr
17: * wiederholt sich zur gleichen Zeit am 10.05.2018, 10.06.2018 etc.
18: */
19: public final class MonatlicherSerientermin extends SerienTermin {
20:
21: public static final int MINIMALE_ANZAHL_TAGE_PRO_MONAT = 28;
22:
23: private MonatlicherSerientermin(final KalenderEintrag eintrag) {
24: super(eintrag);
25: }
26:
27: /**
28: * @param eintrag Kalendereintrag, welcher Serienmäßig wiederholt werden soll.
29: * @return einen Serientermin, der sich jeden Monat am gleichen Tag bis ins Unendliche wiederholt.
30: */
31: public static MonatlicherSerientermin create(final KalenderEintrag eintrag) {
32:• if (eintrag.getVon().getDayOfMonth() > MonatlicherSerientermin.MINIMALE_ANZAHL_TAGE_PRO_MONAT) {
33: throw new MonatlicherSerienterminNachDem28Exception(
34: String.format("Ein monatlicher Serientermin am %s liegt nach dem 28 und ist nicht erlaubt",
35: eintrag.getVon().getDayOfMonth()));
36: }
37: return new MonatlicherSerientermin(eintrag);
38: }
39:
40: @Override
41: protected Collection<KalenderEintrag> berechneKalenderEintraegeZumTag(final LocalDate tag) {
42: LocalDate laufendesDatum = this.getEintrag().getVon().toLocalDate();
43:• while (laufendesDatum.isBefore(tag) || laufendesDatum.equals(tag)) {
44: final Zeitraum zeitraum = Zeitraum.create(
45: LocalDateTime.of(laufendesDatum, LocalTime.of(this.getEintrag().getVon().getHour(), this.getEintrag().getVon().getMinute())),
46: this.getEintrag().getDauer());
47:
48:• if (this.zeitraumAmTag(zeitraum, tag)) {
49: return Collections.singleton(this.getEintrag().accept(new CreatePassendenKalenderEintragMitZeitraumVisitor(zeitraum)));
50: }
51:
52: laufendesDatum = ZeitUtils.verschiebeDatumUmEinenMonat(laufendesDatum);
53: }
54: return Collections.emptySet();
55: }
56: }