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 Chen/**
26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Represents extended presence information about roles, affiliations, full JIDs,
27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * or status codes scoped by the 'http://jabber.org/protocol/muc#user' namespace.
28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Gaston Dombiak
30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class MUCUser implements PacketExtension {
32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private Invite invite;
34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private Decline decline;
35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private Item item;
36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private String password;
37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private Status status;
38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private Destroy destroy;
39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public String getElementName() {
41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return "x";
42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public String getNamespace() {
45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return "http://jabber.org/protocol/muc#user";
46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public String toXML() {
49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        StringBuilder buf = new StringBuilder();
50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        buf.append("<").append(getElementName()).append(" xmlns=\"").append(getNamespace()).append(
51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            "\">");
52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (getInvite() != null) {
53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append(getInvite().toXML());
54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (getDecline() != null) {
56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append(getDecline().toXML());
57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (getItem() != null) {
59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append(getItem().toXML());
60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (getPassword() != null) {
62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append("<password>").append(getPassword()).append("</password>");
63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (getStatus() != null) {
65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append(getStatus().toXML());
66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (getDestroy() != null) {
68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append(getDestroy().toXML());
69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        buf.append("</").append(getElementName()).append(">");
71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return buf.toString();
72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Returns the invitation for another user to a room. The sender of the invitation
76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * must be an occupant of the room. The invitation will be sent to the room which in turn
77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * will forward the invitation to the invitee.
78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @return an invitation for another user to a room.
80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public Invite getInvite() {
82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return invite;
83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Returns the rejection to an invitation from another user to a room. The rejection will be
87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * sent to the room which in turn will forward the refusal to the inviter.
88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @return a rejection to an invitation from another user to a room.
90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public Decline getDecline() {
92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return decline;
93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Returns the item child that holds information about roles, affiliation, jids and nicks.
97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @return an item child that holds information about roles, affiliation, jids and nicks.
99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public Item getItem() {
101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return item;
102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Returns the password to use to enter Password-Protected Room. A Password-Protected Room is
106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * a room that a user cannot enter without first providing the correct password.
107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @return the password to use to enter Password-Protected Room.
109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public String getPassword() {
111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return password;
112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Returns the status which holds a code that assists in presenting notification messages.
116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @return the status which holds a code that assists in presenting notification messages.
118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public Status getStatus() {
120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return status;
121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Returns the notification that the room has been destroyed. After a room has been destroyed,
125d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * the room occupants will receive a Presence packet of type 'unavailable' with the reason for
126d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * the room destruction if provided by the room owner.
127d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
128d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @return a notification that the room has been destroyed.
129d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
130d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public Destroy getDestroy() {
131d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return destroy;
132d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
133d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
134d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
135d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Sets the invitation for another user to a room. The sender of the invitation
136d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * must be an occupant of the room. The invitation will be sent to the room which in turn
137d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * will forward the invitation to the invitee.
138d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
139d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param invite the invitation for another user to a room.
140d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
141d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public void setInvite(Invite invite) {
142d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.invite = invite;
143d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
144d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
145d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
146d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Sets the rejection to an invitation from another user to a room. The rejection will be
147d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * sent to the room which in turn will forward the refusal to the inviter.
148d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
149d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param decline the rejection to an invitation from another user to a room.
150d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
151d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public void setDecline(Decline decline) {
152d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.decline = decline;
153d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
154d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
155d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
156d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Sets the item child that holds information about roles, affiliation, jids and nicks.
157d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
158d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param item the item child that holds information about roles, affiliation, jids and nicks.
159d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
160d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public void setItem(Item item) {
161d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.item = item;
162d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
163d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
164d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
165d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Sets the password to use to enter Password-Protected Room. A Password-Protected Room is
166d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * a room that a user cannot enter without first providing the correct password.
167d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
168d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param string the password to use to enter Password-Protected Room.
169d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
170d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public void setPassword(String string) {
171d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        password = string;
172d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
173d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
174d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
175d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Sets the status which holds a code that assists in presenting notification messages.
176d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
177d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param status the status which holds a code that assists in presenting notification
178d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * messages.
179d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
180d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public void setStatus(Status status) {
181d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.status = status;
182d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
183d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
184d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
185d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Sets the notification that the room has been destroyed. After a room has been destroyed,
186d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * the room occupants will receive a Presence packet of type 'unavailable' with the reason for
187d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * the room destruction if provided by the room owner.
188d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
189d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @param destroy the notification that the room has been destroyed.
190d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
191d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public void setDestroy(Destroy destroy) {
192d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        this.destroy = destroy;
193d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
194d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
195d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
196d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Represents an invitation for another user to a room. The sender of the invitation
197d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * must be an occupant of the room. The invitation will be sent to the room which in turn
198d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * will forward the invitation to the invitee.
199d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
200d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @author Gaston Dombiak
201d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
202d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static class Invite {
203d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String reason;
204d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String from;
205d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String to;
206d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
207d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
208d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the bare JID of the inviter or, optionally, the room JID. (e.g.
209d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * 'crone1@shakespeare.lit/desktop').
210d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
211d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the room's occupant that sent the invitation.
212d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
213d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getFrom() {
214d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return from;
215d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
216d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
217d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
218d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the message explaining the invitation.
219d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
220d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the message explaining the invitation.
221d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
222d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getReason() {
223d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return reason;
224d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
225d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
226d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
227d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the bare JID of the invitee. (e.g. 'hecate@shakespeare.lit')
228d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
229d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the bare JID of the invitee.
230d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
231d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getTo() {
232d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return to;
233d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
234d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
235d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
236d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Sets the bare JID of the inviter or, optionally, the room JID. (e.g.
237d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * 'crone1@shakespeare.lit/desktop')
238d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
239d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param from the bare JID of the inviter or, optionally, the room JID.
240d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
241d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public void setFrom(String from) {
242d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.from = from;
243d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
244d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
245d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
246d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Sets the message explaining the invitation.
247d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
248d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param reason the message explaining the invitation.
249d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
250d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public void setReason(String reason) {
251d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.reason = reason;
252d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
253d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
254d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
255d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Sets the bare JID of the invitee. (e.g. 'hecate@shakespeare.lit')
256d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
257d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param to the bare JID of the invitee.
258d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
259d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public void setTo(String to) {
260d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.to = to;
261d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
262d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
263d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String toXML() {
264d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            StringBuilder buf = new StringBuilder();
265d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append("<invite ");
266d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            if (getTo() != null) {
267d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append(" to=\"").append(getTo()).append("\"");
268d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
269d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            if (getFrom() != null) {
270d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append(" from=\"").append(getFrom()).append("\"");
271d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
272d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append(">");
273d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            if (getReason() != null) {
274d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append("<reason>").append(getReason()).append("</reason>");
275d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
276d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append("</invite>");
277d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return buf.toString();
278d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
279d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
280d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
281d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
282d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Represents a rejection to an invitation from another user to a room. The rejection will be
283d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * sent to the room which in turn will forward the refusal to the inviter.
284d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
285d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @author Gaston Dombiak
286d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
287d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static class Decline {
288d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String reason;
289d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String from;
290d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String to;
291d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
292d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
293d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the bare JID of the invitee that rejected the invitation. (e.g.
294d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * 'crone1@shakespeare.lit/desktop').
295d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
296d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the bare JID of the invitee that rejected the invitation.
297d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
298d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getFrom() {
299d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return from;
300d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
301d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
302d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
303d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the message explaining why the invitation was rejected.
304d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
305d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the message explaining the reason for the rejection.
306d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
307d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getReason() {
308d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return reason;
309d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
310d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
311d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
312d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the bare JID of the inviter. (e.g. 'hecate@shakespeare.lit')
313d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
314d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the bare JID of the inviter.
315d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
316d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getTo() {
317d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return to;
318d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
319d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
320d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
321d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Sets the bare JID of the invitee that rejected the invitation. (e.g.
322d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * 'crone1@shakespeare.lit/desktop').
323d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
324d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param from the bare JID of the invitee that rejected the invitation.
325d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
326d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public void setFrom(String from) {
327d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.from = from;
328d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
329d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
330d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
331d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Sets the message explaining why the invitation was rejected.
332d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
333d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param reason the message explaining the reason for the rejection.
334d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
335d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public void setReason(String reason) {
336d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.reason = reason;
337d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
338d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
339d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
340d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Sets the bare JID of the inviter. (e.g. 'hecate@shakespeare.lit')
341d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
342d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param to the bare JID of the inviter.
343d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
344d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public void setTo(String to) {
345d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.to = to;
346d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
347d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
348d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String toXML() {
349d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            StringBuilder buf = new StringBuilder();
350d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append("<decline ");
351d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            if (getTo() != null) {
352d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append(" to=\"").append(getTo()).append("\"");
353d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
354d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            if (getFrom() != null) {
355d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append(" from=\"").append(getFrom()).append("\"");
356d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
357d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append(">");
358d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            if (getReason() != null) {
359d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append("<reason>").append(getReason()).append("</reason>");
360d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
361d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append("</decline>");
362d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return buf.toString();
363d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
364d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
365d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
366d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
367d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Item child that holds information about roles, affiliation, jids and nicks.
368d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
369d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @author Gaston Dombiak
370d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
371d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static class Item {
372d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String actor;
373d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String reason;
374d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String affiliation;
375d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String jid;
376d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String nick;
377d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String role;
378d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
379d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
380d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Creates a new item child.
381d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
382d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param affiliation the actor's affiliation to the room
383d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param role the privilege level of an occupant within a room.
384d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
385d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public Item(String affiliation, String role) {
386d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.affiliation = affiliation;
387d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.role = role;
388d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
389d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
390d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
391d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the actor (JID of an occupant in the room) that was kicked or banned.
392d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
393d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the JID of an occupant in the room that was kicked or banned.
394d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
395d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getActor() {
396d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return actor == null ? "" : actor;
397d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
398d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
399d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
400d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the reason for the item child. The reason is optional and could be used to
401d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * explain the reason why a user (occupant) was kicked or banned.
402d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
403d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the reason for the item child.
404d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
405d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getReason() {
406d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return reason == null ? "" : reason;
407d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
408d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
409d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
410d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the occupant's affiliation to the room. The affiliation is a semi-permanent
411d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * association or connection with a room. The possible affiliations are "owner", "admin",
412d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * "member", and "outcast" (naturally it is also possible to have no affiliation). An
413d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * affiliation lasts across a user's visits to a room.
414d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
415d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the actor's affiliation to the room
416d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
417d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getAffiliation() {
418d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return affiliation;
419d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
420d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
421d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
422d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the <room@service/nick> by which an occupant is identified within the context
423d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * of a room. If the room is non-anonymous, the JID will be included in the item.
424d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
425d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the room JID by which an occupant is identified within the room.
426d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
427d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getJid() {
428d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return jid;
429d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
430d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
431d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
432d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the new nickname of an occupant that is changing his/her nickname. The new
433d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * nickname is sent as part of the unavailable presence.
434d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
435d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the new nickname of an occupant that is changing his/her nickname.
436d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
437d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getNick() {
438d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return nick;
439d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
440d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
441d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
442d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the temporary position or privilege level of an occupant within a room. The
443d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * possible roles are "moderator", "participant", and "visitor" (it is also possible to
444d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * have no defined role). A role lasts only for the duration of an occupant's visit to
445d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * a room.
446d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
447d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the privilege level of an occupant within a room.
448d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
449d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getRole() {
450d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return role;
451d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
452d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
453d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
454d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Sets the actor (JID of an occupant in the room) that was kicked or banned.
455d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
456d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param actor the actor (JID of an occupant in the room) that was kicked or banned.
457d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
458d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public void setActor(String actor) {
459d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.actor = actor;
460d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
461d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
462d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
463d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Sets the reason for the item child. The reason is optional and could be used to
464d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * explain the reason why a user (occupant) was kicked or banned.
465d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
466d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param reason the reason why a user (occupant) was kicked or banned.
467d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
468d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public void setReason(String reason) {
469d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.reason = reason;
470d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
471d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
472d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
473d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Sets the <room@service/nick> by which an occupant is identified within the context
474d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * of a room. If the room is non-anonymous, the JID will be included in the item.
475d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
476d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param jid the JID by which an occupant is identified within a room.
477d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
478d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public void setJid(String jid) {
479d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.jid = jid;
480d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
481d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
482d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
483d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Sets the new nickname of an occupant that is changing his/her nickname. The new
484d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * nickname is sent as part of the unavailable presence.
485d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
486d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param nick the new nickname of an occupant that is changing his/her nickname.
487d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
488d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public void setNick(String nick) {
489d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.nick = nick;
490d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
491d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
492d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String toXML() {
493d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            StringBuilder buf = new StringBuilder();
494d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append("<item");
495d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            if (getAffiliation() != null) {
496d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append(" affiliation=\"").append(getAffiliation()).append("\"");
497d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
498d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            if (getJid() != null) {
499d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append(" jid=\"").append(getJid()).append("\"");
500d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
501d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            if (getNick() != null) {
502d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append(" nick=\"").append(getNick()).append("\"");
503d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
504d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            if (getRole() != null) {
505d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append(" role=\"").append(getRole()).append("\"");
506d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
507d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            if (getReason() == null && getActor() == null) {
508d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append("/>");
509d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
510d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            else {
511d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append(">");
512d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                if (getReason() != null) {
513d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                    buf.append("<reason>").append(getReason()).append("</reason>");
514d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                }
515d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                if (getActor() != null) {
516d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                    buf.append("<actor jid=\"").append(getActor()).append("\"/>");
517d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                }
518d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append("</item>");
519d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
520d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return buf.toString();
521d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
522d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
523d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
524d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
525d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Status code assists in presenting notification messages. The following link provides the
526d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * list of existing error codes (@link http://www.jabber.org/jeps/jep-0045.html#errorstatus).
527d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
528d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @author Gaston Dombiak
529d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
530d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static class Status {
531d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String code;
532d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
533d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
534d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Creates a new instance of Status with the specified code.
535d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
536d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param code the code that uniquely identifies the reason of the error.
537d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
538d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public Status(String code) {
539d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.code = code;
540d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
541d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
542d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
543d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the code that uniquely identifies the reason of the error. The code
544d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * assists in presenting notification messages.
545d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
546d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the code that uniquely identifies the reason of the error.
547d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
548d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getCode() {
549d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return code;
550d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
551d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
552d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String toXML() {
553d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            StringBuilder buf = new StringBuilder();
554d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append("<status code=\"").append(getCode()).append("\"/>");
555d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return buf.toString();
556d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
557d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
558d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
559d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    /**
560d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * Represents a notification that the room has been destroyed. After a room has been destroyed,
561d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * the room occupants will receive a Presence packet of type 'unavailable' with the reason for
562d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * the room destruction if provided by the room owner.
563d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     *
564d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     * @author Gaston Dombiak
565d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen     */
566d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static class Destroy {
567d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String reason;
568d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        private String jid;
569d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
570d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
571d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
572d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the JID of an alternate location since the current room is being destroyed.
573d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
574d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the JID of an alternate location.
575d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
576d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getJid() {
577d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return jid;
578d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
579d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
580d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
581d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Returns the reason for the room destruction.
582d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
583d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @return the reason for the room destruction.
584d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
585d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String getReason() {
586d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return reason;
587d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
588d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
589d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
590d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Sets the JID of an alternate location since the current room is being destroyed.
591d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
592d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param jid the JID of an alternate location.
593d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
594d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public void setJid(String jid) {
595d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.jid = jid;
596d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
597d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
598d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        /**
599d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * Sets the reason for the room destruction.
600d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         *
601d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         * @param reason the reason for the room destruction.
602d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen         */
603d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public void setReason(String reason) {
604d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            this.reason = reason;
605d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
606d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
607d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        public String toXML() {
608d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            StringBuilder buf = new StringBuilder();
609d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            buf.append("<destroy");
610d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            if (getJid() != null) {
611d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append(" jid=\"").append(getJid()).append("\"");
612d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
613d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            if (getReason() == null) {
614d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append("/>");
615d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
616d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            else {
617d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append(">");
618d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                if (getReason() != null) {
619d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                    buf.append("<reason>").append(getReason()).append("</reason>");
620d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                }
621d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                buf.append("</destroy>");
622d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
623d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return buf.toString();
624d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
625d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
626d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
627d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}