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);
}
Aggregations