/** | |
* $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 org.jivesoftware.smack.provider.IQProvider; | |
import org.xmlpull.v1.XmlPullParser; | |
import org.xmlpull.v1.XmlPullParserException; | |
import java.io.IOException; | |
import java.text.ParseException; | |
import java.text.SimpleDateFormat; | |
import java.util.ArrayList; | |
import java.util.Date; | |
import java.util.List; | |
import java.util.TimeZone; | |
/** | |
* An IQProvider for transcripts summaries. | |
* | |
* @author Gaston Dombiak | |
*/ | |
public class TranscriptsProvider implements IQProvider { | |
private static final SimpleDateFormat UTC_FORMAT = new SimpleDateFormat("yyyyMMdd'T'HH:mm:ss"); | |
static { | |
UTC_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT+0")); | |
} | |
public TranscriptsProvider() { | |
super(); | |
} | |
public IQ parseIQ(XmlPullParser parser) throws Exception { | |
String userID = parser.getAttributeValue("", "userID"); | |
List<Transcripts.TranscriptSummary> summaries = new ArrayList<Transcripts.TranscriptSummary>(); | |
boolean done = false; | |
while (!done) { | |
int eventType = parser.next(); | |
if (eventType == XmlPullParser.START_TAG) { | |
if (parser.getName().equals("transcript")) { | |
summaries.add(parseSummary(parser)); | |
} | |
} | |
else if (eventType == XmlPullParser.END_TAG) { | |
if (parser.getName().equals("transcripts")) { | |
done = true; | |
} | |
} | |
} | |
return new Transcripts(userID, summaries); | |
} | |
private Transcripts.TranscriptSummary parseSummary(XmlPullParser parser) throws IOException, | |
XmlPullParserException { | |
String sessionID = parser.getAttributeValue("", "sessionID"); | |
Date joinTime = null; | |
Date leftTime = null; | |
List<Transcripts.AgentDetail> agents = new ArrayList<Transcripts.AgentDetail>(); | |
boolean done = false; | |
while (!done) { | |
int eventType = parser.next(); | |
if (eventType == XmlPullParser.START_TAG) { | |
if (parser.getName().equals("joinTime")) { | |
try { | |
joinTime = UTC_FORMAT.parse(parser.nextText()); | |
} catch (ParseException e) {} | |
} | |
else if (parser.getName().equals("leftTime")) { | |
try { | |
leftTime = UTC_FORMAT.parse(parser.nextText()); | |
} catch (ParseException e) {} | |
} | |
else if (parser.getName().equals("agents")) { | |
agents = parseAgents(parser); | |
} | |
} | |
else if (eventType == XmlPullParser.END_TAG) { | |
if (parser.getName().equals("transcript")) { | |
done = true; | |
} | |
} | |
} | |
return new Transcripts.TranscriptSummary(sessionID, joinTime, leftTime, agents); | |
} | |
private List<Transcripts.AgentDetail> parseAgents(XmlPullParser parser) throws IOException, XmlPullParserException { | |
List<Transcripts.AgentDetail> agents = new ArrayList<Transcripts.AgentDetail>(); | |
String agentJID = null; | |
Date joinTime = null; | |
Date leftTime = null; | |
boolean done = false; | |
while (!done) { | |
int eventType = parser.next(); | |
if (eventType == XmlPullParser.START_TAG) { | |
if (parser.getName().equals("agentJID")) { | |
agentJID = parser.nextText(); | |
} | |
else if (parser.getName().equals("joinTime")) { | |
try { | |
joinTime = UTC_FORMAT.parse(parser.nextText()); | |
} catch (ParseException e) {} | |
} | |
else if (parser.getName().equals("leftTime")) { | |
try { | |
leftTime = UTC_FORMAT.parse(parser.nextText()); | |
} catch (ParseException e) {} | |
} | |
else if (parser.getName().equals("agent")) { | |
agentJID = null; | |
joinTime = null; | |
leftTime = null; | |
} | |
} | |
else if (eventType == XmlPullParser.END_TAG) { | |
if (parser.getName().equals("agents")) { | |
done = true; | |
} | |
else if (parser.getName().equals("agent")) { | |
agents.add(new Transcripts.AgentDetail(agentJID, joinTime, leftTime)); | |
} | |
} | |
} | |
return agents; | |
} | |
} |