TranscriptsProvider.java

  1. /**
  2.  *
  3.  * Copyright 2003-2007 Jive Software.
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *     http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */

  17. package org.jivesoftware.smackx.workgroup.packet;

  18. import org.jivesoftware.smack.provider.IQProvider;
  19. import org.jivesoftware.smack.util.ParserUtils;
  20. import org.jxmpp.jid.Jid;
  21. import org.xmlpull.v1.XmlPullParser;
  22. import org.xmlpull.v1.XmlPullParserException;

  23. import java.io.IOException;
  24. import java.text.ParseException;
  25. import java.text.SimpleDateFormat;
  26. import java.util.ArrayList;
  27. import java.util.Date;
  28. import java.util.List;
  29. import java.util.TimeZone;

  30. /**
  31.  * An IQProvider for transcripts summaries.
  32.  *
  33.  * @author Gaston Dombiak
  34.  */
  35. public class TranscriptsProvider extends IQProvider<Transcripts> {

  36.     private static final SimpleDateFormat UTC_FORMAT = new SimpleDateFormat("yyyyMMdd'T'HH:mm:ss");
  37.     static {
  38.         UTC_FORMAT.setTimeZone(TimeZone.getTimeZone("GMT+0"));
  39.     }

  40.     @Override
  41.     public Transcripts parse(XmlPullParser parser, int initialDepth) throws XmlPullParserException, IOException {
  42.         Jid userID = ParserUtils.getJidAttribute(parser, "userID");
  43.         List<Transcripts.TranscriptSummary> summaries = new ArrayList<Transcripts.TranscriptSummary>();

  44.         boolean done = false;
  45.         while (!done) {
  46.             int eventType = parser.next();
  47.             if (eventType == XmlPullParser.START_TAG) {
  48.                 if (parser.getName().equals("transcript")) {
  49.                     summaries.add(parseSummary(parser));
  50.                 }
  51.             }
  52.             else if (eventType == XmlPullParser.END_TAG) {
  53.                 if (parser.getName().equals("transcripts")) {
  54.                     done = true;
  55.                 }
  56.             }
  57.         }

  58.         return new Transcripts(userID, summaries);
  59.     }

  60.     private Transcripts.TranscriptSummary parseSummary(XmlPullParser parser) throws IOException,
  61.             XmlPullParserException {
  62.         String sessionID =  parser.getAttributeValue("", "sessionID");
  63.         Date joinTime = null;
  64.         Date leftTime = null;
  65.         List<Transcripts.AgentDetail> agents = new ArrayList<Transcripts.AgentDetail>();

  66.         boolean done = false;
  67.         while (!done) {
  68.             int eventType = parser.next();
  69.             if (eventType == XmlPullParser.START_TAG) {
  70.                 if (parser.getName().equals("joinTime")) {
  71.                     try {
  72.                         joinTime = UTC_FORMAT.parse(parser.nextText());
  73.                     } catch (ParseException e) {}
  74.                 }
  75.                 else if (parser.getName().equals("leftTime")) {
  76.                     try {
  77.                         leftTime = UTC_FORMAT.parse(parser.nextText());
  78.                     } catch (ParseException e) {}
  79.                 }
  80.                 else if (parser.getName().equals("agents")) {
  81.                     agents = parseAgents(parser);
  82.                 }
  83.             }
  84.             else if (eventType == XmlPullParser.END_TAG) {
  85.                 if (parser.getName().equals("transcript")) {
  86.                     done = true;
  87.                 }
  88.             }
  89.         }

  90.         return new Transcripts.TranscriptSummary(sessionID, joinTime, leftTime, agents);
  91.     }

  92.     private List<Transcripts.AgentDetail> parseAgents(XmlPullParser parser) throws IOException, XmlPullParserException {
  93.         List<Transcripts.AgentDetail> agents = new ArrayList<Transcripts.AgentDetail>();
  94.         String agentJID =  null;
  95.         Date joinTime = null;
  96.         Date leftTime = null;

  97.         boolean done = false;
  98.         while (!done) {
  99.             int eventType = parser.next();
  100.             if (eventType == XmlPullParser.START_TAG) {
  101.                 if (parser.getName().equals("agentJID")) {
  102.                     agentJID = parser.nextText();
  103.                 }
  104.                 else if (parser.getName().equals("joinTime")) {
  105.                     try {
  106.                         joinTime = UTC_FORMAT.parse(parser.nextText());
  107.                     } catch (ParseException e) {}
  108.                 }
  109.                 else if (parser.getName().equals("leftTime")) {
  110.                     try {
  111.                         leftTime = UTC_FORMAT.parse(parser.nextText());
  112.                     } catch (ParseException e) {}
  113.                 }
  114.                 else if (parser.getName().equals("agent")) {
  115.                     agentJID =  null;
  116.                     joinTime = null;
  117.                     leftTime = null;
  118.                 }
  119.             }
  120.             else if (eventType == XmlPullParser.END_TAG) {
  121.                 if (parser.getName().equals("agents")) {
  122.                     done = true;
  123.                 }
  124.                 else if (parser.getName().equals("agent")) {
  125.                     agents.add(new Transcripts.AgentDetail(agentJID, joinTime, leftTime));
  126.                 }
  127.             }
  128.         }
  129.         return agents;
  130.     }
  131. }