package com.limegroup.gnutella.gui.search; import com.limegroup.gnutella.gui.tables.IconAndNameHolder; /** * Filters TableLines based on certain properties. */ class PropertyFilter implements TableLineFilter { private final TableLineFilter FILTER; /** * Constructs a new PropertyFilter for the given property/value. * * If the property is unknown, IllegalArgumentException is thrown. */ PropertyFilter(String property, Object value) { if(property == null) throw new NullPointerException("null property"); if(value == null) throw new NullPointerException("null value"); // Set the actual internal filter depending on the type // of property. if(MetadataModel.TYPE.equals(property)) FILTER = new ExtensionFilter(value); else if (MetadataModel.SPEED.equals(property)) FILTER = new SpeedFilter(value); else if (MetadataModel.VENDOR.equals(property)) FILTER = new VendorFilter(value); else throw new IllegalArgumentException("bad property: " + property); } public boolean allow(TableLine line) { return FILTER.allow(line); } public boolean equals(Object o) { if(!(o instanceof PropertyFilter)) return false; return FILTER.equals(((PropertyFilter)o).FILTER); } /** * A filter for extensions. */ private static class ExtensionFilter implements TableLineFilter { private final String TYPE; /** * Constructs a new ExtensionFilter. */ ExtensionFilter(Object value) { TYPE = ((IconAndNameHolder)value).getName(); } public boolean allow(TableLine line) { return TYPE.equalsIgnoreCase(line.getExtension()); } public boolean equals(Object o) { if(!(o instanceof ExtensionFilter)) return false; else return TYPE.equals(((ExtensionFilter)o).TYPE); } } /** * A filter for speeds. */ private static class SpeedFilter implements TableLineFilter { private final ResultSpeed SPEED; /** * Constructs a new SpeedFilter. */ SpeedFilter(Object value) { SPEED = (ResultSpeed)value; } public boolean allow(TableLine line) { return SPEED.isSameSpeed(line.getSpeed()); } public boolean equals(Object o) { if(!(o instanceof SpeedFilter)) return false; else return SPEED.isSameSpeed(((SpeedFilter)o).SPEED); } } /** * A filter for vendor. */ private static class VendorFilter implements TableLineFilter { private final String VENDOR; /** * Constructs a new VendorFilter. */ VendorFilter(Object value) { VENDOR = (String)value; } public boolean allow(TableLine line) { return VENDOR.equals(line.getVendor()); } public boolean equals(Object o) { if(!(o instanceof VendorFilter)) return false; else return VENDOR.equals(((VendorFilter)o).VENDOR); } } }