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 20 package org.jivesoftware.smackx.workgroup.agent; 21 22 import java.util.*; 23 24 import org.jivesoftware.smackx.workgroup.QueueUser; 25 26 /** 27 * A queue in a workgroup, which is a pool of agents that are routed a specific type of 28 * chat request. 29 */ 30 public class WorkgroupQueue { 31 32 private String name; 33 private Status status = Status.CLOSED; 34 35 private int averageWaitTime = -1; 36 private Date oldestEntry = null; 37 private Set<QueueUser> users = Collections.emptySet(); 38 39 private int maxChats = 0; 40 private int currentChats = 0; 41 42 /** 43 * Creates a new workgroup queue instance. 44 * 45 * @param name the name of the queue. 46 */ 47 WorkgroupQueue(String name) { 48 this.name = name; 49 } 50 51 /** 52 * Returns the name of the queue. 53 * 54 * @return the name of the queue. 55 */ 56 public String getName() { 57 return name; 58 } 59 60 /** 61 * Returns the status of the queue. 62 * 63 * @return the status of the queue. 64 */ 65 public Status getStatus() { 66 return status; 67 } 68 69 void setStatus(Status status) { 70 this.status = status; 71 } 72 73 /** 74 * Returns the number of users waiting in the queue waiting to be routed to 75 * an agent. 76 * 77 * @return the number of users waiting in the queue. 78 */ 79 public int getUserCount() { 80 if (users == null) { 81 return 0; 82 } 83 return users.size(); 84 } 85 86 /** 87 * Returns an Iterator for the users in the queue waiting to be routed to 88 * an agent (QueueUser instances). 89 * 90 * @return an Iterator for the users waiting in the queue. 91 */ 92 public Iterator<QueueUser> getUsers() { 93 if (users == null) { 94 return new HashSet<QueueUser>().iterator(); 95 } 96 return Collections.unmodifiableSet(users).iterator(); 97 } 98 99 void setUsers(Set<QueueUser> users) { 100 this.users = users; 101 } 102 103 /** 104 * Returns the average amount of time users wait in the queue before being 105 * routed to an agent. If average wait time info isn't available, -1 will 106 * be returned. 107 * 108 * @return the average wait time 109 */ 110 public int getAverageWaitTime() { 111 return averageWaitTime; 112 } 113 114 void setAverageWaitTime(int averageTime) { 115 this.averageWaitTime = averageTime; 116 } 117 118 /** 119 * Returns the date of the oldest request waiting in the queue. If there 120 * are no requests waiting to be routed, this method will return <tt>null</tt>. 121 * 122 * @return the date of the oldest request in the queue. 123 */ 124 public Date getOldestEntry() { 125 return oldestEntry; 126 } 127 128 void setOldestEntry(Date oldestEntry) { 129 this.oldestEntry = oldestEntry; 130 } 131 132 /** 133 * Returns the maximum number of simultaneous chats the queue can handle. 134 * 135 * @return the max number of chats the queue can handle. 136 */ 137 public int getMaxChats() { 138 return maxChats; 139 } 140 141 void setMaxChats(int maxChats) { 142 this.maxChats = maxChats; 143 } 144 145 /** 146 * Returns the current number of active chat sessions in the queue. 147 * 148 * @return the current number of active chat sessions in the queue. 149 */ 150 public int getCurrentChats() { 151 return currentChats; 152 } 153 154 void setCurrentChats(int currentChats) { 155 this.currentChats = currentChats; 156 } 157 158 /** 159 * A class to represent the status of the workgroup. The possible values are: 160 * 161 * <ul> 162 * <li>WorkgroupQueue.Status.OPEN -- the queue is active and accepting new chat requests. 163 * <li>WorkgroupQueue.Status.ACTIVE -- the queue is active but NOT accepting new chat 164 * requests. 165 * <li>WorkgroupQueue.Status.CLOSED -- the queue is NOT active and NOT accepting new 166 * chat requests. 167 * </ul> 168 */ 169 public static class Status { 170 171 /** 172 * The queue is active and accepting new chat requests. 173 */ 174 public static final Status OPEN = new Status("open"); 175 176 /** 177 * The queue is active but NOT accepting new chat requests. This state might 178 * occur when the workgroup has closed because regular support hours have closed, 179 * but there are still several requests left in the queue. 180 */ 181 public static final Status ACTIVE = new Status("active"); 182 183 /** 184 * The queue is NOT active and NOT accepting new chat requests. 185 */ 186 public static final Status CLOSED = new Status("closed"); 187 188 /** 189 * Converts a String into the corresponding status. Valid String values 190 * that can be converted to a status are: "open", "active", and "closed". 191 * 192 * @param type the String value to covert. 193 * @return the corresponding Type. 194 */ 195 public static Status fromString(String type) { 196 if (type == null) { 197 return null; 198 } 199 type = type.toLowerCase(); 200 if (OPEN.toString().equals(type)) { 201 return OPEN; 202 } 203 else if (ACTIVE.toString().equals(type)) { 204 return ACTIVE; 205 } 206 else if (CLOSED.toString().equals(type)) { 207 return CLOSED; 208 } 209 else { 210 return null; 211 } 212 } 213 214 private String value; 215 216 private Status(String value) { 217 this.value = value; 218 } 219 220 public String toString() { 221 return value; 222 } 223 } 224 }