package org.gcube.portlets.admin.manageusers.client.view; import java.util.ArrayList; import java.util.List; import org.gcube.portlets.admin.manageusers.client.ManageVreUsers; import org.gcube.portlets.admin.manageusers.shared.PortalUserDTO; import org.gcube.portlets.user.gcubewidgets.client.GCubePanel; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.Style.SelectionMode; import com.extjs.gxt.ui.client.Style.SortDir; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.store.GroupingStore; import com.extjs.gxt.ui.client.store.Store; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.button.ToggleButton; import com.extjs.gxt.ui.client.widget.form.StoreFilterField; 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.grid.GridGroupRenderer; import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel; import com.extjs.gxt.ui.client.widget.grid.GroupColumnData; import com.extjs.gxt.ui.client.widget.grid.GroupingView; 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.MenuItem; import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HasAlignment; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; public class VREDeploymentView extends Composite implements Display { private VerticalPanel mainPanel; private final ContentPanel tablePanel; private GroupingStore store; private StoreFilterField filterByName; private StoreFilterField filterByRole; private StoreFilterField filterByLab; private Grid grid; private Button approveButton; private Button refreshButton; private MenuItem approveMenu; private final CheckBoxSelectionModel sm = new CheckBoxSelectionModel(); private GroupingView view = new GroupingView(); private Menu gridMenu; /** * */ public VREDeploymentView() { mainPanel = new VerticalPanel(); filterByName = new StoreFilterField() { @Override protected boolean doSelect(Store store, PortalUserDTO parent, PortalUserDTO record, String property, String filter) { String name = record.getLastName(); name = name.toLowerCase(); if (name.contains(filter.toLowerCase())) { return true; } return false; } }; filterByName.setEmptyText("Filter by Last Name"); filterByName.setWidth("250px"); filterByRole = new StoreFilterField() { @Override protected boolean doSelect(Store store, PortalUserDTO parent, PortalUserDTO record, String property, String filter) { String name = record.getRole(); name = name.toLowerCase(); if (name.contains(filter.toLowerCase())) { return true; } return false; } }; filterByRole.setEmptyText("Filter by Role"); filterByRole.setWidth("250px"); filterByLab = new StoreFilterField() { @Override protected boolean doSelect(Store store, PortalUserDTO parent, PortalUserDTO record, String property, String filter) { String name = record.getLaboratory(); name = name.toLowerCase(); if (name.contains(filter.toLowerCase())) { return true; } return false; } }; filterByLab.setEmptyText("Filter by Group"); filterByLab.setWidth("250px"); final ToggleButton expandButton = new ToggleButton("Expand/Collapse"); expandButton.addSelectionListener(new SelectionListener() { @Override public void componentSelected(ButtonEvent ce) { if (!expandButton.isPressed()) view.collapseAllGroups(); else view.expandAllGroups(); } }); tablePanel = new ContentPanel(new FitLayout()); tablePanel.setHeaderVisible(false); tablePanel.setFrame(false); tablePanel.setStyleAttribute("Margin", "5px"); mainPanel.add(tablePanel); ToolBar toolBar = new ToolBar(); toolBar.getAriaSupport().setLabel("Filter Options"); toolBar.add(expandButton); toolBar.add(filterByName); toolBar.add(filterByRole); toolBar.add(filterByLab); tablePanel.setTopComponent(toolBar); store = new GroupingStore(); filterByName.bind(store); filterByRole.bind(store); filterByLab.bind(store); view.setShowGroupedColumn(true); view.setStartCollapsed(false); view.setForceFit(true); final ColumnModel cm = getVREListColumnModel(); view.setGroupRenderer(new GridGroupRenderer() { public String render(GroupColumnData data) { String f = cm.getColumnById(data.field).getHeader(); String l = data.models.size() == 1 ? "user" : "users"; return f + ": " + data.group + " (" + data.models.size() + " " + l + ")"; } }); grid = new Grid(store, cm); grid.setView(view); approveMenu = new MenuItem("Add User"); approveMenu.setIconStyle("approve-icon"); gridMenu = new Menu(); grid.setContextMenu(gridMenu); grid.setSelectionModel(sm); grid.addPlugin(sm); approveButton = new Button("Add Selected User(s)"); refreshButton = new Button("Refresh"); approveButton.setEnabled(false); initWidget(mainPanel); updateSize(); } /** * display the list of wfDocuments */ private void displayUsers() { tablePanel.removeAll(); grid.setStyleAttribute("borderTop", "none"); grid.setAutoExpandColumn("name"); grid.setBorders(true); grid.setStripeRows(true); grid.getView().setForceFit(true); ContentPanel gridPanel = new ContentPanel(new FitLayout()); gridPanel.setHeaderVisible(false); gridPanel.add(grid); gridPanel.setButtonAlign(HorizontalAlignment.CENTER); gridPanel.setButtonAlign(HorizontalAlignment.CENTER); gridPanel.addButton(approveButton); gridPanel.addButton(refreshButton); gridPanel.setBorders(false); tablePanel.add(gridPanel); tablePanel.setLayout(new FitLayout()); tablePanel.layout(); } @Override public void maskCenterPanel(String message, boolean mask) { if (mask) tablePanel.mask(message, "loading-indicator"); else tablePanel.unmask(); } @Override public void setData(List data) { store.removeAll(); store.setDefaultSort("lastname", SortDir.DESC); store.sort("lastname", SortDir.DESC); store.groupBy("initial"); store.add(data); displayUsers(); } public Widget asWidget() { return this; } @Override public void updateSize() { RootPanel workspace = RootPanel.get(ManageVreUsers.CONTAINER_DIV); int topBorder = workspace.getAbsoluteTop(); int leftBorder = workspace.getAbsoluteLeft(); int rightScrollBar = 17; int rootHeight = Window.getClientHeight() - (topBorder + 150); int rootWidth = Window.getClientWidth() - 2*leftBorder - rightScrollBar; tablePanel.setPixelSize(rootWidth, rootHeight); mainPanel.setPixelSize(rootWidth, rootHeight); } /** * * @return the Column Model for the table */ private ColumnModel getVREListColumnModel() { List configs = new ArrayList(); configs.add(sm.getColumn()); sm.setSelectionMode(SelectionMode.MULTI); ColumnConfig column = new ColumnConfig("lastname", "Last Name", 70); column.setHidden(false); column.setRowHeader(true); configs.add(column); column = new ColumnConfig(); column.setId("initial"); column.setHidden(true); column.setHeader(""); column.setWidth(100); configs.add(column); column = new ColumnConfig(); column.setId("name"); column.setHeader("Name"); column.setWidth(70); configs.add(column); column = new ColumnConfig(); column.setId("id"); column.setHeader("Username"); column.setWidth(50); configs.add(column); column = new ColumnConfig("email", "E-mail", 100); column.setHidden(false); column.setRowHeader(true); configs.add(column); column = new ColumnConfig("role", "Role", 70); column.setHidden(false); column.setRowHeader(true); configs.add(column); column = new ColumnConfig(); column.setId("laboratory"); column.setHeader("Group"); column.setWidth(70); column.setRowHeader(true); configs.add(column); return new ColumnModel(configs); } /** * change the button to enable in the bottom bar depending on the status of the selected VRE */ @Override public void enableActionButtons(PortalUserDTO selectedItem) { getApproveButton().setEnabled(true); } /** * */ @Override public void setGridContextMenu() { gridMenu.removeAll(); gridMenu.add(approveMenu); } @Override public Button getApproveButton() { return approveButton; } @Override public GridSelectionModel getGridSelectionModel() { return grid.getSelectionModel(); } @Override public Button getRefreshButton() {return refreshButton; } @Override public MenuItem getApproveMenu() { return approveMenu; } }