/
AbstractMethodTransformer.java
59 lines (48 loc) · 2.28 KB
/
AbstractMethodTransformer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package net.fortuna.ical4j.transform.calendar;
import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.ComponentGroup;
import net.fortuna.ical4j.model.Property;
import net.fortuna.ical4j.model.component.CalendarComponent;
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.model.property.Uid;
import net.fortuna.ical4j.transform.Transformer;
import net.fortuna.ical4j.transform.component.SequenceIncrement;
import net.fortuna.ical4j.transform.component.UidUpdate;
import net.fortuna.ical4j.util.UidGenerator;
import java.util.Optional;
public abstract class AbstractMethodTransformer implements Transformer<Calendar> {
private final Method method;
private final UidUpdate uidUpdate;
private final SequenceIncrement sequenceIncrement;
private final boolean incrementSequence;
private final boolean sameUid;
AbstractMethodTransformer(Method method, UidGenerator uidGenerator, boolean sameUid, boolean incrementSequence) {
this.method = method;
this.uidUpdate = new UidUpdate(uidGenerator);
this.sequenceIncrement = new SequenceIncrement();
this.incrementSequence = incrementSequence;
this.sameUid = sameUid;
}
@Override
public Calendar transform(Calendar object) {
MethodUpdate methodUpdate = new MethodUpdate(method);
methodUpdate.transform(object);
Optional<Uid> uid = Optional.empty();
for (CalendarComponent component : object.getComponents().getAll()) {
uidUpdate.transform(component);
if (!uid.isPresent()) {
uid = component.getProperties().getFirst(Property.UID);
} else if (sameUid && !uid.equals(component.getProperties().getFirst(Property.UID))) {
throw new IllegalArgumentException("All components must share the same non-null UID");
}
ComponentGroup<CalendarComponent> componentGroup = new ComponentGroup<>(
object.getComponents().getAll(), uid.get());
// if a calendar component has already been published previously
// update the sequence number..
if (incrementSequence) {
sequenceIncrement.transform(componentGroup.getLatestRevision());
}
}
return object;
}
}