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(
            new SelectionChangeEvent.Handler() {
              @Override
              public void onSelectionChange(SelectionChangeEvent 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;
  }