package hirondelle.movies.edit;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import hirondelle.movies.util.Util;
import javax.swing.table.AbstractTableModel;
public final class MovieTableModel extends AbstractTableModel {
public MovieTableModel(){
fDAO = new MovieDAO();
fMovies = fDAO.list();
}
public void refreshView() {
fMovies = fDAO.list();
fireTableDataChanged();
}
public String getId(int aRow){
Movie movie = fMovies.get(aRow);
return movie.getId();
}
public Movie getMovie(int aRow){
return fMovies.get(aRow);
}
public void sortByColumn(int aIdx){
fNumClicks++;
if( aIdx == 1 ) {
Collections.sort(fMovies);
}
else {
Comparator<Movie> comparator = null;
if ( aIdx == 0 ){
comparator = Movie.TITLE_SORT;
}
else if ( aIdx == 2 ){
comparator = Movie.RATING_SORT;
}
else if ( aIdx == 3 ){
comparator = Movie.COMMENT_SORT;
}
Collections.sort(fMovies, comparator);
}
if( (fNumClicks % 2) == 0){
Collections.reverse(fMovies);
}
fireTableDataChanged();
}
@Override public int getColumnCount() {
return 4;
}
@Override public int getRowCount() {
return fMovies.size();
}
@Override public Object getValueAt(int aRow, int aCol) {
Object result = null;
Movie movie = fMovies.get(aRow);
if(aCol == 0) {
result = movie.getTitle();
}
else if(aCol == 1) {
result = Util.format(movie.getDateViewed());
}
else if(aCol == 2) {
result = movie.getRating();
}
else if(aCol == 3) {
result = movie.getComment();
}
return result;
}
@Override public String getColumnName(int aIdx){
String result = "";
if( aIdx == 0) {
result = "Title";
}
else if( aIdx == 1) {
result = "Viewed";
}
else if( aIdx == 2) {
result = "Rating";
}
else if( aIdx == 3) {
result = "Comment";
}
return result;
}
private MovieDAO fDAO;
private List<Movie> fMovies;
private int fNumClicks = 0;
}