blob: dfe11dc70d7cca08ef683cadcfb3a44555740f40 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2020 Original authors and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.group.model;
import java.util.List;
/**
* Represents a collapseable group of rows (of type T) in the
* {@link IRowGroupModel}.
*
* @author Stefan Bolton
*
* @param <T>
* the type of the row objects.
*/
public interface IRowGroup<T> {
/**
* @return A Unique name for the group - it must not conflict with any other
* group's name.
*/
String getGroupName();
/**
* If this group is a nested child of another this will return the parent
* group.
*
* @return The parent group if this group is a nested child.
*/
IRowGroup<T> getParentGroup();
/**
* Set the specified group as the parent of this group.
*
* @param parentGroup
*/
void setParentGroup(final IRowGroup<T> parentGroup);
/**
* @return Whether the group has been expanded or collapsed. A collapsed
* group will hide all members of the group apart from any 'static'
* rows.
*/
boolean isCollapsed();
/**
* @return Whether the group can be expanded or collapsed or, false if it
* should be locked in it's current state.
*/
boolean isCollapseable();
/**
* <p>
* Updates the group's state to indicate it is collapsed.
* </p>
* <p>
* A notification should be sent to any {@link IRowGroupModelListener}s to
* indicate a change in the model has occurred.
* </p>
*/
void collapse();
/**
* <p>
* Updates the group's state to indicate it is expanded.
* </p>
* <p>
* A notification should be sent to any {@link IRowGroupModelListener}s to
* indicate a change in the model has occurred.
* </p>
*/
void expand();
/**
* <p>
* Adds the row into the group.
* </p>
*
* @param row
* the row to be added
*/
void addMemberRow(final T row);
/**
* <p>
* Adds multiple rows into the group.
* </p>
*
* @param rows
* A {@link List} of rows T to be added.
*/
void addMemberRows(final List<T> rows);
/**
* <p>
* Adds a static row into the group. A static row is one that is always
* shown when the group is collapsed (summary data rows for example).
* </p>
*
* @param row
* the static row T to be added.
*/
void addStaticMemberRow(final T row);
/**
* <p>
* Removes the row from the group whether it's static or non-static.
* </p>
* <p>
* Existing positions in the model may be bumped up if the row was not the
* last row in 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 row
* The row T to be removed.
* @return true if the row existed and was removed.
*/
boolean removeMemberRow(final T row);
/**
* <p>
* Removes multiple rows from the group whether they are static or
* non-static.
* </p>
* <p>
* Existing positions in the model may be bumped up if the row was not the
* last row in 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 rows
* A {@link List} of rows T to be added.
*/
void removeMemberRows(final List<T> rows);
/**
* @param includeStaticRows
* true to include the static rows false to exclude them.
* @return an unmodifiable {@link List} of the rows (T) in the
* {@link IRowGroup}.
*/
List<T> getMemberRows(final boolean includeStaticRows);
/**
* @return an unmodifiable {@link List} of the static rows (T) in the
* {@link IRowGroup}.
*/
List<T> getStaticMemberRows();
/**
* Removes all member and static member rows from the group.
*/
void clear();
/**
* @return <code>true</code> if there are no rows (normal or static) in the
* group.
*/
boolean isEmpty();
/**
* Adds a row-group into the group. Calls to getMemberRows and
* getStaticMemberRows will recurse through nested groups and return a
* flattened list of rows in all contained groups.
*
* @param rowGroup
* a IHierarchicalRowGroup.
*/
void addRowGroup(final IRowGroup<T> rowGroup);
/**
* Returns the row-group child of this group.
*
* @param rowGroup
* a IHierarchicalRowGroup.
* @return true if the group existed as a child and was removed.
*/
boolean removeRowGroup(final IRowGroup<T> rowGroup);
/**
* @return an unmodifiable {@link List} of the groups which are direct
* children of this group.
*/
List<IRowGroup<T>> getRowGroups();
/**
* Returns only the rows contained with this group. Not nested groups.
*
* @return a list of rows T.
*/
List<T> getOwnMemberRows(final boolean includeStaticRows);
/**
* @return Static rows only in this group not in nested groups.
*/
List<T> getOwnStaticMemberRows();
/**
* Retrieves the sub-group for a given row member.
*/
IRowGroup<T> getRowGroupForRow(final T row);
/**
* Allows some arbitrary data to be tagged to an IRowGroup.
*
* @param data
*/
void setData(final Object data);
/**
* Allows some arbitrary data to be tagged to an IRowGroup.
*
* @param data
*/
void setData(final String key, final Object data);
/**
* Allows some arbitrary data to be retrieved from an IRowGroup.
*/
Object getData();
/**
* Allows some arbitrary data to be retrieved from an IRowGroup.
*/
Object getData(String key);
}