1
19
20 package com.liferay.portlet.messageboards.model.impl;
21
22 import com.liferay.portlet.messageboards.model.MBCategory;
23 import com.liferay.portlet.messageboards.model.MBMessage;
24 import com.liferay.portlet.messageboards.model.MBMessageDisplay;
25 import com.liferay.portlet.messageboards.model.MBThread;
26 import com.liferay.portlet.messageboards.model.MBTreeWalker;
27
28 import java.util.ArrayList;
29 import java.util.List;
30
31
37 public class MBMessageDisplayImpl implements MBMessageDisplay {
38
39 public MBMessageDisplayImpl(
40 MBMessage message, MBMessage parentMessage, MBCategory category,
41 MBThread thread, MBTreeWalker treeWalker, MBThread previousThread,
42 MBThread nextThread, MBThread firstThread, MBThread lastThread) {
43
44 _message = message;
45 _parentMessage = parentMessage;
46 _category = category;
47 _thread = thread;
48 _treeWalker = new MBTreeWalkerImpl(message);
49 _previousThread = previousThread;
50 _nextThread = nextThread;
51 _firstThread = firstThread;
52 _lastThread = lastThread;
53
54 List<MBMessage> orderedMessages = new ArrayList<MBMessage>();
55
56 _orderMessages(_treeWalker, treeWalker.getRoot(), orderedMessages);
57
58 for (int i = 0; i < orderedMessages.size(); i++) {
59 MBMessage curMessage = orderedMessages.get(i);
60
61 if (i == 0) {
62 _firstMessage = curMessage;
63 }
64
65 if (curMessage.equals(message)) {
66 if ((i - 1) >= 0) {
67 _previousMessage = orderedMessages.get(i - 1);
68 }
69
70 if ((i + 1) < orderedMessages.size()) {
71 _nextMessage = orderedMessages.get(i + 1);
72 }
73 }
74
75 if ((i + 1) == orderedMessages.size()) {
76 _lastMessage = curMessage;
77 }
78 }
79 }
80
81 public MBMessage getMessage() {
82 return _message;
83 }
84
85 public MBMessage getParentMessage() {
86 return _parentMessage;
87 }
88
89 public MBCategory getCategory() {
90 return _category;
91 }
92
93 public MBThread getThread() {
94 return _thread;
95 }
96
97 public MBTreeWalker getTreeWalker() {
98 return _treeWalker;
99 }
100
101 public MBThread getPreviousThread() {
102 return _previousThread;
103 }
104
105 public MBThread getNextThread() {
106 return _nextThread;
107 }
108
109 public MBThread getFirstThread() {
110 return _firstThread;
111 }
112
113 public MBThread getLastThread() {
114 return _lastThread;
115 }
116
117 public boolean isFirstThread() {
118 if (_firstThread == null) {
119 return false;
120 }
121 else if (_firstThread.equals(_thread)) {
122 return true;
123 }
124 else {
125 return false;
126 }
127 }
128
129 public boolean isLastThread() {
130 if (_lastThread == null) {
131 return false;
132 }
133 else if (_lastThread.equals(_thread)) {
134 return true;
135 }
136 else {
137 return false;
138 }
139 }
140
141 public MBMessage getPreviousMessage() {
142 return _previousMessage;
143 }
144
145 public MBMessage getNextMessage() {
146 return _nextMessage;
147 }
148
149 public MBMessage getFirstMessage() {
150 return _firstMessage;
151 }
152
153 public MBMessage getLastMessage() {
154 return _lastMessage;
155 }
156
157 public boolean isFirstMessage() {
158 if (_firstMessage == null) {
159 return false;
160 }
161 else if (_firstMessage.equals(_message)) {
162 return true;
163 }
164 else {
165 return false;
166 }
167 }
168
169 public boolean isLastMessage() {
170 if (_lastMessage == null) {
171 return false;
172 }
173 else if (_lastMessage.equals(_message)) {
174 return true;
175 }
176 else {
177 return false;
178 }
179 }
180
181 private void _orderMessages(
182 MBTreeWalker treeWalker, MBMessage message,
183 List<MBMessage> orderedMessages) {
184
185 orderedMessages.add(message);
186
187 List<MBMessage> messages = treeWalker.getMessages();
188 int[] range = treeWalker.getChildrenRange(message);
189
190 for (int i = range[0]; i < range[1]; i++) {
191 MBMessage curMessage = messages.get(i);
192
193 _orderMessages(treeWalker, curMessage, orderedMessages);
194 }
195 }
196
197 private MBMessage _message;
198 private MBMessage _parentMessage;
199 private MBCategory _category;
200 private MBThread _thread;
201 private MBTreeWalker _treeWalker;
202 private MBThread _previousThread;
203 private MBThread _nextThread;
204 private MBThread _firstThread;
205 private MBThread _lastThread;
206 private MBMessage _previousMessage;
207 private MBMessage _nextMessage;
208 private MBMessage _firstMessage;
209 private MBMessage _lastMessage;
210
211 }