@@ -19,7 +19,7 @@ public class TerminMitWiederholungImpl extends TerminImpl implements TerminMitWi
19
19
20
20
private Wiederholung wdh ;
21
21
22
- // TODO Konstruktorprobleme auflösen
22
+ // Konstruktorprobleme auflösen
23
23
public TerminMitWiederholungImpl (String beschreibung , Datum start , Dauer dauer , WiederholungType type , int anzahl ,
24
24
int zyklus ) {
25
25
super (beschreibung , start , dauer );
@@ -28,34 +28,32 @@ public TerminMitWiederholungImpl(String beschreibung, Datum start, Dauer dauer,
28
28
public TerminMitWiederholungImpl (String beschreibung , Datum start , Dauer dauer , Wiederholung wdh ) {
29
29
super (beschreibung , start , dauer );
30
30
}
31
-
32
-
31
+
33
32
public Wiederholung getWdh () {
34
33
return new WiederholungImpl (wdh );
35
34
}
36
35
37
-
38
36
@ Override
39
37
public Map <Datum , Termin > termineIn (Monat monat ) {
40
- // TODO auf termineFuer zurückführen
41
- return null ;
38
+ // auf termineFuer zurückführen
39
+ return termineFuer ( monat ) ;
42
40
}
43
41
44
42
@ Override
45
43
public Map <Datum , Termin > termineIn (Woche woche ) {
46
- // TODO auf termineFuer zurückführen
47
- return null ;
44
+ // auf termineFuer zurückführen
45
+ return termineFuer ( woche ) ;
48
46
}
49
47
50
48
@ Override
51
49
public Map <Datum , Termin > termineAn (Tag tag ) {
52
- // TODO auf termineFuer zurückführen
53
- return null ;
50
+ // auf termineFuer zurückführen
51
+ return termineFuer ( tag ) ;
54
52
}
55
53
56
-
57
54
/**
58
- * Beispiel für den naiven Iterator, der alle Wiederholungen explizit aufzaehlt
55
+ * Beispiel für den naiven Iterator, der alle Wiederholungen explizit
56
+ * aufzaehlt
59
57
*/
60
58
@ Override
61
59
public Iterator <Termin > iterator () {
@@ -82,44 +80,59 @@ public Termin next() {
82
80
};
83
81
}
84
82
85
-
86
83
@ Override
87
84
public IntervallIterator <Datum > intervallIterator (int von , int bis ) {
88
85
return new IntervallIterator <Datum >() {
89
- // TODO end Index als upper bound merken / cursor initialisieren
90
-
86
+ // end Index als upper bound merken / cursor initialisieren
87
+ private TerminMitWiederholung current = null ;
88
+ private int howManySeen = von ;
89
+
91
90
@ Override
92
91
public boolean hasNext () {
93
- // TODO in Abhängigkeit von cursor und upper bound (upper bound ist inkl.)
94
- return false ;
92
+ // in Abhängigkeit von cursor und upper bound (upper bound
93
+ // ist inkl.)
94
+ return howManySeen <= bis ;
95
95
}
96
96
97
97
@ Override
98
98
public Datum next () {
99
- // TODO nächstes Element mit geeigneter Methode von Wiederholung berechnen
100
- return null ;
99
+ // nächstes Element mit geeigneter Methode von
100
+ // Wiederholung berechnen
101
+ if (current == null ) {
102
+ current = TerminMitWiederholungImpl .this ;
103
+ } else {
104
+ current = new TerminMitWiederholungImpl (getBeschreibung (), current .getWdh ().naechstesDatum (),
105
+ getDauer (), current .getWdh ().sub (1 ));
106
+ }
107
+ howManySeen += 1 ;
108
+ return current .getDatum ();
101
109
}
102
110
103
111
};
104
112
}
105
113
106
-
107
114
@ Override
108
115
public Map <Datum , Termin > termineFuer (DatumsGroesse groesse ) {
109
116
// TODO Indizes fuer Start und End Intervall berechnen
110
-
111
- // TODO Indizes auf Gültigkeit prüfen
117
+ int startIndex = 0 ;
118
+ int endIndex ;
119
+ // TODO Indizes auf Gültigkeit prüfen
112
120
// wenn endIndex > maxIntervallIndex dann setze endIndex auf
113
121
// maxIntervallIndex
122
+ if (endIndex > wdh .maxIntervallIndex ()){
123
+ endIndex = wdh .maxIntervallIndex ();
124
+ }
114
125
//
115
126
// wenn endIndex < startIndex || endIndex < 0 || startIndex < 0 ||
116
127
// endIndex > maxIntervallIndex
117
- // gib null zurück
118
-
119
- //
120
- // TODO hier den Intervalliterator nutzen
128
+ // gib null zurück
129
+ if (endIndex < startIndex || endIndex < 0 || startIndex < 0 || endIndex > wdh .maxIntervallIndex ()){
130
+ return null ;
131
+ }
132
+ //
133
+ // TODO hier den Intervalliterator nutzen
121
134
// Map erzeugen und die Wiederholungen einsammeln
122
-
135
+
123
136
return null ;
124
137
}
125
138
@@ -138,33 +151,40 @@ public WiederholungImpl(WiederholungType wdhType, int anzahl, int cyclus) {
138
151
public WiederholungImpl (Wiederholung wdh ) {
139
152
this (wdh .getType (), wdh .anzahl (), wdh .getZyklus ());
140
153
}
154
+
141
155
@ Override
142
156
public WiederholungType getType () {
143
157
return wdhType ;
144
158
}
159
+
145
160
@ Override
146
161
public int getZyklus () {
147
162
return cycle ;
148
163
}
164
+
149
165
@ Override
150
166
public int anzahl () {
151
167
return anzahl ;
152
168
}
169
+
153
170
@ Override
154
171
public int maxIntervallIndex () {
155
172
return anzahl ;
156
173
}
174
+
157
175
@ Override
158
176
public int intervallLaenge () {
159
177
return cycle * wdhType .inTagen ();
160
178
}
179
+
161
180
/*
162
- * @see kalender.interfaces.Wiederholung#naechstesIntervall(kalender.interfaces.Datum)
181
+ * @see kalender.interfaces.Wiederholung#naechstesIntervall(kalender.
182
+ * interfaces.Datum)
163
183
*
164
184
* Methode liefert den Intervallindex für das einem Datum nachfolgendem
165
185
* Intervall. Es werden auch Intervalle berechnet, die außerhalb des
166
- * gültigen Bereichs maxIntervallIndex liegen. Nutzer der Methode müssen
167
- * sicher stellen, dass die Gültigkeit des Index geprüft wird.
186
+ * gültigen Bereichs maxIntervallIndex liegen. Nutzer der Methode
187
+ * müssen sicher stellen, dass die Gültigkeit des Index geprüft wird.
168
188
*/
169
189
@ Override
170
190
public int naechstesIntervall (Datum dat ) {
@@ -192,10 +212,11 @@ public int naechstesIntervall(Datum dat) {
192
212
* @see kalender.interfaces.Wiederholung#vorherigesIntervall(kalender.
193
213
* interfaces.Datum)
194
214
*
195
- * Methode liefert den Intervallindex für das einem Datum vorausgehenden
196
- * Intervall. Es werden auch Intervalle berechnet, die außerhalb des
197
- * gültigen Bereichs maxIntervallIndex liegen. Nutzer der Methode müssen
198
- * sicher stellen, dass die Gültigkeit des Index geprüft wird.
215
+ * Methode liefert den Intervallindex für das einem Datum
216
+ * vorausgehenden Intervall. Es werden auch Intervalle berechnet, die
217
+ * außerhalb des gültigen Bereichs maxIntervallIndex liegen. Nutzer
218
+ * der Methode müssen sicher stellen, dass die Gültigkeit des Index
219
+ * geprüft wird.
199
220
*/
200
221
@ Override
201
222
public int vorherigesIntervall (Datum dat ) {
@@ -223,6 +244,7 @@ public int vorherigesIntervall(Datum dat) {
223
244
public Datum naechstesDatum () {
224
245
return naechstesDatum (1 );
225
246
}
247
+
226
248
/*
227
249
* @see kalender.interfaces.Wiederholung#naechstesDatum(int)
228
250
*/
@@ -231,13 +253,15 @@ public Datum naechstesDatum(int faktor) {
231
253
int anzahlTage = faktor * intervallLaenge ();
232
254
return new DatumImpl (getDatum ()).add (new DauerImpl (anzahlTage , 0 , 0 ));
233
255
}
256
+
234
257
/*
235
258
* @see kalender.interfaces.Wiederholung#sub(int)
236
259
*/
237
260
@ Override
238
261
public Wiederholung sub (int wdhCount ) {
239
262
return new WiederholungImpl (wdhType , anzahl - wdhCount , cycle );
240
263
}
264
+
241
265
/*
242
266
* @see kalender.interfaces.Wiederholung#add(int)
243
267
*/
@@ -246,7 +270,6 @@ public Wiederholung add(int wdhCount) {
246
270
return new WiederholungImpl (wdhType , anzahl + wdhCount , cycle );
247
271
}
248
272
249
-
250
273
}
251
274
252
275
}
0 commit comments