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; 22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.packet.PacketExtension; 24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.jivesoftware.smack.provider.PacketExtensionProvider; 25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.xmlpull.v1.XmlPullParser; 26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/** 28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * A group chat invitation packet extension, which is used to invite other 29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * users to a group chat room. To invite a user to a group chat room, address 30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * a new message to the user and set the room name appropriately, as in the 31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * following code example: 32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <pre> 34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Message message = new Message("user@chat.example.com"); 35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * message.setBody("Join me for a group chat!"); 36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * message.addExtension(new GroupChatInvitation("room@chat.example.com");); 37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * con.sendPacket(message); 38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * </pre> 39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * To listen for group chat invitations, use a PacketExtensionFilter for the 41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <tt>x</tt> element name and <tt>jabber:x:conference</tt> namespace, as in the 42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * following code example: 43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <pre> 45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * PacketFilter filter = new PacketExtensionFilter("x", "jabber:x:conference"); 46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * // Create a packet collector or packet listeners using the filter... 47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * </pre> 48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <b>Note</b>: this protocol is outdated now that the Multi-User Chat (MUC) JEP is available 50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * (<a href="http://www.jabber.org/jeps/jep-0045.html">JEP-45</a>). However, most 51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * existing clients still use this older protocol. Once MUC support becomes more 52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * widespread, this API may be deprecated. 53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Matt Tucker 55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class GroupChatInvitation implements PacketExtension { 57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Element name of the packet extension. 60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static final String ELEMENT_NAME = "x"; 62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Namespace of the packet extension. 65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static final String NAMESPACE = "jabber:x:conference"; 67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen private String roomAddress; 69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Creates a new group chat invitation to the specified room address. 72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * GroupChat room addresses are in the form <tt>room@service</tt>, 73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * where <tt>service</tt> is the name of groupchat server, such as 74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * <tt>chat.example.com</tt>. 75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param roomAddress the address of the group chat room. 77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public GroupChatInvitation(String roomAddress) { 79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen this.roomAddress = roomAddress; 80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen /** 83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Returns the address of the group chat room. GroupChat room addresses 84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * are in the form <tt>room@service</tt>, where <tt>service</tt> is 85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * the name of groupchat server, such as <tt>chat.example.com</tt>. 86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * 87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @return the address of the group chat room. 88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */ 89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getRoomAddress() { 90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return roomAddress; 91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getElementName() { 94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return ELEMENT_NAME; 95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String getNamespace() { 98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return NAMESPACE; 99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public String toXML() { 102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen StringBuilder buf = new StringBuilder(); 103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen buf.append("<x xmlns=\"jabber:x:conference\" jid=\"").append(roomAddress).append("\"/>"); 104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return buf.toString(); 105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen 107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public static class Provider implements PacketExtensionProvider { 108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen public PacketExtension parseExtension (XmlPullParser parser) throws Exception { 109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen String roomAddress = parser.getAttributeValue("", "jid"); 110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen // Advance to end of extension. 111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen parser.next(); 112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen return new GroupChatInvitation(roomAddress); 113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen } 115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}