mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-15 09:17:42 +00:00
85 lines
2.4 KiB
Java
85 lines
2.4 KiB
Java
package org.sleuthkit.autopsy.imagegallery.datamodel;
|
|
|
|
import com.google.common.cache.CacheBuilder;
|
|
import com.google.common.cache.CacheLoader;
|
|
import com.google.common.cache.LoadingCache;
|
|
import java.util.Collections;
|
|
import java.util.Set;
|
|
import java.util.logging.Level;
|
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
|
import org.sleuthkit.datamodel.TskCoreException;
|
|
|
|
/**
|
|
* Manages a cache of hashset hits as a map from fileID to hashset names.
|
|
* Initial/invalid values are loaded from the backing DrawableDB
|
|
*/
|
|
public class HashSetManager {
|
|
|
|
/**
|
|
* The db that initial values are loaded from.
|
|
*/
|
|
private DrawableDB db = null;
|
|
|
|
/**
|
|
* the internal cache from fileID to a set of hashset names.
|
|
*/
|
|
private final LoadingCache<Long, Set<String>> hashSetCache = CacheBuilder.newBuilder().build(CacheLoader.from(this::getHashSetsForFileHelper));
|
|
|
|
/**
|
|
* assign the given db to back this hashset manager.
|
|
*
|
|
* @param db
|
|
*/
|
|
public void setDb(DrawableDB db) {
|
|
this.db = db;
|
|
hashSetCache.invalidateAll();
|
|
}
|
|
|
|
/**
|
|
* helper method to load hashset hits for the given fileID from the db
|
|
*
|
|
* @param fileID
|
|
*
|
|
* @return the names of the hashsets the given fileID is in
|
|
*/
|
|
private Set<String> getHashSetsForFileHelper(long fileID) {
|
|
try {
|
|
return db.getHashSetsForFile(fileID);
|
|
} catch (TskCoreException ex) {
|
|
Logger.getLogger(HashSetManager.class.getName()).log(Level.SEVERE, "Failed to get Hash Sets for file", ex); //NON-NLS
|
|
return Collections.emptySet();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* is the given fileID in any hashset
|
|
*
|
|
* @param fileID
|
|
*
|
|
* @return true if the file is in any hashset
|
|
*/
|
|
public boolean isInAnyHashSet(long fileID) {
|
|
return getHashSetsForFile(fileID).isEmpty() == false;
|
|
}
|
|
|
|
/**
|
|
* get the names of the hash sets the given fileId is in
|
|
*
|
|
* @param fileID
|
|
*
|
|
* @return a set containging the names of the hash sets for the given file
|
|
*/
|
|
public Set<String> getHashSetsForFile(long fileID) {
|
|
return hashSetCache.getUnchecked(fileID);
|
|
}
|
|
|
|
/**
|
|
* invalidate the cached hashset names for the given fileID
|
|
*
|
|
* @param fileID the fileID to invalidate in the cache
|
|
*/
|
|
public void invalidateHashSetsForFile(long fileID) {
|
|
hashSetCache.invalidate(fileID);
|
|
}
|
|
}
|