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 package info.magnolia.module.rssaggregator.templates.components;
35
36 import info.magnolia.context.MgnlContext;
37 import info.magnolia.jcr.util.ContentMap;
38 import info.magnolia.jcr.util.PropertyUtil;
39 import info.magnolia.rendering.model.RenderingModel;
40 import info.magnolia.rendering.template.TemplateDefinition;
41 import info.magnolia.templating.functions.TemplatingFunctions;
42
43 import java.util.ArrayList;
44 import java.util.Collection;
45 import java.util.List;
46
47 import javax.inject.Inject;
48 import javax.jcr.Node;
49 import javax.jcr.NodeIterator;
50 import javax.jcr.RepositoryException;
51
52 import org.apache.commons.lang3.StringUtils;
53 import org.apache.jackrabbit.util.ISO9075;
54
55
56
57
58
59
60 public class CombinedFeedModel<RD extends TemplateDefinition> extends AbstractFeedModel<TemplateDefinition> {
61
62 protected String orderBy = ORDER_BY_PUBLICATION_DATE;
63 protected String sortDirection = SORT_DESCENDING;
64
65 @Inject
66 public CombinedFeedModel(Node content, RD definition, RenderingModel<?> parent, TemplatingFunctions templatingFunctions) {
67 super(content, definition, parent, templatingFunctions);
68 }
69
70 @Override
71 public String execute() {
72 log.debug("Executing " + this.getClass().getName());
73 return "success";
74 }
75
76 @Override
77 public String getContextPath() {
78 return MgnlContext.getContextPath();
79 }
80
81 public Collection<ContentMap> getEntries() {
82 List<ContentMap> results = new ArrayList<>();
83 try {
84 String orderByNodeValue = PropertyUtil.getString(content, "orderBy");
85 String sortDirectionNodeValue = PropertyUtil.getString(content, "direction");
86 String link = PropertyUtil.getString(content, "link");
87
88 if (StringUtils.isEmpty(orderByNodeValue)) {
89 orderByNodeValue = orderBy;
90 }
91
92 if (StringUtils.isEmpty(sortDirectionNodeValue)) {
93 sortDirectionNodeValue = sortDirection;
94 }
95
96 String queryString = "/jcr:root" + ISO9075.encodePath(link) + "/data[1]/*/* order by " + orderByNodeValue + " " + sortDirectionNodeValue;
97 NodeIterator feeds = this.runQuery(queryString);
98
99 while (feeds.hasNext()) {
100 Node feed = feeds.nextNode();
101 results.add(new ContentMap(feed));
102 }
103 log.debug("returning collection with {} items.", "" + results.size());
104 return results;
105 } catch (RepositoryException e) {
106 log.error(e.getLocalizedMessage(), e);
107 }
108 return null;
109 }
110
111 public String getOrderBy() {
112 return this.orderBy;
113 }
114
115 public void setOrderBy(String orderBy) {
116 if (orderBy.equals(ORDER_BY_PUBLICATION_DATE) || orderBy.equals(ORDER_BY_TITLE_NAME)) {
117 this.orderBy = orderBy;
118 }
119 }
120
121 public String getSortDirection() {
122 return this.sortDirection;
123 }
124
125 public void setSortDirection(String sortDirection) {
126 if (sortDirection.equals(AbstractFeedModel.SORT_ASCENDING) || sortDirection.equals(AbstractFeedModel.SORT_DESCENDING)) {
127 this.sortDirection = sortDirection;
128 }
129 }
130 }