1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17   * SOFTWARE.
18   */
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  /**
32   * <a href="MBMessageDisplayImpl.java.html"><b><i>View Source</i></b></a>
33   *
34   * @author Brian Wing Shun Chan
35   *
36   */
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 }