/* This file is part of Libresonic. Libresonic is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Libresonic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Libresonic. If not, see <http://www.gnu.org/licenses/>. Copyright 2016 (C) Libresonic Authors Based upon Subsonic, Copyright 2009 (C) Sindre Mehus */ package org.libresonic.player.domain; import java.util.Date; import java.util.List; /** * Defines criteria used when generating random playlists. * * @author Sindre Mehus * @see org.libresonic.player.service.SearchService#getRandomSongs */ public class RandomSearchCriteria { private final int count; private final String genre; private final Integer fromYear; private final Integer toYear; private final List<MusicFolder> musicFolders; private final Date minLastPlayedDate; private final Date maxLastPlayedDate; private final Integer minAlbumRating; private final Integer maxAlbumRating; private final Integer minPlayCount; private final Integer maxPlayCount; private final boolean showStarredSongs; private final boolean showUnstarredSongs; private final String format; /** * Creates a new instance. * * @param count Maximum number of songs to return. * @param genre Only return songs of the given genre. May be <code>null</code>. * @param fromYear Only return songs released after (or in) this year. May be <code>null</code>. * @param toYear Only return songs released before (or in) this year. May be <code>null</code>. * @param musicFolders Only return songs from these music folder. May NOT be <code>null</code>. */ public RandomSearchCriteria(int count, String genre, Integer fromYear, Integer toYear, List<MusicFolder> musicFolders) { this( count, genre, fromYear, toYear, musicFolders, null, null, null, null, null, null, true, true, null ); } /** * Creates a new instance. * * @param count Maximum number of songs to return. * @param genre Only return songs of the given genre. May be <code>null</code>. * @param fromYear Only return songs released after (or in) this year. May be <code>null</code>. * @param toYear Only return songs released before (or in) this year. May be <code>null</code>. * @param musicFolders Only return songs from these music folder. May NOT be <code>null</code>. * @param minLastPlayedDate Only return songs last played after this date. May be <code>null</code>. * @param maxLastPlayedDate Only return songs last played before this date. May be <code>null</code>. * @param minAlbumRating Only return songs rated more or equalt to this value. May be <code>null</code>. * @param maxAlbumRating Only return songs rated less or equal to this value. May be <code>null</code>. * @param minPlayCount Only return songs whose play count is more or equal to this value. May be <code>null</code>. * @param maxPlayCount Only return songs whose play count is less or equal to this value. May be <code>null</code>. * @param showStarredSongs Show starred songs. May NOT be <code>null</code>. * @param showUnstarredSongs Show unstarred songs. May NOT be <code>null</code>. * @param format Only return songs whose file format is equal to this value. May be <code>null</code>. */ public RandomSearchCriteria( int count, String genre, Integer fromYear, Integer toYear, List<MusicFolder> musicFolders, Date minLastPlayedDate, Date maxLastPlayedDate, Integer minAlbumRating, Integer maxAlbumRating, Integer minPlayCount, Integer maxPlayCount, boolean showStarredSongs, boolean showUnstarredSongs, String format ) { this.count = count; this.genre = genre; this.fromYear = fromYear; this.toYear = toYear; this.musicFolders = musicFolders; this.minLastPlayedDate = minLastPlayedDate; this.maxLastPlayedDate = maxLastPlayedDate; this.minAlbumRating = minAlbumRating; this.maxAlbumRating = maxAlbumRating; this.minPlayCount = minPlayCount; this.maxPlayCount = maxPlayCount; this.showStarredSongs = showStarredSongs; this.showUnstarredSongs = showUnstarredSongs; this.format = format; } public int getCount() { return count; } public String getGenre() { return genre; } public Integer getFromYear() { return fromYear; } public Integer getToYear() { return toYear; } public List<MusicFolder> getMusicFolders() { return musicFolders; } public Date getMinLastPlayedDate() { return minLastPlayedDate; } public Date getMaxLastPlayedDate() { return maxLastPlayedDate; } public Integer getMinAlbumRating() { return minAlbumRating; } public Integer getMaxAlbumRating() { return maxAlbumRating; } public boolean isShowStarredSongs() { return showStarredSongs; } public boolean isShowUnstarredSongs() { return showUnstarredSongs; } public String getFormat() { return format; } public Integer getMinPlayCount() { return minPlayCount; } public Integer getMaxPlayCount() { return maxPlayCount; } }