• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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      */
WorkgroupQueue(String name)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      */
getName()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      */
getStatus()65     public Status getStatus() {
66         return status;
67     }
68 
setStatus(Status status)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      */
getUserCount()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      */
getUsers()92     public Iterator<QueueUser> getUsers() {
93         if (users == null) {
94             return new HashSet<QueueUser>().iterator();
95         }
96         return Collections.unmodifiableSet(users).iterator();
97     }
98 
setUsers(Set<QueueUser> users)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      */
getAverageWaitTime()110     public int getAverageWaitTime() {
111         return averageWaitTime;
112     }
113 
setAverageWaitTime(int averageTime)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      */
getOldestEntry()124     public Date getOldestEntry() {
125         return oldestEntry;
126     }
127 
setOldestEntry(Date oldestEntry)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      */
getMaxChats()137     public int getMaxChats() {
138         return maxChats;
139     }
140 
setMaxChats(int maxChats)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      */
getCurrentChats()150     public int getCurrentChats() {
151         return currentChats;
152     }
153 
setCurrentChats(int currentChats)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          */
fromString(String type)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 
Status(String value)216         private Status(String value) {
217             this.value = value;
218         }
219 
toString()220         public String toString() {
221             return value;
222         }
223     }
224 }