package org.lysty.ui.model;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.DefaultTableModel;
import org.lysty.dao.Song;
import org.lysty.db.DBHandler;
import org.lysty.ui.Reorderable;
import org.lysty.ui.SongDroppable;
import org.lysty.ui.exception.SongNotIndexedException;
public class PlaylistModel extends DefaultTableModel implements Reorderable,
SongDroppable {
private List<Song> list = new ArrayList<Song>();
/**
* @return the list
*/
public List<Song> getList() {
return list;
}
/**
* @param list
* the list to set
*/
public void setList(List<Song> list) {
this.list = list;
fireTableDataChanged();
}
@Override
public int getRowCount() {
if (list != null)
return list.size();
return 0;
}
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return 1;
}
@Override
public String getColumnName(int columnIndex) {
// TODO Auto-generated method stub
return "Song";
}
@Override
public Class<?> getColumnClass(int columnIndex) {
// TODO Auto-generated method stub
return String.class;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return false;
}
public Song getSongAt(int rowIndex) {
return list.get(rowIndex);
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return list.get(rowIndex).getName();
}
@Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
list.set(rowIndex, (Song) value);
}
@Override
public void removeRow(int row) {
list.remove(row);
fireTableDataChanged();
}
@Override
public void reorder(int fromIndex, int toIndex) {
Song song = list.get(fromIndex);
list.remove(fromIndex);
list.add(toIndex, song);
fireTableDataChanged();
}
@Override
public void addSong(File file, int position) throws SongNotIndexedException {
Song song = DBHandler.getInstance().getSong(file);
if (song == null) {
song = new Song();
song.setFile(file);
}
if (position >= list.size()) {
list.add(song);
} else {
list.add(position, song);
}
fireTableDataChanged();
}
}