1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $RCSfile$ 3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Revision$ 4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Date$ 5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Copyright 2003-2007 Jive Software. 7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); 9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * you may not use this file except in compliance with the License. 10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * You may obtain a copy of the License at 11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * http://www.apache.org/licenses/LICENSE-2.0 13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Unless required by applicable law or agreed to in writing, software 15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * distributed under the License is distributed on an "AS IS" BASIS, 16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * See the License for the specific language governing permissions and 18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * limitations under the License. 19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.jivesoftware.smackx.packet; 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.packet.PacketExtension; 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.text.SimpleDateFormat; 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.Date; 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.TimeZone; 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Represents extended presence information whose sole purpose is to signal the ability of 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * the occupant to speak the MUC protocol when joining a room. If the room requires a password 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * then the MUCInitialPresence should include one.<p> 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * The amount of discussion history provided on entering a room (perhaps because the 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * user is on a low-bandwidth connection or is using a small-footprint client) could be managed by 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * setting a configured History instance to the MUCInitialPresence instance. 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @see MUCInitialPresence#setHistory(MUCInitialPresence.History). 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Gaston Dombiak 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class MUCInitialPresence implements PacketExtension { 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String password; 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private History history; 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getElementName() { 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return "x"; 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getNamespace() { 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return "http://jabber.org/protocol/muc"; 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String toXML() { 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen StringBuilder buf = new StringBuilder(); 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append("<").append(getElementName()).append(" xmlns=\"").append(getNamespace()).append( 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen "\">"); 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (getPassword() != null) { 59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append("<password>").append(getPassword()).append("</password>"); 60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (getHistory() != null) { 62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append(getHistory().toXML()); 63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append("</").append(getElementName()).append(">"); 65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return buf.toString(); 66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the history that manages the amount of discussion history provided on 70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * entering a room. 71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the history that manages the amount of discussion history provided on 73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * entering a room. 74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public History getHistory() { 76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return history; 77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the password to use when the room requires a password. 81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the password to use when the room requires a password. 83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getPassword() { 85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return password; 86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the History that manages the amount of discussion history provided on 90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * entering a room. 91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param history that manages the amount of discussion history provided on 93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * entering a room. 94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setHistory(History history) { 96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.history = history; 97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the password to use when the room requires a password. 101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param password the password to use when the room requires a password. 103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setPassword(String password) { 105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.password = password; 106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * The History class controls the number of characters or messages to receive 110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * when entering a room. 111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Gaston Dombiak 113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static class History { 115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private int maxChars = -1; 117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private int maxStanzas = -1; 118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private int seconds = -1; 119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private Date since; 120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the total number of characters to receive in the history. 123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return total number of characters to receive in the history. 125d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 126d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public int getMaxChars() { 127d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return maxChars; 128d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 129d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 130d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 131d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the total number of messages to receive in the history. 132d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 133d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the total number of messages to receive in the history. 134d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 135d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public int getMaxStanzas() { 136d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return maxStanzas; 137d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 138d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 139d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 140d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the number of seconds to use to filter the messages received during that time. 141d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * In other words, only the messages received in the last "X" seconds will be included in 142d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * the history. 143d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 144d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the number of seconds to use to filter the messages received during that time. 145d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 146d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public int getSeconds() { 147d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return seconds; 148d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 149d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 150d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 151d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the since date to use to filter the messages received during that time. 152d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * In other words, only the messages received since the datetime specified will be 153d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * included in the history. 154d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 155d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the since date to use to filter the messages received during that time. 156d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 157d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public Date getSince() { 158d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return since; 159d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 160d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 161d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 162d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the total number of characters to receive in the history. 163d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 164d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param maxChars the total number of characters to receive in the history. 165d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 166d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setMaxChars(int maxChars) { 167d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.maxChars = maxChars; 168d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 169d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 170d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 171d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the total number of messages to receive in the history. 172d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 173d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param maxStanzas the total number of messages to receive in the history. 174d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 175d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setMaxStanzas(int maxStanzas) { 176d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.maxStanzas = maxStanzas; 177d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 178d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 179d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 180d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the number of seconds to use to filter the messages received during that time. 181d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * In other words, only the messages received in the last "X" seconds will be included in 182d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * the history. 183d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 184d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param seconds the number of seconds to use to filter the messages received during 185d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * that time. 186d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 187d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setSeconds(int seconds) { 188d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.seconds = seconds; 189d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 190d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 191d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 192d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Sets the since date to use to filter the messages received during that time. 193d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * In other words, only the messages received since the datetime specified will be 194d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * included in the history. 195d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 196d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param since the since date to use to filter the messages received during that time. 197d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 198d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public void setSince(Date since) { 199d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.since = since; 200d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 201d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 202d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String toXML() { 203d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen StringBuilder buf = new StringBuilder(); 204d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append("<history"); 205d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (getMaxChars() != -1) { 206d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append(" maxchars=\"").append(getMaxChars()).append("\""); 207d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 208d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (getMaxStanzas() != -1) { 209d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append(" maxstanzas=\"").append(getMaxStanzas()).append("\""); 210d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 211d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (getSeconds() != -1) { 212d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append(" seconds=\"").append(getSeconds()).append("\""); 213d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 214d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (getSince() != null) { 215d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen SimpleDateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 216d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen utcFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 217d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append(" since=\"").append(utcFormat.format(getSince())).append("\""); 218d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 219d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append("/>"); 220d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return buf.toString(); 221d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 222d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 223d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 224