package org.ovirt.engine.ui.webadmin.section.main.view.popup.macpool; import java.util.List; import org.ovirt.engine.core.common.businessentities.MacPool; 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.AbstractImageResourceColumn; import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumn; import org.ovirt.engine.ui.common.widget.uicommon.permissions.PermissionListModelTable; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel; import org.ovirt.engine.ui.uicommonweb.models.macpool.SharedMacPoolListModel; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.PermissionModelProvider; import org.ovirt.engine.ui.webadmin.uicommon.model.SharedMacPoolModelProvider; import org.ovirt.engine.ui.webadmin.widget.action.WebAdminButtonDefinition; import com.google.gwt.event.shared.EventBus; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.SplitLayoutPanel; import com.google.inject.Inject; public class SharedMacPoolView extends Composite { private final PermissionModelProvider<MacPool, SharedMacPoolListModel> permissionModelProvider; private final SharedMacPoolModelProvider sharedMacPoolModelProvider; private final SimpleActionTable<MacPool> macPoolTable; private final PermissionListModelTable<PermissionListModel<MacPool>> authorizationTable; private final EventBus eventBus; private final ClientStorage clientStorage; private final MainTableHeaderlessResources headerlessResources; private final MainTableResources tableResources; private final SplitLayoutPanel rootPanel; private static final ApplicationResources resources = AssetProvider.getResources(); private static final ApplicationConstants constants = AssetProvider.getConstants(); @Inject public SharedMacPoolView(final SharedMacPoolModelProvider sharedMacPoolModelProvider, final PermissionModelProvider<MacPool, SharedMacPoolListModel> permissionModelProvider, final EventBus eventBus, final ClientStorage clientStorage, final MainTableHeaderlessResources headerlessResources, final MainTableResources tableResources) { this.sharedMacPoolModelProvider = sharedMacPoolModelProvider; this.permissionModelProvider = permissionModelProvider; this.eventBus = eventBus; this.clientStorage = clientStorage; this.headerlessResources = headerlessResources; this.tableResources = tableResources; macPoolTable = createMacPoolTable(); authorizationTable = new PermissionListModelTable<>(permissionModelProvider, eventBus, clientStorage); authorizationTable.initTable(); authorizationTable.getTable().getSelectionModel().addSelectionChangeHandler(event -> permissionModelProvider.setSelectedItems(authorizationTable.getTable().getSelectedItems())); rootPanel = createRootPanel(); setupAuthorizationTableVisibility(false); initWidget(rootPanel); } private void setupAuthorizationTableVisibility(boolean visible) { rootPanel.clear(); if (visible) { rootPanel.addSouth(authorizationTable, 150); } rootPanel.add(macPoolTable); } private SplitLayoutPanel createRootPanel() { SplitLayoutPanel rootPanel = new SplitLayoutPanel(); rootPanel.setHeight("470px"); //$NON-NLS-1$ rootPanel.setWidth("100%"); //$NON-NLS-1$ return rootPanel; } private SimpleActionTable<MacPool> createMacPoolTable() { final SimpleActionTable<MacPool> macPoolTable = new SimpleActionTable<>(sharedMacPoolModelProvider, headerlessResources, tableResources, eventBus, clientStorage); macPoolTable.addColumn(new AbstractImageResourceColumn<MacPool>() { @Override public ImageResource getValue(MacPool macPool) { return macPool.isDefaultPool() ? resources.lockImage() : null; } }, constants.empty(), "20px"); //$NON-NLS-1$ macPoolTable.addColumn(new AbstractTextColumn<MacPool>() { @Override public String getValue(MacPool macPool) { return macPool.getName(); } }, constants.configureMacPoolNameColumn(), "100px"); //$NON-NLS-1$ macPoolTable.addColumn(new AbstractTextColumn<MacPool>() { @Override public String getValue(MacPool macPool) { return macPool.getDescription(); } }, constants.configureMacPoolDescriptionColumn(), "300px"); //$NON-NLS-1$ macPoolTable.addActionButton(new WebAdminButtonDefinition<MacPool>(constants.configureMacPoolAddButton()) { @Override protected UICommand resolveCommand() { return sharedMacPoolModelProvider.getModel().getNewCommand(); } }); macPoolTable.addActionButton(new WebAdminButtonDefinition<MacPool>(constants.configureMacPoolEditButton()) { @Override protected UICommand resolveCommand() { return sharedMacPoolModelProvider.getModel().getEditCommand(); } }); macPoolTable.addActionButton(new WebAdminButtonDefinition<MacPool>(constants.configureMacPoolRemoveButton()) { @Override protected UICommand resolveCommand() { return sharedMacPoolModelProvider.getModel().getRemoveCommand(); } }); macPoolTable.getSelectionModel().addSelectionChangeHandler(event -> { final List<MacPool> selectedItems = macPoolTable.getSelectedItems(); sharedMacPoolModelProvider.setSelectedItems(selectedItems); final PermissionListModel<MacPool> model = permissionModelProvider.getModel(); if (selectedItems.size() == 1) { model.setEntity(selectedItems.get(0)); setupAuthorizationTableVisibility(true); } else { model.setEntity(null); setupAuthorizationTableVisibility(false); } }); return macPoolTable; } }