package org.ovirt.engine.ui.webadmin.section.main.view.popup.configure; import org.ovirt.engine.core.common.businessentities.RoleType; import org.ovirt.engine.core.common.businessentities.permissions; import org.ovirt.engine.core.common.businessentities.roles; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.gin.ClientGinjector; 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.UiCommandButtonDefinition; import org.ovirt.engine.ui.webadmin.widget.table.SimpleActionTable; import org.ovirt.engine.ui.webadmin.widget.table.column.IsLockedImageTypeColumn; import org.ovirt.engine.ui.webadmin.widget.table.column.ObjectNameColumn; import org.ovirt.engine.ui.webadmin.widget.table.column.RoleTypeColumn; import org.ovirt.engine.ui.webadmin.widget.table.column.TextColumnWithTooltip; import com.google.gwt.core.client.GWT; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; 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; import com.google.gwt.user.cellview.client.CellTable.Resources; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Label; 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.gwt.user.client.ui.VerticalPanel; import com.google.gwt.view.client.SelectionChangeEvent; import com.google.inject.Inject; public class RoleView extends Composite { @UiField SimplePanel rolesTabContent; @UiField RadioButton allRolesRadioButton; @UiField RadioButton adminRolesRadioButton; @UiField RadioButton userRolesRadioButton; @UiField Label showLabel; private SimpleActionTable<roles> table; private SimpleActionTable<permissions> permissionTable; private SplitLayoutPanel splitLayoutPanel; private final RoleModelProvider roleModelProvider; private final RolePermissionModelProvider permissionModelProvider; @Inject public RoleView(ClientGinjector ginjector, EventBus eventBus, ApplicationResources resources, ApplicationConstants constants, RoleModelProvider roleModelProvider, RolePermissionModelProvider permissionModelProvider) { super(); this.roleModelProvider = roleModelProvider; this.permissionModelProvider = permissionModelProvider; initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); localize(constants); initRolesFilterRadioButtons(); initSplitLayoutPanel(); initRoleTable(); initPermissionTable(); } private void initSplitLayoutPanel() { splitLayoutPanel = new SplitLayoutPanel(); splitLayoutPanel.setHeight("100%"); splitLayoutPanel.setWidth("100%"); 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(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { if (event.getValue()) { roleModelProvider.getModel().setItemsFilter(null); roleModelProvider.getModel().ForceRefresh(); } } }); adminRolesRadioButton.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { if (event.getValue()) { roleModelProvider.getModel().setItemsFilter(RoleType.ADMIN); roleModelProvider.getModel().ForceRefresh(); } } }); userRolesRadioButton.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { if (event.getValue()) { roleModelProvider.getModel().setItemsFilter(RoleType.USER); roleModelProvider.getModel().ForceRefresh(); } } }); } private void localize(ApplicationConstants constants) { allRolesRadioButton.setText(constants.allRolesLabel()); adminRolesRadioButton.setText(constants.adminRolesLabel()); userRolesRadioButton.setText(constants.userRolesLabel()); showLabel.setText(constants.showRolesLabel()); } interface ViewUiBinder extends UiBinder<VerticalPanel, RoleView> { ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class); } private void initRoleTable() { this.table = new SimpleActionTable<roles>(roleModelProvider, getTableHeaderlessResources(), getTableResources()); TextColumnWithTooltip<roles> nameColumn = new TextColumnWithTooltip<roles>() { @Override public String getValue(roles object) { return object.getname(); } }; table.addColumn(new IsLockedImageTypeColumn(), "", "20px"); table.addColumn(new RoleTypeColumn(), "", "20px"); table.addColumn(nameColumn, "Name", "100px"); TextColumnWithTooltip<roles> descColumn = new TextColumnWithTooltip<roles>() { @Override public String getValue(roles object) { return object.getdescription(); } }; table.addColumn(descColumn, "Description", "300px"); table.addActionButton(new UiCommandButtonDefinition<roles>("New") { @Override protected UICommand resolveCommand() { return roleModelProvider.getModel().getNewCommand(); } }); table.addActionButton(new UiCommandButtonDefinition<roles>("Edit") { @Override protected UICommand resolveCommand() { return roleModelProvider.getModel().getEditCommand(); } }); table.addActionButton(new UiCommandButtonDefinition<roles>("Copy") { @Override protected UICommand resolveCommand() { return roleModelProvider.getModel().getCloneCommand(); } }); table.addActionButton(new UiCommandButtonDefinition<roles>("Remove") { @Override protected UICommand resolveCommand() { return roleModelProvider.getModel().getRemoveCommand(); } }); splitLayoutPanel.add(table); table.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { roleModelProvider.setSelectedItems(table.getSelectionModel().getSelectedList()); if (table.getSelectionModel().getSelectedList().size() > 0) { setSubTabVisibility(true); } else { setSubTabVisibility(false); } } }); } private void initPermissionTable() { permissionTable = new SimpleActionTable<permissions>(permissionModelProvider, getTableHeaderlessResources(), getTableResources()); TextColumnWithTooltip<permissions> userColumn = new TextColumnWithTooltip<permissions>() { @Override public String getValue(permissions object) { return object.getOwnerName(); } }; permissionTable.addColumn(userColumn, "User"); TextColumnWithTooltip<permissions> permissionColumn = new ObjectNameColumn<permissions>() { @Override protected Object[] getRawValue(permissions object) { return new Object[] { object.getObjectType(), object.getObjectName() }; } }; permissionTable.addColumn(permissionColumn, "Object"); permissionTable.addActionButton(new UiCommandButtonDefinition<permissions>("Remove") { @Override protected UICommand resolveCommand() { return permissionModelProvider.getModel().getRemoveCommand(); } }); permissionTable.getSelectionModel().addSelectionChangeHandler(new SelectionChangeEvent.Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { permissionModelProvider.setSelectedItems(permissionTable.getSelectionModel().getSelectedList()); } }); } protected Resources getTableHeaderlessResources() { return (Resources) GWT.create(MainTableHeaderlessResources.class); } protected Resources getTableResources() { return (Resources) GWT.create(MainTableResources.class); } public interface MainTableHeaderlessResources extends CellTable.Resources { interface TableStyle extends CellTable.Style { } @Override @Source({ CellTable.Style.DEFAULT_CSS, "org/ovirt/engine/ui/webadmin/css/TabCellTableHeaderless.css" }) TableStyle cellTableStyle(); } public interface MainTableResources extends CellTable.Resources { interface TableStyle extends CellTable.Style { } @Override @Source({ CellTable.Style.DEFAULT_CSS, "org/ovirt/engine/ui/webadmin/css/TabCellTable.css" }) TableStyle cellTableStyle(); } }