package com.quiltplayer.controller;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import com.quiltplayer.core.storage.ArtistStorage;
import com.quiltplayer.core.storage.Storage;
import com.quiltplayer.model.Album;
import com.quiltplayer.model.Artist;
import com.quiltplayer.view.swing.frame.QuiltPlayerFrame;
import com.quiltplayer.view.swing.listeners.SelectionListener;
import com.quiltplayer.view.swing.panels.controlpanels.AlfabeticControlPane;
import com.quiltplayer.view.swing.views.impl.QuiltView;
@Controller
public class SelectionController implements SelectionListener {
public static final String ALBUMS = "albums";
public static final String ARTIST = "artist";
@Autowired
private QuiltPlayerFrame frame;
@Autowired
private QuiltView quiltView;
@Autowired
private ArtistStorage artistStorage;
@Autowired
private Storage storage;
/*
* (non-Javadoc)
*
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
@Override
public void actionPerformed(ActionEvent e) {
// TODO This can be solved better ;)
String type = ((List<String>) e.getSource()).get(0);
String s = e.getActionCommand();
final Collection<Artist> artists = artistStorage.getArtists();
List<Album> newList = new ArrayList<Album>();
if (type == ALBUMS) {
List<Album> albums = storage.getAlbums(artists);
if (s.equalsIgnoreCase(AlfabeticControlPane.ALL))
newList = albums;
else if (s.equalsIgnoreCase(AlfabeticControlPane.NUMERIC))
for (Album album : albums) {
if (album.getTitle().substring(0, 1).matches("[0-9]")) {
newList.add(album);
}
}
else {
for (Album album : albums) {
if (album.getTitle().toLowerCase().startsWith(s.toLowerCase())) {
newList.add(album);
}
}
}
Collections.sort(newList);
}
else if (type == ARTIST) {
List<Artist> newArtistList = new ArrayList<Artist>();
if (s.equalsIgnoreCase(AlfabeticControlPane.ALL))
newList = storage.getAlbums(artists);
else if (s.equalsIgnoreCase(AlfabeticControlPane.NUMERIC)) {
for (Artist artist : artists) {
if (artist.getArtistName().getName().substring(0, 1).matches("[0-9]")) {
newArtistList.add(artist);
}
}
newList = storage.getAlbums(newArtistList);
}
else {
for (Artist artist : artists) {
if (artist.getArtistName().getName().toLowerCase().startsWith(s.toLowerCase())) {
newArtistList.add(artist);
}
}
newList = storage.getAlbums(newArtistList);
}
Collections.sort(newList, new Comparator<Album>() {
/*
* (non-Javadoc)
*
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
@Override
public int compare(Album o1, Album o2) {
return o1.getArtist().getArtistName().getName().compareToIgnoreCase(
o2.getArtist().getArtistName().getName());
}
});
}
quiltView.setList(newList);
frame.updateUI();
}
}