/******************************************************************************* * Copyright (c) 2012 Original authors and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Original authors and others - initial API and implementation ******************************************************************************/ package org.eclipse.nebula.widgets.nattable.group.model; import java.util.List; import org.eclipse.nebula.widgets.nattable.data.IRowDataProvider; import org.eclipse.nebula.widgets.nattable.group.RowGroupExpandCollapseLayer; import org.eclipse.nebula.widgets.nattable.persistence.IPersistable; /** * The model behind the {@link RowGroupExpandCollapseLayer} contains * {@link IRowGroup}s which in turn contain lists of row objects of type T. */ public interface IRowGroupModel<T> extends IPersistable { /** * <p> * Adds a group into the model. * </p> * <p> * A notification should be sent to any {@link IRowGroupModelListener}s to * indicate a change in the model has occurred. * </p> * * @param rowGroup * The {@link IRowGroup} to be added. * @return false if the group wasn't added. */ boolean addRowGroup(final IRowGroup<T> rowGroup); /** * <p> * Adds multiple row groups into the model and only fires off a single * change notification. * </p> * * @param rowGroups * A list of {@link IRowGroup}s to add. */ void addRowGroups(final List<IRowGroup<T>> rowGroups); /** * <p> * Removes the group from the model. * </p> * <p> * A notification should be sent to any {@link IRowGroupModelListener}s to * indicate a change in the model has occurred. * </p> * * @param rowGroup * The {@link IRowGroup} to remove. * @return true if the group was present and removed, false if the group was * not present. */ boolean removeRowGroup(final IRowGroup<T> rowGroup); /** * @return an unmodifiable {@link List} of {@link IRowGroup} in the model. */ List<IRowGroup<T>> getRowGroups(); /** * Returns an the {@link IRowGroup} with the specified group name. * * @param groupName * The unique name assigned to an {@link IRowGroup}. * @return An {@link IRowGroup} or null if there is no group with the * specified name. */ IRowGroup<T> getRowGroupForName(final String groupName); /** * Returns the first {@link IRowGroup} found containing the specified row. * * @param row * The row object. * @return An {@link IRowGroup} or null if there is no group with the * specified row. */ IRowGroup<T> getRowGroupForRow(final T row); /** * @return true if there are no {@link IRowGroup}s in the model. Note: if * there are groups but there are no rows, then true is still * returned. */ boolean isEmpty(); /** * <p> * Wipes all groups from the model. * </p> * <p> * A notification should be sent to any {@link IRowGroupModelListener}s to * indicate a change in the model has occurred. * </p> */ void clear(); /** * <p> * Notify any {@link IRowGroupModelListener}s that something in the model * has changed. * </p> */ void notifyListeners(); /** * Registers a listener to the model to receive notification of any changes. * * @param listener * an {@link IRowGroupModelListener}. */ void registerRowGroupModelListener(final IRowGroupModelListener listener); /** * Unregisters the listener from the model. * * @param listener * an {@link IRowGroupModelListener}. */ void unregisterRowGroupModelListener(final IRowGroupModelListener listener); /** * Retrieves a row T by it's index from our cache. It will be added to the * cache if not present. */ T getRowFromIndexCache(final int rowIndex); /** * Retrieves a row's index by from our cache. It will be added to the cache * if not present. */ int getIndexFromRowCache(final T row); /** * Required for the index-to-row cache to populate itseld. */ void setDataProvider(IRowDataProvider<T> dataProvider); /** * @return an {@link IRowDataProvider} used for the index-to-row cache. */ IRowDataProvider<T> getDataProvider(); void invalidateIndexCache(); }