| /** |
| * $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; |
| } |
| } |
| } |