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