package org.limewire.ui.swing.filter;
import org.limewire.core.api.FilePropertyKey;
import org.limewire.core.api.search.SearchCategory;
import org.limewire.ui.swing.util.GuiUtils;
import org.limewire.ui.swing.util.I18n;
import ca.odell.glazedlists.matchers.Matcher;
/**
* Range filter format for quality.
*/
class QualityFilterFormat<E extends FilterableItem> implements RangeFilterFormat<E> {
/** Array of quality options. */
private static final long[] QUALITIES = {
0, // spam
1, // poor
2, // good
3 // excellent
};
@Override
public String getHeaderText() {
return I18n.tr("Quality");
}
@Override
public Matcher<E> getMatcher(long minValue, long maxValue) {
return new QualityMatcher<E>(minValue);
}
@Override
public String getValueText(int valueIndex) {
return GuiUtils.toQualityStringShort(QUALITIES[valueIndex]);
}
@Override
public long[] getValues() {
return QUALITIES;
}
@Override
public boolean isMaximumAbsolute() {
return true;
}
@Override
public boolean isUpperLimitEnabled() {
return false;
}
@Override
public boolean updateValues(SearchCategory filterCategory, long lowerValue, long upperValue) {
return false;
}
/**
* A matcher used to filter an item by quality.
*/
private static class QualityMatcher<E extends FilterableItem> implements Matcher<E> {
private final long quality;
/**
* Constructs a QualityMatcher for the specified quality.
*/
public QualityMatcher(long quality) {
this.quality = quality;
}
/**
* Returns true if the specified item matches or exceeds the quality.
*/
@Override
public boolean matches(E item) {
if (quality == 0) return true;
if (item.isSpam()) return false;
Object value = item.getProperty(FilePropertyKey.QUALITY);
if (value instanceof Long) {
return (((Long) value).longValue() >= quality);
} else {
return false;
}
}
}
}