Shuyi Chen | d7955ce | 2013-05-22 14:51:55 -0700 | [diff] [blame] | 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 | */ |
| 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 | */ |
| 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 | */ |
| 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 | */ |
| 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 | */ |
| 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 | */ |
| 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 | */ |
| 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 | */ |
| 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 | */ |
| 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 | */ |
| 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 | } |