Mercury-IM/domain/src/main/java/org/jivesoftware/smackx/ikey/provider/IkeyElementProvider.java

72 lines
3.2 KiB
Java
Raw Normal View History

2020-09-06 21:41:38 +02:00
package org.jivesoftware.smackx.ikey.provider;
import org.jivesoftware.smack.packet.XmlEnvironment;
import org.jivesoftware.smack.parsing.SmackParsingException;
import org.jivesoftware.smack.provider.ExtensionElementProvider;
import org.jivesoftware.smack.util.ParserUtils;
import org.jivesoftware.smack.xml.XmlPullParser;
import org.jivesoftware.smack.xml.XmlPullParserException;
import org.jivesoftware.smackx.ikey.element.IkeyElement;
import org.jivesoftware.smackx.ikey.element.ProofElement;
import org.jivesoftware.smackx.ikey.element.SubordinateElement;
import org.jivesoftware.smackx.ikey.element.SubordinateListElement;
import org.jivesoftware.smackx.ikey.element.SuperordinateElement;
import org.jivesoftware.smackx.ikey.mechanism.IkeyType;
import org.jxmpp.jid.EntityBareJid;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class IkeyElementProvider extends ExtensionElementProvider<IkeyElement> {
public static final IkeyElementProvider INSTANCE = new IkeyElementProvider();
@Override
public IkeyElement parse(XmlPullParser parser, int initialDepth, XmlEnvironment xmlEnvironment)
throws XmlPullParserException, IOException, SmackParsingException {
2020-09-11 14:41:48 +02:00
String typeString = ParserUtils.getRequiredAttribute(parser, IkeyElement.ATTR_IKEY_TYPE);
2020-09-06 21:41:38 +02:00
IkeyType type = IkeyType.valueOf(typeString);
SuperordinateElement superordinate = null;
List<SubordinateElement> subordinates = new ArrayList<>();
EntityBareJid jid = null;
Date timestamp = null;
ProofElement proofElement = null;
2020-09-11 14:41:48 +02:00
do {
2020-09-06 21:41:38 +02:00
switch (parser.nextTag()) {
case START_ELEMENT:
switch (parser.getName()) {
case SuperordinateElement.ELEMENT:
superordinate = new SuperordinateElement(parser.nextText());
break;
case SubordinateListElement.ELEMENT:
jid = ParserUtils.getBareJidAttribute(parser);
timestamp = ParserUtils.getDateFromXep82String(
ParserUtils.getRequiredAttribute(parser, SubordinateListElement.ATTR_STAMP));
break;
case SubordinateElement.ELEMENT:
String uriString = ParserUtils.getRequiredAttribute(parser, SubordinateElement.ATTR_SUB_URI);
URI uri = URI.create(uriString);
String fingerprint = ParserUtils.getRequiredAttribute(parser, SubordinateElement.ATTR_SUB_FINGERPRINT);
subordinates.add(new SubordinateElement(uri, fingerprint));
2020-09-11 14:41:48 +02:00
break;
2020-09-06 21:41:38 +02:00
case ProofElement.ELEMENT:
proofElement = new ProofElement(parser.nextText());
break;
}
2020-09-11 14:41:48 +02:00
break;
2020-09-06 21:41:38 +02:00
case END_ELEMENT:
2020-09-11 14:41:48 +02:00
break;
2020-09-06 21:41:38 +02:00
}
2020-09-11 14:41:48 +02:00
} while (parser.getDepth() != initialDepth);
2020-09-06 21:41:38 +02:00
return new IkeyElement(type, superordinate, new SubordinateListElement(jid, timestamp, subordinates), proofElement);
}
}