package edu.washington.cs.oneswarm.ui.gwt.client.newui;
import java.util.HashSet;
import java.util.Set;
import edu.washington.cs.oneswarm.ui.gwt.client.OneSwarmGWT;
import edu.washington.cs.oneswarm.ui.gwt.client.i18n.OSMessages;
public enum FileTypeFilter {
All("filter_all", ImageConstants.ICON_DOCUMENT_SIDEBAR, ImageConstants.ICON_DOCUMENT_CENTER),
Videos("filter_videos", ImageConstants.ICON_VIDEO_SIDEBAR, ImageConstants.ICON_VIDEO_BROWSER,
"asf", "avi", "mov", "mp4", "flv", "mpg", "m4v", "wmv", "divx", "xvid", "mpeg", "mkv",
"ogv", "ac3", "aac"),
Audio("filter_audio", ImageConstants.ICON_AUDIO_SIDEBAR, ImageConstants.ICON_AUDIO_BROWSER,
"mp3", "aac", "wav", "aiff", "aif", "wma", "m4a", "oga", "ogg"),
Other("filter_other", ImageConstants.ICON_OTHER_SIDEBAR, ImageConstants.ICON_OTHER_BROWSER); // show
// only
// things
// which
// CANNOT
// be
// identified
public final String sidebar_icon_path;
private final String browser_icon_path;
public Set<String> mTypes;
public String history_state_name;
FileTypeFilter(String inHistoryStateName, String inIconPath, String inBrowserIconPath,
String... inTypes) {
// mTypes = inTypes;
mTypes = new HashSet<String>();
for (String type : inTypes) {
mTypes.add(type);
}
history_state_name = inHistoryStateName;
sidebar_icon_path = inIconPath;
browser_icon_path = inIconPath;
}
public String getUiLabel() {
final OSMessages msg = OneSwarmGWT.msg;
switch (this) {
case All:
return msg.navigation_allFiles();
case Videos:
return msg.navigation_videos();
case Audio:
return msg.navigation_audio();
case Other:
return msg.navigation_other();
}
return "unspecified: " + this.name();
}
public String getBrowserIconPath() {
return browser_icon_path;
}
public static boolean match(String inFilename, FileTypeFilter which) {
String ext = getExtension(inFilename);
return which.mTypes.contains(ext);
}
private static String getExtension(String inFilename) {
/**
* Get the extension
*/
StringBuffer extension = new StringBuffer(5);
for (int i = inFilename.length() - 1; i >= 0; i--) {
if (inFilename.charAt(i) == '.') {
break;
}
extension.insert(0, inFilename.charAt(i));
}
return extension.toString();
}
public static FileTypeFilter match(String inFilename) {
String ext = getExtension(inFilename);
for (FileTypeFilter candidate : values()) {
if (candidate.mTypes.contains(ext)) {
return candidate;
}
}
return Other;
}
public static FileTypeFilter getFromName(String name) {
for (FileTypeFilter f : FileTypeFilter.values()) {
if (f.name().equals(name)) {
return f;
}
}
return FileTypeFilter.All;
}
}