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