BlueprintEvent.java
4.15 KB
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.day.cq.replication.ReplicationAction
* com.day.cq.wcm.api.PageEvent
* com.day.cq.wcm.api.PageModification
* com.day.cq.wcm.api.PageModification$ModificationType
* org.apache.commons.collections.IteratorUtils
* org.apache.commons.collections.Predicate
* org.apache.commons.collections.functors.TruePredicate
* org.osgi.service.event.Event
*/
package com.day.cq.wcm.msm.impl;
import com.day.cq.replication.ReplicationAction;
import com.day.cq.wcm.api.PageEvent;
import com.day.cq.wcm.api.PageModification;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import org.apache.commons.collections.IteratorUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.functors.TruePredicate;
import org.osgi.service.event.Event;
public final class BlueprintEvent {
public static final String EVENT_TOPIC = "com/day/cq/wcm/msm/blueprint";
private static final String EVENT_TOPIC_ROOT = "com/day/cq/wcm/msm/blueprint/";
public static final String EVENT_TOPIC_PAGE = "com/day/cq/wcm/msm/blueprint/pageEvent";
public static final String EVENT_TOPIC_REPLICATION = "com/day/cq/wcm/msm/blueprint/replication";
public static final String POSTFIX_SYNCHRONOUS = "/synchronous";
private static final String PN_MODIFICATIONS = "modifications";
private static final String PN_ACTION = "replicationAction";
private final ReplicationAction replicationAction;
private final List<PageModification> modifications;
private final String topic;
private BlueprintEvent(String topic, List<PageModification> modifications, ReplicationAction replicationAction) {
this.topic = topic;
this.modifications = new ArrayList<PageModification>();
if (modifications != null) {
this.modifications.addAll(modifications);
}
this.replicationAction = replicationAction;
}
public EVENT_TYPE getType() {
if (this.modifications != null && this.modifications.size() > 0) {
return EVENT_TYPE.PAGE;
}
if (this.replicationAction != null) {
return EVENT_TYPE.REPLICATION;
}
return null;
}
public ReplicationAction getReplicationAction() {
return this.replicationAction;
}
public Event toEvent(boolean synchronous) {
Hashtable<String, List> props = new Hashtable<String, List>();
props.put("modifications", this.modifications);
if (this.replicationAction != null) {
props.put("replicationAction", (List)this.replicationAction);
}
return new Event(this.topic + (synchronous ? "/synchronous" : ""), props);
}
public Iterator<PageModification> getModifications(final PageModification.ModificationType filter) {
Predicate predicate = filter == null ? TruePredicate.getInstance() : new Predicate(){
public boolean evaluate(Object object) {
return ((PageModification)object).getType().equals((Object)filter);
}
};
return IteratorUtils.filteredListIterator(this.modifications.listIterator(), (Predicate)predicate);
}
public static BlueprintEvent fromEvent(Event event) {
if (event.getTopic().startsWith("com/day/cq/wcm/msm/blueprint/")) {
return new BlueprintEvent(event.getTopic(), (List)event.getProperty("modifications"), (ReplicationAction)event.getProperty("replicationAction"));
}
return null;
}
public static BlueprintEvent fromPageEvent(PageEvent pageEvent) {
return new BlueprintEvent("com/day/cq/wcm/msm/blueprint/pageEvent", IteratorUtils.toList((Iterator)pageEvent.getModifications()), null);
}
public static BlueprintEvent fromReplicationAction(ReplicationAction replicationAction) {
return new BlueprintEvent("com/day/cq/wcm/msm/blueprint/replication", null, replicationAction);
}
public static enum EVENT_TYPE {
PAGE,
REPLICATION;
private EVENT_TYPE() {
}
}
}