/*
* Jicofo, the Jitsi Conference Focus.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jitsi.impl.protocol.xmpp.extensions;
import org.jitsi.util.*;
import org.jivesoftware.smack.packet.*;
import org.jivesoftware.smack.provider.*;
import org.xmlpull.v1.*;
/**
* Provider handles parsing of {@link ConferenceIq} and {@link AuthUrlIQ}
* stanzas and converting objects back to their XML representation.
*
* @author Pawel Domas
*/
public class ConferenceIqProvider
implements IQProvider
{
/**
* Creates new instance of <tt>ConferenceIqProvider</tt>.
*/
public ConferenceIqProvider()
{
ProviderManager providerManager = ProviderManager.getInstance();
// <conference>
providerManager.addIQProvider(
ConferenceIq.ELEMENT_NAME, ConferenceIq.NAMESPACE, this);
// <auth-url>
providerManager.addIQProvider(
AuthUrlIQ.ELEMENT_NAME, AuthUrlIQ.NAMESPACE, this);
}
/**
* {@inheritDoc}
*/
@Override
public IQ parseIQ(XmlPullParser parser)
throws Exception
{
String namespace = parser.getNamespace();
// Check the namespace
if (!ConferenceIq.NAMESPACE.equals(namespace))
{
return null;
}
String rootElement = parser.getName();
ConferenceIq iq = null;
AuthUrlIQ authUrlIQ = null;
if (ConferenceIq.ELEMENT_NAME.equals(rootElement))
{
iq = new ConferenceIq();
String room
= parser.getAttributeValue("", ConferenceIq.ROOM_ATTR_NAME);
iq.setRoom(room);
String ready
= parser.getAttributeValue("", ConferenceIq.READY_ATTR_NAME);
if (!StringUtils.isNullOrEmpty(ready))
{
iq.setReady(Boolean.valueOf(ready));
}
String focusJid
= parser.getAttributeValue(
"", ConferenceIq.FOCUS_JID_ATTR_NAME);
if (!StringUtils.isNullOrEmpty(focusJid))
{
iq.setFocusJid(focusJid);
}
}
else if (AuthUrlIQ.ELEMENT_NAME.equals(rootElement))
{
authUrlIQ = new AuthUrlIQ();
String url = parser.getAttributeValue(
"", AuthUrlIQ.URL_ATTRIBUTE_NAME);
if (!StringUtils.isNullOrEmpty(url))
{
authUrlIQ.setUrl(url);
}
String room = parser.getAttributeValue(
"", AuthUrlIQ.ROOM_NAME_ATTR_NAME);
if (!StringUtils.isNullOrEmpty(room))
{
authUrlIQ.setRoom(room);
}
}
else
{
return null;
}
ConferenceIq.Property property = null;
boolean done = false;
while (!done)
{
switch (parser.next())
{
case XmlPullParser.END_TAG:
{
String name = parser.getName();
if (rootElement.equals(name))
{
done = true;
}
else if (ConferenceIq.Property.ELEMENT_NAME.equals(name))
{
if (iq != null && property != null)
{
iq.addProperty(property);
property = null;
}
}
break;
}
case XmlPullParser.START_TAG:
{
String name = parser.getName();
if (ConferenceIq.Property.ELEMENT_NAME.equals(name))
{
property = new ConferenceIq.Property();
// Name
String propName
= parser.getAttributeValue(
"",
ConferenceIq.Property.NAME_ATTR_NAME);
if (!StringUtils.isNullOrEmpty(propName))
{
property.setName(propName);
}
// Value
String propValue
= parser.getAttributeValue(
"",
ConferenceIq.Property.VALUE_ATTR_NAME);
if (!StringUtils.isNullOrEmpty(propValue))
{
property.setValue(propValue);
}
}
}
}
}
return iq != null ? iq : authUrlIQ;
}
}