Skip to content

Package: SchichtZeitFactory

SchichtZeitFactory

nameinstructionbranchcomplexitylinemethod
getInstance()
M: 0 C: 8
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
parse(String, String)
M: 44 C: 57
56%
M: 4 C: 6
60%
M: 4 C: 5
56%
M: 6 C: 16
73%
M: 0 C: 1
100%

Coverage

1: package planung;
2:
3: import util.RegexConstants;
4: import util.exceptions.ExceptionConstants;
5: import zeit.eintraege.UhrzeitZeitraum;
6:
7: import java.time.DayOfWeek;
8: import java.time.LocalTime;
9: import java.util.regex.Matcher;
10:
11: /**
12: * Eine {@link SchichtZeitFactory} ist in der Lage aus String-Repräsentationen von {@link SchichtZeit Schichtzeiten} PlanSchichten die tatsächlichen {@link SchichtZeit
13: * Schichtzeiten} zu erzeugen.
14: */
15: public final class SchichtZeitFactory {
16:
17:         private static SchichtZeitFactory instance;
18:
19:         private SchichtZeitFactory() {
20:         }
21:
22:         /**
23:          * @return liefert die Instanz der {@link SchichtZeitFactory}
24:          */
25:         public static SchichtZeitFactory getInstance() {
26:•                if (SchichtZeitFactory.instance == null) {
27:                         SchichtZeitFactory.instance = new SchichtZeitFactory();
28:                 }
29:                 return SchichtZeitFactory.instance;
30:         }
31:
32:         /**
33:          * @param wochentag
34:          *                 Wochentag, welcher die Schicht besitzt.
35:          * @param zeitraum
36:          *                 Zeitraum in den die Schicht an jedem dieser Tage fällt.
37:          *
38:          * @return erstellt eine {@link SchichtZeit} basierend auf Strings, die einen {@link Wochentag} und einen {@link UhrzeitZeitraum} repräsentieren.
39:          */
40:         public SchichtZeit parse(final String wochentag, final String zeitraum) {
41:                 final Matcher matcher = RegexConstants.UHRZEITEN_SPANNE.matcher(zeitraum);
42:•                if (matcher.find()) {
43:                         final LocalTime von = LocalTime.of(Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2)));
44:                         final LocalTime bis = LocalTime.of(Integer.parseInt(matcher.group(3)), Integer.parseInt(matcher.group(4)));
45:                         final DayOfWeek wchntg;
46:•                        switch (wochentag.toLowerCase()) {
47:                                 case "montag":
48:                                         wchntg = DayOfWeek.MONDAY;
49:                                         break;
50:                                 case "dienstag":
51:                                         wchntg = DayOfWeek.TUESDAY;
52:                                         break;
53:                                 case "mittwoch":
54:                                         wchntg = DayOfWeek.WEDNESDAY;
55:                                         break;
56:                                 case "donnerstag":
57:                                         wchntg = DayOfWeek.THURSDAY;
58:                                         break;
59:                                 case "freitag":
60:                                         wchntg = DayOfWeek.FRIDAY;
61:                                         break;
62:                                 case "samstag":
63:                                         wchntg = DayOfWeek.SATURDAY;
64:                                         break;
65:                                 case "sonntag":
66:                                         wchntg = DayOfWeek.SUNDAY;
67:                                         break;
68:                                 default:
69:                                         throw new RuntimeException(String.format(ExceptionConstants.NOT_PARSABLE, wochentag + zeitraum));
70:                         }
71:                         return SchichtZeit.create(wchntg, UhrzeitZeitraum.create(von, bis));
72:                 }
73:                 throw new RuntimeException(String.format(ExceptionConstants.NOT_PARSABLE, wochentag + zeitraum));
74:         }
75: }