package org.limewire.ui.swing.search.model; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.regex.Pattern; public abstract class AbstractNameSimilarResultsDetector extends AbstractSimilarResultsDetector { protected final CleanStringCache nameCache; protected final Map<String, VisualSearchResult> matchCache; public AbstractNameSimilarResultsDetector(Pattern pattern) { this.nameCache = new CleanStringCache(pattern, ""); this.matchCache = new HashMap<String, VisualSearchResult>(); } @Override public void detectSimilarResult(VisualSearchResult visualSearchResult) { if (!visualSearchResult.isSpam() && !(visualSearchResult.getDownloadState() == BasicDownloadState.LIBRARY) && !visualSearchResult.isPreExistingDownload()) { Set<String> names = getCleanIdentifyingStrings(visualSearchResult); VisualSearchResult parent = null; for (String name : names) { parent = matchCache.get(name); if (parent == null) { matchCache.put(name, visualSearchResult); } else if (parent != visualSearchResult) { parent = update(parent, visualSearchResult); matchCache.put(name, parent); } } } } @Override public void removeSpamItem(VisualSearchResult visualSearchResult, VisualSearchResult newParent) { Set<String> names = getCleanIdentifyingStrings(visualSearchResult); for (String name : names) { VisualSearchResult master = matchCache.get(name); if (master == visualSearchResult) { matchCache.put(name, newParent); } } } public void clear(){ matchCache.clear(); } public CleanStringCache getNameCache() { return nameCache; } public abstract Set<String> getCleanIdentifyingStrings(VisualSearchResult visualSearchResult); }