• 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 org.jivesoftware.smack.Connection;
23 import org.jivesoftware.smack.packet.IQ;
24 import org.jivesoftware.smack.packet.Packet;
25 
26 import java.util.Date;
27 import java.util.List;
28 import java.util.Map;
29 
30 /**
31  * A class embodying the semantic agent chat offer; specific instances allow the acceptance or
32  * rejecting of the offer.<br>
33  *
34  * @author Matt Tucker
35  * @author loki der quaeler
36  * @author Derek DeMoro
37  */
38 public class Offer {
39 
40     private Connection connection;
41     private AgentSession session;
42 
43     private String sessionID;
44     private String userJID;
45     private String userID;
46     private String workgroupName;
47     private Date expiresDate;
48     private Map<String, List<String>> metaData;
49     private OfferContent content;
50 
51     private boolean accepted = false;
52     private boolean rejected = false;
53 
54     /**
55      * Creates a new offer.
56      *
57      * @param conn the XMPP connection with which the issuing session was created.
58      * @param agentSession the agent session instance through which this offer was issued.
59      * @param userID  the userID of the user from which the offer originates.
60      * @param userJID the XMPP address of the user from which the offer originates.
61      * @param workgroupName the fully qualified name of the workgroup.
62      * @param expiresDate the date at which this offer expires.
63      * @param sessionID the session id associated with the offer.
64      * @param metaData the metadata associated with the offer.
65      * @param content content of the offer. The content explains the reason for the offer
66      *        (e.g. user request, transfer)
67      */
Offer(Connection conn, AgentSession agentSession, String userID, String userJID, String workgroupName, Date expiresDate, String sessionID, Map<String, List<String>> metaData, OfferContent content)68     Offer(Connection conn, AgentSession agentSession, String userID,
69             String userJID, String workgroupName, Date expiresDate,
70             String sessionID, Map<String, List<String>> metaData, OfferContent content)
71     {
72         this.connection = conn;
73         this.session = agentSession;
74         this.userID = userID;
75         this.userJID = userJID;
76         this.workgroupName = workgroupName;
77         this.expiresDate = expiresDate;
78         this.sessionID = sessionID;
79         this.metaData = metaData;
80         this.content = content;
81     }
82 
83     /**
84      * Accepts the offer.
85      */
accept()86     public void accept() {
87         Packet acceptPacket = new AcceptPacket(this.session.getWorkgroupJID());
88         connection.sendPacket(acceptPacket);
89         // TODO: listen for a reply.
90         accepted = true;
91     }
92 
93     /**
94      * Rejects the offer.
95      */
reject()96     public void reject() {
97         RejectPacket rejectPacket = new RejectPacket(this.session.getWorkgroupJID());
98         connection.sendPacket(rejectPacket);
99         // TODO: listen for a reply.
100         rejected = true;
101     }
102 
103     /**
104      * Returns the userID that the offer originates from. In most cases, the
105      * userID will simply be the JID of the requesting user. However, users can
106      * also manually specify a userID for their request. In that case, that value will
107      * be returned.
108      *
109      * @return the userID of the user from which the offer originates.
110      */
getUserID()111     public String getUserID() {
112         return userID;
113     }
114 
115     /**
116      * Returns the JID of the user that made the offer request.
117      *
118      * @return the user's JID.
119      */
getUserJID()120     public String getUserJID() {
121         return userJID;
122     }
123 
124     /**
125      * The fully qualified name of the workgroup (eg support@example.com).
126      *
127      * @return the name of the workgroup.
128      */
getWorkgroupName()129     public String getWorkgroupName() {
130         return this.workgroupName;
131     }
132 
133     /**
134      * The date when the offer will expire. The agent must {@link #accept()}
135      * the offer before the expiration date or the offer will lapse and be
136      * routed to another agent. Alternatively, the agent can {@link #reject()}
137      * the offer at any time if they don't wish to accept it..
138      *
139      * @return the date at which this offer expires.
140      */
getExpiresDate()141     public Date getExpiresDate() {
142         return this.expiresDate;
143     }
144 
145     /**
146      * The session ID associated with the offer.
147      *
148      * @return the session id associated with the offer.
149      */
getSessionID()150     public String getSessionID() {
151         return this.sessionID;
152     }
153 
154     /**
155      * The meta-data associated with the offer.
156      *
157      * @return the offer meta-data.
158      */
getMetaData()159     public Map<String, List<String>> getMetaData() {
160         return this.metaData;
161     }
162 
163     /**
164      * Returns the content of the offer. The content explains the reason for the offer
165      * (e.g. user request, transfer)
166      *
167      * @return the content of the offer.
168      */
getContent()169     public OfferContent getContent() {
170         return content;
171     }
172 
173     /**
174      * Returns true if the agent accepted this offer.
175      *
176      * @return true if the agent accepted this offer.
177      */
isAccepted()178     public boolean isAccepted() {
179         return accepted;
180     }
181 
182     /**
183      * Return true if the agent rejected this offer.
184      *
185      * @return true if the agent rejected this offer.
186      */
isRejected()187     public boolean isRejected() {
188         return rejected;
189     }
190 
191     /**
192      * Packet for rejecting offers.
193      */
194     private class RejectPacket extends IQ {
195 
RejectPacket(String workgroup)196         RejectPacket(String workgroup) {
197             this.setTo(workgroup);
198             this.setType(IQ.Type.SET);
199         }
200 
getChildElementXML()201         public String getChildElementXML() {
202             return "<offer-reject id=\"" + Offer.this.getSessionID() +
203                     "\" xmlns=\"http://jabber.org/protocol/workgroup" + "\"/>";
204         }
205     }
206 
207     /**
208      * Packet for accepting an offer.
209      */
210     private class AcceptPacket extends IQ {
211 
AcceptPacket(String workgroup)212         AcceptPacket(String workgroup) {
213             this.setTo(workgroup);
214             this.setType(IQ.Type.SET);
215         }
216 
getChildElementXML()217         public String getChildElementXML() {
218             return "<offer-accept id=\"" + Offer.this.getSessionID() +
219                     "\" xmlns=\"http://jabber.org/protocol/workgroup" + "\"/>";
220         }
221     }
222 
223 }