Search in sources :

Example 1 with ExtensionElementProvider

use of org.jivesoftware.smack.provider.ExtensionElementProvider in project Smack by igniterealtime.

the class ReferenceProvider method parse.

@Override
public ReferenceElement parse(XmlPullParser parser, int initialDepth, XmlEnvironment xmlEnvironment) throws XmlPullParserException, IOException, SmackParsingException {
    Integer begin = ParserUtils.getIntegerAttribute(parser, ReferenceElement.ATTR_BEGIN);
    Integer end = ParserUtils.getIntegerAttribute(parser, ReferenceElement.ATTR_END);
    String typeString = parser.getAttributeValue(null, ReferenceElement.ATTR_TYPE);
    ReferenceElement.Type type = ReferenceElement.Type.valueOf(typeString);
    String anchor = parser.getAttributeValue(null, ReferenceElement.ATTR_ANCHOR);
    String uriString = parser.getAttributeValue(null, ReferenceElement.ATTR_URI);
    URI uri;
    try {
        uri = uriString != null ? new URI(uriString) : null;
    } catch (URISyntaxException e) {
        // TODO: Should be SmackParseException and probably be factored into ParserUtils.
        throw new IOException(e);
    }
    XmlElement child = null;
    outerloop: while (true) {
        XmlPullParser.Event eventType = parser.next();
        if (eventType == XmlPullParser.Event.START_ELEMENT) {
            String elementName = parser.getName();
            String namespace = parser.getNamespace();
            ExtensionElementProvider<?> provider = ProviderManager.getExtensionProvider(elementName, namespace);
            if (provider != null) {
                child = provider.parse(parser);
            }
        } else if (eventType == XmlPullParser.Event.END_ELEMENT) {
            break outerloop;
        }
    }
    return new ReferenceElement(begin, end, type, anchor, uri, child);
}
Also used : ExtensionElementProvider(org.jivesoftware.smack.provider.ExtensionElementProvider) ReferenceElement(org.jivesoftware.smackx.reference.element.ReferenceElement) XmlElement(org.jivesoftware.smack.packet.XmlElement) URISyntaxException(java.net.URISyntaxException) IOException(java.io.IOException) URI(java.net.URI)

Aggregations

IOException (java.io.IOException)1 URI (java.net.URI)1 URISyntaxException (java.net.URISyntaxException)1 XmlElement (org.jivesoftware.smack.packet.XmlElement)1 ExtensionElementProvider (org.jivesoftware.smack.provider.ExtensionElementProvider)1 ReferenceElement (org.jivesoftware.smackx.reference.element.ReferenceElement)1