/*
* Ext GWT 2.2.4 - Ext for GWT
* Copyright(c) 2007-2010, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
package com.extjs.gxt.ui.client.data;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class NestedModelUtil {
@SuppressWarnings("unchecked")
public static <X> X getNestedValue(ModelData model, String property) {
return (X) getNestedValue(model, getPath(property));
}
@Deprecated
public static Object convertIfNecessary(Object obj) {
if (obj == null || obj instanceof ModelData) {
return obj;
}
BeanModelLookup lookup = BeanModelLookup.get();
BeanModelFactory factory = lookup != null ? lookup.getFactory(obj.getClass()) : null;
return factory != null ? factory.createModel(obj) : null;
}
@SuppressWarnings("unchecked")
public static <X> X getNestedValue(ModelData model, List<String> paths) {
Object obj = model.get(paths.get(0));
if (paths.size() == 1) {
return (X) obj;
} else if (obj != null && obj instanceof ModelData) {
List<String> tmp = new ArrayList<String>(paths);
tmp.remove(0);
return (X) getNestedValue((ModelData) obj, tmp);
}
return null;
}
@SuppressWarnings("unchecked")
public static <X> X setNestedValue(ModelData model, String property, Object value) {
return (X) setNestedValue(model, getPath(property), value);
}
@SuppressWarnings("unchecked")
public static <X> X setNestedValue(ModelData model, List<String> paths, Object value) {
int index = paths.size() - 1;
String path = paths.get(index);
paths.remove(index);
ModelData m = getNestedValue(model, paths);
return (X) m.set(path, value);
}
public static boolean isNestedProperty(String property) {
return property != null && property.contains(".");
}
private static List<String> getPath(String property) {
return new ArrayList<String>(Arrays.asList(property.split("\\.")));
}
}