/** * $Revision$ * $Date$ * * Copyright 2003-2007 Jive Software. * * All rights reserved. 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.agent; import java.util.*; import org.jivesoftware.smackx.workgroup.QueueUser; /** * A queue in a workgroup, which is a pool of agents that are routed a specific type of * chat request. */ public class WorkgroupQueue { private String name; private Status status = Status.CLOSED; private int averageWaitTime = -1; private Date oldestEntry = null; private Set<QueueUser> users = Collections.emptySet(); private int maxChats = 0; private int currentChats = 0; /** * Creates a new workgroup queue instance. * * @param name the name of the queue. */ WorkgroupQueue(String name) { this.name = name; } /** * Returns the name of the queue. * * @return the name of the queue. */ public String getName() { return name; } /** * Returns the status of the queue. * * @return the status of the queue. */ public Status getStatus() { return status; } void setStatus(Status status) { this.status = status; } /** * Returns the number of users waiting in the queue waiting to be routed to * an agent. * * @return the number of users waiting in the queue. */ public int getUserCount() { if (users == null) { return 0; } return users.size(); } /** * Returns an Iterator for the users in the queue waiting to be routed to * an agent (QueueUser instances). * * @return an Iterator for the users waiting in the queue. */ public Iterator<QueueUser> getUsers() { if (users == null) { return new HashSet<QueueUser>().iterator(); } return Collections.unmodifiableSet(users).iterator(); } void setUsers(Set<QueueUser> users) { this.users = users; } /** * Returns the average amount of time users wait in the queue before being * routed to an agent. If average wait time info isn't available, -1 will * be returned. * * @return the average wait time */ public int getAverageWaitTime() { return averageWaitTime; } void setAverageWaitTime(int averageTime) { this.averageWaitTime = averageTime; } /** * Returns the date of the oldest request waiting in the queue. If there * are no requests waiting to be routed, this method will return <tt>null</tt>. * * @return the date of the oldest request in the queue. */ public Date getOldestEntry() { return oldestEntry; } void setOldestEntry(Date oldestEntry) { this.oldestEntry = oldestEntry; } /** * Returns the maximum number of simultaneous chats the queue can handle. * * @return the max number of chats the queue can handle. */ public int getMaxChats() { return maxChats; } void setMaxChats(int maxChats) { this.maxChats = maxChats; } /** * Returns the current number of active chat sessions in the queue. * * @return the current number of active chat sessions in the queue. */ public int getCurrentChats() { return currentChats; } void setCurrentChats(int currentChats) { this.currentChats = currentChats; } /** * A class to represent the status of the workgroup. The possible values are: * * <ul> * <li>WorkgroupQueue.Status.OPEN -- the queue is active and accepting new chat requests. * <li>WorkgroupQueue.Status.ACTIVE -- the queue is active but NOT accepting new chat * requests. * <li>WorkgroupQueue.Status.CLOSED -- the queue is NOT active and NOT accepting new * chat requests. * </ul> */ public static class Status { /** * The queue is active and accepting new chat requests. */ public static final Status OPEN = new Status("open"); /** * The queue is active but NOT accepting new chat requests. This state might * occur when the workgroup has closed because regular support hours have closed, * but there are still several requests left in the queue. */ public static final Status ACTIVE = new Status("active"); /** * The queue is NOT active and NOT accepting new chat requests. */ public static final Status CLOSED = new Status("closed"); /** * Converts a String into the corresponding status. Valid String values * that can be converted to a status are: "open", "active", and "closed". * * @param type the String value to covert. * @return the corresponding Type. */ public static Status fromString(String type) { if (type == null) { return null; } type = type.toLowerCase(); if (OPEN.toString().equals(type)) { return OPEN; } else if (ACTIVE.toString().equals(type)) { return ACTIVE; } else if (CLOSED.toString().equals(type)) { return CLOSED; } else { return null; } } private String value; private Status(String value) { this.value = value; } public String toString() { return value; } } }