1   /**
2    * Copyright (c) 2000-2007 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
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  /**
35   * <a href="MBMessageDisplayImpl.java.html"><b><i>View Source</i></b></a>
36   *
37   * @author Brian Wing Shun Chan
38   *
39   */
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 }