package com.jcommerce.gwt.client.service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import com.extjs.gxt.ui.client.data.BaseTreeLoader;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.jcommerce.gwt.client.IShopServiceAsync;
import com.jcommerce.gwt.client.form.BeanObject;
public class TreeListService extends RemoteService{
public BaseTreeLoader getLoader(final String model, final List<String> wantedFields) {
return getLoader(model, null, wantedFields);
}
public BaseTreeLoader getLoader(final String model, final Criteria criteria, final List<String> wantedFields) {
if (model == null) {
throw new RuntimeException("model = null");
}
final IShopServiceAsync service = getService();
RpcProxy<List<BeanObject>> proxy = new RpcProxy<List<BeanObject>>() {
public void load(Object loadConfig, final AsyncCallback<List<BeanObject>> callback) {
if(loadConfig == null){
service.getTreePagingList(model, criteria, (BeanObject)loadConfig, new AsyncCallback<List<ModelData>>() {
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
}
public void onSuccess(List<ModelData> result) {
List<BeanObject> finalResult = new ArrayList<BeanObject>();
for (Iterator<ModelData> it = result.iterator(); it.hasNext();) {
BeanObject parent = (BeanObject) it.next();
if(parent.getParent()==null){
setChildren(parent,result);
finalResult.add(parent);
}
}
callback.onSuccess(finalResult);
}
});
}else{
BeanObject model = (BeanObject) loadConfig;
List<BeanObject> finalResult = new ArrayList<BeanObject>();
List<ModelData> result = model.getChildren();
for (Iterator it = result.iterator(); it.hasNext();) {
BeanObject parent = (BeanObject) it.next();
//setChildren(parent,result);
finalResult.add(parent);
}
callback.onSuccess(finalResult);
}
}
};
// loader
BaseTreeLoader<BeanObject> loader = new BaseTreeLoader<BeanObject>(proxy);
//loader.setRemoteSort(true);
return loader;
}
public void setChildren(BeanObject parent,List<ModelData> result){
List<ModelData> childList = new ArrayList<ModelData>();
String childIds = (String)parent.getProperties().get("children");
if(childIds != null){
List<String> children =Arrays.asList(childIds.split(","));
if (children != null && children.size()>0) {
for(Iterator<ModelData> it1 = result.iterator(); it1.hasNext();){
BeanObject child = (BeanObject) it1.next();
String id = child.getString("id");
if(children.contains(id)){
child.setParent(parent);
setChildren(child,result);
childList.add(child);
}
}
parent.setChildren(childList);
}
}
}
public BaseTreeLoader getLoader(final String model) {
return getLoader(model, null, null);
}
public BaseTreeLoader getLoader(final String model, final Criteria criteria) {
return getLoader(model, criteria, null);
}
}