/*
* WPCleaner: A tool to help on Wikipedia maintenance tasks.
* Copyright (C) 2013 Nicolas Vervelle
*
* See README.txt file for licensing information.
*/
package org.wikipediacleaner.gui.swing;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import org.wikipediacleaner.api.data.AutomaticFixing;
import org.wikipediacleaner.i18n.GT;
/**
* A table model to manage Automatic fixing expressions.
*/
class AutomaticFixingTableModel extends AbstractTableModel {
/**
* Serialization.
*/
private static final long serialVersionUID = -6615379596445669242L;
/**
* List of automatic fixing expressions.
*/
private List<AutomaticFixing> data;
public final static int COLUMN_FROM = 0;
public final static int COLUMN_TO = COLUMN_FROM + 1;
public final static int COLUMN_REGEX = COLUMN_TO + 1;
public final static int NB_COLUMNS = COLUMN_REGEX + 1;
/**
* @param data List of automatic fixing expressions.
*/
public AutomaticFixingTableModel(List<AutomaticFixing> data) {
this.data = data;
}
/**
* @param rowIndex Row index.
* @return Automatic fixing at the designated row.
*/
public AutomaticFixing getAutomaticFixing(int rowIndex) {
if ((data == null) || (rowIndex < 0) || (rowIndex >= data.size())) {
return null;
}
return data.get(rowIndex);
}
/**
* Set the list of automatic fixing expressions.
*
* @param data List of automatic fixing expressions.
*/
public void setData(List<AutomaticFixing> data) {
if (data == null) {
this.data = null;
} else {
this.data = new ArrayList<AutomaticFixing>(data);
}
sortAutomaticFixing();
fireTableDataChanged();
}
/**
* @return List of automatic fixing expressions.
*/
public List<AutomaticFixing> getData() {
if (data == null) {
return null;
}
return Collections.unmodifiableList(data);
}
/**
* Add an automatic fixing expression.
*
* @param element Automatic fixing expression.
*/
public void addAutomaticFixing(AutomaticFixing element) {
if (element == null) {
return;
}
if (data == null) {
data = new ArrayList<AutomaticFixing>();
}
data.add(element);
sortAutomaticFixing();
fireTableDataChanged();
}
/**
* Remove an automatic fixing expression.
*
* @param element Automatic fixing expression.
*/
public void removeAutomaticFixing(AutomaticFixing element) {
if (data == null) {
return;
}
data.remove(element);
sortAutomaticFixing();
fireTableDataChanged();
}
/**
* Sort automatic fixing expressions.
*/
private void sortAutomaticFixing() {
if (data == null) {
return;
}
Collections.sort(data);
}
/**
* @return Number of rows in the table.
* @see javax.swing.table.TableModel#getRowCount()
*/
@Override
public int getRowCount() {
if (data != null) {
return data.size();
}
return 0;
}
/**
* @return Number of columns in the table.
* @see javax.swing.table.TableModel#getColumnCount()
*/
@Override
public int getColumnCount() {
return NB_COLUMNS;
}
/**
* @param rowIndex Row index.
* @param columnIndex Column index.
* @return Value in the designated cell.
* @see javax.swing.table.TableModel#getValueAt(int, int)
*/
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if ((data == null) ||
(rowIndex < 0) || (rowIndex >= getRowCount()) ||
(columnIndex < 0) || (columnIndex >= getColumnCount())) {
return null;
}
AutomaticFixing fixing = data.get(rowIndex);
if (fixing == null) {
return null;
}
switch (columnIndex) {
case COLUMN_FROM:
return fixing.getOriginalText();
case COLUMN_TO:
return fixing.getReplacementText();
case COLUMN_REGEX:
return fixing.getRegex();
}
return null;
}
/**
* @param column Column index.
* @return Name of the column.
* @see javax.swing.table.AbstractTableModel#getColumnName(int)
*/
@Override
public String getColumnName(int column) {
switch (column) {
case COLUMN_FROM:
return GT._("Original text");
case COLUMN_TO:
return GT._("Replacement text");
case COLUMN_REGEX:
return GT._("regex");
}
return super.getColumnName(column);
}
/**
* @param columnIndex Column index.
* @return Type of data in the column.
* @see javax.swing.table.AbstractTableModel#getColumnClass(int)
*/
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case COLUMN_FROM:
return String.class;
case COLUMN_TO:
return String.class;
case COLUMN_REGEX:
return Boolean.class;
}
return super.getColumnClass(columnIndex);
}
}