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.muc; 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smackx.Form; 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smackx.FormField; 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smackx.packet.DiscoverInfo; 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.Iterator; 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Represents the room information that was discovered using Service Discovery. It's possible to 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * obtain information about a room before joining the room but only for rooms that are public (i.e. 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * rooms that may be discovered). 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Gaston Dombiak 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class RoomInfo { 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * JID of the room. The node of the JID is commonly used as the ID of the room or name. 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String room; 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Description of the room. 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String description = ""; 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Last known subject of the room. 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String subject = ""; 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Current number of occupants in the room. 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private int occupantsCount = -1; 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * A room is considered members-only if an invitation is required in order to enter the room. 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Any user that is not a member of the room won't be able to join the room unless the user 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * decides to register with the room (thus becoming a member). 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean membersOnly; 60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Moderated rooms enable only participants to speak. Users that join the room and aren't 62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * participants can't speak (they are just visitors). 63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean moderated; 65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Every presence packet can include the JID of every occupant unless the owner deactives this 67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * configuration. 68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean nonanonymous; 70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates if users must supply a password to join the room. 72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean passwordProtected; 74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Persistent rooms are saved to the database to make sure that rooms configurations can be 76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * restored in case the server goes down. 77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private boolean persistent; 79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen RoomInfo(DiscoverInfo info) { 81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen super(); 82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.room = info.getFrom(); 83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Get the information based on the discovered features 84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.membersOnly = info.containsFeature("muc_membersonly"); 85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.moderated = info.containsFeature("muc_moderated"); 86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.nonanonymous = info.containsFeature("muc_nonanonymous"); 87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.passwordProtected = info.containsFeature("muc_passwordprotected"); 88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.persistent = info.containsFeature("muc_persistent"); 89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Get the information based on the discovered extended information 90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen Form form = Form.getFormFrom(info); 91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (form != null) { 92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen FormField descField = form.getField("muc#roominfo_description"); 93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.description = ( descField == null || !(descField.getValues().hasNext()) )? "" : descField.getValues().next(); 94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen FormField subjField = form.getField("muc#roominfo_subject"); 96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.subject = ( subjField == null || !(subjField.getValues().hasNext()) ) ? "" : subjField.getValues().next(); 97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen FormField occCountField = form.getField("muc#roominfo_occupants"); 99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.occupantsCount = occCountField == null ? -1 : Integer.parseInt(occCountField.getValues() 100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen .next()); 101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the JID of the room whose information was discovered. 106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the JID of the room whose information was discovered. 108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getRoom() { 110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return room; 111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the discovered description of the room. 115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the discovered description of the room. 117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getDescription() { 119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return description; 120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the discovered subject of the room. The subject may be empty if the room does not 124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * have a subject. 125d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 126d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the discovered subject of the room. 127d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 128d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getSubject() { 129d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return subject; 130d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 131d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 132d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 133d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the discovered number of occupants that are currently in the room. If this 134d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * information was not discovered (i.e. the server didn't send it) then a value of -1 will be 135d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * returned. 136d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 137d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the number of occupants that are currently in the room or -1 if that information was 138d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * not provided by the server. 139d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 140d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public int getOccupantsCount() { 141d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return occupantsCount; 142d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 143d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 144d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 145d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if the room has restricted the access so that only members may enter the room. 146d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 147d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if the room has restricted the access so that only members may enter the room. 148d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 149d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isMembersOnly() { 150d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return membersOnly; 151d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 152d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 153d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 154d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if the room enabled only participants to speak. Occupants with a role of 155d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * visitor won't be able to speak in the room. 156d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 157d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if the room enabled only participants to speak. 158d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 159d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isModerated() { 160d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return moderated; 161d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 162d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 163d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 164d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if presence packets will include the JID of every occupant. 165d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 166d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if presence packets will include the JID of every occupant. 167d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 168d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isNonanonymous() { 169d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return nonanonymous; 170d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 171d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 172d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 173d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if users musy provide a valid password in order to join the room. 174d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 175d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if users musy provide a valid password in order to join the room. 176d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 177d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isPasswordProtected() { 178d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return passwordProtected; 179d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 180d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 181d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 182d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns true if the room will persist after the last occupant have left the room. 183d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 184d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return true if the room will persist after the last occupant have left the room. 185d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 186d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public boolean isPersistent() { 187d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return persistent; 188d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 189d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 190d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 191