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