All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vaadin.ui.components.grid.GridMultiSelect Maven / Gradle / Ivy

There is a newer version: 8.27.3
Show newest version
/*
 * Copyright (C) 2000-2024 Vaadin Ltd
 *
 * This program is available under Vaadin Commercial License and Service Terms.
 *
 * See  for the full
 * license.
 */
package com.vaadin.ui.components.grid;

import java.util.Optional;
import java.util.Set;

import com.vaadin.event.selection.MultiSelectionListener;
import com.vaadin.event.selection.SelectionListener;
import com.vaadin.shared.Registration;
import com.vaadin.ui.Grid;
import com.vaadin.ui.MultiSelect;
import com.vaadin.ui.components.grid.MultiSelectionModel.SelectAllCheckBoxVisibility;

/**
 * Wrapper class to wrap Grid into a MultiSelect. This class also provides
 * useful access to API of MultiSelectionModel.
 *
 * @param 
 *            the bean type of grid
 * @since 8.6.0
 */
public class GridMultiSelect implements MultiSelect {

    private MultiSelectionModel model;
    private Grid grid;

    /**
     * Constructs a MultiSelect wrapper for given Grid.
     *
     * @param grid
     *            the grid to wrap
     */
    public GridMultiSelect(Grid grid) {
        GridSelectionModel selectionModel = grid.getSelectionModel();
        if (!(selectionModel instanceof MultiSelectionModel)) {
            throw new IllegalStateException(
                    "Grid is not in multiselect mode, it needs to be explicitly set to such with setSelectionModel(MultiSelectionModel) before being able to use multiselection features.");
        }
        this.grid = grid;
        model = (MultiSelectionModel) selectionModel;
    }

    /* API for MultiSelectionModelImpl */

    /**
     * Get first selected data item.
     *
     * @return the first selected item.
     */
    public Optional getFirstSelectedItem() {
        return model.getFirstSelectedItem();
    }

    /**
     * Selects all available the items.
     */
    public void selectAll() {
        model.selectAll();
    }

    /**
     * Selects the given item. Depending on the implementation, may cause other
     * items to be deselected. If the item is already selected, does nothing.
     *
     * @param item
     *            the item to select, not null
     */
    public void deselect(T item) {
        model.deselect(item);
    }

    /**
     * Selects the given item. If another item was already selected, that item
     * is deselected.
     *
     * @param item
     *            the item to select
     */
    public void select(T item) {
        model.select(item);
    }

    /**
     * Deselects all currently selected items, if any.
     */
    @Override
    public void deselectAll() {
        model.deselectAll();
    }

    /**
     * Adds the given items to the set of currently selected items.
     * 

* By default this does not clear any previous selection. To do that, use * {@link #deselectAll()}. *

* If the all the items were already selected, this is a NO-OP. *

* This is a short-hand for {@link #updateSelection(Set, Set)} with nothing * to deselect. * * @param items * to add to selection, not {@code null} */ public void selectItems(T... items) { model.selectItems(items); } /** * Removes the given items from the set of currently selected items. *

* If the none of the items were selected, this is a NO-OP. *

* This is a short-hand for {@link #updateSelection(Set, Set)} with nothing * to select. * * @param items * to remove from selection, not {@code null} */ public void deselectItems(T... items) { model.deselectItems(items); } /** * Sets the select all checkbox visibility mode. *

* The default value is {@link SelectAllCheckBoxVisibility#DEFAULT}, which * means that the checkbox is only visible if the grid's data provider is * in- memory. * * @param visibility * the visiblity mode to use * @see SelectAllCheckBoxVisibility */ public void setSelectAllCheckBoxVisibility( SelectAllCheckBoxVisibility visibility) { model.setSelectAllCheckBoxVisibility(visibility); } /** * Gets the current mode for the select all checkbox visibility. * * @return the select all checkbox visibility mode * @see SelectAllCheckBoxVisibility * @see #isSelectAllCheckBoxVisible() */ public SelectAllCheckBoxVisibility getSelectAllCheckBoxVisibility() { return model.getSelectAllCheckBoxVisibility(); } /** * Returns whether the select all checkbox will be visible with the current * setting of * {@link #setSelectAllCheckBoxVisibility(SelectAllCheckBoxVisibility)}. * * @return {@code true} if the checkbox will be visible with the current * settings * @see SelectAllCheckBoxVisibility * @see #setSelectAllCheckBoxVisibility(SelectAllCheckBoxVisibility) */ public boolean isSelectAllCheckBoxVisible() { return model.isSelectAllCheckBoxVisible(); } /** * Sets whether the user is allowed to change the selection. *

* The check is done only for the client side actions. It doesn't affect * selection requests sent from the server side. * * @param allowed * true if the user is allowed to change the * selection, false otherwise */ public void setUserSelectionAllowed(boolean allowed) { model.setUserSelectionAllowed(allowed); } /** * Returns whether all items are selected or not. *

* This is only {@code true} if user has selected all rows with the select * all checkbox on client side, or if {@link #selectAll()} has been used * from server side. * * @return {@code true} if all selected, {@code false} if not * @since 8.12.0 */ public boolean isAllSelected() { return model.isAllSelected(); } /** * Checks if the user is allowed to change the selection. *

* The check is done only for the client side actions. It doesn't affect * selection requests sent from the server side. * * @return true if the user is allowed to change the selection, * false otherwise */ public boolean isUserSelectionAllowed() { return model.isUserSelectionAllowed(); } /** * Adds a generic listener to this selection model, accepting both single * and multiselection events. * * @param listener * the listener to add * @return a registration handle for removing the listener */ public Registration addSelectionListener(SelectionListener listener) { return model.addSelectionListener(listener); } /** * Adds a selection listener that will be called when the selection is * changed either by the user or programmatically. * * @param listener * the value change listener, not {@code null} * @return a registration for the listener */ public Registration addMultiSelectionListener( MultiSelectionListener listener) { return model.addMultiSelectionListener(listener); } /* MultiSelect implementation */ @Override public void setValue(Set value) { model.asMultiSelect().setValue(value); } @Override public Set getValue() { return model.asMultiSelect().getValue(); } @Override public Registration addValueChangeListener( ValueChangeListener> listener) { return model.asMultiSelect().addValueChangeListener(listener); } @Override public void setRequiredIndicatorVisible(boolean requiredIndicatorVisible) { model.asMultiSelect() .setRequiredIndicatorVisible(requiredIndicatorVisible); } @Override public boolean isRequiredIndicatorVisible() { return model.asMultiSelect().isRequiredIndicatorVisible(); } @Override public void setReadOnly(boolean readOnly) { model.asMultiSelect().setReadOnly(readOnly); if (grid.isReadOnly() != readOnly) { grid.setReadOnly(readOnly); } } @Override public boolean isReadOnly() { return model.asMultiSelect().isReadOnly(); } @Override public void updateSelection(Set addedItems, Set removedItems) { model.asMultiSelect().updateSelection(addedItems, removedItems); } @Override public Set getSelectedItems() { return model.asMultiSelect().getSelectedItems(); } @Override public Registration addSelectionListener( MultiSelectionListener listener) { return model.asMultiSelect().addSelectionListener(listener); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy