Skip to content

Package: MaschinenKalender$2

MaschinenKalender$2

nameinstructionbranchcomplexitylinemethod
handle(KalenderEintragGenerell)
M: 0 C: 2
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
handle(MaschinenBelegungEintrag)
M: 0 C: 7
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
handle(MenschBelegungEintrag)
M: 2 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
{...}
M: 0 C: 9
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: package zeit;
2:
3: import zeit.eintraege.KalenderEintrag;
4: import zeit.eintraege.KalenderEintragGenerell;
5: import zeit.eintraege.KalenderEintragTyp;
6: import zeit.eintraege.KalenderEintragVisitor;
7: import zeit.eintraege.MaschinenBelegungEintrag;
8: import zeit.eintraege.MenschBelegungEintrag;
9:
10: import java.time.LocalDate;
11: import java.time.LocalDateTime;
12: import java.time.temporal.ChronoUnit;
13: import java.util.Collection;
14: import java.util.HashSet;
15: import java.util.Optional;
16: import java.util.Set;
17:
18: /**
19: * Ein Kalender für Maschinen.
20: * Maschinen sind standardmäßig von 0-24h verfügbar und können Kalendereinträge vom Typ
21: * {@link KalenderEintragTyp Wartung} und {@link KalenderEintragTyp Belegt} enthalten.
22: * Darüberhinaus kann dieser Kalender keine {@link MenschBelegungEintrag MenschBelegungEinträge} enthalten.
23: */
24: public class MaschinenKalender extends Kalender {
25:
26: private static final KalenderEintragTyp DEFAULT_TYP = KalenderEintragTyp.VERFUEGBAR;
27: private static final Collection<KalenderEintragTyp> ERLAUBTE_TYPEN = new HashSet<>();
28:
29: static {
30: MaschinenKalender.ERLAUBTE_TYPEN.add(KalenderEintragTyp.WARTUNG);
31: MaschinenKalender.ERLAUBTE_TYPEN.add(KalenderEintragTyp.BELEGT);
32: }
33:
34: @Override
35: protected void pruefeKalenderEintrag(final KalenderEintrag eintrag) {
36: if (!MaschinenKalender.ERLAUBTE_TYPEN.contains(eintrag.getTyp())) {
37: throw new KalenderEintragNichtErlaubtException(String.format("Der Typ %s ist nicht erlaubt für Maschinenkalender", eintrag));
38: }
39: if (eintrag.accept(new KalenderEintragVisitor<Boolean>() {
40: @Override
41: public Boolean handle(final MaschinenBelegungEintrag maschinenBelegungEintrag) {
42: return false;
43: }
44:
45: @Override
46: public Boolean handle(final MenschBelegungEintrag menschBelegungEintrag) {
47: return true;
48: }
49:
50: @Override
51: public Boolean handle(final KalenderEintragGenerell kalenderEintragGenerell) {
52: return false;
53: }
54:
55: })) {
56: throw new KalenderEintragNichtErlaubtException("Der übergebene MenschBelegungsEintrag kann einem Maschinenkalender nicht hinzugefügt werden!");
57: }
58: }
59:
60: @Override
61: protected Optional<KalenderEintrag> createDefaultEintragZuTag(final LocalDate tag) {
62: return Optional.of(KalenderEintragGenerell.createWholeDay(tag, MaschinenKalender.DEFAULT_TYP));
63: }
64:
65: @Override
66: public long getArbeitszeit(final LocalDate tag, final ChronoUnit einheit) {
67: final LocalDateTime fixedDate = LocalDateTime.now();
68: final long zeitFuerEinenTagInEinheit = einheit.between(fixedDate, fixedDate.plusDays(1));
69: return zeitFuerEinenTagInEinheit - this.getEintraegeZuTag(tag).stream()
70: .filter(kalenderEintrag -> kalenderEintrag.getTyp() == KalenderEintragTyp.WARTUNG)
71: .mapToLong(kalenderEintrag -> einheit.between(kalenderEintrag.getVon(), kalenderEintrag.getBis()))
72: .sum();
73: }
74:
75: /**
76: * @return alle {@link MaschinenBelegungEintrag MaschinenBelegungEinträge},
77: * die in diesem Kalender enthalten sind.
78: */
79: public Set<MaschinenBelegungEintrag> getBelegungen() {
80: final Set<MaschinenBelegungEintrag> result = new HashSet<>();
81: for (final Set<KalenderEintrag> eintraege : this.getEintraege().values()) {
82: for (final KalenderEintrag eintrag : eintraege) {
83: eintrag.accept(new KalenderEintragVisitor<Void>() {
84: @Override
85: public Void handle(final MaschinenBelegungEintrag maschinenBelegungEintrag) {
86: result.add(maschinenBelegungEintrag);
87: return null;
88: }
89:
90: @Override
91: public Void handle(final MenschBelegungEintrag menschBelegungEintrag) {
92: // Nothing to do here
93: return null;
94: }
95:
96: @Override
97: public Void handle(final KalenderEintragGenerell kalenderEintragGenerell) {
98: // Nothing to do here
99: return null;
100: }
101: });
102: }
103: }
104: return result;
105: }
106: }