/*
* Jicofo, the Jitsi Conference Focus.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jitsi.jicofo.log;
import org.jivesoftware.smack.packet.*;
import org.jivesoftware.smack.provider.*;
import org.xmlpull.v1.XmlPullParser;
/**
* Implements a <tt>PacketExtensionProvider</tt> for XEP-0337 log extensions.
*
* @author Boris Grozev
*/
public class LogExtensionProvider
implements PacketExtensionProvider
{
/**
* {@inheritDoc}
*/
@Override
public PacketExtension parseExtension(XmlPullParser parser)
throws Exception
{
LogPacketExtension result = new LogPacketExtension();
for (int i = 0; i < parser.getAttributeCount(); i++)
{
result.setAttribute(
parser.getAttributeName(i),
parser.getAttributeValue(i));
}
boolean done = false;
int eventType;
String elementName;
while (!done)
{
eventType = parser.next();
elementName = parser.getName();
if (eventType == XmlPullParser.START_TAG)
{
if (LogPacketExtension.MESSAGE_ELEM_NAME.equals(elementName))
{
result.setMessage(parser.nextText());
}
else if(LogPacketExtension.TAG_ELEM_NAME.equals(elementName))
{
String nameAttr = null;
String valueAttr = null;
for (int i = 0; i < parser.getAttributeCount(); i++)
{
String attrName = parser.getAttributeName(i);
if ("name".equals(attrName))
nameAttr = parser.getAttributeValue(i);
else if ("value".equals(attrName))
valueAttr = parser.getAttributeValue(i);
}
if (nameAttr != null && valueAttr != null)
{
result.addTag(nameAttr, valueAttr);
}
}
}
else if (eventType == XmlPullParser.END_TAG)
{
if (LogPacketExtension.LOG_ELEM_NAME.equals(elementName))
done = true;
}
}
return result;
}
}