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.SessionUtil;
38 import info.magnolia.module.rssaggregator.util.PagerUtil;
39 import info.magnolia.module.rssaggregator.util.PlanetUtil;
40 import info.magnolia.rendering.model.RenderingModel;
41 import info.magnolia.rendering.template.TemplateDefinition;
42 import info.magnolia.templating.functions.TemplatingFunctions;
43
44 import java.util.ArrayList;
45 import java.util.Collection;
46 import java.util.Collections;
47 import java.util.Comparator;
48 import java.util.Date;
49 import java.util.List;
50
51 import javax.inject.Inject;
52 import javax.jcr.Node;
53 import javax.jcr.NodeIterator;
54 import javax.jcr.RepositoryException;
55
56 import org.apache.commons.lang.StringUtils;
57 import org.slf4j.Logger;
58 import org.slf4j.LoggerFactory;
59
60
61
62
63
64
65
66 public class PlanetFeedModel<RD extends TemplateDefinition> extends AbstractFeedModel<TemplateDefinition> {
67
68 private final static Logger log = LoggerFactory.getLogger(PlanetFeedModel.class);
69
70 private static final String ARCHIVE_NODE = "planetData";
71 private static final String FEEDS_NODE = "feeds";
72 private static final String DATE_PROPERTY = "pubDate";
73
74 @Inject
75 public PlanetFeedModel(Node content, TemplateDefinition definition, RenderingModel<?> parent, TemplatingFunctions templatingFunctions) {
76 super(content, definition, parent, templatingFunctions);
77 }
78
79 @Override
80 public String execute() {
81 return "success";
82 }
83
84 public PagerUtil getPager() throws RepositoryException {
85 PagerUtil pager = null;
86 Collection<Node> listItems = getItems();
87 if (!listItems.isEmpty()) {
88
89 final String currentPageLink;
90 if (MgnlContext.isWebContext() && MgnlContext.getAggregationState() != null) {
91 currentPageLink = MgnlContext.getAggregationState().getOriginalURL();
92 } else {
93 currentPageLink = templatingFunctions.link(MgnlContext.getAggregationState().getMainContent().getJCRNode());
94 }
95
96 pager = new PagerUtil(currentPageLink, listItems, content);
97 }
98 return pager;
99 }
100
101 public Collection<Node> getItems() {
102 List<Node> listItems = new ArrayList<Node>();
103
104 try {
105 if (content.hasProperty("link")) {
106 Node rssParent = SessionUtil.getNode("data", content.getProperty("link").getString());
107
108 if (rssParent.hasNode(ARCHIVE_NODE)) {
109 NodeIterator nit = rssParent.getNode(ARCHIVE_NODE).getNodes();
110 while (nit.hasNext()) {
111 Node postsNode = nit.nextNode();
112
113 NodeIterator pit = postsNode.getNodes();
114 while (pit.hasNext()) {
115 Node nn = pit.nextNode();
116 boolean hidden = false;
117 if (nn.hasProperty("hidden")) {
118 hidden = nn.getProperty("hidden").getBoolean();
119 }
120 if (!hidden) {
121 listItems.add(nn);
122 }
123 }
124 }
125 sort(listItems);
126 }
127 } else {
128 log.info("No feed specified for planet feeds.");
129 }
130 } catch (Exception e) {
131 log.error("Problem while retrieving post items: " + e.getMessage());
132 }
133 return listItems;
134 }
135
136 protected void sort(Collection<Node> listItems) {
137 Collections.sort((List<Node>) listItems, new Comparator<Node>() {
138 public int compare(Node n1, Node n2) {
139 try {
140 Date d1 = n1.getProperty(DATE_PROPERTY).getDate().getTime();
141 Date d2 = n2.getProperty(DATE_PROPERTY).getDate().getTime();
142
143 return d2.compareTo(d1);
144 } catch (RepositoryException e) {
145 log.error("Problem while sorting posts: " + e.getMessage());
146 }
147 return 0;
148 }
149 });
150 }
151
152 public String getDescription(String entryDescription, Integer abbreviation) {
153 return PlanetUtil.formatDescription(entryDescription, abbreviation);
154 }
155
156 public String getHackergotchi(String feedLink) {
157
158 String uuid = null;
159 try {
160 Node rssParent = SessionUtil.getNode("data", content.getProperty("link").getString());
161 if (rssParent.hasNode(FEEDS_NODE)) {
162 Node settingsNode = rssParent.getNode(FEEDS_NODE);
163 NodeIterator nit = settingsNode.getNodes();
164 while (nit.hasNext()) {
165 Node fsn = nit.nextNode();
166 if (fsn.hasProperty("img") && fsn.hasProperty("link") && fsn.hasProperty("imgUUID")) {
167 if (StringUtils.equalsIgnoreCase(feedLink, fsn.getProperty("link").getString())) {
168 uuid = fsn.getProperty("imgUUID").getString();
169 break;
170 }
171 }
172 }
173 }
174 } catch (RepositoryException e) {
175 log.error("Problem while fetching Hackergotchi: " + e.getMessage());
176 }
177 return uuid;
178 }
179
180
181
182
183
184
185
186 public String getFeedTitle(String feedLink) {
187
188 String title = null;
189 try {
190 Node rssParent = SessionUtil.getNode("data", content.getProperty("link").getString());
191 if (rssParent.hasNode(FEEDS_NODE)) {
192 Node settingsNode = rssParent.getNode(FEEDS_NODE);
193 NodeIterator nit = settingsNode.getNodes();
194 while (nit.hasNext()) {
195 Node fsn = nit.nextNode();
196 if (fsn.hasProperty("link") && fsn.hasProperty("title")) {
197 if (StringUtils.equalsIgnoreCase(feedLink, fsn.getProperty("link").getString())) {
198 title = StringUtils.defaultString(fsn.getProperty("title").getString(), null);
199 break;
200 }
201 }
202 }
203 }
204 } catch (RepositoryException e) {
205 log.error("Problem while fetching feed title for the main planet feed: " + e.getMessage());
206 }
207 return title;
208 }
209
210 }