QueueOverview.java

  1. /**
  2.  *
  3.  * Copyright 2003-2007 Jive Software.
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *     http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */

  17. package org.jivesoftware.smackx.workgroup.packet;

  18. import java.io.IOException;
  19. import java.text.ParseException;
  20. import java.text.SimpleDateFormat;
  21. import java.util.Date;

  22. import javax.xml.namespace.QName;

  23. import org.jivesoftware.smack.packet.ExtensionElement;
  24. import org.jivesoftware.smack.packet.XmlEnvironment;
  25. import org.jivesoftware.smack.provider.ExtensionElementProvider;
  26. import org.jivesoftware.smack.xml.XmlPullParser;
  27. import org.jivesoftware.smack.xml.XmlPullParserException;

  28. import org.jivesoftware.smackx.workgroup.agent.WorkgroupQueue;

  29. public class QueueOverview implements ExtensionElement {

  30.     /**
  31.      * Element name of the stanza extension.
  32.      */
  33.     public static String ELEMENT_NAME = "notify-queue";

  34.     /**
  35.      * Namespace of the stanza extension.
  36.      */
  37.     public static String NAMESPACE = "http://jabber.org/protocol/workgroup";
  38.     public static final QName QNAME = new QName(NAMESPACE, ELEMENT_NAME);

  39.     private static final String DATE_FORMAT = "yyyyMMdd'T'HH:mm:ss";
  40.     private final SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);

  41.     private int averageWaitTime;
  42.     private Date oldestEntry;
  43.     private int userCount;
  44.     private WorkgroupQueue.Status status;

  45.     QueueOverview() {
  46.         this.averageWaitTime = -1;
  47.         this.oldestEntry = null;
  48.         this.userCount = -1;
  49.         this.status = null;
  50.     }

  51.     void setAverageWaitTime(int averageWaitTime) {
  52.         this.averageWaitTime = averageWaitTime;
  53.     }

  54.     public int getAverageWaitTime () {
  55.         return averageWaitTime;
  56.     }

  57.     void setOldestEntry(Date oldestEntry) {
  58.         this.oldestEntry = oldestEntry;
  59.     }

  60.     public Date getOldestEntry() {
  61.         return oldestEntry;
  62.     }

  63.     void setUserCount(int userCount) {
  64.         this.userCount = userCount;
  65.     }

  66.     public int getUserCount() {
  67.         return userCount;
  68.     }

  69.     public WorkgroupQueue.Status getStatus() {
  70.         return status;
  71.     }

  72.     void setStatus(WorkgroupQueue.Status status) {
  73.         this.status = status;
  74.     }

  75.     @Override
  76.     public String getElementName () {
  77.         return ELEMENT_NAME;
  78.     }

  79.     @Override
  80.     public String getNamespace () {
  81.         return NAMESPACE;
  82.     }

  83.     @Override
  84.     public String toXML(XmlEnvironment enclosingEnvironment) {
  85.         StringBuilder buf = new StringBuilder();
  86.         buf.append('<').append(ELEMENT_NAME).append(" xmlns=\"").append(NAMESPACE).append("\">");

  87.         if (userCount != -1) {
  88.             buf.append("<count>").append(userCount).append("</count>");
  89.         }
  90.         if (oldestEntry != null) {
  91.             buf.append("<oldest>").append(dateFormat.format(oldestEntry)).append("</oldest>");
  92.         }
  93.         if (averageWaitTime != -1) {
  94.             buf.append("<time>").append(averageWaitTime).append("</time>");
  95.         }
  96.         if (status != null) {
  97.             buf.append("<status>").append(status).append("</status>");
  98.         }
  99.         buf.append("</").append(ELEMENT_NAME).append('>');

  100.         return buf.toString();
  101.     }

  102.     public static class Provider extends ExtensionElementProvider<QueueOverview> {

  103.         @Override
  104.         public QueueOverview parse(XmlPullParser parser,
  105.                         int initialDepth, XmlEnvironment xmlEnvironment) throws XmlPullParserException,
  106.                         IOException, TextParseException, ParseException {
  107.             QueueOverview queueOverview = new QueueOverview();
  108.             SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);

  109.             XmlPullParser.Event eventType = parser.next();
  110.             while (eventType != XmlPullParser.Event.END_ELEMENT
  111.                          || !ELEMENT_NAME.equals(parser.getName())) {
  112.                 if ("count".equals(parser.getName())) {
  113.                     queueOverview.setUserCount(Integer.parseInt(parser.nextText()));
  114.                 }
  115.                 else if ("time".equals(parser.getName())) {
  116.                     queueOverview.setAverageWaitTime(Integer.parseInt(parser.nextText()));
  117.                 }
  118.                 else if ("oldest".equals(parser.getName())) {
  119.                     queueOverview.setOldestEntry(dateFormat.parse(parser.nextText()));
  120.                 }
  121.                 else if ("status".equals(parser.getName())) {
  122.                     queueOverview.setStatus(WorkgroupQueue.Status.fromString(parser.nextText()));
  123.                 }

  124.                 eventType = parser.next();

  125.                 if (eventType != XmlPullParser.Event.END_ELEMENT) {
  126.                     // throw exception
  127.                 }
  128.             }

  129.             if (eventType != XmlPullParser.Event.END_ELEMENT) {
  130.                 // throw exception
  131.             }

  132.             return queueOverview;
  133.         }
  134.     }
  135. }