package org.ovirt.engine.ui.webadmin.section.main.view.popup.configure; import org.gwtbootstrap3.client.ui.Container; import org.ovirt.engine.core.common.businessentities.Permission; import org.ovirt.engine.core.common.businessentities.Role; import org.ovirt.engine.core.common.businessentities.RoleType; import org.ovirt.engine.ui.common.MainTableHeaderlessResources; import org.ovirt.engine.ui.common.MainTableResources; import org.ovirt.engine.ui.common.system.ClientStorage; import org.ovirt.engine.ui.common.widget.table.SimpleActionTable; import org.ovirt.engine.ui.common.widget.table.column.AbstractObjectNameColumn; import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumn; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.RoleModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.RolePermissionModelProvider; import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition; import org.ovirt.engine.ui.webadmin.widget.table.column.IsLockedImageTypeColumn; import org.ovirt.engine.ui.webadmin.widget.table.column.RoleTypeColumn; import com.google.gwt.core.client.GWT; import com.google.gwt.event.shared.EventBus; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.cellview.client.CellTable.Resources; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.SplitLayoutPanel; import com.google.inject.Inject; public class RoleView extends Composite { @UiField SimplePanel rolesTabContent; @UiField RadioButton allRolesRadioButton; @UiField RadioButton adminRolesRadioButton; @UiField RadioButton userRolesRadioButton; private SimpleActionTable<Role> table; private SimpleActionTable<Permission> permissionTable; private SplitLayoutPanel splitLayoutPanel; private final RoleModelProvider roleModelProvider; private final RolePermissionModelProvider permissionModelProvider; private final EventBus eventBus; private final ClientStorage clientStorage; private static final ApplicationConstants constants = AssetProvider.getConstants(); @Inject public RoleView(RoleModelProvider roleModelProvider, RolePermissionModelProvider permissionModelProvider, EventBus eventBus, ClientStorage clientStorage) { this.roleModelProvider = roleModelProvider; this.permissionModelProvider = permissionModelProvider; this.eventBus = eventBus; this.clientStorage = clientStorage; initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); initRolesFilterRadioButtons(); initSplitLayoutPanel(); initRoleTable(); initPermissionTable(); } private void initSplitLayoutPanel() { splitLayoutPanel = new SplitLayoutPanel(); splitLayoutPanel.setHeight("100%"); //$NON-NLS-1$ splitLayoutPanel.setWidth("100%"); //$NON-NLS-1$ rolesTabContent.add(splitLayoutPanel); } public void setSubTabVisibility(boolean visible) { splitLayoutPanel.clear(); if (visible) { splitLayoutPanel.addSouth(permissionTable, 150); } splitLayoutPanel.add(table); } private void initRolesFilterRadioButtons() { allRolesRadioButton.setValue(true); allRolesRadioButton.addValueChangeHandler(event -> { if (event.getValue()) { roleModelProvider.getModel().setItemsFilter(null); roleModelProvider.getModel().forceRefresh(); } }); adminRolesRadioButton.addValueChangeHandler(event -> { if (event.getValue()) { roleModelProvider.getModel().setItemsFilter(RoleType.ADMIN); roleModelProvider.getModel().forceRefresh(); } }); userRolesRadioButton.addValueChangeHandler(event -> { if (event.getValue()) { roleModelProvider.getModel().setItemsFilter(RoleType.USER); roleModelProvider.getModel().forceRefresh(); } }); } interface ViewUiBinder extends UiBinder<Container, RoleView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } private void initRoleTable() { this.table = new SimpleActionTable<>(roleModelProvider, getTableHeaderlessResources(), getTableResources(), eventBus, clientStorage); this.table.enableColumnResizing(); AbstractTextColumn<Role> nameColumn = new AbstractTextColumn<Role>() { @Override public String getValue(Role object) { return object.getName(); } }; nameColumn.makeSortable(); table.addColumn(new IsLockedImageTypeColumn(), constants.empty(), "25px"); //$NON-NLS-1$ table.addColumn(new RoleTypeColumn(), constants.empty(), "25px"); //$NON-NLS-1$ table.addColumn(nameColumn, constants.nameRole(), "175px"); //$NON-NLS-1$ AbstractTextColumn<Role> descColumn = new AbstractTextColumn<Role>() { @Override public String getValue(Role object) { return object.getDescription(); } }; descColumn.makeSortable(); table.addColumn(descColumn, constants.descriptionRole(), "575px"); //$NON-NLS-1$ table.addActionButton(new WebAdminButtonDefinition<Role>(constants.newRole()) { @Override protected UICommand resolveCommand() { return roleModelProvider.getModel().getNewCommand(); } }); table.addActionButton(new WebAdminButtonDefinition<Role>(constants.editRole()) { @Override protected UICommand resolveCommand() { return roleModelProvider.getModel().getEditCommand(); } }); table.addActionButton(new WebAdminButtonDefinition<Role>(constants.copyRole()) { @Override protected UICommand resolveCommand() { return roleModelProvider.getModel().getCloneCommand(); } }); table.addActionButton(new WebAdminButtonDefinition<Role>(constants.removeRole()) { @Override protected UICommand resolveCommand() { return roleModelProvider.getModel().getRemoveCommand(); } }); splitLayoutPanel.add(table); table.getSelectionModel().addSelectionChangeHandler(event -> { roleModelProvider.setSelectedItems(table.getSelectionModel().getSelectedList()); if (table.getSelectionModel().getSelectedList().size() > 0) { setSubTabVisibility(true); } else { setSubTabVisibility(false); } }); } private void initPermissionTable() { permissionTable = new SimpleActionTable<>(permissionModelProvider, getTableHeaderlessResources(), getTableResources(), eventBus, clientStorage); permissionTable.enableColumnResizing(); AbstractTextColumn<Permission> userColumn = new AbstractTextColumn<Permission>() { @Override public String getValue(Permission object) { return object.getOwnerName(); } }; userColumn.makeSortable(); permissionTable.addColumn(userColumn, constants.userPermission()); AbstractTextColumn<Permission> permissionColumn = new AbstractObjectNameColumn<Permission>() { @Override protected Object[] getRawValue(Permission object) { return new Object[] { object.getObjectType(), object.getObjectName() }; } }; permissionColumn.makeSortable(); permissionTable.addColumn(permissionColumn, constants.objectPermission()); permissionTable.addActionButton(new WebAdminButtonDefinition<Permission>(constants.removePermission()) { @Override protected UICommand resolveCommand() { return permissionModelProvider.getModel().getRemoveCommand(); } }); permissionTable.getSelectionModel().addSelectionChangeHandler(event -> permissionModelProvider.setSelectedItems(permissionTable.getSelectionModel().getSelectedList())); } protected Resources getTableHeaderlessResources() { return (Resources) GWT.create(MainTableHeaderlessResources.class); } protected Resources getTableResources() { return (Resources) GWT.create(MainTableResources.class); } }