1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Revision$ 3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * $Date$ 4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Copyright 2003-2007 Jive Software. 6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); 8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * you may not use this file except in compliance with the License. 9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * You may obtain a copy of the License at 10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * http://www.apache.org/licenses/LICENSE-2.0 12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Unless required by applicable law or agreed to in writing, software 14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * distributed under the License is distributed on an "AS IS" BASIS, 15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * See the License for the specific language governing permissions and 17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * limitations under the License. 18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.jivesoftware.smackx.workgroup.packet; 21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.packet.PacketExtension; 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.provider.PacketExtensionProvider; 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.xmlpull.v1.XmlPullParser; 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Packet extension for {@link org.jivesoftware.smackx.workgroup.agent.InvitationRequest}. 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Gaston Dombiak 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class RoomInvitation implements PacketExtension { 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Element name of the packet extension. 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static final String ELEMENT_NAME = "invite"; 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Namespace of the packet extension. 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static final String NAMESPACE = "http://jabber.org/protocol/workgroup"; 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Type of entity being invited to a groupchat support session. 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private Type type; 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * JID of the entity being invited. The entity could be another agent, user , a queue or a workgroup. In 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * the case of a queue or a workgroup the server will select the best agent to invite. 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String invitee; 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Full JID of the user that sent the invitation. 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String inviter; 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * ID of the session that originated the initial user request. 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String sessionID; 60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * JID of the room to join if offer is accepted. 62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String room; 64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Text provided by the inviter explaining the reason why the invitee is invited. 66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String reason; 68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public RoomInvitation(Type type, String invitee, String sessionID, String reason) { 70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.type = type; 71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.invitee = invitee; 72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.sessionID = sessionID; 73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.reason = reason; 74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private RoomInvitation() { 77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getElementName() { 80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return ELEMENT_NAME; 81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getNamespace() { 84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return NAMESPACE; 85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getInviter() { 88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return inviter; 89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getRoom() { 92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return room; 93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getReason() { 96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return reason; 97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getSessionID() { 100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return sessionID; 101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String toXML() { 104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen StringBuilder buf = new StringBuilder(); 105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append("<").append(ELEMENT_NAME).append(" xmlns=\"").append(NAMESPACE); 107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append("\" type=\"").append(type).append("\">"); 108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append("<session xmlns=\"http://jivesoftware.com/protocol/workgroup\" id=\"").append(sessionID).append("\"></session>"); 109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (invitee != null) { 110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append("<invitee>").append(invitee).append("</invitee>"); 111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (inviter != null) { 113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append("<inviter>").append(inviter).append("</inviter>"); 114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (reason != null) { 116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append("<reason>").append(reason).append("</reason>"); 117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Add packet extensions, if any are defined. 119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append("</").append(ELEMENT_NAME).append("> "); 120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return buf.toString(); 122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 125d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Type of entity being invited to a groupchat support session. 126d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 127d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static enum Type { 128d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 129d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * A user is being invited to a groupchat support session. The user could be another agent 130d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * or just a regular XMPP user. 131d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 132d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen user, 133d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 134d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Some agent of the specified queue will be invited to the groupchat support session. 135d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 136d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen queue, 137d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 138d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Some agent of the specified workgroup will be invited to the groupchat support session. 139d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 140d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen workgroup 141d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 142d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 143d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static class Provider implements PacketExtensionProvider { 144d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 145d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public PacketExtension parseExtension(XmlPullParser parser) throws Exception { 146d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen final RoomInvitation invitation = new RoomInvitation(); 147d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen invitation.type = Type.valueOf(parser.getAttributeValue("", "type")); 148d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 149d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen boolean done = false; 150d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen while (!done) { 151d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen parser.next(); 152d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen String elementName = parser.getName(); 153d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if (parser.getEventType() == XmlPullParser.START_TAG) { 154d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen if ("session".equals(elementName)) { 155d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen invitation.sessionID = parser.getAttributeValue("", "id"); 156d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 157d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen else if ("invitee".equals(elementName)) { 158d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen invitation.invitee = parser.nextText(); 159d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 160d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen else if ("inviter".equals(elementName)) { 161d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen invitation.inviter = parser.nextText(); 162d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 163d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen else if ("reason".equals(elementName)) { 164d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen invitation.reason = parser.nextText(); 165d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 166d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen else if ("room".equals(elementName)) { 167d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen invitation.room = parser.nextText(); 168d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 169d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 170d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen else if (parser.getEventType() == XmlPullParser.END_TAG && ELEMENT_NAME.equals(elementName)) { 171d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen done = true; 172d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 173d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 174d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return invitation; 175d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 176d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 177d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen} 178