/** * $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(); } } }