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.I18n; import ca.odell.glazedlists.matchers.Matcher; /** * Range filter format for bit rate. */ class BitRateFilterFormat<E extends FilterableItem> implements RangeFilterFormat<E> { /** Array of bit rate options. */ private static final long[] RATES = { 0, 64, 96, 128, 160, 192, 256, 320, 512 }; @Override public String getHeaderText() { return I18n.tr("Bitrate"); } @Override public Matcher<E> getMatcher(long minValue, long maxValue) { return new BitRateMatcher<E>(minValue); } @Override public String getValueText(int valueIndex) { return String.valueOf(RATES[valueIndex]); } @Override public long[] getValues() { return RATES; } @Override public boolean isMaximumAbsolute() { return false; } @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 bit rate. */ private static class BitRateMatcher<E extends FilterableItem> implements Matcher<E> { private final long bitRate; /** * Constructs a BitRateMatcher for the specified bit rate. */ public BitRateMatcher(long bitRate) { this.bitRate = bitRate; } /** * Returns true if the specified item matches or exceeds the bit rate. */ @Override public boolean matches(E item) { if (bitRate == 0) return true; Object rate = item.getProperty(FilePropertyKey.BITRATE); if (rate instanceof Long) { return (((Long) rate).longValue() >= bitRate); } else { return false; } } } }