/* (non-Javadoc) * @see com.limegroup.gnutella.gui.search.SearchResult#match(com.limegroup.gnutella.gui.search.AbstractSearchResult, org.limewire.collection.ApproximateMatcher) */ public final int match(SearchResult sr, final ApproximateMatcher matcher) { if (!(sr instanceof AbstractSearchResult)) return 3; AbstractSearchResult o = (AbstractSearchResult) sr; // Same file type? if (!getExtension().equals(o.getExtension())) return 1; long thisSize = getSize(); long thatSize = o.getSize(); // Sizes same? if (thisSize != thatSize) return 2; // Preprocess the processed fileNames getProcessedFilename(matcher); o.getProcessedFilename(matcher); // Filenames close? This is the most expensive test, so it should go // last. Allow 5% edit difference in filenames or 4 characters, // whichever is smaller. int allowedDifferences = Math.round( Math.min( 0.10f * (getFilenameNoExtension().length()), 0.10f * (o.getFilenameNoExtension().length()))); allowedDifferences = Math.min(allowedDifferences, 4); if (!matcher.matches( getProcessedFilename(matcher), o.getProcessedFilename(matcher), allowedDifferences)) return 3; return 0; }
/** Gets the processed filename. */ private String getProcessedFilename(ApproximateMatcher matcher) { if (processedFilename != null) return processedFilename; processedFilename = matcher.process(getFilenameNoExtension()); return processedFilename; }