/*
 * 12/22/2008
 *
 * CompletionListModel.java - A model that allows bulk addition of elements.
 * 
 * This library is distributed under a modified BSD license.  See the included
 * RSyntaxTextArea.License.txt file for details.
 */
package com.fr.design.gui.autocomplete;

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

import javax.swing.AbstractListModel;


/**
 * A list model implementation that allows the bulk addition of elements.
 * This is the only feature missing from <code>DefaultListModel</code> that
 * we need.
 *
 * @author Robert Futrell
 * @version 1.0
 */
class CompletionListModel extends AbstractListModel {

	/**
	 * Container for items in this model.
	 */
	private List<Completion> delegate;


	/**
	 * Constructor.
	 */
	public CompletionListModel() {
		delegate = new ArrayList<Completion>();
	}


	/**
	 * Removes all of the elements from this list.  The list will
	 * be empty after this call returns (unless it throws an exception).
	 *
	 * @see #setContents(Collection)
	 */
	public void clear() {
		int end = delegate.size()-1;
		delegate.clear();
		if (end >= 0) {
			fireIntervalRemoved(this, 0, end);
		}
	}


	/**
	 * {@inheritDoc}
	 */
	public Object getElementAt(int index) {
		return delegate.get(index);
	}


	/**
	 * {@inheritDoc}
	 */
	public int getSize() {
		return delegate.size();
	}


	/**
	 * Sets the contents of this model.  All previous contents are removed.
	 *
	 * @param contents The new contents of this model.
	 */
	public void setContents(Collection<Completion> contents) {
		clear();
		int count = contents.size();
		if (count>0) {
			delegate.addAll(contents);
			fireIntervalAdded(this, 0, count-1); // endpoints included (!)
		}
	}


}