X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2Fcache%2FAppCache.java;h=2a254ccc2dcbc7b840b51a8ac9ef978cb11df6b2;hb=4b2392caa53f1de3400e7916d1d9c7b815d446f4;hp=46f6df2c6410422d1361681bda505b61eede26cf;hpb=75415606931bbe145f471ff2e13abefc431dbd2c;p=jalview.git diff --git a/src/jalview/io/cache/AppCache.java b/src/jalview/io/cache/AppCache.java index 46f6df2..2a254cc 100644 --- a/src/jalview/io/cache/AppCache.java +++ b/src/jalview/io/cache/AppCache.java @@ -1,135 +1,160 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.io.cache; - import jalview.bin.Cache; +import jalview.bin.ApplicationSingletonProvider; +import jalview.bin.ApplicationSingletonProvider.ApplicationSingletonI; -import java.util.Arrays; import java.util.Hashtable; import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; -public class AppCache implements AppCacheI +/** + * A singleton class used for querying and persisting cache items. + * + * + * @author tcnofoegbu + * + */ +public class AppCache implements ApplicationSingletonI { - private static AppCache instance = null; - - private Hashtable> cacheItems; - private static final String CACHE_DELIMITER = ";"; + public static AppCache getInstance() + { + return (AppCache) ApplicationSingletonProvider.getInstance(AppCache.class); + } private AppCache() { - cacheItems = new Hashtable>(); + cacheItems = new Hashtable<>(); } - @Override - public LinkedHashSet getAllCachedItemsFor(Cacheable cacheable) + public static final String DEFAULT_LIMIT = "99"; + + public static final String CACHE_DELIMITER = ";"; + + private static final String DEFAULT_LIMIT_KEY = ".DEFAULT_LIMIT"; + + private Hashtable> cacheItems; + + /** + * Method to obtain all the cache items for a given cache key + * + * @param cacheKey + * @return + */ + public LinkedHashSet getAllCachedItemsFor(String cacheKey) { - String cacheKey = cacheable.getCacheKey(); LinkedHashSet foundCache = cacheItems.get(cacheKey); if (foundCache == null) { - foundCache = new LinkedHashSet(); + foundCache = new LinkedHashSet<>(); cacheItems.put(cacheKey, foundCache); } return foundCache; } - - public static AppCache getInstance() + /** + * Method for persisting cache items for a given cache key + * + * @param cacheKey + */ + public void persistCache(String cacheKey) { - if (instance == null) - { - instance = new AppCache(); - } - return instance; - } - - @Override - public void updateCache(Cacheable cacheable) - { - CacheBoxI cacheComboBox = cacheable.getCacheComboBox(); - String cacheKey = cacheable.getCacheKey(); - cacheComboBox.looseFocus(); - String userInput = cacheComboBox.getUserInput(); - - if (userInput != null && !userInput.isEmpty()) - { - LinkedHashSet foundCache = getAllCachedItemsFor(cacheable); - foundCache.add(userInput); - cacheItems.put(cacheKey, foundCache); - } - - String lastSearch = userInput; - if (cacheComboBox.getItemCount() > 0) + LinkedHashSet foundCacheItems = getAllCachedItemsFor(cacheKey); + StringBuffer delimitedCacheBuf = new StringBuffer(); + for (String cacheItem : foundCacheItems) { - cacheComboBox.removeAllItems(); + delimitedCacheBuf.append(CACHE_DELIMITER).append(cacheItem); } - - Set cacheItems = getAllCachedItemsFor(cacheable); - if (cacheItems != null && !cacheItems.isEmpty()) + if (delimitedCacheBuf.length() > 0) { - for (String cacheItem : cacheItems) - { - cacheComboBox.addItem(cacheItem); - } + delimitedCacheBuf.deleteCharAt(0); } + String delimitedCacheString = delimitedCacheBuf.toString(); - if (!lastSearch.isEmpty()) - { - cacheComboBox.setSelectedItem(lastSearch); - cacheComboBox.requestFocus(); - } - else - { - cacheable.initCache(); - cacheComboBox.addItem(""); - cacheComboBox.setSelectedItem(""); - } + Cache.setProperty(cacheKey, delimitedCacheString); } - @Override - public void initCache(Cacheable cacheable) + /** + * Method for deleting cached items for a given cache key + * + * @param cacheKey + * the cache key + */ + public void deleteCacheItems(String cacheKey) { - String separatedStr = Cache.getProperty(cacheable.getCacheKey()); - if (separatedStr == null || separatedStr.isEmpty()) - { - return; - } - - List persistedCacheItems = Arrays.asList(separatedStr.split(CACHE_DELIMITER)); - String cacheKey = cacheable.getCacheKey(); - - LinkedHashSet foundCacheItems = cacheItems.get(cacheKey); - if (foundCacheItems == null) - { - foundCacheItems = new LinkedHashSet(); - } + cacheItems.put(cacheKey, new LinkedHashSet()); + persistCache(cacheKey); + } - for (String cacheItem : persistedCacheItems) - { - foundCacheItems.add(cacheItem); - } - cacheItems.put(cacheKey, foundCacheItems); - updateCache(cacheable); + /** + * Method for obtaining the preset maximum cache limit for a given cache key + * + * @param cacheKey + * the cache key + * @return the max number of items that could be cached + */ + public String getCacheLimit(String cacheKey) + { + String uniqueKey = cacheKey + DEFAULT_LIMIT_KEY; + return Cache.getDefault(uniqueKey, DEFAULT_LIMIT); } - @Override - public void persistCache(Cacheable cacheable) + /** + * Method for updating the preset maximum cache limit for a given cache key + * + * @param cacheKey + * the cache key + * @param newLimit + * the max number of items that could be cached for the given cache + * key + * @return + */ + public int updateCacheLimit(String cacheKey, int newUserLimit) { - String cacheKey = cacheable.getCacheKey(); - LinkedHashSet foundCacheItems = getAllCachedItemsFor(cacheable); - StringBuffer delimitedCacheBuf = new StringBuffer(); - for (String cacheItem : foundCacheItems) - { - delimitedCacheBuf.append(CACHE_DELIMITER).append(cacheItem); - } - if (delimitedCacheBuf.length() > 0) + String newLimit = String.valueOf(newUserLimit); + String uniqueKey = cacheKey + DEFAULT_LIMIT_KEY; + String formerLimit = getCacheLimit(cacheKey); + if (newLimit != null && !newLimit.isEmpty() + && !formerLimit.equals(newLimit)) { - delimitedCacheBuf.deleteCharAt(0); + Cache.setProperty(uniqueKey, newLimit); + formerLimit = newLimit; } - String delimitedCacheString = delimitedCacheBuf.toString(); + return Integer.valueOf(formerLimit); + } - Cache.setProperty(cacheKey, delimitedCacheString); + /** + * Method for inserting cache items for given cache key into the cache data + * structure + * + * @param cacheKey + * the cache key + * @param cacheItems + * the items to add to the cache + */ + public void putCache(String cacheKey, LinkedHashSet newCacheItems) + { + cacheItems.put(cacheKey, newCacheItems); } + }