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 */ 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 */ 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 */ 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 */ 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 */ 120 public String getUserJID() { 121 return userJID; 122 } 123 124 /** 125 * The fully qualified name of the workgroup (eg support (at) example.com). 126 * 127 * @return the name of the workgroup. 128 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 187 public boolean isRejected() { 188 return rejected; 189 } 190 191 /** 192 * Packet for rejecting offers. 193 */ 194 private class RejectPacket extends IQ { 195 196 RejectPacket(String workgroup) { 197 this.setTo(workgroup); 198 this.setType(IQ.Type.SET); 199 } 200 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 212 AcceptPacket(String workgroup) { 213 this.setTo(workgroup); 214 this.setType(IQ.Type.SET); 215 } 216 217 public String getChildElementXML() { 218 return "<offer-accept id=\"" + Offer.this.getSessionID() + 219 "\" xmlns=\"http://jabber.org/protocol/workgroup" + "\"/>"; 220 } 221 } 222 223 }