/** | |
* $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 org.jivesoftware.smack.Connection; | |
import org.jivesoftware.smack.packet.IQ; | |
import org.jivesoftware.smack.packet.Packet; | |
import java.util.Date; | |
import java.util.List; | |
import java.util.Map; | |
/** | |
* A class embodying the semantic agent chat offer; specific instances allow the acceptance or | |
* rejecting of the offer.<br> | |
* | |
* @author Matt Tucker | |
* @author loki der quaeler | |
* @author Derek DeMoro | |
*/ | |
public class Offer { | |
private Connection connection; | |
private AgentSession session; | |
private String sessionID; | |
private String userJID; | |
private String userID; | |
private String workgroupName; | |
private Date expiresDate; | |
private Map<String, List<String>> metaData; | |
private OfferContent content; | |
private boolean accepted = false; | |
private boolean rejected = false; | |
/** | |
* Creates a new offer. | |
* | |
* @param conn the XMPP connection with which the issuing session was created. | |
* @param agentSession the agent session instance through which this offer was issued. | |
* @param userID the userID of the user from which the offer originates. | |
* @param userJID the XMPP address of the user from which the offer originates. | |
* @param workgroupName the fully qualified name of the workgroup. | |
* @param expiresDate the date at which this offer expires. | |
* @param sessionID the session id associated with the offer. | |
* @param metaData the metadata associated with the offer. | |
* @param content content of the offer. The content explains the reason for the offer | |
* (e.g. user request, transfer) | |
*/ | |
Offer(Connection conn, AgentSession agentSession, String userID, | |
String userJID, String workgroupName, Date expiresDate, | |
String sessionID, Map<String, List<String>> metaData, OfferContent content) | |
{ | |
this.connection = conn; | |
this.session = agentSession; | |
this.userID = userID; | |
this.userJID = userJID; | |
this.workgroupName = workgroupName; | |
this.expiresDate = expiresDate; | |
this.sessionID = sessionID; | |
this.metaData = metaData; | |
this.content = content; | |
} | |
/** | |
* Accepts the offer. | |
*/ | |
public void accept() { | |
Packet acceptPacket = new AcceptPacket(this.session.getWorkgroupJID()); | |
connection.sendPacket(acceptPacket); | |
// TODO: listen for a reply. | |
accepted = true; | |
} | |
/** | |
* Rejects the offer. | |
*/ | |
public void reject() { | |
RejectPacket rejectPacket = new RejectPacket(this.session.getWorkgroupJID()); | |
connection.sendPacket(rejectPacket); | |
// TODO: listen for a reply. | |
rejected = true; | |
} | |
/** | |
* Returns the userID that the offer originates from. In most cases, the | |
* userID will simply be the JID of the requesting user. However, users can | |
* also manually specify a userID for their request. In that case, that value will | |
* be returned. | |
* | |
* @return the userID of the user from which the offer originates. | |
*/ | |
public String getUserID() { | |
return userID; | |
} | |
/** | |
* Returns the JID of the user that made the offer request. | |
* | |
* @return the user's JID. | |
*/ | |
public String getUserJID() { | |
return userJID; | |
} | |
/** | |
* The fully qualified name of the workgroup (eg support@example.com). | |
* | |
* @return the name of the workgroup. | |
*/ | |
public String getWorkgroupName() { | |
return this.workgroupName; | |
} | |
/** | |
* The date when the offer will expire. The agent must {@link #accept()} | |
* the offer before the expiration date or the offer will lapse and be | |
* routed to another agent. Alternatively, the agent can {@link #reject()} | |
* the offer at any time if they don't wish to accept it.. | |
* | |
* @return the date at which this offer expires. | |
*/ | |
public Date getExpiresDate() { | |
return this.expiresDate; | |
} | |
/** | |
* The session ID associated with the offer. | |
* | |
* @return the session id associated with the offer. | |
*/ | |
public String getSessionID() { | |
return this.sessionID; | |
} | |
/** | |
* The meta-data associated with the offer. | |
* | |
* @return the offer meta-data. | |
*/ | |
public Map<String, List<String>> getMetaData() { | |
return this.metaData; | |
} | |
/** | |
* Returns the content of the offer. The content explains the reason for the offer | |
* (e.g. user request, transfer) | |
* | |
* @return the content of the offer. | |
*/ | |
public OfferContent getContent() { | |
return content; | |
} | |
/** | |
* Returns true if the agent accepted this offer. | |
* | |
* @return true if the agent accepted this offer. | |
*/ | |
public boolean isAccepted() { | |
return accepted; | |
} | |
/** | |
* Return true if the agent rejected this offer. | |
* | |
* @return true if the agent rejected this offer. | |
*/ | |
public boolean isRejected() { | |
return rejected; | |
} | |
/** | |
* Packet for rejecting offers. | |
*/ | |
private class RejectPacket extends IQ { | |
RejectPacket(String workgroup) { | |
this.setTo(workgroup); | |
this.setType(IQ.Type.SET); | |
} | |
public String getChildElementXML() { | |
return "<offer-reject id=\"" + Offer.this.getSessionID() + | |
"\" xmlns=\"http://jabber.org/protocol/workgroup" + "\"/>"; | |
} | |
} | |
/** | |
* Packet for accepting an offer. | |
*/ | |
private class AcceptPacket extends IQ { | |
AcceptPacket(String workgroup) { | |
this.setTo(workgroup); | |
this.setType(IQ.Type.SET); | |
} | |
public String getChildElementXML() { | |
return "<offer-accept id=\"" + Offer.this.getSessionID() + | |
"\" xmlns=\"http://jabber.org/protocol/workgroup" + "\"/>"; | |
} | |
} | |
} |