1
0
Fork 0
mirror of https://github.com/vanitasvitae/Smack.git synced 2024-06-18 17:34:49 +02:00
Smack/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/QueueOverview.java
Florian Schmaus 3d4e7938a7 Make ExtensionElement marker interface wrt. QNAME field
ExtensionElement is now a marker interface that requires all
implementation non-abstract classes to carry a static final QNAME
field (of type QName). This is verified by a new unit test.

Also FullyQualifiedElement is renamed to simply XmlElement. XmlElement
is used over ExtensionElement when implementing classes do not
statically know the qualified name of the XML elements they
represent. In general, XmlElement should be used sparingly, and every
XML element should be modeled by its own Java class (implementing
ExtensionElement).
2021-04-18 21:07:19 +02:00

167 lines
5.2 KiB
Java

/**
*
* Copyright 2003-2007 Jive Software.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jivesoftware.smackx.workgroup.packet;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.namespace.QName;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.XmlEnvironment;
import org.jivesoftware.smack.provider.ExtensionElementProvider;
import org.jivesoftware.smack.xml.XmlPullParser;
import org.jivesoftware.smack.xml.XmlPullParserException;
import org.jivesoftware.smackx.workgroup.agent.WorkgroupQueue;
public class QueueOverview implements ExtensionElement {
/**
* Element name of the stanza extension.
*/
public static String ELEMENT_NAME = "notify-queue";
/**
* Namespace of the stanza extension.
*/
public static String NAMESPACE = "http://jabber.org/protocol/workgroup";
public static final QName QNAME = new QName(NAMESPACE, ELEMENT_NAME);
private static final String DATE_FORMAT = "yyyyMMdd'T'HH:mm:ss";
private final SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
private int averageWaitTime;
private Date oldestEntry;
private int userCount;
private WorkgroupQueue.Status status;
QueueOverview() {
this.averageWaitTime = -1;
this.oldestEntry = null;
this.userCount = -1;
this.status = null;
}
void setAverageWaitTime(int averageWaitTime) {
this.averageWaitTime = averageWaitTime;
}
public int getAverageWaitTime () {
return averageWaitTime;
}
void setOldestEntry(Date oldestEntry) {
this.oldestEntry = oldestEntry;
}
public Date getOldestEntry() {
return oldestEntry;
}
void setUserCount(int userCount) {
this.userCount = userCount;
}
public int getUserCount() {
return userCount;
}
public WorkgroupQueue.Status getStatus() {
return status;
}
void setStatus(WorkgroupQueue.Status status) {
this.status = status;
}
@Override
public String getElementName () {
return ELEMENT_NAME;
}
@Override
public String getNamespace () {
return NAMESPACE;
}
@Override
public String toXML(XmlEnvironment enclosingEnvironment) {
StringBuilder buf = new StringBuilder();
buf.append('<').append(ELEMENT_NAME).append(" xmlns=\"").append(NAMESPACE).append("\">");
if (userCount != -1) {
buf.append("<count>").append(userCount).append("</count>");
}
if (oldestEntry != null) {
buf.append("<oldest>").append(dateFormat.format(oldestEntry)).append("</oldest>");
}
if (averageWaitTime != -1) {
buf.append("<time>").append(averageWaitTime).append("</time>");
}
if (status != null) {
buf.append("<status>").append(status).append("</status>");
}
buf.append("</").append(ELEMENT_NAME).append('>');
return buf.toString();
}
public static class Provider extends ExtensionElementProvider<QueueOverview> {
@Override
public QueueOverview parse(XmlPullParser parser,
int initialDepth, XmlEnvironment xmlEnvironment) throws XmlPullParserException,
IOException, TextParseException, ParseException {
QueueOverview queueOverview = new QueueOverview();
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
XmlPullParser.Event eventType = parser.next();
while (eventType != XmlPullParser.Event.END_ELEMENT
|| !ELEMENT_NAME.equals(parser.getName())) {
if ("count".equals(parser.getName())) {
queueOverview.setUserCount(Integer.parseInt(parser.nextText()));
}
else if ("time".equals(parser.getName())) {
queueOverview.setAverageWaitTime(Integer.parseInt(parser.nextText()));
}
else if ("oldest".equals(parser.getName())) {
queueOverview.setOldestEntry(dateFormat.parse(parser.nextText()));
}
else if ("status".equals(parser.getName())) {
queueOverview.setStatus(WorkgroupQueue.Status.fromString(parser.nextText()));
}
eventType = parser.next();
if (eventType != XmlPullParser.Event.END_ELEMENT) {
// throw exception
}
}
if (eventType != XmlPullParser.Event.END_ELEMENT) {
// throw exception
}
return queueOverview;
}
}
}