/******************************************************************************* * Copyright 2011 Alex 'Ript' Malyshev <alexript@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package net.autosauler.ballance.client.gui; import java.util.ArrayList; import java.util.List; import net.autosauler.ballance.client.Ballance_autosauler_net; import net.autosauler.ballance.client.Services; import net.autosauler.ballance.client.gui.images.Images; import net.autosauler.ballance.client.gui.messages.M; import net.autosauler.ballance.client.model.UsersModel; import net.autosauler.ballance.shared.UserRole; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.Style.SelectionMode; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.MenuEvent; import com.extjs.gxt.ui.client.event.SelectionChangedEvent; import com.extjs.gxt.ui.client.event.SelectionChangedListener; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.button.Button; 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.ColumnData; 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.grid.GridCellRenderer; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.extjs.gxt.ui.client.widget.menu.Menu; import com.extjs.gxt.ui.client.widget.menu.MenuBar; import com.extjs.gxt.ui.client.widget.menu.MenuBarItem; import com.extjs.gxt.ui.client.widget.menu.MenuItem; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AbstractImagePrototype; /** * The Class UsersPanel. */ public class UsersPanel extends ContentPanel implements IPaneWithMenu, IDialogYesReceiver { private Grid<UsersModel> grid; private ListStore<UsersModel> store; private CheckBoxSelectionModel<UsersModel> sm; /** The trashstate. */ private boolean trashstate = false; private Button del; private Button edit; private static UsersPanel impl = null; public static UsersPanel get() { if (impl == null) { impl = new UsersPanel(); } return impl; } /** * Instantiates a new users panel. */ private UsersPanel() { super(new FitLayout()); setHeaderVisible(false); addButtons(); buildTable(); } private void addButtons() { edit = new Button(); edit.setText(M.tools.btnEdit()); edit.setEnabled(false); edit.addSelectionListener(new SelectionListener<ButtonEvent>() { @Override public void componentSelected(ButtonEvent ce) { UsersModel user = sm.getSelectedItem(); if (user != null) { new EditUserDialog((String) user.get("id"), UsersPanel.this); } } }); del = new Button(); del.setText(M.tools.btnDelete()); del.setEnabled(false); del.addSelectionListener(new SelectionListener<ButtonEvent>() { @Override public void componentSelected(ButtonEvent ce) { UsersModel user = sm.getSelectedItem(); if (user != null) { new QuestionDialog(M.users.qstTrashUser() + " " + user.get("username"), UsersPanel.this, "trashuser").show(); } } }); addButton(edit); addButton(del); } private void buildTable() { sm = new CheckBoxSelectionModel<UsersModel>(); sm.setSelectionMode(SelectionMode.SINGLE); sm.addSelectionChangedListener(new SelectionChangedListener<UsersModel>() { @Override public void selectionChanged(SelectionChangedEvent<UsersModel> se) { UsersModel user = se.getSelectedItem(); if (user != null) { edit.setEnabled(true); del.setEnabled(true); } else { edit.setEnabled(false); del.setEnabled(false); } } }); List<ColumnConfig> columns = new ArrayList<ColumnConfig>(); columns.add(sm.getColumn()); ColumnConfig column = new ColumnConfig(); column.setId("username"); column.setHeader(M.users.userName()); column.setWidth(150); column.setRowHeader(true); columns.add(column); column = new ColumnConfig(); column.setId("roles"); column.setHeader(M.users.columnRoles()); column.setWidth(90); column.setRowHeader(true); GridCellRenderer<UsersModel> gridRole = new GridCellRenderer<UsersModel>() { @Override public Object render(UsersModel model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<UsersModel> store, Grid<UsersModel> grid) { return new RolesWidget((UserRole) model.get("roles")) .toString(); } }; column.setAlignment(HorizontalAlignment.CENTER); column.setRenderer(gridRole); columns.add(column); column = new ColumnConfig(); column.setId("createdate"); column.setHeader(M.users.crateDate()); column.setWidth(200); column.setRowHeader(true); columns.add(column); GridCellRenderer<UsersModel> gridActive = new GridCellRenderer<UsersModel>() { @Override public Object render(UsersModel model, String property, ColumnData config, int rowIndex, int colIndex, ListStore<UsersModel> store, Grid<UsersModel> grid) { Boolean isactive = (Boolean) model.get("active"); if (isactive) { return AbstractImagePrototype.create(Images.menu.Ok()) .createImage(); } return AbstractImagePrototype.create(Images.menu.Cancel()) .createImage(); } }; column = new ColumnConfig(); column.setId("active"); column.setHeader(M.users.isActive()); column.setWidth(100); column.setRowHeader(true); column.setRenderer(gridActive); columns.add(column); ColumnModel cm = new ColumnModel(columns); store = new ListStore<UsersModel>(); loadList(); grid = new Grid<UsersModel>(store, cm); grid.setSelectionModel(sm); grid.setAutoExpandColumn("username"); add(grid); } @Override public List<MenuItem> getHelpItems() { return null; } /* * (non-Javadoc) * * @see net.autosauler.ballance.client.gui.IPaneWithMenu#getPaneMenu() */ @Override public MenuBar getPaneMenu() { MenuBar menubar = new MenuBar(); Menu menu = new Menu(); menu.add(new MenuItem(M.users.menuAddUser(), new SelectionListener<MenuEvent>() { // create new user @Override public void componentSelected(MenuEvent ce) { new EditUserDialog(UsersPanel.this); } })); menu.add(new MenuItem(M.users.menuReload(), new SelectionListener<MenuEvent>() { // reload users list @Override public void componentSelected(MenuEvent ce) { loadList(); } })); menu.add(new MenuItem(M.users.menuNotTrashedUsers(), new SelectionListener<MenuEvent>() { // Live @Override public void componentSelected(MenuEvent ce) { trashstate = false; loadList(); } })); menu.add(new MenuItem(M.users.menuTrashedUsers(), new SelectionListener<MenuEvent>() { // Trashed // users @Override public void componentSelected(MenuEvent ce) { trashstate = true; loadList(); } })); menubar.add(new MenuBarItem(M.menu.itemUsers(), menu)); return menubar; } private void loadList() { store.removeAll(); UsersModel.load(trashstate, store); } /* * (non-Javadoc) * * @see * net.autosauler.ballance.client.gui.IDialogYesReceiver#onDialogYesButtonClick * (java.lang.String) */ @Override public void onDialogYesButtonClick(String tag, Object tag2) { if (tag.equals("reload")) { loadList(); } else if (tag.equals("trashuser")) { UserRole role = Ballance_autosauler_net.sessionId.getUserrole(); if (role.isAdmin()) { UsersModel user = sm.getSelectedItem(); if (user != null) { Services.users.trashUser((String) user.get("id"), new AsyncCallback<Boolean>() { @Override public void onFailure(Throwable caught) { new AlertDialog(caught).show(); } @Override public void onSuccess(Boolean result) { if (result) { loadList(); } else { new AlertDialog(M.users.logTrashError()) .show(); } } }); } } } } }