package org.limewire.core.api.search;
import java.util.EnumMap;
import org.limewire.core.api.Category;
/**
* All categories that can be searched.
*/
public enum SearchCategory {
ALL(null, 0),
AUDIO(Category.AUDIO, 1),
VIDEO(Category.VIDEO, 2),
IMAGE(Category.IMAGE, 3),
DOCUMENT(Category.DOCUMENT, 4),
PROGRAM(Category.PROGRAM, 5),
OTHER(Category.OTHER, 6),
TORRENT(Category.TORRENT, 7);
private static final EnumMap<Category, SearchCategory> perCategory = new EnumMap<Category, SearchCategory>(Category.class);
static {
for(SearchCategory searchCategory : values()) {
if(searchCategory.category != null) {
perCategory.put(searchCategory.category, searchCategory);
}
}
}
private final Category category;
private final int id;
private SearchCategory(Category category, int id) {
this.id = id;
this.category = category;
}
/**
* Returns the SearchCategory associated with the given Category.
* This will never return {@link SearchCategory#ALL} because Categories
* are specific to types.
*/
public static SearchCategory forCategory(Category category) {
return perCategory.get(category);
}
/**
* Returns the {@link SearchCategory} associated with the given ID, as
* returned by {@link SearchCategory#getId()}.
*
* <p>If the id does not match any members ALL is returned.
*/
public static SearchCategory forId(Integer id) {
for(SearchCategory category : values()) {
if(id.equals(category.id)) {
return category;
}
}
return ALL;
}
/**
* Returns the ID associated with this category. This ID is suitable
* for storage in properties that can be reused over multiple sessions.
* To get the {@link SearchCategory} associated with the id in later
* sessions, use {@link SearchCategory#forId(Integer)}.
*/
public int getId() {
return id;
}
/** Returns the {@link Category} most closely associated with this {@link SearchCategory}. */
public Category getCategory() {
return category;
}
}