package net.bitpot.railways.models;
import org.jetbrains.annotations.Nullable;
import javax.swing.table.AbstractTableModel;
/**
* Table models.
*/
public class RouteTableModel extends AbstractTableModel {
public final static int COL_PATH = 0;
public final static int COL_ACTION = 1;
public final static int COL_NAME = 2;
private RouteList myRouteList;
private RouteList filteredRoutes;
private RoutesFilter filter;
public RouteTableModel() {
myRouteList = new RouteList();
filteredRoutes = new RouteList();
filter = new RoutesFilter(this);
filterChanged();
}
public void setRoutes(@Nullable RouteList routes) {
if (routes == null)
routes = new RouteList();
this.myRouteList = routes;
filterChanged();
}
@Override
public String getColumnName(int column) {
switch (column) {
case COL_PATH:
return "Path";
case COL_ACTION:
return "Action";
case COL_NAME:
return "Name";
default:
return super.getColumnName(column);
}
}
@Override
public int getRowCount() {
return filteredRoutes.size();
}
@Override
public int getColumnCount() {
return 3;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Route route = filteredRoutes.get(rowIndex);
switch (columnIndex) {
case COL_PATH:
return route;
case COL_ACTION:
return route;
case COL_NAME:
return route.getRouteName();
}
return "";
}
@Override
public Class<?> getColumnClass(int columnIndex) {
if ((columnIndex == COL_PATH) || (columnIndex == COL_ACTION))
return Route.class;
return super.getColumnClass(columnIndex);
}
public RoutesFilter getFilter() {
return filter;
}
public void filterChanged() {
// Here we should update model.
filter.applyFilter(myRouteList, filteredRoutes);
this.fireTableDataChanged();
}
/**
* Returns route object associated with specified row.
*
* @param rowIndex Row index in model.
*/
public Route getRoute(int rowIndex) {
return filteredRoutes.get(rowIndex);
}
/**
* Returns total number of routes that was successfully parsed.
*
* @return Number of parsed routes.
*/
public int getTotalRoutesCount() {
return myRouteList.size();
}
}