1 25 package org.archive.crawler.settings; 26 27 28 38 public class SettingsCache { 39 40 private final SoftSettingsHash settingsCache = new SoftSettingsHash(16); 41 42 43 private final SoftSettingsHash hostToSettings = new SoftSettingsHash(4000); 44 45 private final CrawlerSettings globalSettings; 46 47 49 public SettingsCache(CrawlerSettings globalSettings) { 50 this.globalSettings = globalSettings; 51 } 52 53 58 public CrawlerSettings getSettings(String host, String refinement) { 59 String key = computeKey(host, refinement); 60 return (key == "")? this.globalSettings: hostToSettings.get(key); 61 } 62 63 68 public CrawlerSettings getSettingsObject(String scope, String refinement) { 69 String key = computeKey(scope, refinement); 70 return (key == "")? this.globalSettings: settingsCache.get(key); 71 } 72 73 78 public synchronized void putSettings(String host, CrawlerSettings settings) { 79 String refinement = settings.isRefinement() ? settings.getName() : null; 80 String key = computeKey(host, refinement); 81 hostToSettings.put(key, settings); 82 key = computeKey(settings.getScope(), refinement); 83 settingsCache.put(key, settings); 84 } 85 86 90 public synchronized void deleteSettingsObject(CrawlerSettings settings) { 91 String refinement = settings.isRefinement() ? settings.getName() : null; 92 settingsCache.remove(computeKey(settings.getScope(), refinement)); 93 94 for (SoftSettingsHash.EntryIterator it = hostToSettings.iterator(); it.hasNext();) { 97 if (it.nextEntry().getValue().equals(settings)) { 98 it.remove(); 99 } 100 } 101 } 102 103 108 public synchronized void refreshHostToSettings() { 109 hostToSettings.clear(); 110 SoftSettingsHash.EntryIterator it = settingsCache.iterator(); 111 while (it.hasNext()) { 112 SoftSettingsHash.SettingsEntry entry = it.nextEntry(); 113 hostToSettings.put(entry); 114 } 115 } 116 117 120 public void clear() { 121 hostToSettings.clear(); 122 settingsCache.clear(); 123 } 124 125 public CrawlerSettings getGlobalSettings() { 126 return globalSettings; 127 } 128 129 private String computeKey(String host, String refinement) { 130 host = host == null ? "" : host; 131 return (refinement == null) || refinement.equals("") ? host : host 132 + '#' + refinement; 133 } 134 } 135 | Popular Tags |