/*
* 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.List;
/**
* A <code>DataReader</code> for beans using a <code>BeanModelFactory</code>.
* Valid return types are a list of beans . Beans must be of the same type and
* beans must implement {@link BeanModelTag} or have a companion
* {@link BeanModelMarker} marker class.
*/
public class TreeBeanModelReader implements DataReader<List<ModelData>> {
private boolean factoryForEachBean;
/**
* Return if a BeanModelFactory is created for each bean or not.
*
* @return true if a BeanModelFactory is created for each bean or not
*/
public boolean isFactoryForEachBean() {
return factoryForEachBean;
}
@SuppressWarnings({"unchecked", "rawtypes"})
public List<ModelData> read(Object loadConfig, Object data) {
if (data instanceof List) {
List<Object> beans = (List) data;
if (beans.size() > 0) {
if (factoryForEachBean) {
List models = new ArrayList(beans.size());
for (Object o : beans) {
BeanModelFactory factory = BeanModelLookup.get().getFactory(o.getClass());
assert factory != null : "No BeanModelFactory found for " + o.getClass();
models.add(factory.createModel(o));
}
return models;
} else {
BeanModelFactory factory = BeanModelLookup.get().getFactory(beans.get(0).getClass());
assert factory != null : "No BeanModelFactory found for " + beans.get(0).getClass();
return (List) factory.createModel(beans);
}
}
return (List) beans;
}
assert false : "Error converting data";
return null;
}
/**
* Set to true to create a BeanModelFactory for each bean in the list
* (defaults to false).
*
* @param factoryForEachBean true to enable
*/
public void setFactoryForEachBean(boolean factoryForEachBean) {
this.factoryForEachBean = factoryForEachBean;
}
}