/** * Get sorted list of albums associated with this item. * * @param item DOCUMENT_ME * @return a list of item, void list if no result */ public synchronized List<Album> getAssociatedAlbums(Item item) { List<Album> out; // [Perf] If item is a track, just return its album if (item instanceof Track) { out = new ArrayList<Album>(1); out.add(((Track) item).getAlbum()); } else { ReadOnlyIterator<Album> albums = getAlbumsIterator(); // Use a set to avoid dups Set<Album> albumSet = new HashSet<Album>(); while (albums.hasNext()) { Album album = albums.next(); for (Track track : album.getTracksCache()) { if (item instanceof Artist && track.getArtist().equals(item)) { albumSet.add(album); } else if (item instanceof Genre && track.getGenre().equals(item)) { albumSet.add(album); } if (item instanceof Year && track.getYear().equals(item)) { albumSet.add(album); } } } out = new ArrayList<Album>(albumSet); Collections.sort(out); } return out; }