/* * 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.grid; import java.util.List; import org.onecmdb.ui.gwt.desktop.client.service.content.ContentData; 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.ModelServiceFactory; import org.onecmdb.ui.gwt.desktop.client.service.model.grid.AttributeColumnConfig; import org.onecmdb.ui.gwt.desktop.client.service.model.grid.GridColumnFilter; import org.onecmdb.ui.gwt.desktop.client.service.model.grid.GridModelConfig; import com.extjs.gxt.ui.client.Events; import com.extjs.gxt.ui.client.data.BaseLoader; 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.LoadEvent; import com.extjs.gxt.ui.client.data.Loader; import com.extjs.gxt.ui.client.data.PagingLoader; import com.extjs.gxt.ui.client.data.RpcProxy; import com.extjs.gxt.ui.client.data.SortInfo; import com.extjs.gxt.ui.client.event.ComponentEvent; import com.extjs.gxt.ui.client.event.KeyListener; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.MenuEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.PagingToolBar; import com.extjs.gxt.ui.client.widget.button.IconButton; import com.extjs.gxt.ui.client.widget.form.ComboBox; import com.extjs.gxt.ui.client.widget.form.LabelField; import com.extjs.gxt.ui.client.widget.form.TextField; import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction; import com.extjs.gxt.ui.client.widget.menu.CheckMenuItem; import com.extjs.gxt.ui.client.widget.menu.Menu; import com.extjs.gxt.ui.client.widget.menu.MenuItem; import com.extjs.gxt.ui.client.widget.toolbar.AdapterToolItem; import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem; import com.extjs.gxt.ui.client.widget.toolbar.TextToolItem; import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.KeyboardListener; public class GridControllToolBar extends ToolBar { private PagingLoader loader; private BasePagingLoadConfig config; private GridModelConfig gridConfig; private TextField<String> searchField; private TextField<String> pageSizeField; private TextToolItem searchOptions; private Listener<MenuEvent> opSelection; private Listener<MenuEvent> searchOnListener; public void bind(BasePagingLoader loader, BasePagingLoadConfig cfg) { this.loader = loader; config = cfg; loader.addListener(Loader.BeforeLoad, new Listener<LoadEvent>() { public void handleEvent(LoadEvent be) { if (be.config instanceof BasePagingLoadConfig) { beforeLoad((BasePagingLoadConfig)be.config); } } }); } protected void beforeLoad(BasePagingLoadConfig config) { //config.setOffset(start); //config.setLimit(pageSize); ((BasePagingLoadConfig)config).set("searchText", mapNameToID(searchField.getValue())); } private String mapNameToID(String search) { if (search == null) { return(null); } if (!search.contains("==")) { return(search); } String split[] = search.split("=="); String colName = split[0]; for (AttributeColumnConfig cfg : this.gridConfig.getColumnConfig()) { if (cfg.getName().equals(colName)) { colName = cfg.getId(); break; } } return(colName + "==" + split[1]); } public void refresh() { loader.load(); //doLoadRequest(start, pageSize); } public BasePagingLoadConfig getLoadConfig() { return(this.config); } public GridControllToolBar(final GridModelConfig config) { this.gridConfig = config; // Add Search tool Items. searchField = new TextField<String>(); searchField.setToolTip("Search"); searchField.setWidth(60); searchField.addKeyListener(new KeyListener() { @Override public void componentKeyUp(ComponentEvent event) { if (event.getKeyCode() == KeyboardListener.KEY_ENTER) { refresh(); } } }); add(new AdapterToolItem(searchField)); IconButton searchButton = new IconButton("search-icon");; searchButton.addSelectionListener(new SelectionListener<ComponentEvent>() { @Override public void componentSelected(ComponentEvent ce) { refresh(); } }); add(new AdapterToolItem(searchButton)); //add(new TextToolItem("", "search-icon")); searchOptions = new TextToolItem("Options"); Menu rootMenu = new Menu(); searchOptions.setMenu(rootMenu); { Menu menu = new Menu(); MenuItem searchOn = new MenuItem("Search On"); CheckMenuItem allItem = new CheckMenuItem("All Simple Attr."); allItem.setGroup("columns"); allItem.addListener(Events.CheckChange, getSearchOnListener()); allItem.setChecked(true); menu.add(allItem); for (AttributeColumnConfig cfg : this.gridConfig.getColumnConfig()) { if (!cfg.isSearchable()) { continue; } CheckMenuItem item = new CheckMenuItem(cfg.getName()); item.setData("cfg", cfg); item.setGroup("columns"); item.addListener(Events.CheckChange, getSearchOnListener()); menu.add(item); } searchOn.setSubMenu(menu); rootMenu.add(searchOn); } { Menu menu = new Menu(); MenuItem searchOp = new MenuItem("Operation"); { CheckMenuItem item = new CheckMenuItem("Like"); item.addListener(Events.CheckChange, getOperationListener()); item.setChecked(true); //AttributeValueConstraint.LIKE == 5 item.setGroup("operations"); item.setData("operation", 5); item.setData("notOperation", false); menu.add(item); } { CheckMenuItem item = new CheckMenuItem("Not Like"); item.setGroup("operations"); //AttributeValueConstraint.LIKE == 5 item.setData("operation", 5); item.setData("notOperation", true); menu.add(item); item.addListener(Events.CheckChange, getOperationListener()); } { CheckMenuItem item = new CheckMenuItem("Equals"); item.setGroup("operations"); //AttributeValueConstraint.EQUALS == 0 item.setData("operation", 0); item.setData("notOperation", false); item.addListener(Events.CheckChange, getOperationListener()); menu.add(item); } { CheckMenuItem item = new CheckMenuItem("Not Equals"); item.setGroup("operations"); //AttributeValueConstraint.EQUALS == 0 item.setData("operation", 0); item.setData("notOperation", true); item.addListener(Events.CheckChange, getOperationListener()); menu.add(item); } { CheckMenuItem item = new CheckMenuItem("Is Empty"); item.setGroup("operations"); //AttributeValueConstraint.IS_NULL == 7 item.setData("operation", 7); item.setData("notOperation", false); item.addListener(Events.CheckChange, getOperationListener()); menu.add(item); } { CheckMenuItem item = new CheckMenuItem("Is Not Empty"); item.setGroup("operations"); //AttributeValueConstraint.IS_NULL item.setData("operation", 7); item.setData("notOperation", true); item.addListener(Events.CheckChange, getOperationListener()); menu.add(item); } searchOp.setSubMenu(menu); rootMenu.add(searchOp); } add(searchOptions); add(new SeparatorToolItem()); /* pageSizeField = new TextField<String>(); pageSizeField.setWidth(30); pageSizeField.setValue("50"); pageSizeField.addKeyListener(new KeyListener() { @Override public void componentKeyUp(ComponentEvent event) { if (event.getKeyCode() == KeyboardListener.KEY_ENTER) { refresh(); } } }); add(new AdapterToolItem(pageSizeField)); add(new AdapterToolItem(new LabelField("Page Size"))); //add(new AdapterToolItem(getSecurityGroupCombo())); */ } private Listener<MenuEvent> getOperationListener() { if (opSelection == null) { opSelection = new Listener<MenuEvent>() { public void handleEvent(MenuEvent be) { CheckMenuItem item = (CheckMenuItem) be.item; if (item.isChecked()) { getLoadConfig().set("searchOperation", item.getData("operation")); getLoadConfig().set("searchOperationNot", item.getData("notOperation")); } else { } } }; } return(opSelection); } private Listener<MenuEvent> getSearchOnListener() { if (searchOnListener == null) { searchOnListener = new Listener<MenuEvent>() { public void handleEvent(MenuEvent be) { CheckMenuItem item = (CheckMenuItem) be.item; if (item.isChecked()) { getLoadConfig().set("searchAttributeConfig", item.getData("cfg")); } else { } } }; } return(searchOnListener); } }