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