Skip to content

Package: MitarbeiterFaehigkeitenManager

MitarbeiterFaehigkeitenManager

nameinstructionbranchcomplexitylinemethod
MitarbeiterFaehigkeitenManager()
M: 0 C: 8
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
createMitarbeiterFaehigkeitFuerMaschine(String, String)
M: 0 C: 21
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
createMitarbeiterFaehigkeitFuerMaschine(String, String, MaschinenTyp)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getFaehigkeit(String, String)
M: 0 C: 25
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 6
100%
M: 0 C: 1
100%
getFaehigkeitIfExists(String, String)
M: 0 C: 8
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
getInstance()
M: 0 C: 13
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
getMaschinenFaehigkeit(String, String, MaschinenTyp)
M: 0 C: 18
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 4
100%
M: 0 C: 1
100%
lambda$getFaehigkeitIfExists$1(String, MitarbeiterFaehigkeit)
M: 0 C: 5
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
lambda$getMaschinenFaehigkeit$0(MitarbeiterFaehigkeitFuerMaschine, 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%

Coverage

1: package mensch.faehigkeit;
2:
3: import maschine.MaschinenTyp;
4: import schnittstelle.Sitzung;
5: import util.exceptions.FaehigkeitsException;
6:
7: import java.util.Collection;
8: import java.util.HashSet;
9: import java.util.Optional;
10:
11: /**
12: * Manager im Singleton-Format, welcher sicherstellt, dass sämtliche {@link MitarbeiterFaehigkeit}en nur einmal existieren. <br>
13: * Besitzt eine Collection an Mitarbeiterfähigkeiten, in welchen sämtliche dieser abgespeichert werden.
14: */
15: public final class MitarbeiterFaehigkeitenManager {
16:         
17:         private final Collection<MitarbeiterFaehigkeit> faehigkeiten = new HashSet<>();
18:         
19:         private MitarbeiterFaehigkeitenManager() {
20:         }
21:         
22:         /**
23:          * @return Liefert die Singleton-Instanz des MitarbeiterFaehigkeitenManager-Objektes. Diese wird allerdings nicht,
24:          * wie bei einem gewöhnlichen Singleton in der Klasse selbst verwaltet, sondern von dem Sitzungsobjekt. <br>
25:          * TODO Art: unidentified; ob das sinnvoll ist, sollte nochmal diskutiert werden...
26:          */
27:         public static MitarbeiterFaehigkeitenManager getInstance() {
28:                 final MitarbeiterFaehigkeitenManager manager = Sitzung.getInstance().getMitarbeiterFaehigkeitenManager();
29:•                if (manager == null) {
30:                         Sitzung.getInstance().provideMitarbeiterFaehigkeitenManager(new MitarbeiterFaehigkeitenManager());
31:                 }
32:                 return Sitzung.getInstance().getMitarbeiterFaehigkeitenManager();
33:         }
34:         
35:         /**
36:          * erstellt eine neue Mitarbeiterfähigkeit.
37:          *
38:          * @param name Name der Fähigkeit (ist eindeutig)
39:          * @param beschreibung Beschreibung der Fähigkeit
40:          * @return neue Mitarbeiterfähigkeit
41:          * @throws util.exceptions.AlreadyExistsException falls es bereits eine Mitarbeiterfähigkeit mit dem gleichen Namen gibt.
42:          * @throws FaehigkeitsException falls die Fähigkeit dem Namensmuster für eine {@link MitarbeiterFaehigkeitFuerMaschine} entspricht, jedoch keine
43:          * {@link MitarbeiterFaehigkeitFuerMaschine} ist.
44:          */
45:         // TODO: Art: unidentified; der Methodenname ist irgendwie irreführend. @Jan was wird hier erstellt? MitarbeiterFaehigkeit oder
46:         // MitarbeiterFaehigkeitFuerMaschine?
47:         public MitarbeiterFaehigkeit createMitarbeiterFaehigkeitFuerMaschine(final String name, final String beschreibung)
48:                         throws FaehigkeitsException {
49:•                if (name.matches(".*Maschinenfähigkeit.*")) {
50:                         // TODO Art: Work in Progress; Literale
51:                         throw new FaehigkeitsException(String.format(
52:                                         "Name der Fähigkeit %s nicht zugelassen. Es handelt sich nicht um eine Maschinenfähigkeit. "
53:                                                         + "Nicht-Maschinenfähigkeiten dürfen nicht \"Maschinenfähigkeit\" heißen.",
54:                                                         name));
55:                 }
56:                 return this.getFaehigkeit(name, beschreibung);
57:         }
58:         
59:         
60:         /**
61:          * erstellt eine Mitarbeiterfähigkeit für den gegebenen Maschinentypen.
62:          *
63:          * @param name
64:          * Name der zu erstellenden MitarbeiterFaehigkeitFuerMaschine
65:          * @param beschreibung
66:          * Beschreibung der zu erstellenden MitarbeiterFaehigkeitFuerMaschine
67:          * @param maschinentyp
68:          * {@linkplain MaschinenTyp} für welchen die Mitarbeiterfähigkeit sein soll.
69:          * @return {@linkplain MitarbeiterFaehigkeitFuerMaschine}
70:          */
71:         public MitarbeiterFaehigkeitFuerMaschine createMitarbeiterFaehigkeitFuerMaschine(final String name, final String beschreibung, final MaschinenTyp maschinentyp) {
72:                 return this.getMaschinenFaehigkeit(name, beschreibung, maschinentyp);
73:         }
74:         
75:         private MitarbeiterFaehigkeitFuerMaschine getMaschinenFaehigkeit(final String name, final String beschreibung, final MaschinenTyp maschinentyp) {
76:                 final MitarbeiterFaehigkeitFuerMaschine faehigkeit =
77:                                 new MitarbeiterFaehigkeitFuerMaschine(name, beschreibung, maschinentyp);
78:                 // Da das equals gepasst hat ist der Cast quasi safe.
79: // TODO Art: unidentified; Aber hier sollte man lieber einen Visitor einbauen oder die Struktur der Fähigkeiten überdenken
80:                 return (MitarbeiterFaehigkeitFuerMaschine) this.faehigkeiten.stream()
81:                                 .filter(mitarbeiterFaehigkeit -> mitarbeiterFaehigkeit.equals(faehigkeit))
82:                                 .findFirst().orElse(faehigkeit);
83:         }
84:         
85:         
86:         private MitarbeiterFaehigkeit getFaehigkeit(final String name, final String beschreibung) {
87:                 final Optional<MitarbeiterFaehigkeit> optionalFaehigkeit = this.getFaehigkeitIfExists(name, beschreibung);
88:•                if (!optionalFaehigkeit.isPresent()) {
89:                         final MitarbeiterFaehigkeit mitarbeiterFaehigkeit = new MitarbeiterFaehigkeit(name, beschreibung);
90:                         this.faehigkeiten.add(mitarbeiterFaehigkeit);
91:                         return mitarbeiterFaehigkeit;
92:                 }
93:                 return optionalFaehigkeit.get();
94:         }
95:         
96:         private Optional<MitarbeiterFaehigkeit> getFaehigkeitIfExists(final String name, final String beschreibung) {
97:                 return this.faehigkeiten.stream()
98:                                 .filter(mitarbeiterFaehigkeit -> mitarbeiterFaehigkeit.getName().equals(name))
99:                                 .findFirst();
100:         }
101: }