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 20package org.jivesoftware.smackx.workgroup.packet; 21 22import org.jivesoftware.smack.packet.PacketExtension; 23import org.jivesoftware.smack.provider.PacketExtensionProvider; 24import org.xmlpull.v1.XmlPullParser; 25 26/** 27 * An IQ packet that encapsulates both types of workgroup queue 28 * status notifications -- position updates, and estimated time 29 * left in the queue updates. 30 */ 31public class QueueUpdate implements PacketExtension { 32 33 /** 34 * Element name of the packet extension. 35 */ 36 public static final String ELEMENT_NAME = "queue-status"; 37 38 /** 39 * Namespace of the packet extension. 40 */ 41 public static final String NAMESPACE = "http://jabber.org/protocol/workgroup"; 42 43 private int position; 44 private int remainingTime; 45 46 public QueueUpdate(int position, int remainingTime) { 47 this.position = position; 48 this.remainingTime = remainingTime; 49 } 50 51 /** 52 * Returns the user's position in the workgroup queue, or -1 if the 53 * value isn't set on this packet. 54 * 55 * @return the position in the workgroup queue. 56 */ 57 public int getPosition() { 58 return this.position; 59 } 60 61 /** 62 * Returns the user's estimated time left in the workgroup queue, or 63 * -1 if the value isn't set on this packet. 64 * 65 * @return the estimated time left in the workgroup queue. 66 */ 67 public int getRemaingTime() { 68 return remainingTime; 69 } 70 71 public String toXML() { 72 StringBuilder buf = new StringBuilder(); 73 buf.append("<queue-status xmlns=\"http://jabber.org/protocol/workgroup\">"); 74 if (position != -1) { 75 buf.append("<position>").append(position).append("</position>"); 76 } 77 if (remainingTime != -1) { 78 buf.append("<time>").append(remainingTime).append("</time>"); 79 } 80 buf.append("</queue-status>"); 81 return buf.toString(); 82 } 83 84 public String getElementName() { 85 return ELEMENT_NAME; 86 } 87 88 public String getNamespace() { 89 return NAMESPACE; 90 } 91 92 public static class Provider implements PacketExtensionProvider { 93 94 public PacketExtension parseExtension(XmlPullParser parser) throws Exception { 95 boolean done = false; 96 int position = -1; 97 int timeRemaining = -1; 98 while (!done) { 99 parser.next(); 100 String elementName = parser.getName(); 101 if (parser.getEventType() == XmlPullParser.START_TAG && "position".equals(elementName)) { 102 try { 103 position = Integer.parseInt(parser.nextText()); 104 } 105 catch (NumberFormatException nfe) { 106 } 107 } 108 else if (parser.getEventType() == XmlPullParser.START_TAG && "time".equals(elementName)) { 109 try { 110 timeRemaining = Integer.parseInt(parser.nextText()); 111 } 112 catch (NumberFormatException nfe) { 113 } 114 } 115 else if (parser.getEventType() == XmlPullParser.END_TAG && "queue-status".equals(elementName)) { 116 done = true; 117 } 118 } 119 return new QueueUpdate(position, timeRemaining); 120 } 121 } 122}