/*******************************************************************************
* Copyright (c) 2006-2013, Cloudsmith Inc.
* The code, documentation and other materials contained herein have been
* licensed under the Eclipse Public License - v 1.0 by the copyright holder
* listed above, as the Initial Contributor under such license. The text of
* such license is available at www.eclipse.org.
******************************************************************************/
package org.eclipse.buckminster.ui.general.editor;
import java.util.ArrayList;
import java.util.List;
/**
* Data wrapped for general table editor.
*
* @author Karel Brezina
*/
public abstract class Table<T> implements ITable<T> {
private List<T> data;
private boolean readOnly;
private List<ITableModifyListener<T>> listeners = new ArrayList<ITableModifyListener<T>>();
public Table(List<T> data) {
this(data, false);
}
/**
* Creates Table instance
*
* @param data
* input data that will be edited
*/
public Table(List<T> data, boolean readOnly) {
this.data = data;
this.readOnly = readOnly;
}
@Override
public void addTableModifyListener(ITableModifyListener<T> listener) {
if (!listeners.contains(listener)) {
listeners.add(listener);
}
}
@Override
public T getRow(int row) {
return data.get(row);
}
@Override
public List<T> getRows() {
return data;
}
@Override
public boolean isReadOnly() {
return readOnly;
}
// no need for refreshing
@Override
public void refresh() {
}
@Override
public void removeRow(int row) {
T oldTableRow = data.remove(row);
notifyListeners(TableModifyEventType.REMOVE_ROW, row, oldTableRow);
}
@Override
public void removeTableModifyListener(ITableModifyListener<T> listener) {
listeners.remove(listener);
}
protected void notifyListeners(TableModifyEventType eventType, int row, T tableRow) {
TableModifyEvent<T> e = new TableModifyEvent<T>(this, eventType, row, tableRow);
for (ITableModifyListener<T> listener : listeners)
listener.modifyTable(e);
}
}