Skip to content

Package: Mitarbeiter

Mitarbeiter

nameinstructionbranchcomplexitylinemethod
Mitarbeiter(String, String, LocalDate, LocalDate, LocalDate, int, MitarbeiterKalender)
M: 0 C: 34
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 11
100%
M: 0 C: 1
100%
addProduktionsrolle(Produktionsrolle)
M: 0 C: 38
100%
M: 0 C: 6
100%
M: 0 C: 4
100%
M: 0 C: 8
100%
M: 0 C: 1
100%
addQualifikation(Qualifikation)
M: 0 C: 17
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
addQualifikation(Qualifikation[])
M: 0 C: 20
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
create(String, String, LocalDate, LocalDate, LocalDate, int)
M: 0 C: 13
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getAlter()
M: 0 C: 7
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getAustritt()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getBelegungen()
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getEintritt()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getFaehigkeiten()
M: 0 C: 23
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 5
100%
M: 0 C: 1
100%
getKalender()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getName()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getPersonalnummer()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getProduktionsrollen()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getQualifikationen()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getVorname()
M: 0 C: 3
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
hatFaehigkeit(MitarbeiterFaehigkeit)
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%
kannMaschineBedienen(Maschine)
M: 0 C: 29
100%
M: 1 C: 5
83%
M: 1 C: 3
75%
M: 0 C: 8
100%
M: 0 C: 1
100%
lambda$hatFaehigkeit$0(MitarbeiterFaehigkeit, MitarbeiterFaehigkeit)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
removeBelegungsEintrag(MenschBelegungEintrag)
M: 0 C: 5
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
toString()
M: 0 C: 18
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: package mensch;
2:
3: import maschine.Maschine;
4: import mensch.faehigkeit.MitarbeiterFaehigkeit;
5: import mensch.faehigkeit.MitarbeiterFaehigkeitFuerMaschine;
6: import util.Constants;
7: import util.exceptions.ProduktionsrollenBereitsVorhandenException;
8: import zeit.Kalender;
9: import zeit.MitarbeiterKalender;
10: import zeit.TypMitKalender;
11: import zeit.eintraege.MenschBelegungEintrag;
12:
13: import java.time.Duration;
14: import java.time.LocalDate;
15: import java.util.Collection;
16: import java.util.HashSet;
17: import java.util.Set;
18:
19: /**
20: * Klasse zur Repräsentation der Produktionsmitarbeiter. Zu einem Mitarbeiter werden initial einige Basisdaten erfasst. Der Kalender wird aufgrund seiner Komplexität
21: * gesondert und nicht im Konstruktor gesetzt. Produktionsrollen und Qualifikationen koennen ihm ebenfalls nachträglich zugewiesen werden.
22: */
23: public final class Mitarbeiter implements TypMitKalender {
24:         
25:         private final String vorname;
26:         private final String name;
27:         private final LocalDate geburtsdatum;
28:         private final LocalDate eintritt;
29:         private final LocalDate austritt;
30:         private final int personalnummer;
31:         private final MitarbeiterKalender kalender;
32:         private final Collection<Produktionsrolle> produktionsrollen;
33:         private final Collection<Qualifikation> qualifikationen;
34:         
35:         private Mitarbeiter(final String vorname,
36:                         final String name,
37:                         final LocalDate geburtsdatum,
38:                         final LocalDate eintritt,
39:                         final LocalDate austritt,
40:                         final int personalnummer, final MitarbeiterKalender verfuegbarkeit) {
41:                 this.vorname = vorname;
42:                 this.name = name;
43:                 this.geburtsdatum = geburtsdatum;
44:                 this.eintritt = eintritt;
45:                 this.austritt = austritt;
46:                 this.personalnummer = personalnummer;
47:                 this.kalender = verfuegbarkeit;
48:                 this.produktionsrollen = new HashSet<>();
49:                 this.qualifikationen = new HashSet<>();
50:         }
51:         
52:         /**
53:          * Erstellt einen Mitarbeiter mit den uebergebenen Paramertern.
54:          *
55:          * @param name
56:          *                 Nachname des Mitarbeiters
57:          * @param vorname
58:          *                 Vorname des Mitarbeiters
59:          * @param geburtsdatum
60:          *                 Geburtsdatum des Mitarbeiters
61:          * @param eintritt
62:          *                 Tag des Eintritts ins Produktionsunternehmen
63:          * @param austritt
64:          *                 Tag des Austritts aus dem Produktionsunternehmen
65:          * @param personalnummer
66:          *                 Personalnummer des Mitarbeiters
67:          *
68:          * @return Erstellter Mitarbeiter
69:          */
70:         public static Mitarbeiter create(final String name,
71:                         final String vorname,
72:                         final LocalDate geburtsdatum,
73:                         final LocalDate eintritt,
74:                         final LocalDate austritt,
75:                         final int personalnummer) {
76:                 return new Mitarbeiter(vorname, name, geburtsdatum, eintritt, austritt, personalnummer, new MitarbeiterKalender());
77:         }
78:         
79:         /**
80:          * @return Qualifikationen des Mitarbeiters
81:          */
82:         public Collection<Qualifikation> getQualifikationen() {
83:                 return this.qualifikationen;
84:         }
85:         
86:         /**
87:          * @return Produktionsrollen des Mitarbeiters
88:          */
89:         public Collection<Produktionsrolle> getProduktionsrollen() {
90:                 return this.produktionsrollen;
91:         }
92:         
93:         private HashSet<MitarbeiterFaehigkeit> getFaehigkeiten() {
94:                 final HashSet<MitarbeiterFaehigkeit> faehigkeiten = new HashSet<>();
95:•                for (final Qualifikation current : this.qualifikationen) {
96:                         faehigkeiten.add(current.getFaehigkeit());
97:                 }
98:                 return faehigkeiten;
99:         }
100:         
101:         /**
102:          * Fügt den Qualifikationen des Mitarbeiters die übergebene Fähigkeit hinzu.
103:          *
104:          * @param qualifikation
105:          *                 Qualifikation, die dem Mitarbeiter hinzugefügt wird
106:          *
107:          * @throws QualifikationsException
108:          *                 Besitzt der Mitarbeiter die Qualifikation bereits, kann dies nicht erneut geschehen
109:          */
110:         public void addQualifikation(final Qualifikation qualifikation) throws QualifikationsException {
111:•                if (this.getFaehigkeiten().contains(qualifikation.getFaehigkeit())) {
112:                         throw new QualifikationsException(Constants.MITARBEITER_HAT_BEREITS_QUALIFIKATION_EXCEPTIONMESSAGE);
113:                 }
114:                 this.qualifikationen.add(qualifikation);
115:         }
116:         
117:         /**
118:          * Fügt den Qualifikationen des Mitarbeiters die übergebene Fähigkeit hinzu.
119:          *
120:          * @param qualifikations
121:          *                 Qualifikation, die dem Mitarbeiter hinzugefügt wird
122:          *
123:          * @throws QualifikationsException
124:          *                 Besitzt der Mitarbeiter die Qualifikation bereits, kann dies nicht erneut geschehen
125:          */
126:         public void addQualifikation(final Qualifikation... qualifikations) throws QualifikationsException {
127:•                for (final Qualifikation qualifikation : qualifikations) {
128:                         this.addQualifikation(qualifikation);
129:                 }
130:         }
131:         
132:         
133:         
134:         /**
135:          * Fügt den Produktionsrollen des Mitarbeiters die übergebene Produktionsrolle hinzu.
136:          *
137:          * @param rolle
138:          *                 Produktionsrolle, die dem Mitarbeiter hinzugefügt wird
139:          *
140:          * @throws ProduktionsrollenBereitsVorhandenException
141:          *                 Produktionsrollen können Mitarbeitern nicht doppelt hinzugefügt werden & der Mitarbeiter muss alle in der Produktionsrolle enthaltenen Faehigkeiten besitzen
142:          */
143:         public void addProduktionsrolle(final Produktionsrolle rolle) throws ProduktionsrollenBereitsVorhandenException {
144:•                if (this.produktionsrollen.contains(rolle)) {
145:                         throw new ProduktionsrollenBereitsVorhandenException(Constants.MITARBEITER_HAT_BEREITS_ROLLE_EXCEPTIONMESSAGE);
146:                 }
147:•                for (final MitarbeiterFaehigkeit current : rolle.getFaehigkeiten()) {
148:•                        if (!(this.getFaehigkeiten().contains(current))) {
149:                                 throw new ProduktionsrollenBereitsVorhandenException(Constants.MITARBEITER_HAT_QUALIFIKATION_NICHT_EXCEPTIONMESSAGE);
150:                         }
151:                 }
152:                 this.produktionsrollen.add(rolle);
153:         }
154:         
155:         /**
156:          * Prueft, ob der Mitarbeiter die übergebene Maschine bedienen kann.
157:          *
158:          * @param maschine
159:          *                 die bedient werden soll
160:          *
161:          * @return Ergebnis der Pruefung
162:          */
163:         public boolean kannMaschineBedienen(final Maschine maschine) {
164:•                for (final Qualifikation qualifikation : this.getQualifikationen()) {
165:                         final MitarbeiterFaehigkeit faehigkeit = qualifikation.getFaehigkeit();
166:•                        if (faehigkeit instanceof MitarbeiterFaehigkeitFuerMaschine) {
167:                                 if (((MitarbeiterFaehigkeitFuerMaschine) faehigkeit).getMaschinenTyp()
168:•                                                .equals(maschine.getMaschinentyp())) {
169:                                         return true;
170:                                 }
171:                         }
172:                 }
173:                 return false;
174:         }
175:         
176:         @Override
177:         public String toString() {
178:                 return this.personalnummer + " : " + this.vorname + " " + this.name;
179:         }
180:         
181:         /**
182:          * @return Name des Mitarbeiters.
183:          */
184:         public String getName() {
185:                 return this.name;
186:         }
187:         
188:         /**
189:          * @return Vorname des Mitarbeiters.
190:          */
191:         public String getVorname() {
192:                 return this.vorname;
193:         }
194:         
195:         /**
196:          * @return Personalnummer des Mitarbeiters.
197:          */
198:         public int getPersonalnummer() {
199:                 return this.personalnummer;
200:         }
201:         
202:         @Override
203:         public Kalender getKalender() {
204:                 return this.kalender;
205:         }
206:         
207:         /**
208:          * @param faehigkeit
209:          *                 Fähigkeit
210:          *
211:          * @return true wenn der Mitarbeiter die Fähigkeit besitzt. falls wenn der Mitarbeiter die Fähigkeit nicht besitzt.
212:          */
213:         public boolean hatFaehigkeit(final MitarbeiterFaehigkeit faehigkeit) {
214:                 return this.getFaehigkeiten().stream()
215:                                 .anyMatch(mitarbeiterFaehigkeit -> mitarbeiterFaehigkeit.equals(faehigkeit));
216:         }
217:         
218:         /**
219:          * @param eintrag
220:          * Eintrag, welcher aus dem Kalender des Mitarbeiters entfernt werden soll.
221:          */
222:         public void removeBelegungsEintrag(final MenschBelegungEintrag eintrag) {
223:                 this.getKalender().removeEintrag(eintrag);
224:         }
225:         
226:         /**
227:          * @return alle Belegungen des Mitarbeiters. Diese werden aus dem Kalender ermittelt.
228:          */
229:         public Set<MenschBelegungEintrag> getBelegungen() {
230:                 return this.kalender.getBelegungen();
231:         }
232:         
233:         /**
234:          * @return das Datum an dem der Mitarbeiter angefangen hat in dieser Firma zu arbeiten.
235:          */
236:         public LocalDate getEintritt() {
237:                 return this.eintritt;
238:         }
239:         
240:         
241:         /**
242:          * @return das Datum an dem der Mitarbeiter aufhören wird in dieser Firma zu arbeiten. Soll {@link LocalDate LocalDate.MAX} zurückgeben, falls noch kein
243:          * Austrittsdatum feststeht.
244:          */
245:         public LocalDate getAustritt() {
246:                 return this.austritt;
247:         }
248:         
249:         
250:         /**
251:          * @return Alter eines Mitarbeiters.
252:          */
253:         public Duration getAlter() {
254:                 return Duration.between(this.geburtsdatum.atStartOfDay(), LocalDate.now().atStartOfDay());
255:         }
256: }