package org.limewire.ui.swing.search.model; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.regex.Pattern; import org.limewire.core.api.search.SearchResult; /** * For every file name found in the search the parent that matches that filename * is put into the matchCache. A single parent might have more than 1 key. As a * new search result comes in, its fileNAmes are found, the parent matching him * is taken from the cache, and then a new parent is chosen between the two. The * new parent is then put in the cache for all the relevant filenames. Because * of ordering issues when processing items, a child might end up in the cache. * But when selecting a new parent, the findParent method checks items parents * as well. This prevents the data from being wrong when setting parents on * other visual search results. */ public class SimilarResultsFileNameDetector extends AbstractNameSimilarResultsDetector { private static final String REPLACE = "\\(\\d\\)|[-_.' ()]"; public SimilarResultsFileNameDetector() { super(Pattern.compile(REPLACE)); } @Override public Set<String> getCleanIdentifyingStrings(VisualSearchResult visualSearchResult) { List<SearchResult> coreResults = visualSearchResult.getCoreSearchResults(); Set<String> cleanFileNames = new HashSet<String>(); for (SearchResult searchResult : coreResults) { String cleanFileName = nameCache.cleanString(searchResult.getFileName()); cleanFileNames.add(cleanFileName); } return cleanFileNames; } }