• 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.packet;
22 import java.util.ArrayList;
23 import java.util.Collections;
24 import java.util.Iterator;
25 import java.util.List;
26 
27 import org.jivesoftware.smack.packet.IQ;
28 
29 /**
30  * IQ packet that serves for kicking users, granting and revoking voice, banning users,
31  * modifying the ban list, granting and revoking membership and granting and revoking
32  * moderator privileges. All these operations are scoped by the
33  * 'http://jabber.org/protocol/muc#admin' namespace.
34  *
35  * @author Gaston Dombiak
36  */
37 public class MUCAdmin extends IQ {
38 
39     private List<Item> items = new ArrayList<Item>();
40 
41     /**
42      * Returns an Iterator for item childs that holds information about roles, affiliation,
43      * jids and nicks.
44      *
45      * @return an Iterator for item childs that holds information about roles, affiliation,
46      *          jids and nicks.
47      */
getItems()48     public Iterator<Item> getItems() {
49         synchronized (items) {
50             return Collections.unmodifiableList(new ArrayList<Item>(items)).iterator();
51         }
52     }
53 
54     /**
55      * Adds an item child that holds information about roles, affiliation, jids and nicks.
56      *
57      * @param item the item child that holds information about roles, affiliation, jids and nicks.
58      */
addItem(Item item)59     public void addItem(Item item) {
60         synchronized (items) {
61             items.add(item);
62         }
63     }
64 
getChildElementXML()65     public String getChildElementXML() {
66         StringBuilder buf = new StringBuilder();
67         buf.append("<query xmlns=\"http://jabber.org/protocol/muc#admin\">");
68         synchronized (items) {
69             for (int i = 0; i < items.size(); i++) {
70                 Item item = items.get(i);
71                 buf.append(item.toXML());
72             }
73         }
74         // Add packet extensions, if any are defined.
75         buf.append(getExtensionsXML());
76         buf.append("</query>");
77         return buf.toString();
78     }
79 
80     /**
81      * Item child that holds information about roles, affiliation, jids and nicks.
82      *
83      * @author Gaston Dombiak
84      */
85     public static class Item {
86         private String actor;
87         private String reason;
88         private String affiliation;
89         private String jid;
90         private String nick;
91         private String role;
92 
93         /**
94          * Creates a new item child.
95          *
96          * @param affiliation the actor's affiliation to the room
97          * @param role the privilege level of an occupant within a room.
98          */
Item(String affiliation, String role)99         public Item(String affiliation, String role) {
100             this.affiliation = affiliation;
101             this.role = role;
102         }
103 
104         /**
105          * Returns the actor (JID of an occupant in the room) that was kicked or banned.
106          *
107          * @return the JID of an occupant in the room that was kicked or banned.
108          */
getActor()109         public String getActor() {
110             return actor;
111         }
112 
113         /**
114          * Returns the reason for the item child. The reason is optional and could be used to
115          * explain the reason why a user (occupant) was kicked or banned.
116          *
117          * @return the reason for the item child.
118          */
getReason()119         public String getReason() {
120             return reason;
121         }
122 
123         /**
124          * Returns the occupant's affiliation to the room. The affiliation is a semi-permanent
125          * association or connection with a room. The possible affiliations are "owner", "admin",
126          * "member", and "outcast" (naturally it is also possible to have no affiliation). An
127          * affiliation lasts across a user's visits to a room.
128          *
129          * @return the actor's affiliation to the room
130          */
getAffiliation()131         public String getAffiliation() {
132             return affiliation;
133         }
134 
135         /**
136          * Returns the <room@service/nick> by which an occupant is identified within the context
137          * of a room. If the room is non-anonymous, the JID will be included in the item.
138          *
139          * @return the room JID by which an occupant is identified within the room.
140          */
getJid()141         public String getJid() {
142             return jid;
143         }
144 
145         /**
146          * Returns the new nickname of an occupant that is changing his/her nickname. The new
147          * nickname is sent as part of the unavailable presence.
148          *
149          * @return the new nickname of an occupant that is changing his/her nickname.
150          */
getNick()151         public String getNick() {
152             return nick;
153         }
154 
155         /**
156          * Returns the temporary position or privilege level of an occupant within a room. The
157          * possible roles are "moderator", "participant", and "visitor" (it is also possible to
158          * have no defined role). A role lasts only for the duration of an occupant's visit to
159          * a room.
160          *
161          * @return the privilege level of an occupant within a room.
162          */
getRole()163         public String getRole() {
164             return role;
165         }
166 
167         /**
168          * Sets the actor (JID of an occupant in the room) that was kicked or banned.
169          *
170          * @param actor the actor (JID of an occupant in the room) that was kicked or banned.
171          */
setActor(String actor)172         public void setActor(String actor) {
173             this.actor = actor;
174         }
175 
176         /**
177          * Sets the reason for the item child. The reason is optional and could be used to
178          * explain the reason why a user (occupant) was kicked or banned.
179          *
180          * @param reason the reason why a user (occupant) was kicked or banned.
181          */
setReason(String reason)182         public void setReason(String reason) {
183             this.reason = reason;
184         }
185 
186         /**
187          * Sets the <room@service/nick> by which an occupant is identified within the context
188          * of a room. If the room is non-anonymous, the JID will be included in the item.
189          *
190          * @param jid the JID by which an occupant is identified within a room.
191          */
setJid(String jid)192         public void setJid(String jid) {
193             this.jid = jid;
194         }
195 
196         /**
197          * Sets the new nickname of an occupant that is changing his/her nickname. The new
198          * nickname is sent as part of the unavailable presence.
199          *
200          * @param nick the new nickname of an occupant that is changing his/her nickname.
201          */
setNick(String nick)202         public void setNick(String nick) {
203             this.nick = nick;
204         }
205 
toXML()206         public String toXML() {
207             StringBuilder buf = new StringBuilder();
208             buf.append("<item");
209             if (getAffiliation() != null) {
210                 buf.append(" affiliation=\"").append(getAffiliation()).append("\"");
211             }
212             if (getJid() != null) {
213                 buf.append(" jid=\"").append(getJid()).append("\"");
214             }
215             if (getNick() != null) {
216                 buf.append(" nick=\"").append(getNick()).append("\"");
217             }
218             if (getRole() != null) {
219                 buf.append(" role=\"").append(getRole()).append("\"");
220             }
221             if (getReason() == null && getActor() == null) {
222                 buf.append("/>");
223             }
224             else {
225                 buf.append(">");
226                 if (getReason() != null) {
227                     buf.append("<reason>").append(getReason()).append("</reason>");
228                 }
229                 if (getActor() != null) {
230                     buf.append("<actor jid=\"").append(getActor()).append("\"/>");
231                 }
232                 buf.append("</item>");
233             }
234             return buf.toString();
235         }
236     };
237 }
238