ProjectHistoryTimelineEventProvider.java
5.2 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* com.adobe.cq.history.api.HistoryEntry
* com.adobe.cq.history.api.HistoryEntry$Action
* com.adobe.cq.history.api.HistoryService
* com.adobe.cq.history.api.timeline.HistoryTimelineEventType
* com.adobe.granite.timeline.TimelineEvent
* com.adobe.granite.timeline.TimelineEventProvider
* com.adobe.granite.timeline.TimelineEventType
* com.day.cq.commons.Filter
* com.day.cq.wcm.api.Page
* com.day.text.Text
* javax.jcr.Session
* org.apache.commons.lang.StringUtils
* org.apache.felix.scr.annotations.Component
* org.apache.felix.scr.annotations.Reference
* org.apache.felix.scr.annotations.Service
* org.apache.sling.api.resource.Resource
* org.apache.sling.api.resource.ResourceResolver
* org.slf4j.Logger
* org.slf4j.LoggerFactory
*/
package com.adobe.cq.projects.impl.history;
import com.adobe.cq.history.api.HistoryEntry;
import com.adobe.cq.history.api.HistoryService;
import com.adobe.cq.history.api.timeline.HistoryTimelineEventType;
import com.adobe.cq.projects.impl.history.ProjectHistoryEntryFilter;
import com.adobe.granite.timeline.TimelineEvent;
import com.adobe.granite.timeline.TimelineEventProvider;
import com.adobe.granite.timeline.TimelineEventType;
import com.day.cq.commons.Filter;
import com.day.cq.wcm.api.Page;
import com.day.text.Text;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Set;
import javax.jcr.Session;
import org.apache.commons.lang.StringUtils;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component
@Service
public class ProjectHistoryTimelineEventProvider
implements TimelineEventProvider {
private static final Logger log = LoggerFactory.getLogger(ProjectHistoryTimelineEventProvider.class);
@Reference
private HistoryService history;
public static final TimelineEventType EVENT_TYPE = new HistoryTimelineEventType(){
public String getName() {
return ProjectHistoryTimelineEventProvider.class.getCanonicalName();
}
};
public boolean accepts(Resource resource) {
return "cq/gui/components/projects/admin/card/projectcard".equals(resource.getResourceType());
}
public Collection<TimelineEvent> getEvents(Resource resource) {
ArrayList<TimelineEvent> events = new ArrayList<TimelineEvent>();
ResourceResolver resolver = resource.getResourceResolver();
long start = System.currentTimeMillis();
Collection historyEntries = this.history.readEntries(resolver, ((Session)resolver.adaptTo(Session.class)).getUserID(), 10, (Filter)new ProjectHistoryEntryFilter(resource));
log.debug(">>> retrieved all history entries for resource [{}] in [{}ms]", (Object)resource.getPath(), (Object)(System.currentTimeMillis() - start));
long startTimelineEntries = System.currentTimeMillis();
for (HistoryEntry historyEntry : historyEntries) {
events.add(new HistoryTimelineEvent(historyEntry, resolver));
}
log.debug(">>> converted history entries to timeline events for resource [{}] took [{}ms]", (Object)resource.getPath(), (Object)(System.currentTimeMillis() - startTimelineEntries));
return events;
}
public TimelineEventType getType() {
return EVENT_TYPE;
}
protected void bindHistory(HistoryService historyService) {
this.history = historyService;
}
protected void unbindHistory(HistoryService historyService) {
if (this.history == historyService) {
this.history = null;
}
}
private static class HistoryTimelineEvent
implements TimelineEvent {
private final HistoryEntry historyEntry;
private final ResourceResolver resolver;
public HistoryTimelineEvent(HistoryEntry historyEntry, ResourceResolver resolver) {
this.historyEntry = historyEntry;
this.resolver = resolver;
}
public String getAction() {
return this.historyEntry.getAction().name();
}
public String getDescription() {
Page historyPage;
Resource historyRes = this.resolver.getResource(this.historyEntry.getResourcePath());
if (historyRes != null && this.historyEntry.getResourceTypes().contains("cq:Page") && (historyPage = (Page)historyRes.adaptTo(Page.class)) != null && StringUtils.isNotEmpty((String)historyPage.getTitle())) {
return historyPage.getTitle();
}
return Text.getName((String)this.historyEntry.getResourcePath());
}
public String getOrigin() {
return this.historyEntry.getResourcePath();
}
public long getTime() {
return this.historyEntry.getDate().getTimeInMillis();
}
public TimelineEventType getType() {
return ProjectHistoryTimelineEventProvider.EVENT_TYPE;
}
public String getUserID() {
return this.historyEntry.getUserId();
}
}
}