/******************************************************************************* * Copyright (c) 2012 Dmitry Tikhomirov. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * Dmitry Tikhomirov - initial API and implementation ******************************************************************************/ package org.opensheet.client.widges.admin; import java.util.ArrayList; import java.util.List; import org.opensheet.client.dto.AuthmethodDTO; import org.opensheet.client.services.AuthmethodService; import org.opensheet.client.services.AuthmethodServiceAsync; import org.opensheet.client.services.UserService; import org.opensheet.client.services.UserServiceAsync; import com.extjs.gxt.ui.client.Style.SelectionMode; import com.extjs.gxt.ui.client.data.BaseListLoader; import com.extjs.gxt.ui.client.data.BaseModel; import com.extjs.gxt.ui.client.data.BeanModel; import com.extjs.gxt.ui.client.data.BeanModelReader; import com.extjs.gxt.ui.client.data.ListLoadResult; import com.extjs.gxt.ui.client.data.ListLoader; import com.extjs.gxt.ui.client.data.ModelData; import com.extjs.gxt.ui.client.data.RpcProxy; import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.FieldEvent; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.form.ComboBox; import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction; import com.extjs.gxt.ui.client.widget.grid.CheckBoxSelectionModel; import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; import com.extjs.gxt.ui.client.widget.grid.ColumnModel; import com.extjs.gxt.ui.client.widget.grid.Grid; import com.extjs.gxt.ui.client.widget.toolbar.LabelToolItem; import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; /**RELOAD STORE AFTER SELECT * * * * @author chani * */ public class ImportUsersFromExternalStoreGrid extends ContentPanel{ private ComboBox<BeanModel> exportSourceComboBox; private ListStore<BeanModel> exportSourceStore; private ListLoader<?> authmethodloader; private AuthmethodServiceAsync authmethodService = GWT.create(AuthmethodService.class); private UserServiceAsync userService = GWT.create(UserService.class); private Grid<BaseModel> usersGrid; public ImportUsersFromExternalStoreGrid(){ setSize(650,450); setFrame(true); setHeaderVisible(false); ToolBar tb = new ToolBar(); tb.add(new LabelToolItem("Select Import Source => ")); tb.add(getImportUsersComboBox()); add(tb); ToolBar btb = new ToolBar(); Button saveSelectionBtn = new Button("Save"); saveSelectionBtn.addListener(Events.Select,new Listener<BaseEvent>(){ @Override public void handleEvent(BaseEvent be) { importUsersToOpensheet(); } }); btb.add(saveSelectionBtn); Button reloadSelectionBtn = new Button("Reload"); reloadSelectionBtn.addListener(Events.Select, new Listener<BaseEvent>(){ @Override public void handleEvent(BaseEvent be) { Integer sourceId = Integer.parseInt(exportSourceComboBox.getValue().get("id").toString()); loadGrid(sourceId); } }); btb.add(reloadSelectionBtn); add(createGrid()); setBottomComponent(btb); } private ContentPanel createGrid(){ ContentPanel cp = new ContentPanel(); cp.setWidth(600); cp.setHeight(400); final CheckBoxSelectionModel<BaseModel> sm = new CheckBoxSelectionModel<BaseModel>(); sm.getColumn().setMenuDisabled(true); sm.getColumn().setSortable(false); sm.getColumn().setDataIndex("selected"); sm.setSelectionMode(SelectionMode.MULTI); List<ColumnConfig> configs = new ArrayList<ColumnConfig>(); configs.add(sm.getColumn()); ColumnConfig usersColumnConfig = new ColumnConfig("fullName", "Username", 150); usersColumnConfig.setSortable(false); usersColumnConfig.setMenuDisabled(true); configs.add(usersColumnConfig); ColumnConfig loginColumnConfig = new ColumnConfig("login", "Login", 150); loginColumnConfig.setSortable(false); loginColumnConfig.setMenuDisabled(true); configs.add(loginColumnConfig); ColumnConfig emailColumnConfig = new ColumnConfig("email", "email", 150); emailColumnConfig.setSortable(false); emailColumnConfig.setMenuDisabled(true); configs.add(emailColumnConfig); ColumnModel cm = new ColumnModel(configs); usersGrid = new Grid<BaseModel>(new ListStore<BaseModel>(), cm); usersGrid.setLoadMask(true); usersGrid.setWidth(600); usersGrid.setHeight(350); usersGrid.addStyleName(".my-table-style"); usersGrid.setBorders(true); usersGrid.setSelectionModel(sm); usersGrid.setAutoExpandColumn("login"); usersGrid.getView().setEmptyText("no data"); usersGrid.setId("usersGridId"); cp.add(usersGrid); return cp; } private ListStore<BeanModel> createImportSourceStore(){ RpcProxy<List<AuthmethodDTO>> authmetodProxy = new RpcProxy<List<AuthmethodDTO>>(){ @Override protected void load(Object loadConfig, AsyncCallback<List<AuthmethodDTO>> callback) { authmethodService.getImportSources(callback); } }; authmethodloader = new BaseListLoader<ListLoadResult<ModelData>>(authmetodProxy,new BeanModelReader()); exportSourceStore = new ListStore<BeanModel>(authmethodloader); exportSourceStore.setMonitorChanges(true); authmethodloader.load(); return exportSourceStore; } private ComboBox<BeanModel> getImportUsersComboBox(){ exportSourceComboBox = new ComboBox<BeanModel>(); exportSourceComboBox.setDisplayField("description"); exportSourceComboBox.setWidth(150); exportSourceComboBox.setName("authmethod"); exportSourceComboBox.setFieldLabel("Auth method"); exportSourceComboBox.setAllowBlank(false); exportSourceComboBox.setEditable(false); exportSourceComboBox.setStore(createImportSourceStore()); exportSourceComboBox.setTypeAhead(true); exportSourceComboBox.setTriggerAction(TriggerAction.ALL); exportSourceComboBox.addListener(Events.Select, new Listener<FieldEvent>(){ @Override public void handleEvent(FieldEvent fe) { Integer sourceId = Integer.parseInt(exportSourceComboBox.getValue().get("id").toString()); loadGrid(sourceId); } }); exportSourceComboBox.select(exportSourceComboBox.getStore().getAt(0)); return exportSourceComboBox; } private void loadGrid(Integer sourceId){ usersGrid.getStore().removeAll(); userService.getUsersFromExternalStore(new AuthmethodDTO(sourceId), new AsyncCallback<List<BaseModel>>(){ @Override public void onFailure(Throwable caught) {} @Override public void onSuccess(List<BaseModel> result) { usersGrid.getStore().add(result); } }); } private void importUsersToOpensheet(){ List<BaseModel> users = usersGrid.getSelectionModel().getSelectedItems(); Integer storeId = Integer.parseInt(exportSourceComboBox.getValue().get("id").toString()); if(users.isEmpty() == false && storeId != null){ userService.setUsersFromExternalStore(users, new AuthmethodDTO(storeId), new AsyncCallback<Void>(){ @Override public void onFailure(Throwable caught) { MessageBox box = new MessageBox(); box.setButtons(MessageBox.CANCEL); box.setIcon(MessageBox.QUESTION); box.setTitleHtml("Error"); box.setMessage("Somethings wrong"); box.show(); } @Override public void onSuccess(Void result) { Integer storeId = Integer.parseInt(exportSourceComboBox.getValue().get("id").toString()); loadGrid(storeId); } }); } } }