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

com.vaadin.ui.components.grid.AbstractSelectionModel 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 com.vaadin.shared.data.DataCommunicatorConstants;
import com.vaadin.shared.ui.grid.AbstractSelectionModelState;
import com.vaadin.ui.AbstractListing;
import com.vaadin.ui.Grid;
import com.vaadin.ui.Grid.AbstractGridExtension;

import elemental.json.JsonObject;

/**
 * Abstract selection model for grid.
 *
 * @author Vaadin Ltd
 *
 * @since 8.0
 *
 * @param 
 *            the type of the items in grid.
 */
public abstract class AbstractSelectionModel extends AbstractGridExtension
        implements GridSelectionModel {

    @Override
    public void generateData(T item, JsonObject jsonObject) {
        if (isSelected(item)) {
            // Pre-emptive update in case used a stale element in selection.
            refreshData(item);

            jsonObject.put(DataCommunicatorConstants.SELECTED, true);
        }
    }

    @Override
    public void destroyAllData() {
        deselectAll();
    }

    @Override
    protected AbstractSelectionModelState getState() {
        return (AbstractSelectionModelState) super.getState();
    }

    @Override
    protected AbstractSelectionModelState getState(boolean markAsDirty) {
        return (AbstractSelectionModelState) super.getState(markAsDirty);
    }

    /**
     * Returns the grid this selection model is attached to using, or throws
     * {@link IllegalStateException} if not attached to any selection model.
     *
     * @return the grid this selection model is attached to
     * @throws IllegalStateException
     *             if this selection mode is not attached to any grid
     */
    protected Grid getGrid() throws IllegalStateException {
        Grid parent = getParent();
        if (parent == null) {
            throw new IllegalStateException(
                    "This selection model is no currently attached to any grid.");
        }
        return parent;
    }

    @Override
    public void extend(AbstractListing grid) {
        if (getParent() != null) {
            throw new IllegalStateException(
                    "This selection model has been bound to a grid already. Please remove the existing binding with model.remove() first.");
        }
        // type is verified in parent
        super.extend(grid);

        init();
    }

    /**
     * Initializes the selection model after it has been attached to a grid.
     */
    protected abstract void init();

    @Override
    public void remove() {
        deselectAll();

        super.remove();
    }

    @Override
    public boolean isUserSelectionAllowed() {
        return getState(false).selectionAllowed;
    }

    @Override
    public void setUserSelectionAllowed(boolean allowed) {
        getState().selectionAllowed = allowed;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy