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.forum.frontend.action;
35
36 import info.magnolia.cms.i18n.MessagesUtil;
37 import info.magnolia.jcr.util.PropertyUtil;
38 import info.magnolia.module.forum.ForumConfiguration;
39 import info.magnolia.module.forum.ForumManager;
40 import info.magnolia.module.forum.PagedResult;
41 import info.magnolia.rendering.model.RenderingModel;
42 import info.magnolia.rendering.template.RenderableDefinition;
43
44 import javax.jcr.Node;
45 import javax.jcr.RepositoryException;
46 import java.util.Collection;
47
48
49
50
51
52
53
54
55
56
57 public class ThreadView<RD extends RenderableDefinition> extends AbstractThreadAction<RD> {
58
59 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ThreadView.class);
60
61 protected static final String PROPERTYNAME = "threadId";
62 private long page;
63 private PagedResult messages;
64 private String missingDataExceptionMessage;
65
66
67 protected void setMessages(PagedResult messages) {
68 this.messages = messages;
69 }
70
71 public ThreadView(Node content, RD renderable, RenderingModel<?> parent) {
72 super(content, renderable, parent);
73 }
74
75 public ThreadView(Node content, RD renderable, RenderingModel<?> parent, ForumManager forumManager, ForumConfiguration config) {
76 super(content, renderable, parent, forumManager, config);
77 }
78
79 public void setPage(long page) {
80 this.page = page;
81 }
82
83 @Override
84 public String execute() {
85 try {
86 if (getNode().hasProperty(PROPERTYNAME)) {
87 threadId = PropertyUtil.getString(getNode(),PROPERTYNAME);
88 }
89 if (threadId == null) {
90 missingDataExceptionMessage = MessagesUtil.get("forum.templateMessage.threadView.missingThreadId","info.magnolia.module.forum.messages");
91 } else {
92 thread = forumManager.getThread(threadId);
93 forum = forumManager.getForumFromThread(thread);
94
95 if (page < 1) {
96 page = 1;
97 }
98 messages = forumManager.getMessages(thread, page);
99 }
100
101 return "success";
102 } catch (RepositoryException e) {
103 throw new RuntimeException(e);
104 }
105 }
106
107 public Collection<Node> getMessages() throws RepositoryException {
108 return messages.getNodePage();
109 }
110
111 public long getPageCount() {
112 if (forumConfig.getMessagesPerPage() < 1) {
113 return 1;
114 }
115
116 return (long) Math.ceil((double) messages.getTotalNodeCount() / (double) forumConfig.getMessagesPerPage());
117 }
118
119 public String getmissingDataExceptionMessage() {
120 return missingDataExceptionMessage;
121 }
122 }