mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-22 22:32:06 +01:00
Yanked code for doing parsing of Javabeans since it's not really supported anyway.
git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@2068 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
parent
bfb927b502
commit
78289e848b
1 changed files with 2 additions and 71 deletions
|
@ -60,7 +60,6 @@ import org.jivesoftware.smackx.packet.*;
|
||||||
import org.jivesoftware.smackx.provider.*;
|
import org.jivesoftware.smackx.provider.*;
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
|
|
||||||
import java.beans.PropertyDescriptor;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
|
|
||||||
|
@ -296,17 +295,10 @@ public class PrivateDataManager {
|
||||||
String elementName = parser.getName();
|
String elementName = parser.getName();
|
||||||
String namespace = parser.getNamespace();
|
String namespace = parser.getNamespace();
|
||||||
// See if any objects are registered to handle this private data type.
|
// See if any objects are registered to handle this private data type.
|
||||||
Object provider = getPrivateDataProvider(elementName, namespace);
|
PrivateDataProvider provider = getPrivateDataProvider(elementName, namespace);
|
||||||
// If there is a registered provider, use it.
|
// If there is a registered provider, use it.
|
||||||
if (provider != null) {
|
if (provider != null) {
|
||||||
if (provider instanceof PrivateDataProvider) {
|
privateData = provider.parsePrivateData(parser);
|
||||||
privateData = ((PrivateDataProvider)provider).parsePrivateData(parser);
|
|
||||||
}
|
|
||||||
// Otherwise it's a JavaBean, so use introspection.
|
|
||||||
else {
|
|
||||||
privateData = parseWithIntrospection(elementName, (Class)provider,
|
|
||||||
parser);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Otherwise, use a DefaultPrivateData instance to store the private data.
|
// Otherwise, use a DefaultPrivateData instance to store the private data.
|
||||||
else {
|
else {
|
||||||
|
@ -349,67 +341,6 @@ public class PrivateDataManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static PrivateData parseWithIntrospection(String elementName, Class objectClass,
|
|
||||||
XmlPullParser parser) throws Exception
|
|
||||||
{
|
|
||||||
boolean done = false;
|
|
||||||
PrivateData object = (PrivateData)objectClass.newInstance();
|
|
||||||
while (!done) {
|
|
||||||
int eventType = parser.next();
|
|
||||||
if (eventType == XmlPullParser.START_TAG) {
|
|
||||||
String name = parser.getName();
|
|
||||||
String stringValue = parser.nextText();
|
|
||||||
PropertyDescriptor descriptor = new PropertyDescriptor(name, objectClass);
|
|
||||||
// Load the class type of the property.
|
|
||||||
Class propertyType = descriptor.getPropertyType();
|
|
||||||
// Get the value of the property by converting it from a
|
|
||||||
// String to the correct object type.
|
|
||||||
Object value = decode(propertyType, stringValue);
|
|
||||||
// Set the value of the bean.
|
|
||||||
descriptor.getWriteMethod().invoke(object, new Object[] { value });
|
|
||||||
}
|
|
||||||
else if (eventType == XmlPullParser.END_TAG) {
|
|
||||||
if (parser.getName().equals(elementName)) {
|
|
||||||
done = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decodes a String into an object of the specified type. If the object
|
|
||||||
* type is not supported, null will be returned.
|
|
||||||
*
|
|
||||||
* @param type the type of the property.
|
|
||||||
* @param value the encode String value to decode.
|
|
||||||
* @return the String value decoded into the specified type.
|
|
||||||
*/
|
|
||||||
private static Object decode(Class type, String value) throws Exception {
|
|
||||||
if (type.getName().equals("java.lang.String")) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
if (type.getName().equals("boolean")) {
|
|
||||||
return Boolean.valueOf(value);
|
|
||||||
}
|
|
||||||
if (type.getName().equals("int")) {
|
|
||||||
return Integer.valueOf(value);
|
|
||||||
}
|
|
||||||
if (type.getName().equals("long")) {
|
|
||||||
return Long.valueOf(value);
|
|
||||||
}
|
|
||||||
if (type.getName().equals("float")) {
|
|
||||||
return Float.valueOf(value);
|
|
||||||
}
|
|
||||||
if (type.getName().equals("double")) {
|
|
||||||
return Double.valueOf(value);
|
|
||||||
}
|
|
||||||
if (type.getName().equals("java.lang.Class")) {
|
|
||||||
return Class.forName(value);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An IQ packet to hold PrivateData GET results.
|
* An IQ packet to hold PrivateData GET results.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue