Package org.gwtoolbox.widget.client.table.datagrid.selection

Source Code of org.gwtoolbox.widget.client.table.datagrid.selection.MultiRecordSelectionModel

package org.gwtoolbox.widget.client.table.datagrid.selection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.gwtoolbox.widget.client.data.Record;
import org.gwtoolbox.widget.client.table.basic.BasicTable;
import org.gwtoolbox.widget.client.table.basic.selection.MultiRowSelection;
import org.gwtoolbox.widget.client.table.basic.selection.MultiRowSelectionModel;
import org.gwtoolbox.widget.client.table.datagrid.OldDataGrid;

/**
* @author Uri Boness
*/
public class MultiRecordSelectionModel implements MultiRecordSelection, RecordSelectionModel {

    private OldDataGrid dataGrid;
    private BasicTable table;

    private MultiRowSelectionModel selectionModel;

    private Collection<Listener> listeners = new ArrayList<Listener>();

    private List<Record> selectedRecords = new ArrayList<Record>();

    public void install(OldDataGrid dataGrid, BasicTable table) {
        this.dataGrid = dataGrid;
        this.table = table;

        selectionModel = new MultiRowSelectionModel();
        table.setSelectionModel(selectionModel);

        selectionModel.addListener(new MultiRowSelectionModel.Listener() {
            public void selectionCleared() {
                selectedRecords.clear();
                notifySelectionCleared();
            }

            public void rowSelected(int row, MultiRowSelection model) {
                Record record = (Record) MultiRecordSelectionModel.this.table.getUserData(row, 0);
                selectedRecords.add(record);
                notifyRecordSelected(record);
            }

            public void rowUnselected(int row, MultiRowSelection model) {
                Record record = (Record) MultiRecordSelectionModel.this.table.getUserData(row, 0);
                selectedRecords.remove(record);
                notifyRecordUnselected(record);
            }

        });
    }

    public void uninstall() {
        table.clearSelectionModel();
        listeners.clear();
        dataGrid = null;
        table = null;
        selectionModel = null;
    }

    public RecordSelection getSelection() {
        return this;
    }

    public List<Record> getSelectedRecords() {
        return selectedRecords;
    }

    public void selectRecords(Record... records) {
        int[] rows = recordsToRows(records);
        selectionModel.selectRows(rows);
    }

    public void unselectRecords(Record... records) {
        int[] rows = recordsToRows(records);
        selectionModel.unselectRows(rows);
    }

    public boolean isRecordSelected(Record record) {
        return selectedRecords.contains(record);
    }

    public void clear() {
        selectionModel.clear();
    }

    public void addListener(Listener lisetener) {
        listeners.add(lisetener);
    }

    public void removeListener(Listener listener) {
        listeners.remove(listener);
    }

    public void clearListeners() {
        listeners.clear();
    }


    //============================================== Helper Methods ====================================================

    private int[] recordsToRows(Record... records) {
        int[] rows = new int[records.length];
        int i = 0;
        for (int row = 0; row < table.getRowCount(); row++) {
            if (table.isToolRow(row)) {
                continue;
            }
            Record rowRecord = (Record) table.getUserData(row, 0);
            for (Record record : records) {
                if (record.equals(rowRecord)) {
                    rows[i++] = row;
                    break;
                }
            }
        }
        return rows;
    }

    private void notifySelectionCleared() {
        for (Listener listener : listeners) {
            listener.selectionCleared();
        }
    }

    private void notifyRecordSelected(Record record) {
        for (Listener listener : listeners) {
            listener.recordSelected(record, this);
        }
    }

    private void notifyRecordUnselected(Record record) {
        for (Listener listener : listeners) {
            listener.recordUnselected(record, this);
        }
    }

}
TOP

Related Classes of org.gwtoolbox.widget.client.table.datagrid.selection.MultiRecordSelectionModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.