mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-12-26 22:27:58 +01:00
248 lines
8.3 KiB
Java
248 lines
8.3 KiB
Java
|
/**
|
||
|
* $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.packet;
|
||
|
|
||
|
import org.jivesoftware.smack.packet.IQ;
|
||
|
|
||
|
import java.text.SimpleDateFormat;
|
||
|
import java.util.*;
|
||
|
|
||
|
/**
|
||
|
* Represents a list of conversation transcripts that a user had in all his history. Each
|
||
|
* transcript summary includes the sessionID which may be used for getting more detailed
|
||
|
* information about the conversation. {@link org.jivesoftware.smackx.workgroup.packet.Transcript}
|
||
|
*
|
||
|
* @author Gaston Dombiak
|
||
|
*/
|
||
|
public class Transcripts extends IQ {
|
||
|
|
||
|
private static final SimpleDateFormat UTC_FORMAT = new SimpleDateFormat("yyyyMMdd'T'HH:mm:ss");
|
||
|
static {
|
||
|
UTC_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT+0"));
|
||
|
}
|
||
|
|
||
|
private String userID;
|
||
|
private List<Transcripts.TranscriptSummary> summaries;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Creates a transcripts request for the given userID.
|
||
|
*
|
||
|
* @param userID the id of the user to get his conversations transcripts.
|
||
|
*/
|
||
|
public Transcripts(String userID) {
|
||
|
this.userID = userID;
|
||
|
this.summaries = new ArrayList<Transcripts.TranscriptSummary>();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates a Transcripts which will contain the transcript summaries of the given user.
|
||
|
*
|
||
|
* @param userID the id of the user. Could be a real JID or a unique String that identifies
|
||
|
* anonymous users.
|
||
|
* @param summaries the list of TranscriptSummaries.
|
||
|
*/
|
||
|
public Transcripts(String userID, List<Transcripts.TranscriptSummary> summaries) {
|
||
|
this.userID = userID;
|
||
|
this.summaries = summaries;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the id of the user that was involved in the conversations. The userID could be a
|
||
|
* real JID if the connected user was not anonymous. Otherwise, the userID will be a String
|
||
|
* that was provided by the anonymous user as a way to idenitify the user across many user
|
||
|
* sessions.
|
||
|
*
|
||
|
* @return the id of the user that was involved in the conversations.
|
||
|
*/
|
||
|
public String getUserID() {
|
||
|
return userID;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns a list of TranscriptSummary. A TranscriptSummary does not contain the conversation
|
||
|
* transcript but some summary information like the sessionID and the time when the
|
||
|
* conversation started and finished. Once you have the sessionID it is possible to get the
|
||
|
* full conversation transcript.
|
||
|
*
|
||
|
* @return a list of TranscriptSummary.
|
||
|
*/
|
||
|
public List<Transcripts.TranscriptSummary> getSummaries() {
|
||
|
return Collections.unmodifiableList(summaries);
|
||
|
}
|
||
|
|
||
|
public String getChildElementXML() {
|
||
|
StringBuilder buf = new StringBuilder();
|
||
|
|
||
|
buf.append("<transcripts xmlns=\"http://jivesoftware.com/protocol/workgroup\" userID=\"")
|
||
|
.append(userID)
|
||
|
.append("\">");
|
||
|
|
||
|
for (TranscriptSummary transcriptSummary : summaries) {
|
||
|
buf.append(transcriptSummary.toXML());
|
||
|
}
|
||
|
|
||
|
buf.append("</transcripts>");
|
||
|
|
||
|
return buf.toString();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* A TranscriptSummary contains some information about a conversation such as the ID of the
|
||
|
* session or the date when the conversation started and finished. You will need to use the
|
||
|
* sessionID to get the full conversation transcript.
|
||
|
*/
|
||
|
public static class TranscriptSummary {
|
||
|
private String sessionID;
|
||
|
private Date joinTime;
|
||
|
private Date leftTime;
|
||
|
private List<AgentDetail> agentDetails;
|
||
|
|
||
|
public TranscriptSummary(String sessionID, Date joinTime, Date leftTime, List<AgentDetail> agentDetails) {
|
||
|
this.sessionID = sessionID;
|
||
|
this.joinTime = joinTime;
|
||
|
this.leftTime = leftTime;
|
||
|
this.agentDetails = agentDetails;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the ID of the session that is related to this conversation transcript. The
|
||
|
* sessionID could be used for getting the full conversation transcript.
|
||
|
*
|
||
|
* @return the ID of the session that is related to this conversation transcript.
|
||
|
*/
|
||
|
public String getSessionID() {
|
||
|
return sessionID;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the Date when the conversation started.
|
||
|
*
|
||
|
* @return the Date when the conversation started.
|
||
|
*/
|
||
|
public Date getJoinTime() {
|
||
|
return joinTime;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the Date when the conversation finished.
|
||
|
*
|
||
|
* @return the Date when the conversation finished.
|
||
|
*/
|
||
|
public Date getLeftTime() {
|
||
|
return leftTime;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns a list of AgentDetails. For each Agent that was involved in the conversation
|
||
|
* the list will include an AgentDetail. An AgentDetail contains the JID of the agent
|
||
|
* as well as the time when the Agent joined and left the conversation.
|
||
|
*
|
||
|
* @return a list of AgentDetails.
|
||
|
*/
|
||
|
public List<AgentDetail> getAgentDetails() {
|
||
|
return agentDetails;
|
||
|
}
|
||
|
|
||
|
public String toXML() {
|
||
|
StringBuilder buf = new StringBuilder();
|
||
|
|
||
|
buf.append("<transcript sessionID=\"")
|
||
|
.append(sessionID)
|
||
|
.append("\">");
|
||
|
|
||
|
if (joinTime != null) {
|
||
|
buf.append("<joinTime>").append(UTC_FORMAT.format(joinTime)).append("</joinTime>");
|
||
|
}
|
||
|
if (leftTime != null) {
|
||
|
buf.append("<leftTime>").append(UTC_FORMAT.format(leftTime)).append("</leftTime>");
|
||
|
}
|
||
|
buf.append("<agents>");
|
||
|
for (AgentDetail agentDetail : agentDetails) {
|
||
|
buf.append(agentDetail.toXML());
|
||
|
}
|
||
|
buf.append("</agents></transcript>");
|
||
|
|
||
|
return buf.toString();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* An AgentDetail contains information of an Agent that was involved in a conversation.
|
||
|
*/
|
||
|
public static class AgentDetail {
|
||
|
private String agentJID;
|
||
|
private Date joinTime;
|
||
|
private Date leftTime;
|
||
|
|
||
|
public AgentDetail(String agentJID, Date joinTime, Date leftTime) {
|
||
|
this.agentJID = agentJID;
|
||
|
this.joinTime = joinTime;
|
||
|
this.leftTime = leftTime;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the bare JID of the Agent that was involved in the conversation.
|
||
|
*
|
||
|
* @return the bared JID of the Agent that was involved in the conversation.
|
||
|
*/
|
||
|
public String getAgentJID() {
|
||
|
return agentJID;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the Date when the Agent joined the conversation.
|
||
|
*
|
||
|
* @return the Date when the Agent joined the conversation.
|
||
|
*/
|
||
|
public Date getJoinTime() {
|
||
|
return joinTime;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the Date when the Agent left the conversation.
|
||
|
*
|
||
|
* @return the Date when the Agent left the conversation.
|
||
|
*/
|
||
|
public Date getLeftTime() {
|
||
|
return leftTime;
|
||
|
}
|
||
|
|
||
|
public String toXML() {
|
||
|
StringBuilder buf = new StringBuilder();
|
||
|
|
||
|
buf.append("<agent>");
|
||
|
|
||
|
if (agentJID != null) {
|
||
|
buf.append("<agentJID>").append(agentJID).append("</agentJID>");
|
||
|
}
|
||
|
if (joinTime != null) {
|
||
|
buf.append("<joinTime>").append(UTC_FORMAT.format(joinTime)).append("</joinTime>");
|
||
|
}
|
||
|
if (leftTime != null) {
|
||
|
buf.append("<leftTime>").append(UTC_FORMAT.format(leftTime)).append("</leftTime>");
|
||
|
}
|
||
|
buf.append("</agent>");
|
||
|
|
||
|
return buf.toString();
|
||
|
}
|
||
|
}
|
||
|
}
|