Java 类org.jivesoftware.smackx.iqprivate.provider.PrivateDataProvider 实例源码

项目:Smack    文件:PrivateDataManager.java   
@Override
public PrivateDataIQ parse(XmlPullParser parser, int initialDepth)
                throws XmlPullParserException, IOException, SmackException {
    PrivateData privateData = null;
    boolean done = false;
    while (!done) {
        int eventType = parser.next();
        if (eventType == XmlPullParser.START_TAG) {
            String elementName = parser.getName();
            String namespace = parser.getNamespace();
            // See if any objects are registered to handle this private data type.
            PrivateDataProvider provider = getPrivateDataProvider(elementName, namespace);
            // If there is a registered provider, use it.
            if (provider != null) {
                privateData = provider.parsePrivateData(parser);
            }
            // Otherwise, use a DefaultPrivateData instance to store the private data.
            else {
                DefaultPrivateData data = new DefaultPrivateData(elementName, namespace);
                boolean finished = false;
                while (!finished) {
                    int event = parser.next();
                    if (event == XmlPullParser.START_TAG) {
                        String name = parser.getName();
                        // If an empty element, set the value with the empty string.
                        if (parser.isEmptyElementTag()) {
                            data.setValue(name,"");
                        }
                        // Otherwise, get the the element text.
                        else {
                            event = parser.next();
                            if (event == XmlPullParser.TEXT) {
                                String value = parser.getText();
                                data.setValue(name, value);
                            }
                        }
                    }
                    else if (event == XmlPullParser.END_TAG) {
                        if (parser.getName().equals(elementName)) {
                            finished = true;
                        }
                    }
                }
                privateData = data;
            }
        }
        else if (eventType == XmlPullParser.END_TAG) {
            if (parser.getName().equals("query")) {
                done = true;
            }
        }
    }
    return new PrivateDataIQ(privateData);
}
项目:Smack    文件:PrivateDataManager.java   
/**
 * Adds a private data provider with the specified element name and name space. The provider
 * will override any providers loaded through the classpath.
 *
 * @param elementName the XML element name.
 * @param namespace the XML namespace.
 * @param provider the private data provider.
 */
public static void addPrivateDataProvider(String elementName, String namespace,
        PrivateDataProvider provider)
{
    String key = getProviderKey(elementName, namespace);
    privateDataProviders.put(key, provider);
}