use of org.jivesoftware.smackx.reference.element.ReferenceElement 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);
}
use of org.jivesoftware.smackx.reference.element.ReferenceElement in project Smack by igniterealtime.
the class ReferenceTest method providerMentionTest.
@Test
public void providerMentionTest() throws Exception {
String xml = "<reference xmlns='urn:xmpp:reference:0' " + "begin='72' " + "end='78' " + "type='mention' " + "uri='xmpp:juliet@capulet.lit' />";
URI uri = new URI("xmpp:juliet@capulet.lit");
ReferenceElement element = new ReferenceElement(72, 78, ReferenceElement.Type.mention, null, uri);
assertXmlSimilar(xml, element.toXML().toString());
assertEquals(72, (int) element.getBegin());
assertEquals(78, (int) element.getEnd());
assertEquals(ReferenceElement.Type.mention, element.getType());
assertNull(element.getAnchor());
assertEquals(uri, element.getUri());
ReferenceElement parsed = ReferenceProvider.TEST_PROVIDER.parse(TestUtils.getParser(xml));
assertXmlSimilar(xml, parsed.toXML().toString());
}
use of org.jivesoftware.smackx.reference.element.ReferenceElement in project Smack by igniterealtime.
the class ReferenceTest method providerDataTest.
/**
* TODO: The uri might not be following the XMPP schema.
* That shouldn't matter though.
* @throws Exception if an exception occurs.
*/
@Test
public void providerDataTest() throws Exception {
String xml = "<reference xmlns='urn:xmpp:reference:0' " + "type='data' " + "uri='xmpp:fdp.shakespeare.lit?;node=fdp/submitted/stan.isode.net/accidentreport;item=ndina872be' />";
URI uri = new URI("xmpp:fdp.shakespeare.lit?;node=fdp/submitted/stan.isode.net/accidentreport;item=ndina872be");
ReferenceElement element = new ReferenceElement(null, null, ReferenceElement.Type.data, null, uri);
assertXmlSimilar(xml, element.toXML().toString());
assertNull(element.getBegin());
assertNull(element.getEnd());
assertNull(element.getAnchor());
assertEquals(ReferenceElement.Type.data, element.getType());
assertEquals(uri, element.getUri());
ReferenceElement parsed = ReferenceProvider.TEST_PROVIDER.parse(TestUtils.getParser(xml));
assertXmlSimilar(xml, parsed.toXML().toString());
}
Aggregations