• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * $RCSfile$
3 /**
4  * $RCSfile$
5  * $Revision$
6  * $Date$
7  *
8  * Copyright 2003-2007 Jive Software.
9  *
10  * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
11  * you may not use this file except in compliance with the License.
12  * You may obtain a copy of the License at
13  *
14  *     http://www.apache.org/licenses/LICENSE-2.0
15  *
16  * Unless required by applicable law or agreed to in writing, software
17  * distributed under the License is distributed on an "AS IS" BASIS,
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  * See the License for the specific language governing permissions and
20  * limitations under the License.
21  */
22 
23 package org.jivesoftware.smackx.muc;
24 
25 import java.util.Date;
26 
27 import org.jivesoftware.smackx.packet.MUCInitialPresence;
28 
29 /**
30  * The DiscussionHistory class controls the number of characters or messages to receive
31  * when entering a room. The room will decide the amount of history to return if you don't
32  * specify a DiscussionHistory while joining a room.<p>
33  *
34  * You can use some or all of these variable to control the amount of history to receive:
35  * <ul>
36  *  <li>maxchars -> total number of characters to receive in the history.
37  *  <li>maxstanzas -> total number of messages to receive in the history.
38  *  <li>seconds -> only the messages received in the last "X" seconds will be included in the
39  * history.
40  *  <li>since -> only the messages received since the datetime specified will be included in
41  * the history.
42  * </ul>
43  *
44  * Note: Setting maxchars to 0 indicates that the user requests to receive no history.
45  *
46  * @author Gaston Dombiak
47  */
48 public class DiscussionHistory {
49 
50     private int maxChars = -1;
51     private int maxStanzas = -1;
52     private int seconds = -1;
53     private Date since;
54 
55     /**
56      * Returns the total number of characters to receive in the history.
57      *
58      * @return total number of characters to receive in the history.
59      */
getMaxChars()60     public int getMaxChars() {
61         return maxChars;
62     }
63 
64     /**
65      * Returns the total number of messages to receive in the history.
66      *
67      * @return the total number of messages to receive in the history.
68      */
getMaxStanzas()69     public int getMaxStanzas() {
70         return maxStanzas;
71     }
72 
73     /**
74      * Returns the number of seconds to use to filter the messages received during that time.
75      * In other words, only the messages received in the last "X" seconds will be included in
76      * the history.
77      *
78      * @return the number of seconds to use to filter the messages received during that time.
79      */
getSeconds()80     public int getSeconds() {
81         return seconds;
82     }
83 
84     /**
85      * Returns the since date to use to filter the messages received during that time.
86      * In other words, only the messages received since the datetime specified will be
87      * included in the history.
88      *
89      * @return the since date to use to filter the messages received during that time.
90      */
getSince()91     public Date getSince() {
92         return since;
93     }
94 
95     /**
96      * Sets the total number of characters to receive in the history.
97      *
98      * @param maxChars the total number of characters to receive in the history.
99      */
setMaxChars(int maxChars)100     public void setMaxChars(int maxChars) {
101         this.maxChars = maxChars;
102     }
103 
104     /**
105      * Sets the total number of messages to receive in the history.
106      *
107      * @param maxStanzas the total number of messages to receive in the history.
108      */
setMaxStanzas(int maxStanzas)109     public void setMaxStanzas(int maxStanzas) {
110         this.maxStanzas = maxStanzas;
111     }
112 
113     /**
114      * Sets the number of seconds to use to filter the messages received during that time.
115      * In other words, only the messages received in the last "X" seconds will be included in
116      * the history.
117      *
118      * @param seconds the number of seconds to use to filter the messages received during
119      * that time.
120      */
setSeconds(int seconds)121     public void setSeconds(int seconds) {
122         this.seconds = seconds;
123     }
124 
125     /**
126      * Sets the since date to use to filter the messages received during that time.
127      * In other words, only the messages received since the datetime specified will be
128      * included in the history.
129      *
130      * @param since the since date to use to filter the messages received during that time.
131      */
setSince(Date since)132     public void setSince(Date since) {
133         this.since = since;
134     }
135 
136     /**
137      * Returns true if the history has been configured with some values.
138      *
139      * @return true if the history has been configured with some values.
140      */
isConfigured()141     private boolean isConfigured() {
142         return maxChars > -1 || maxStanzas > -1 || seconds > -1 || since != null;
143     }
144 
145     /**
146      * Returns the History that manages the amount of discussion history provided on entering a
147      * room.
148      *
149      * @return the History that manages the amount of discussion history provided on entering a
150      * room.
151      */
getMUCHistory()152     MUCInitialPresence.History getMUCHistory() {
153         // Return null if the history was not properly configured
154         if (!isConfigured()) {
155             return null;
156         }
157 
158         MUCInitialPresence.History mucHistory = new MUCInitialPresence.History();
159         if (maxChars > -1) {
160             mucHistory.setMaxChars(maxChars);
161         }
162         if (maxStanzas > -1) {
163             mucHistory.setMaxStanzas(maxStanzas);
164         }
165         if (seconds > -1) {
166             mucHistory.setSeconds(seconds);
167         }
168         if (since != null) {
169             mucHistory.setSince(since);
170         }
171         return mucHistory;
172     }
173 }
174