Home | History | Annotate | Download | only in muc
      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 }
    174