/* * 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.widget.old; import java.util.ArrayList; import java.util.List; import org.onecmdb.ui.gwt.desktop.client.service.content.ContentData; import org.onecmdb.ui.gwt.desktop.client.service.model.AttributeModel; import org.onecmdb.ui.gwt.desktop.client.service.model.CIModel; import org.onecmdb.ui.gwt.desktop.client.service.model.CMDBSession; import org.onecmdb.ui.gwt.desktop.client.service.model.LoadConfigModelItem; import org.onecmdb.ui.gwt.desktop.client.service.model.ModelItem; import org.onecmdb.ui.gwt.desktop.client.service.model.ModelServiceFactory; import org.onecmdb.ui.gwt.desktop.client.service.model.ValueModel; import org.onecmdb.ui.gwt.desktop.client.utils.LoaderProxy; import com.extjs.gxt.ui.client.Events; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.Style.LayoutRegion; import com.extjs.gxt.ui.client.Style.Scroll; import com.extjs.gxt.ui.client.binder.TreeTableBinder; import com.extjs.gxt.ui.client.data.BaseModel; import com.extjs.gxt.ui.client.data.BaseTreeLoader; import com.extjs.gxt.ui.client.data.Loader; import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.data.ModelStringProvider; import com.extjs.gxt.ui.client.data.RpcProxy; import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.FieldEvent; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.store.Store; import com.extjs.gxt.ui.client.store.StoreFilter; import com.extjs.gxt.ui.client.store.StoreSorter; import com.extjs.gxt.ui.client.store.TreeStore; import com.extjs.gxt.ui.client.util.Margins; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.Info; import com.extjs.gxt.ui.client.widget.InfoConfig; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.PagingToolBar; import com.extjs.gxt.ui.client.widget.form.DateField; import com.extjs.gxt.ui.client.widget.form.Field; import com.extjs.gxt.ui.client.widget.form.FormPanel; import com.extjs.gxt.ui.client.widget.form.TextField; import com.extjs.gxt.ui.client.widget.layout.BorderLayout; import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.extjs.gxt.ui.client.widget.layout.RowData; import com.extjs.gxt.ui.client.widget.layout.RowLayout; import com.extjs.gxt.ui.client.widget.tree.TreeItem; import com.extjs.gxt.ui.client.widget.treetable.TreeTable; import com.extjs.gxt.ui.client.widget.treetable.TreeTableColumn; import com.extjs.gxt.ui.client.widget.treetable.TreeTableColumnModel; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.rpc.AsyncCallback; public class CIInstanceBrowser extends LayoutContainer { private BaseTreeLoader loader; private ContentData mdr; private ContentPanel center; private CIModel root; private PagingToolBar toolBar; private LoaderProxy lP; private LoadConfigModelItem cfg; private TreeStore<? extends ModelData> store; public CIInstanceBrowser(ContentData mdr) { this.mdr = mdr; } public CIInstanceBrowser(ContentData mdr, CIModel model) { this.mdr = mdr; setRoot(model); start(); } @Override protected void onRender(Element parent, int index) { super.onRender(parent, index); init(); } public void init() { setLayout(new BorderLayout()); ContentPanel east = new ContentPanel(); east.setLayout(new FitLayout()); final LayoutContainer editPanel = new LayoutContainer(); editPanel.setLayout(new FitLayout()); east.add(editPanel); List<TreeTableColumn> columns = new ArrayList<TreeTableColumn>(); TreeTableColumn column = new TreeTableColumn("name", "Name", 200); columns.add(column); column = new TreeTableColumn("value", "Value", 200); columns.add(column); TreeTableColumnModel cm = new TreeTableColumnModel(columns); final TreeTable table = new TreeTable(cm); table.setAnimate(false); table.addListener(Events.SelectionChange, new Listener<BaseEvent>() { public void handleEvent(BaseEvent be) { InfoConfig c = new InfoConfig("Event", "Selected Items{0}" + table.getSelectedItems().size()); Info.display(c); List<TreeItem> items = table.getSelectedItems(); List<CIModel> models = new ArrayList<CIModel>(); /* for (TreeItem item : items) { if (item.getModel() instanceof CIModel) { models.add((CIModel)item.getModel()); } if (item.getModel() instanceof AttributeModel) { AttributeModel aModel = (AttributeModel) item.getModel(); if (aModel.getValues().size() == 1) { CIModel ci = aModel.getValues().get(0).getCIModel(); if (ci != null) { models.add(ci); } } } if (item.getModel() instanceof ValueModel) { ValueModel vModel = (ValueModel)item.getModel(); CIModel ci = vModel.getCIModel(); if (ci != null) { models.add(ci); } } } if (models.size() == 0) { return; } updateInputForm(editPanel, models); */ } }); //table.setItemIconStyle("icon-page"); RpcProxy<? extends ModelData, List<? extends ModelData>> proxy = new RpcProxy<ModelData, List<? extends ModelData>>() { @Override protected void load(final ModelData loadConfig, final AsyncCallback<List<? extends ModelData>> callback) { if (loadConfig instanceof ModelItem) { /* ((ModelItem)loadConfig).getChildren(mdr, new AsyncCallback<List<? extends ModelData>>() { public void onFailure(Throwable arg0) { callback.onFailure(arg0); } public void onSuccess(List<? extends ModelData> arg0) { List<ModelItem> items = new ArrayList<ModelItem>(); for (ModelData d : arg0) { if (d instanceof AttributeModel) { if (!((AttributeModel)d).isComplex()) { continue; } } items.add((ModelItem)d); } callback.onSuccess(items); } }); */ } } }; /* // Convert Object to Model Objects! DataReader dr = new DataReader<ModelData, List<CIModel>>() { public List<CIModel> read(ModelData model, Object data) { // TODO Auto-generated method stub if (data instanceof List) { return (List<CIModel>) (data); } return null; } }; */ loader = new BaseTreeLoader(proxy) { @Override public boolean hasChildren(ModelData parent) { if (parent instanceof ModelItem) { //return(((ModelItem)parent).hasChildren()); } return(false); } @Override public boolean loadChildren(ModelData parent) { // Need to convert the parent (CIModel) to a // Tree Load config. // TODO Auto-generated method stub return super.loadChildren(parent); } }; // trees store store = new TreeStore(loader); store.setMonitorChanges(true); store.setStoreSorter(new StoreSorter<ModelData>() { @Override public int compare(Store store, ModelData m1, ModelData m2, String property) { return super.compare(store, m1, m2, property); } }); final TreeTableBinder<? extends ModelData> binder = new TreeTableBinder(table, store); binder.setDisplayProperty("name"); /* binder.setStringProvider(new BaseModelStringProvider<ModelData>() { }); */ binder.setIconProvider(new ModelStringProvider<ModelData>() { public String getStringValue(ModelData model, String property) { if (model instanceof ModelItem) { ModelItem item = (ModelItem)model; String icon = null; if (icon == null) { return(null); } return(CMDBSession.get().getContentRepositoryURL() + "/" + icon); } return(null); } }); //table.setSize(700, 300); //editPanel.add(editForm); toolBar = new PagingToolBar(50); lP = new LoaderProxy(null); lP.setBaseTreeLoader(loader); toolBar.bind(lP); center = new ContentPanel(); center.setHeading("Instanaces(s)"); center.setLayout(new RowLayout()); center.add(toolBar, new RowData(1,-1)); center.add(table, new RowData(1,1)); center.layout(); BorderLayoutData centerData = new BorderLayoutData(LayoutRegion.CENTER); centerData.setMargins(new Margins(5, 0, 5, 0)); BorderLayoutData eastData = new BorderLayoutData(LayoutRegion.EAST, 200); eastData.setSplit(true); eastData.setCollapsible(true); eastData.setMargins(new Margins(5)); //east.collapse(); add(center, centerData); add(east, eastData); layout(); } public void setRoot(CIModel root) { cfg = new LoadConfigModelItem(root); cfg.setLimit(lP.getLimit()); lP.useLoadConfig(cfg); } public void start() { // Create lP.load(); } protected boolean updateInputForm(LayoutContainer container, List<CIModel> model) { final FormPanel editForm = new FormPanel(); editForm.setWidth("100%"); editForm.setHeight("100%"); editForm.setScrollMode(Scroll.AUTO); editForm.setFrame(true); editForm.setFieldWidth(60); editForm.setLabelWidth(100); editForm.setButtonAlign(HorizontalAlignment.CENTER); if (model.size() == 0) { editForm.setHeading("Can't edit!!!!"); } else if (model.size() > 1) { editForm.setHeading("Edit Multiple CI"); } else { editForm.setHeading("Edit CI " + model.get(0).getDisplayName()); } editForm.setIconStyle("icon-form"); editForm.setStyleAttribute("padding", "0"); if (model.size() > 0) { CIModel m = model.get(0); /* m.getChildren(mdr, new AsyncCallback<List<? extends ModelData>>() { public void onFailure(Throwable arg0) { // TODO Auto-generated method stub } public void onSuccess(List<? extends ModelData> arg0) { for (AttributeModel a : (List<AttributeModel>)arg0) { // TODO: Switch on type, etc... if (a.isComplex()) { continue; } List<ValueModel> values = a.getValues(); if (values.size() == 0) { editForm.add(getField(a, null)); } else if (values.size() == 1) { editForm.add(getField(a, values.get(0))); } else { for (ValueModel v : values) { editForm.add(getField(a, v)); } } } editForm.layout(); } }); */ } container.removeAll(); container.add(editForm); container.layout(); return(true); } protected Field getField(AttributeModel aModel, final ValueModel v) { TextField text = new TextField(); text.setFieldLabel(aModel.getDisplayName()); if (v != null) { text.setValue(v.getValue()); } else { text.setEmptyText("Edit..."); } text.setAllowBlank(true); text.setMinLength(4); text.setAutoWidth(true); text.addListener(Events.Change, new Listener<FieldEvent>() { public void handleEvent(FieldEvent be) { v.setUpdateValue((String)be.value); Info.display("ChangeEvent", "OldValue {0} - NewValue{0} ", (String)be.oldValue, (String)be.value); } }); return(text); } }