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