Skip to content

Method: getEintrag()

1: package zeit.serientermin;
2:
3: import auftraege.VoraussichtlicheDokumentenklassenVariableVisitor;
4: import auftraege.auftragsBildungsParameter.abstraction.VoraussichtlicheDokumentenklassenVariable;
5: import com.google.common.base.Objects;
6: import tec.uom.se.ComparableQuantity;
7: import zeit.eintraege.KalenderEintrag;
8: import zeit.eintraege.Zeitraum;
9:
10: import javax.measure.quantity.Time;
11: import java.time.LocalDate;
12: import java.time.LocalDateTime;
13: import java.util.Collection;
14: import java.util.Collections;
15:
16: /**
17: * Abstrakte Klasse die einen SerienTermin repräsentiert.
18: */
19: public abstract class SerienTermin implements VoraussichtlicheDokumentenklassenVariable {
20:
21: private final KalenderEintrag eintrag;
22:
23: /**
24: * Konstruktor welcher den übergebenen Eintrag dem entsprechenden Feld zuweist.
25: * @param eintrag Kalendereintrag der sich wiederholt.
26: */
27: protected SerienTermin(final KalenderEintrag eintrag) {
28: this.eintrag = eintrag;
29: }
30:
31: /**
32: * @param eintrag Kalendereintrag der sich wiederholt.
33: * @param wiederholungsIntervall Intervall in welchem sich der SerienTermin wiederholt.
34: * @return einen IntervallSerientermin mit den spezifizierten Daten.
35: */
36: public static SerienTermin createSerienterminMitIntervall(final KalenderEintrag eintrag, final ComparableQuantity<Time> wiederholungsIntervall) {
37: return IntervallSerienTermin.create(eintrag, wiederholungsIntervall);
38: }
39:
40: /**
41: * @param eintrag Kalendereintrag der sich wiederholt.
42: * @return einen sich monatlich wiederholenden {@link MonatlicherSerientermin Serientermin}.
43: */
44: public static SerienTermin createMonatlichenSerientermin(final KalenderEintrag eintrag) {
45: return MonatlicherSerientermin.create(eintrag);
46: }
47: /**
48: * @param tag Tag für welchen geprüft werden soll, ob der SerienTermin sich an ihm wiederholt.
49: * @return alle Kalendereinträge des SerienTermin zum spezifizierten Tag.
50: */
51: public Collection<KalenderEintrag> getKalenderEintraegeDesSerienTerminAmTag(final LocalDate tag) {
52: if (this.zeitraumAmTag(this.eintrag.getZeitraum(), tag)) {
53: return Collections.singleton(this.eintrag);
54: }
55: return this.berechneKalenderEintraegeZumTag(tag);
56: }
57:
58: /**
59: * @param tag gegebener Tag als LocalDate.
60: * @return alle Kalendereinträge die durch den Serientermin zum gegebenen Tag erzeugt werden.
61: */
62: protected abstract Collection<KalenderEintrag> berechneKalenderEintraegeZumTag(LocalDate tag);
63:
64: /**
65: * @param zeitraum ein Zeitraum
66: * @param tag ein Tag
67: * @return true, falls der Zeitraum den gegebenen Tag schneidet.
68: */
69: protected boolean zeitraumAmTag(final Zeitraum zeitraum, final LocalDate tag) {
70: return zeitraum.ueberschneidet(Zeitraum.createWholeDay(tag));
71: }
72:
73: @Override
74: public boolean equals(final Object o) {
75: if (this == o) {
76: return true;
77: }
78: if (!(o instanceof SerienTermin)) {
79: return false;
80: }
81: final SerienTermin that = (SerienTermin) o;
82: return Objects.equal(this.eintrag, that.eintrag);
83: }
84:
85: @Override
86: public int hashCode() {
87: return Objects.hashCode(this.eintrag);
88: }
89:
90: /**
91: * @return KalenderEintrag, welcher serienmäíg wiederholt werden soll.
92: */
93: public KalenderEintrag getEintrag() {
94: return this.eintrag;
95: }
96:
97: /**
98: * @param zeitpunkt
99: *                 Zeiitpunkt, der zu prüfen ist.
100: *
101: * @return <b>true</b>, falls der übergebene Zeitpunkt in den Serientermin fällt, <b>false</b> sont.
102: */
103: public boolean beinhaltetZeitpunkt(final LocalDateTime zeitpunkt) {
104: return this.berechneKalenderEintraegeZumTag(zeitpunkt.toLocalDate()).stream().anyMatch(it -> it.getZeitraum().contains(zeitpunkt));
105: }
106:
107: @Override
108: public <T> T accept(final VoraussichtlicheDokumentenklassenVariableVisitor<T> v) {
109: return v.handle(this);
110: }
111: }