/* * Lokomo OneCMDB - An Open Source Software for Configuration * Management of Datacenter Resources * * Copyright (C) 2006 Lokomo Systems AB * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. * * Lokomo Systems AB can be contacted via e-mail: info@lokomo.com or via * paper mail: Lokomo Systems AB, Sv�rdv�gen 27, SE-182 33 * Danderyd, Sweden. * */ package org.onecmdb.ui.gwt.desktop.client.utils; import java.util.ArrayList; import java.util.List; import org.onecmdb.ui.gwt.desktop.client.service.model.LoadConfigModelItem; import com.extjs.gxt.ui.client.data.BasePagingLoadConfig; import com.extjs.gxt.ui.client.data.BasePagingLoadResult; import com.extjs.gxt.ui.client.data.BasePagingLoader; import com.extjs.gxt.ui.client.data.BaseTreeLoader; import com.extjs.gxt.ui.client.data.DataProxy; import com.extjs.gxt.ui.client.data.LoadEvent; import com.extjs.gxt.ui.client.data.Loader; import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.data.PagingLoadConfig; import com.extjs.gxt.ui.client.data.PagingLoadResult; import com.extjs.gxt.ui.client.data.TreeLoadEvent; import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.Listener; public class LoaderProxy<C extends PagingLoadConfig> extends BasePagingLoader<C, PagingLoadResult> { private BaseTreeLoader loader; public LoaderProxy(DataProxy<C, PagingLoadResult> proxy) { super(proxy); } public void setBaseTreeLoader(BaseTreeLoader loader) { this.loader = loader; loader.addListener(Loader.BeforeLoad, new Listener() { public void handleEvent(BaseEvent be) { fireEvent(Loader.BeforeLoad, be); } }); loader.addListener(Loader.Load, new Listener() { public void handleEvent(BaseEvent be) { List<ModelData> data = new ArrayList<ModelData>(); if (be instanceof TreeLoadEvent) { data = (List<ModelData>) ((TreeLoadEvent)be).data; } BasePagingLoadResult<ModelData> result = new BasePagingLoadResult(data); if (getLastConfig() instanceof LoadConfigModelItem) { LoadConfigModelItem lc = (LoadConfigModelItem)getLastConfig(); if (lc.getLoadResult() != null) { result.setOffset(lc.getLoadResult().getOffset()); result.setTotalLength(lc.getLoadResult().getTotalLength()); } } LoadEvent event = new LoadEvent(LoaderProxy.this, new BasePagingLoadConfig(), result); fireEvent(Loader.Load, event); } }); loader.addListener(Loader.LoadException, new Listener() { public void handleEvent(BaseEvent be) { fireEvent(Loader.LoadException, be); } }); } @Override public boolean load(C loadConfig) { if (loader == null) { return(super.load(loadConfig)); } return loader.load(loadConfig); } public C getLastConfig() { return(lastConfig); } }