/** * Converts this NSObject into an object of the specified class. * @param <T> The target object type. * @param clazz The target class. * @return A new instance of the specified class, deserialized from this NSObject. * @throws IllegalArgumentException If the specified class cannot be deserialized from this NSObject. */ @SuppressWarnings("unchecked") public <T> T toJavaObject(Class<T> clazz) { return (T) this.toJavaObject(this, clazz, null); }
private Object[] deserializeArray() { NSObject[] originalArray = ((NSArray)this).getArray(); Object[] clonedArray = new Object[originalArray.length]; for(int i = 0; i < originalArray.length; i++) { clonedArray[i] = originalArray[i].toJavaObject(); } return clonedArray; }
private HashMap<String, Object> deserializeMap() { HashMap<String, NSObject> originalMap = ((NSDictionary)this).getHashMap(); HashMap<String, Object> clonedMap = new HashMap<String, Object>(originalMap.size()); for(String key:originalMap.keySet()) { clonedMap.put(key, originalMap.get(key).toJavaObject()); } return clonedMap; }
private Set<Object> deserializeSet() { Set<NSObject> originalSet = ((NSSet)this).getSet(); Set<Object> clonedSet; if(originalSet instanceof LinkedHashSet) { clonedSet = new LinkedHashSet<Object>(originalSet.size()); } else { clonedSet = new TreeSet<Object>(); } for(NSObject o : originalSet) { clonedSet.add(o.toJavaObject()); } return clonedSet; }
public static JsonElement parse(NSObject object) { return fromObject(object.toJavaObject()); }
private Object deserializeArray(NSObject payload, Class<?> clazz) { Class<?> elementClass = getClassForName(clazz.getComponentType().getName()); if (payload instanceof NSArray) { NSObject[] array = ((NSArray) payload).getArray(); Object result = Array.newInstance(elementClass, array.length); for (int i = 0; i < array.length; i++) { Array.set(result, i, this.toJavaObject(array[i], elementClass, null)); } return result; } if (payload instanceof NSSet) { Set<NSObject> set = ((NSSet) payload).getSet(); Object result = Array.newInstance(elementClass, set.size()); int i = 0; for (NSObject aSet : set) { Array.set(result, i, this.toJavaObject(aSet, elementClass, null)); i++; } return result; } if (payload instanceof NSData) { return deserializeData((NSData) payload, elementClass); } throw new IllegalArgumentException("Unable to map " + payload.getClass().getSimpleName() + " to " + clazz.getName()); }
private Object deserializeMap(Class<?> clazz, Type[] types, Map<String, NSObject> map) { final Map<String, Object> result; if (clazz.isInterface() || Modifier.isAbstract(clazz.getModifiers())) { //fallback result = new HashMap<String, Object>(); } else { @SuppressWarnings("unchecked") Map<String, Object> temp = (Map<String, Object>) getInstance(clazz); result = temp; } Class<?> elemClass = Object.class; Type[] elemParams = null; if (types != null && types.length > 1) { Type elemType = types[1]; if (elemType instanceof ParameterizedType) { elemClass = getClassForName(((ParameterizedType) elemType).getRawType().toString()); elemParams = ((ParameterizedType) elemType).getActualTypeArguments(); } else { elemClass = getClassForName(elemType.toString()); } } for (Map.Entry<String, NSObject> entry : map.entrySet()) { result.put(entry.getKey(), this.toJavaObject(entry.getValue(), elemClass, elemParams)); } return result; }
result.add(this.toJavaObject(nsObject, elemClass, elemTypes)); result.add(this.toJavaObject(nsObject, elemClass, elemTypes));
setter.invoke(result, this.toJavaObject(entry.getValue(), elemClass, elemTypes)); } catch (IllegalAccessException e) { throw new IllegalArgumentException("Could not access setter " + setter);