/* * @(#)SelectionModelGroup.java 4/14/2008 * * Copyright 2002 - 2008 JIDE Software Inc. All rights reserved. */ package com.jidesoft.swing; import java.io.Serializable; import java.util.Collections; import java.util.List; import java.util.Vector; /** * This class is used to create a multiple-exclusion scope for a set of any selection model so that one selection model * can have selected index at a time. */ abstract public class SelectionModelGroup<T, V> implements Serializable { private static final long serialVersionUID = 2434517670879999353L; protected List<T> _models = new Vector<T>(); protected V _selectionListener; /** * Creates a new <code>SelectionModelGroup</code>. */ public SelectionModelGroup() { _selectionListener = createSelectionListener(); } abstract protected V createSelectionListener(); abstract protected void addSelectionListener(T model, V listener); abstract protected void removeSelectionListener(T model, V listener); /** * Adds the ListSelectionModel to the group. * * @param model the ListSelectionModel to be added */ public void add(T model) { if (model == null) { return; } if (!_models.contains(model)) { _models.add(model); addSelectionListener(model, _selectionListener); } } /** * Adds the ListSelectionModel to the group. * * @param model the ListSelectionModel to be added * @param index the index */ public void add(int index, T model) { if (model == null) { return; } if (!_models.contains(model)) { if (index < 0 || index > _models.size()) { _models.add(model); } else { _models.add(index, model); } addSelectionListener(model, _selectionListener); } } /** * Removes the T from the group. * * @param model the T to be removed */ public void remove(T model) { if (model == null) { return; } if (_models.remove(model)) { removeSelectionListener(model, _selectionListener); } } /** * Removes all T's from the group. */ public void removeAll() { if (_models == null) { return; } for (T model : _models) { removeSelectionListener(model, _selectionListener); } } /** * Gets the registered models. * * @return the models. */ public List<T> getElements() { return Collections.unmodifiableList(_models); } /** * Returns all the T that are participating in this group. * * @return an array of all Ts */ public List<T> getModels() { return _models; } /** * Returns the number of T in the group. * * @return the T count */ public int getModelCount() { if (_models == null) { return 0; } else { return _models.size(); } } }