mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-06 21:00:22 +00:00
Merge pull request #7258 from wschaeferB/7917-OColumnChanges
7917 o column changes
This commit is contained in:
commit
cb9a4c01c8
@ -67,7 +67,7 @@ public final class AddEditCentralRepoCommentAction extends AbstractAction {
|
|||||||
addToDatabase = true;
|
addToDatabase = true;
|
||||||
final List<CorrelationAttributeInstance> md5CorrelationAttr = CorrelationAttributeUtil.makeCorrAttrsForSearch(file);
|
final List<CorrelationAttributeInstance> md5CorrelationAttr = CorrelationAttributeUtil.makeCorrAttrsForSearch(file);
|
||||||
if (!md5CorrelationAttr.isEmpty()) {
|
if (!md5CorrelationAttr.isEmpty()) {
|
||||||
//for an abstract file the 'list' of attributes will be a single attribute or empty and is returning a list for consistancy with other makeCorrAttrsForSearch methods per 7852
|
//for an abstract file the 'list' of attributes will be a single attribute or empty and is returning a list for consistency with other makeCorrAttrsForSearch methods per 7852
|
||||||
correlationAttributeInstance = md5CorrelationAttr.get(0);
|
correlationAttributeInstance = md5CorrelationAttr.get(0);
|
||||||
} else {
|
} else {
|
||||||
correlationAttributeInstance = null;
|
correlationAttributeInstance = null;
|
||||||
|
@ -67,7 +67,7 @@ public interface CentralRepository {
|
|||||||
* are no in-use connections when you call this method.
|
* are no in-use connections when you call this method.
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException if there is a problem closing the connection
|
* @throws CentralRepoException if there is a problem closing the connection
|
||||||
* pool.
|
* pool.
|
||||||
*/
|
*/
|
||||||
void shutdownConnections() throws CentralRepoException;
|
void shutdownConnections() throws CentralRepoException;
|
||||||
|
|
||||||
@ -104,20 +104,20 @@ public interface CentralRepository {
|
|||||||
/**
|
/**
|
||||||
* Add a new name/value pair in the db_info table.
|
* Add a new name/value pair in the db_info table.
|
||||||
*
|
*
|
||||||
* @param name Key to set
|
* @param name Key to set
|
||||||
* @param value Value to set
|
* @param value Value to set
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
public void newDbInfo(String name, String value) throws CentralRepoException;
|
void newDbInfo(String name, String value) throws CentralRepoException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the data source object id for a specific entry in the data_sources
|
* Set the data source object id for a specific entry in the data_sources
|
||||||
* table
|
* table
|
||||||
*
|
*
|
||||||
* @param rowId - the row id for the data_sources table entry
|
* @param rowId - the row id for the data_sources table entry
|
||||||
* @param dataSourceObjectId - the object id for the data source from the
|
* @param dataSourceObjectId - the object id for the data source from the
|
||||||
* caseDb
|
* caseDb
|
||||||
*/
|
*/
|
||||||
void addDataSourceObjectId(int rowId, long dataSourceObjectId) throws CentralRepoException;
|
void addDataSourceObjectId(int rowId, long dataSourceObjectId) throws CentralRepoException;
|
||||||
|
|
||||||
@ -130,17 +130,17 @@ public interface CentralRepository {
|
|||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
public String getDbInfo(String name) throws CentralRepoException;
|
String getDbInfo(String name) throws CentralRepoException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the value for a name in the name/value db_info table.
|
* Update the value for a name in the name/value db_info table.
|
||||||
*
|
*
|
||||||
* @param name Name to find
|
* @param name Name to find
|
||||||
* @param value Value to assign to name.
|
* @param value Value to assign to name.
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
public void updateDbInfo(String name, String value) throws CentralRepoException;
|
void updateDbInfo(String name, String value) throws CentralRepoException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates new Case in the database
|
* Creates new Case in the database
|
||||||
@ -170,9 +170,11 @@ public interface CentralRepository {
|
|||||||
* user is not found in the examiner table.
|
* user is not found in the examiner table.
|
||||||
*
|
*
|
||||||
* @param examinerLoginName user name to look for.
|
* @param examinerLoginName user name to look for.
|
||||||
|
*
|
||||||
* @return CentralRepoExaminer for the given user name.
|
* @return CentralRepoExaminer for the given user name.
|
||||||
|
*
|
||||||
* @throws CentralRepoException If there is an error in looking up or
|
* @throws CentralRepoException If there is an error in looking up or
|
||||||
* inserting the user in the examiners table.
|
* inserting the user in the examiners table.
|
||||||
*/
|
*/
|
||||||
CentralRepoExaminer getOrInsertExaminer(String examinerLoginName) throws CentralRepoException;
|
CentralRepoExaminer getOrInsertExaminer(String examinerLoginName) throws CentralRepoException;
|
||||||
|
|
||||||
@ -218,7 +220,7 @@ public interface CentralRepository {
|
|||||||
* @param eamDataSource the data source to add
|
* @param eamDataSource the data source to add
|
||||||
*
|
*
|
||||||
* @return - A CorrelationDataSource object with data source's central
|
* @return - A CorrelationDataSource object with data source's central
|
||||||
* repository id
|
* repository id
|
||||||
*/
|
*/
|
||||||
CorrelationDataSource newDataSource(CorrelationDataSource eamDataSource) throws CentralRepoException;
|
CorrelationDataSource newDataSource(CorrelationDataSource eamDataSource) throws CentralRepoException;
|
||||||
|
|
||||||
@ -247,8 +249,8 @@ public interface CentralRepository {
|
|||||||
/**
|
/**
|
||||||
* Retrieves Data Source details based on data source device ID
|
* Retrieves Data Source details based on data source device ID
|
||||||
*
|
*
|
||||||
* @param correlationCase the current CorrelationCase used for ensuring
|
* @param correlationCase the current CorrelationCase used for ensuring
|
||||||
* uniqueness of DataSource
|
* uniqueness of DataSource
|
||||||
* @param caseDbDataSourceId the data source device ID number
|
* @param caseDbDataSourceId the data source device ID number
|
||||||
*
|
*
|
||||||
* @return The data source
|
* @return The data source
|
||||||
@ -259,8 +261,8 @@ public interface CentralRepository {
|
|||||||
* Retrieves Data Source details based on data source ID
|
* Retrieves Data Source details based on data source ID
|
||||||
*
|
*
|
||||||
* @param correlationCase the current CorrelationCase used for ensuring
|
* @param correlationCase the current CorrelationCase used for ensuring
|
||||||
* uniqueness of DataSource
|
* uniqueness of DataSource
|
||||||
* @param dataSourceId the data source ID number
|
* @param dataSourceId the data source ID number
|
||||||
*
|
*
|
||||||
* @return The data source
|
* @return The data source
|
||||||
*/
|
*/
|
||||||
@ -277,7 +279,7 @@ public interface CentralRepository {
|
|||||||
* Changes the name of a data source in the DB
|
* Changes the name of a data source in the DB
|
||||||
*
|
*
|
||||||
* @param eamDataSource The data source
|
* @param eamDataSource The data source
|
||||||
* @param newName The new name
|
* @param newName The new name
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
@ -295,12 +297,12 @@ public interface CentralRepository {
|
|||||||
* Retrieves eamArtifact instances from the database that are associated
|
* Retrieves eamArtifact instances from the database that are associated
|
||||||
* with the eamArtifactType and eamArtifactValues of the given eamArtifact.
|
* with the eamArtifactType and eamArtifactValues of the given eamArtifact.
|
||||||
*
|
*
|
||||||
* @param aType EamArtifact.Type to search for
|
* @param aType EamArtifact.Type to search for
|
||||||
* @param values The list of correlation values to get
|
* @param values The list of correlation values to get
|
||||||
* CorrelationAttributeInstances for
|
* CorrelationAttributeInstances for
|
||||||
*
|
*
|
||||||
* @return List of artifact instances for a given type with the specified
|
* @return List of artifact instances for a given type with the specified
|
||||||
* values
|
* values
|
||||||
*
|
*
|
||||||
* @throws CorrelationAttributeNormalizationException
|
* @throws CorrelationAttributeNormalizationException
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
@ -326,14 +328,14 @@ public interface CentralRepository {
|
|||||||
* with the eamArtifactType and eamArtifactValues of the given eamArtifact
|
* with the eamArtifactType and eamArtifactValues of the given eamArtifact
|
||||||
* for the specified cases.
|
* for the specified cases.
|
||||||
*
|
*
|
||||||
* @param aType The type of the artifact
|
* @param aType The type of the artifact
|
||||||
* @param values The list of correlation values to get
|
* @param values The list of correlation values to get
|
||||||
* CorrelationAttributeInstances for
|
* CorrelationAttributeInstances for
|
||||||
* @param caseIds The list of central repository case ids to get
|
* @param caseIds The list of central repository case ids to get
|
||||||
* CorrelationAttributeInstances for
|
* CorrelationAttributeInstances for
|
||||||
*
|
*
|
||||||
* @return List of artifact instances for a given type with the specified
|
* @return List of artifact instances for a given type with the specified
|
||||||
* values for the specified cases
|
* values for the specified cases
|
||||||
*
|
*
|
||||||
* @throws CorrelationAttributeNormalizationException
|
* @throws CorrelationAttributeNormalizationException
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
@ -348,7 +350,7 @@ public interface CentralRepository {
|
|||||||
* @param value Value to search for
|
* @param value Value to search for
|
||||||
*
|
*
|
||||||
* @return Number of artifact instances having ArtifactType and
|
* @return Number of artifact instances having ArtifactType and
|
||||||
* ArtifactValue.
|
* ArtifactValue.
|
||||||
*/
|
*/
|
||||||
Long getCountArtifactInstancesByTypeValue(CorrelationAttributeInstance.Type aType, String value) throws CentralRepoException, CorrelationAttributeNormalizationException;
|
Long getCountArtifactInstancesByTypeValue(CorrelationAttributeInstance.Type aType, String value) throws CentralRepoException, CorrelationAttributeNormalizationException;
|
||||||
|
|
||||||
@ -373,6 +375,22 @@ public interface CentralRepository {
|
|||||||
*/
|
*/
|
||||||
Long getCountUniqueCaseDataSourceTuplesHavingTypeValue(CorrelationAttributeInstance.Type aType, String value) throws CentralRepoException, CorrelationAttributeNormalizationException;
|
Long getCountUniqueCaseDataSourceTuplesHavingTypeValue(CorrelationAttributeInstance.Type aType, String value) throws CentralRepoException, CorrelationAttributeNormalizationException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the count of cases that have an instance of a given correlation
|
||||||
|
* attribute.
|
||||||
|
*
|
||||||
|
* This count will ignore the specified instance of the correlation
|
||||||
|
* attribute and any other instances of this correlation attribute existing
|
||||||
|
* on the same object.
|
||||||
|
*
|
||||||
|
* @param instance The instance having its cases with other occurrences
|
||||||
|
* counted.
|
||||||
|
*
|
||||||
|
* @return Number of cases with additional instances of this
|
||||||
|
* CorrelationAttributeInstance.
|
||||||
|
*/
|
||||||
|
Long getCountCasesWithOtherInstances(CorrelationAttributeInstance instance) throws CentralRepoException, CorrelationAttributeNormalizationException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves number of data sources in the database.
|
* Retrieves number of data sources in the database.
|
||||||
*
|
*
|
||||||
@ -387,7 +405,7 @@ public interface CentralRepository {
|
|||||||
* @param correlationDataSource Data source to search for
|
* @param correlationDataSource Data source to search for
|
||||||
*
|
*
|
||||||
* @return Number of artifact instances having caseDisplayName and
|
* @return Number of artifact instances having caseDisplayName and
|
||||||
* dataSource
|
* dataSource
|
||||||
*/
|
*/
|
||||||
Long getCountArtifactInstancesByCaseDataSource(CorrelationDataSource correlationDataSource) throws CentralRepoException;
|
Long getCountArtifactInstancesByCaseDataSource(CorrelationDataSource correlationDataSource) throws CentralRepoException;
|
||||||
|
|
||||||
@ -416,7 +434,7 @@ public interface CentralRepository {
|
|||||||
* in the associated CorrelationAttribute object.
|
* in the associated CorrelationAttribute object.
|
||||||
*
|
*
|
||||||
* @param eamArtifact The correlation attribute whose database instance will
|
* @param eamArtifact The correlation attribute whose database instance will
|
||||||
* be updated.
|
* be updated.
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
@ -429,11 +447,11 @@ public interface CentralRepository {
|
|||||||
* Method exists to support instances added using Central Repository version
|
* Method exists to support instances added using Central Repository version
|
||||||
* 1,1 and older
|
* 1,1 and older
|
||||||
*
|
*
|
||||||
* @param type The type of instance.
|
* @param type The type of instance.
|
||||||
* @param correlationCase The case tied to the instance.
|
* @param correlationCase The case tied to the instance.
|
||||||
* @param correlationDataSource The data source tied to the instance.
|
* @param correlationDataSource The data source tied to the instance.
|
||||||
* @param value The value tied to the instance.
|
* @param value The value tied to the instance.
|
||||||
* @param filePath The file path tied to the instance.
|
* @param filePath The file path tied to the instance.
|
||||||
*
|
*
|
||||||
* @return The correlation attribute if it exists; otherwise null.
|
* @return The correlation attribute if it exists; otherwise null.
|
||||||
*
|
*
|
||||||
@ -446,10 +464,11 @@ public interface CentralRepository {
|
|||||||
* Find a correlation attribute in the Central Repository database given the
|
* Find a correlation attribute in the Central Repository database given the
|
||||||
* instance type, case, data source, object id.
|
* instance type, case, data source, object id.
|
||||||
*
|
*
|
||||||
* @param type The type of instance.
|
* @param type The type of instance.
|
||||||
* @param correlationCase The case tied to the instance.
|
* @param correlationCase The case tied to the instance.
|
||||||
* @param correlationDataSource The data source tied to the instance.
|
* @param correlationDataSource The data source tied to the instance.
|
||||||
* @param objectID The object id of the file tied to the instance.
|
* @param objectID The object id of the file tied to the
|
||||||
|
* instance.
|
||||||
*
|
*
|
||||||
* @return The correlation attribute if it exists; otherwise null.
|
* @return The correlation attribute if it exists; otherwise null.
|
||||||
*
|
*
|
||||||
@ -485,7 +504,7 @@ public interface CentralRepository {
|
|||||||
* @param value Value to search for
|
* @param value Value to search for
|
||||||
*
|
*
|
||||||
* @return List of cases containing this artifact with instances marked as
|
* @return List of cases containing this artifact with instances marked as
|
||||||
* bad
|
* bad
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
@ -499,7 +518,7 @@ public interface CentralRepository {
|
|||||||
* @param value Value to search for
|
* @param value Value to search for
|
||||||
*
|
*
|
||||||
* @return List of cases containing this artifact with instances marked as
|
* @return List of cases containing this artifact with instances marked as
|
||||||
* bad
|
* bad
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
@ -512,7 +531,7 @@ public interface CentralRepository {
|
|||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
public void deleteReferenceSet(int referenceSetID) throws CentralRepoException;
|
void deleteReferenceSet(int referenceSetID) throws CentralRepoException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether a reference set with the given parameters exists in the
|
* Check whether a reference set with the given parameters exists in the
|
||||||
@ -527,7 +546,7 @@ public interface CentralRepository {
|
|||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
public boolean referenceSetIsValid(int referenceSetID, String referenceSetName, String version) throws CentralRepoException;
|
boolean referenceSetIsValid(int referenceSetID, String referenceSetName, String version) throws CentralRepoException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether a reference set with the given name/version is in the
|
* Check whether a reference set with the given name/version is in the
|
||||||
@ -541,7 +560,7 @@ public interface CentralRepository {
|
|||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
public boolean referenceSetExists(String referenceSetName, String version) throws CentralRepoException;
|
boolean referenceSetExists(String referenceSetName, String version) throws CentralRepoException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the given file hash is in this reference set. Only searches the
|
* Check if the given file hash is in this reference set. Only searches the
|
||||||
@ -554,15 +573,15 @@ public interface CentralRepository {
|
|||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
public boolean isFileHashInReferenceSet(String hash, int referenceSetID) throws CentralRepoException, CorrelationAttributeNormalizationException;
|
boolean isFileHashInReferenceSet(String hash, int referenceSetID) throws CentralRepoException, CorrelationAttributeNormalizationException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the given file HashHitInfo if the given file hash is in this
|
* Retrieves the given file HashHitInfo if the given file hash is in this
|
||||||
* reference set. Only searches the reference_files table.
|
* reference set. Only searches the reference_files table.
|
||||||
*
|
*
|
||||||
* @param hash The hash to find in a search.
|
* @param hash The hash to find in a search.
|
||||||
* @param referenceSetID The referenceSetID within which the file should
|
* @param referenceSetID The referenceSetID within which the file should
|
||||||
* exist.
|
* exist.
|
||||||
*
|
*
|
||||||
* @return The HashHitInfo if found or null if not found.
|
* @return The HashHitInfo if found or null if not found.
|
||||||
*
|
*
|
||||||
@ -580,7 +599,7 @@ public interface CentralRepository {
|
|||||||
*
|
*
|
||||||
* @return true if the hash is found in the reference set
|
* @return true if the hash is found in the reference set
|
||||||
*/
|
*/
|
||||||
public boolean isValueInReferenceSet(String value, int referenceSetID, int correlationTypeID) throws CentralRepoException, CorrelationAttributeNormalizationException;
|
boolean isValueInReferenceSet(String value, int referenceSetID, int correlationTypeID) throws CentralRepoException, CorrelationAttributeNormalizationException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is the artifact known as bad according to the reference entries?
|
* Is the artifact known as bad according to the reference entries?
|
||||||
@ -638,7 +657,7 @@ public interface CentralRepository {
|
|||||||
* Update an existing organization.
|
* Update an existing organization.
|
||||||
*
|
*
|
||||||
* @param updatedOrganization the values the Organization with the same ID
|
* @param updatedOrganization the values the Organization with the same ID
|
||||||
* will be updated to in the database.
|
* will be updated to in the database.
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
@ -690,7 +709,8 @@ public interface CentralRepository {
|
|||||||
* Add a new reference instance
|
* Add a new reference instance
|
||||||
*
|
*
|
||||||
* @param eamGlobalFileInstance The reference instance to add
|
* @param eamGlobalFileInstance The reference instance to add
|
||||||
* @param correlationType Correlation Type that this Reference Instance is
|
* @param correlationType Correlation Type that this Reference
|
||||||
|
* Instance is
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
@ -700,8 +720,8 @@ public interface CentralRepository {
|
|||||||
* Insert the bulk collection of Global File Instances
|
* Insert the bulk collection of Global File Instances
|
||||||
*
|
*
|
||||||
* @param globalInstances a Set of EamGlobalFileInstances to insert into the
|
* @param globalInstances a Set of EamGlobalFileInstances to insert into the
|
||||||
* db.
|
* db.
|
||||||
* @param contentType the Type of the global instances
|
* @param contentType the Type of the global instances
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
@ -710,7 +730,7 @@ public interface CentralRepository {
|
|||||||
/**
|
/**
|
||||||
* Get all reference entries having a given correlation type and value
|
* Get all reference entries having a given correlation type and value
|
||||||
*
|
*
|
||||||
* @param aType Type to use for matching
|
* @param aType Type to use for matching
|
||||||
* @param aValue Value to use for matching
|
* @param aValue Value to use for matching
|
||||||
*
|
*
|
||||||
* @return List of all global file instances with a type and value
|
* @return List of all global file instances with a type and value
|
||||||
@ -735,7 +755,7 @@ public interface CentralRepository {
|
|||||||
* used to correlate artifacts.
|
* used to correlate artifacts.
|
||||||
*
|
*
|
||||||
* @return List of EamArtifact.Type's. If none are defined in the database,
|
* @return List of EamArtifact.Type's. If none are defined in the database,
|
||||||
* the default list will be returned.
|
* the default list will be returned.
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
@ -746,7 +766,7 @@ public interface CentralRepository {
|
|||||||
* artifacts.
|
* artifacts.
|
||||||
*
|
*
|
||||||
* @return List of enabled EamArtifact.Type's. If none are defined in the
|
* @return List of enabled EamArtifact.Type's. If none are defined in the
|
||||||
* database, the default list will be returned.
|
* database, the default list will be returned.
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
@ -757,7 +777,7 @@ public interface CentralRepository {
|
|||||||
* correlate artifacts.
|
* correlate artifacts.
|
||||||
*
|
*
|
||||||
* @return List of supported EamArtifact.Type's. If none are defined in the
|
* @return List of supported EamArtifact.Type's. If none are defined in the
|
||||||
* database, the default list will be returned.
|
* database, the default list will be returned.
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
@ -788,7 +808,7 @@ public interface CentralRepository {
|
|||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
public void upgradeSchema() throws CentralRepoException, SQLException, IncompatibleCentralRepoException;
|
void upgradeSchema() throws CentralRepoException, SQLException, IncompatibleCentralRepoException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets an exclusive lock (if applicable). Will return the lock if
|
* Gets an exclusive lock (if applicable). Will return the lock if
|
||||||
@ -799,14 +819,14 @@ public interface CentralRepository {
|
|||||||
* @return the lock, or null if locking is not supported
|
* @return the lock, or null if locking is not supported
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException if the coordination service is running but
|
* @throws CentralRepoException if the coordination service is running but
|
||||||
* we fail to get the lock
|
* we fail to get the lock
|
||||||
*/
|
*/
|
||||||
public CoordinationService.Lock getExclusiveMultiUserDbLock() throws CentralRepoException;
|
CoordinationService.Lock getExclusiveMultiUserDbLock() throws CentralRepoException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process the Artifact instance in the EamDb
|
* Process the Artifact instance in the EamDb
|
||||||
*
|
*
|
||||||
* @param type EamArtifact.Type to search for
|
* @param type EamArtifact.Type to search for
|
||||||
* @param instanceTableCallback callback to process the instance
|
* @param instanceTableCallback callback to process the instance
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
@ -816,9 +836,9 @@ public interface CentralRepository {
|
|||||||
/**
|
/**
|
||||||
* Process the Artifact instance in the EamDb
|
* Process the Artifact instance in the EamDb
|
||||||
*
|
*
|
||||||
* @param type EamArtifact.Type to search for
|
* @param type EamArtifact.Type to search for
|
||||||
* @param instanceTableCallback callback to process the instance
|
* @param instanceTableCallback callback to process the instance
|
||||||
* @param whereClause query string to execute
|
* @param whereClause query string to execute
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
@ -827,18 +847,18 @@ public interface CentralRepository {
|
|||||||
/**
|
/**
|
||||||
* Process a SELECT query
|
* Process a SELECT query
|
||||||
*
|
*
|
||||||
* @param selectClause query string to execute
|
* @param selectClause query string to execute
|
||||||
* @param instanceTableCallback callback to process the instance
|
* @param instanceTableCallback callback to process the instance
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
public void processSelectClause(String selectClause, InstanceTableCallback instanceTableCallback) throws CentralRepoException;
|
void processSelectClause(String selectClause, InstanceTableCallback instanceTableCallback) throws CentralRepoException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes an INSERT/UPDATE/DELETE sql as a prepared statement, on the
|
* Executes an INSERT/UPDATE/DELETE sql as a prepared statement, on the
|
||||||
* central repository database.
|
* central repository database.
|
||||||
*
|
*
|
||||||
* @param sql sql to execute.
|
* @param sql sql to execute.
|
||||||
* @param params List of query params to use, may be empty.
|
* @param params List of query params to use, may be empty.
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException If there is an error.
|
* @throws CentralRepoException If there is an error.
|
||||||
@ -849,8 +869,8 @@ public interface CentralRepository {
|
|||||||
* Executes a SELECT query sql as a prepared statement, on the central
|
* Executes a SELECT query sql as a prepared statement, on the central
|
||||||
* repository database.
|
* repository database.
|
||||||
*
|
*
|
||||||
* @param sql sql to execute.
|
* @param sql sql to execute.
|
||||||
* @param params List of query params to use, may be empty.
|
* @param params List of query params to use, may be empty.
|
||||||
* @param queryCallback Query callback to handle the result of the query.
|
* @param queryCallback Query callback to handle the result of the query.
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException If there is an error.
|
* @throws CentralRepoException If there is an error.
|
||||||
@ -861,7 +881,9 @@ public interface CentralRepository {
|
|||||||
* Get account type by type name.
|
* Get account type by type name.
|
||||||
*
|
*
|
||||||
* @param accountTypeName account type name to look for
|
* @param accountTypeName account type name to look for
|
||||||
|
*
|
||||||
* @return CR account type (if found)
|
* @return CR account type (if found)
|
||||||
|
*
|
||||||
* @throws CentralRepoException
|
* @throws CentralRepoException
|
||||||
*/
|
*/
|
||||||
Optional<CentralRepoAccountType> getAccountTypeByName(String accountTypeName) throws CentralRepoException;
|
Optional<CentralRepoAccountType> getAccountTypeByName(String accountTypeName) throws CentralRepoException;
|
||||||
@ -879,15 +901,17 @@ public interface CentralRepository {
|
|||||||
* Get an account from the accounts table matching the given type/ID.
|
* Get an account from the accounts table matching the given type/ID.
|
||||||
* Inserts a row if one doesn't exists.
|
* Inserts a row if one doesn't exists.
|
||||||
*
|
*
|
||||||
* @param crAccountType CR account type to look for or create
|
* @param crAccountType CR account type to look for or create
|
||||||
* @param accountUniqueID type specific unique account id
|
* @param accountUniqueID type specific unique account id
|
||||||
|
*
|
||||||
* @return CR account
|
* @return CR account
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException If there is an error accessing Central Repository.
|
* @throws CentralRepoException If there is an error accessing Central
|
||||||
|
* Repository.
|
||||||
* @throws InvalidAccountIDException If the account identifier is not valid.
|
* @throws InvalidAccountIDException If the account identifier is not valid.
|
||||||
*/
|
*/
|
||||||
CentralRepoAccount getOrCreateAccount(CentralRepoAccount.CentralRepoAccountType crAccountType, String accountUniqueID) throws InvalidAccountIDException, CentralRepoException;
|
CentralRepoAccount getOrCreateAccount(CentralRepoAccount.CentralRepoAccountType crAccountType, String accountUniqueID) throws InvalidAccountIDException, CentralRepoException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets an account from the accounts table matching the given type/ID, if
|
* Gets an account from the accounts table matching the given type/ID, if
|
||||||
* one exists.
|
* one exists.
|
||||||
@ -897,7 +921,8 @@ public interface CentralRepository {
|
|||||||
*
|
*
|
||||||
* @return CR account, if found, null otherwise.
|
* @return CR account, if found, null otherwise.
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException If there is an error accessing Central Repository.
|
* @throws CentralRepoException If there is an error accessing Central
|
||||||
|
* Repository.
|
||||||
* @throws InvalidAccountIDException If the account identifier is not valid.
|
* @throws InvalidAccountIDException If the account identifier is not valid.
|
||||||
*/
|
*/
|
||||||
CentralRepoAccount getAccount(CentralRepoAccount.CentralRepoAccountType crAccountType, String accountUniqueID) throws InvalidAccountIDException, CentralRepoException;
|
CentralRepoAccount getAccount(CentralRepoAccount.CentralRepoAccountType crAccountType, String accountUniqueID) throws InvalidAccountIDException, CentralRepoException;
|
||||||
|
@ -617,7 +617,7 @@ public class CorrelationAttributeUtil {
|
|||||||
*/
|
*/
|
||||||
public static CorrelationAttributeInstance getCorrAttrForFile(AbstractFile file) {
|
public static CorrelationAttributeInstance getCorrAttrForFile(AbstractFile file) {
|
||||||
|
|
||||||
if (!isSupportedAbstractFileType(file)) {
|
if (!CentralRepository.isEnabled() || !isSupportedAbstractFileType(file)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ final class PostgresCentralRepo extends RdbmsCentralRepo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getConflictClause() {
|
protected String getConflictClause() {
|
||||||
return CONFLICT_CLAUSE;
|
return CONFLICT_CLAUSE;
|
||||||
@ -269,4 +269,5 @@ final class PostgresCentralRepo extends RdbmsCentralRepo {
|
|||||||
return columnExists;
|
return columnExists;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Central Repository
|
* Central Repository
|
||||||
*
|
*
|
||||||
* Copyright 2015-2020 Basis Technology Corp.
|
* Copyright 2015-2021 Basis Technology Corp.
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@ -212,8 +212,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting value for name.", ex);
|
throw new CentralRepoException("Error getting value for name.", ex);
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -505,8 +505,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting case details.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting case details.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -565,8 +565,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting case details.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting case details.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -602,8 +602,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting all cases.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting all cases.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -787,8 +787,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting data source.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting data source.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -851,8 +851,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting data source.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting data source.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -885,8 +885,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting all data sources.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting all data sources.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1090,7 +1090,7 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
String insertSQL;
|
String insertSQL;
|
||||||
switch (CentralRepoDbManager.getSavedDbChoice().getDbPlatform()) {
|
switch (CentralRepoDbManager.getSavedDbChoice().getDbPlatform()) {
|
||||||
case POSTGRESQL:
|
case POSTGRESQL:
|
||||||
insertSQL = "INSERT INTO accounts (account_type_id, account_unique_identifier) VALUES (?, ?) " + getConflictClause(); //NON-NLS
|
insertSQL = "INSERT INTO accounts (account_type_id, account_unique_identifier) VALUES (?, ?) " + getConflictClause(); //NON-NLS
|
||||||
break;
|
break;
|
||||||
case SQLITE:
|
case SQLITE:
|
||||||
insertSQL = "INSERT OR IGNORE INTO accounts (account_type_id, account_unique_identifier) VALUES (?, ?) "; //NON-NLS
|
insertSQL = "INSERT OR IGNORE INTO accounts (account_type_id, account_unique_identifier) VALUES (?, ?) "; //NON-NLS
|
||||||
@ -1098,7 +1098,6 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
default:
|
default:
|
||||||
throw new CentralRepoException(String.format("Cannot add account to currently selected CR database platform %s", CentralRepoDbManager.getSavedDbChoice().getDbPlatform())); //NON-NLS
|
throw new CentralRepoException(String.format("Cannot add account to currently selected CR database platform %s", CentralRepoDbManager.getSavedDbChoice().getDbPlatform())); //NON-NLS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
try (Connection connection = connect();
|
try (Connection connection = connect();
|
||||||
PreparedStatement preparedStatement = connection.prepareStatement(insertSQL);) {
|
PreparedStatement preparedStatement = connection.prepareStatement(insertSQL);) {
|
||||||
@ -1193,7 +1192,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
* @return CentralRepoAccount for the give type/id. May return null if not
|
* @return CentralRepoAccount for the give type/id. May return null if not
|
||||||
* found.
|
* found.
|
||||||
*
|
*
|
||||||
* @throws CentralRepoException If there is an error accessing Central Repository.
|
* @throws CentralRepoException If there is an error accessing Central
|
||||||
|
* Repository.
|
||||||
* @throws InvalidAccountIDException If the account identifier is not valid.
|
* @throws InvalidAccountIDException If the account identifier is not valid.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@ -1390,8 +1390,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting artifact instances by artifactType and artifactValue.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting artifact instances by artifactType and artifactValue.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
return artifactInstances;
|
return artifactInstances;
|
||||||
@ -1432,8 +1432,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting count of artifact instances by artifactType and artifactValue.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting count of artifact instances by artifactType and artifactValue.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1488,14 +1488,65 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error counting unique caseDisplayName/dataSource tuples having artifactType and artifactValue.", ex); // NON-NLS
|
throw new CentralRepoException("Error counting unique caseDisplayName/dataSource tuples having artifactType and artifactValue.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
return instanceCount;
|
return instanceCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long getCountCasesWithOtherInstances(CorrelationAttributeInstance instance) throws CentralRepoException, CorrelationAttributeNormalizationException {
|
||||||
|
Long instanceCount = 0L;
|
||||||
|
if (instance != null) {
|
||||||
|
Long sourceObjID = instance.getFileObjectId();
|
||||||
|
//The CorrelationAttributeInstance will have a CorrelationCase, however that correlation case's ID will be null if the case is not in the CR.
|
||||||
|
int correlationCaseId = instance.getCorrelationCase().getID();
|
||||||
|
String normalizedValue = CorrelationAttributeNormalizer.normalize(instance.getCorrelationType(), instance.getCorrelationValue());
|
||||||
|
Connection conn = connect();
|
||||||
|
PreparedStatement preparedStatement = null;
|
||||||
|
String tableName = CentralRepoDbUtil.correlationTypeToInstanceTableName(instance.getCorrelationType());
|
||||||
|
ResultSet resultSet = null;
|
||||||
|
try {
|
||||||
|
if (correlationCaseId > 0 && sourceObjID != null) {
|
||||||
|
//The CorrelationCase is in the Central repository.
|
||||||
|
String sql
|
||||||
|
= "SELECT count(*) FROM (SELECT DISTINCT case_id FROM " //Get distinct cases with a matching value in the corresponding table from the central repository.
|
||||||
|
+ tableName
|
||||||
|
+ " WHERE value=? AND NOT (file_obj_id=? AND case_id=?)) AS " //Check the file_obj_id AND case_id to ensure we ignore the currently selected instance.
|
||||||
|
+ tableName
|
||||||
|
+ "_other_case_count";
|
||||||
|
preparedStatement = conn.prepareStatement(sql);
|
||||||
|
preparedStatement.setString(1, normalizedValue);
|
||||||
|
preparedStatement.setLong(2, sourceObjID);
|
||||||
|
preparedStatement.setInt(3, correlationCaseId);
|
||||||
|
} else {
|
||||||
|
//The CorrelationCase is NOT in the central repository.
|
||||||
|
String sql
|
||||||
|
= "SELECT count(*) FROM (SELECT DISTINCT case_id FROM " //Get all distinct cases with a matching value in the corresponding table from the central repository.
|
||||||
|
+ tableName
|
||||||
|
+ " WHERE value=? AS "
|
||||||
|
+ tableName
|
||||||
|
+ "_other_case_count";
|
||||||
|
preparedStatement = conn.prepareStatement(sql);
|
||||||
|
preparedStatement.setString(1, normalizedValue);
|
||||||
|
}
|
||||||
|
resultSet = preparedStatement.executeQuery();
|
||||||
|
resultSet.next();
|
||||||
|
instanceCount = resultSet.getLong(1);
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
throw new CentralRepoException("Error counting unique caseDisplayName/dataSource tuples having artifactType and artifactValue.", ex); // NON-NLS
|
||||||
|
} finally {
|
||||||
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return instanceCount;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long getCountUniqueDataSources() throws CentralRepoException {
|
public Long getCountUniqueDataSources() throws CentralRepoException {
|
||||||
Connection conn = connect();
|
Connection conn = connect();
|
||||||
@ -1514,8 +1565,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error counting data sources.", ex); // NON-NLS
|
throw new CentralRepoException("Error counting data sources.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1561,8 +1612,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error counting artifact instances by caseName/dataSource.", ex); // NON-NLS
|
throw new CentralRepoException("Error counting artifact instances by caseName/dataSource.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1888,8 +1939,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting notable artifact instances.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting notable artifact instances.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1959,8 +2010,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting notable artifact instances.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting notable artifact instances.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2046,9 +2097,9 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting/setting artifact instance knownStatus=" + knownStatus.getName(), ex); // NON-NLS
|
throw new CentralRepoException("Error getting/setting artifact instance knownStatus=" + knownStatus.getName(), ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
CentralRepoDbUtil.closeStatement(preparedUpdate);
|
CentralRepoDbUtil.closeStatement(preparedUpdate);
|
||||||
CentralRepoDbUtil.closeStatement(preparedQuery);
|
CentralRepoDbUtil.closeStatement(preparedQuery);
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2088,8 +2139,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting count of notable artifact instances.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting count of notable artifact instances.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2143,8 +2194,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting notable artifact instances.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting notable artifact instances.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2195,8 +2246,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting notable artifact instances.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting notable artifact instances.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2339,8 +2390,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error determining if value (" + normalizeValued + ") is in reference set " + referenceSetID, ex); // NON-NLS
|
throw new CentralRepoException("Error determining if value (" + normalizeValued + ") is in reference set " + referenceSetID, ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2378,8 +2429,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error determining if value (" + normalizeValued + ") is in reference set " + referenceSetID, ex); // NON-NLS
|
throw new CentralRepoException("Error determining if value (" + normalizeValued + ") is in reference set " + referenceSetID, ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2422,8 +2473,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error determining if artifact is notable by reference.", ex); // NON-NLS
|
throw new CentralRepoException("Error determining if artifact is notable by reference.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2463,8 +2514,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting all artifact instances from instances table", ex);
|
throw new CentralRepoException("Error getting all artifact instances from instances table", ex);
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2509,8 +2560,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting all artifact instances from instances table", ex);
|
throw new CentralRepoException("Error getting all artifact instances from instances table", ex);
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2548,21 +2599,21 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error running query", ex);
|
throw new CentralRepoException("Error running query", ex);
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void executeCommand(String sql, List<Object> params) throws CentralRepoException {
|
public void executeCommand(String sql, List<Object> params) throws CentralRepoException {
|
||||||
|
|
||||||
try (Connection conn = connect();) {
|
try (Connection conn = connect();) {
|
||||||
|
|
||||||
PreparedStatement preparedStatement = conn.prepareStatement(sql);
|
PreparedStatement preparedStatement = conn.prepareStatement(sql);
|
||||||
|
|
||||||
// Fill in the params
|
// Fill in the params
|
||||||
if (params != null) {
|
if (params != null) {
|
||||||
int paramIndex = 1;
|
int paramIndex = 1;
|
||||||
for (Object param : params) {
|
for (Object param : params) {
|
||||||
preparedStatement.setObject(paramIndex, param);
|
preparedStatement.setObject(paramIndex, param);
|
||||||
@ -2582,10 +2633,9 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
throw new CentralRepoException("Query callback is null");
|
throw new CentralRepoException("Query callback is null");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try (Connection conn = connect();) {
|
||||||
try ( Connection conn = connect();) {
|
PreparedStatement preparedStatement = conn.prepareStatement(sql);
|
||||||
PreparedStatement preparedStatement = conn.prepareStatement(sql);
|
|
||||||
|
|
||||||
// fill in the params
|
// fill in the params
|
||||||
if (params != null) {
|
if (params != null) {
|
||||||
int paramIndex = 1;
|
int paramIndex = 1;
|
||||||
@ -2600,7 +2650,7 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
}
|
}
|
||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException(String.format("Error executing prepared statement for SQL query %s", sql), ex);
|
throw new CentralRepoException(String.format("Error executing prepared statement for SQL query %s", sql), ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -2635,8 +2685,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error inserting new organization.", ex); // NON-NLS
|
throw new CentralRepoException("Error inserting new organization.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(generatedKeys);
|
CentralRepoDbUtil.closeResultSet(generatedKeys);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2668,8 +2718,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting all organizations.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting all organizations.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2701,8 +2751,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting organization by id.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting organization by id.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2853,9 +2903,9 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error executing query when attempting to delete organization by id.", ex); // NON-NLS
|
throw new CentralRepoException("Error executing query when attempting to delete organization by id.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
CentralRepoDbUtil.closeStatement(checkIfUsedStatement);
|
CentralRepoDbUtil.closeStatement(checkIfUsedStatement);
|
||||||
CentralRepoDbUtil.closeStatement(deleteOrgStatement);
|
CentralRepoDbUtil.closeStatement(deleteOrgStatement);
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2917,9 +2967,9 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error inserting new global set.", ex); // NON-NLS
|
throw new CentralRepoException("Error inserting new global set.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement1);
|
CentralRepoDbUtil.closeStatement(preparedStatement1);
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement2);
|
CentralRepoDbUtil.closeStatement(preparedStatement2);
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2954,8 +3004,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting reference set by id.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting reference set by id.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement1);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement1);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2993,8 +3043,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting reference sets.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting reference sets.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement1);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement1);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
@ -3071,8 +3121,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
throw new CentralRepoException("Error testing whether reference set exists (name: " + referenceSetName
|
throw new CentralRepoException("Error testing whether reference set exists (name: " + referenceSetName
|
||||||
+ " version: " + version, ex); // NON-NLS
|
+ " version: " + version, ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement1);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement1);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3162,8 +3212,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting reference instances by type and value.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting reference instances by type and value.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement1);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement1);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3243,9 +3293,9 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error inserting new correlation type.", ex); // NON-NLS
|
throw new CentralRepoException("Error inserting new correlation type.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatementQuery);
|
CentralRepoDbUtil.closeStatement(preparedStatementQuery);
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
return typeId;
|
return typeId;
|
||||||
@ -3297,9 +3347,9 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error inserting new correlation type.", ex); // NON-NLS
|
throw new CentralRepoException("Error inserting new correlation type.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatementQuery);
|
CentralRepoDbUtil.closeStatement(preparedStatementQuery);
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
return typeId;
|
return typeId;
|
||||||
@ -3345,8 +3395,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting enabled correlation types.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting enabled correlation types.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3380,8 +3430,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting supported correlation types.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting supported correlation types.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3474,8 +3524,8 @@ abstract class RdbmsCentralRepo implements CentralRepository {
|
|||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new CentralRepoException("Error getting correlation type by id.", ex); // NON-NLS
|
throw new CentralRepoException("Error getting correlation type by id.", ex); // NON-NLS
|
||||||
} finally {
|
} finally {
|
||||||
CentralRepoDbUtil.closeStatement(preparedStatement);
|
|
||||||
CentralRepoDbUtil.closeResultSet(resultSet);
|
CentralRepoDbUtil.closeResultSet(resultSet);
|
||||||
|
CentralRepoDbUtil.closeStatement(preparedStatement);
|
||||||
CentralRepoDbUtil.closeConnection(conn);
|
CentralRepoDbUtil.closeConnection(conn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -624,6 +624,16 @@ final class SqliteCentralRepo extends RdbmsCentralRepo {
|
|||||||
releaseSharedLock();
|
releaseSharedLock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long getCountCasesWithOtherInstances(CorrelationAttributeInstance instance) throws CentralRepoException, CorrelationAttributeNormalizationException {
|
||||||
|
try {
|
||||||
|
acquireSharedLock();
|
||||||
|
return super.getCountCasesWithOtherInstances(instance);
|
||||||
|
} finally {
|
||||||
|
releaseSharedLock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Long getCountUniqueDataSources() throws CentralRepoException {
|
public Long getCountUniqueDataSources() throws CentralRepoException {
|
||||||
|
@ -322,7 +322,7 @@ public final class CaseEventListener implements PropertyChangeListener {
|
|||||||
private void setContentKnownStatus(AbstractFile af, TskData.FileKnown knownStatus) {
|
private void setContentKnownStatus(AbstractFile af, TskData.FileKnown knownStatus) {
|
||||||
final List<CorrelationAttributeInstance> md5CorrelationAttr = CorrelationAttributeUtil.makeCorrAttrsForSearch(af);
|
final List<CorrelationAttributeInstance> md5CorrelationAttr = CorrelationAttributeUtil.makeCorrAttrsForSearch(af);
|
||||||
if (!md5CorrelationAttr.isEmpty()) {
|
if (!md5CorrelationAttr.isEmpty()) {
|
||||||
//for an abstract file the 'list' of attributes will be a single attribute or empty and is returning a list for consistancy with other makeCorrAttrsForSearch methods per 7852
|
//for an abstract file the 'list' of attributes will be a single attribute or empty and is returning a list for consistency with other makeCorrAttrsForSearch methods per 7852
|
||||||
// send update to Central Repository db
|
// send update to Central Repository db
|
||||||
try {
|
try {
|
||||||
dbManager.setAttributeInstanceKnownStatus(md5CorrelationAttr.get(0), knownStatus);
|
dbManager.setAttributeInstanceKnownStatus(md5CorrelationAttr.get(0), knownStatus);
|
||||||
@ -436,7 +436,6 @@ public final class CaseEventListener implements PropertyChangeListener {
|
|||||||
}
|
}
|
||||||
} catch (TskCoreException ex) {
|
} catch (TskCoreException ex) {
|
||||||
LOGGER.log(Level.SEVERE, "Failed to obtain tags manager for case.", ex);
|
LOGGER.log(Level.SEVERE, "Failed to obtain tags manager for case.", ex);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -569,9 +568,9 @@ public final class CaseEventListener implements PropertyChangeListener {
|
|||||||
if (!hasTagWithConflictingKnownStatus) {
|
if (!hasTagWithConflictingKnownStatus) {
|
||||||
Content taggedContent = contentTag.getContent();
|
Content taggedContent = contentTag.getContent();
|
||||||
if (taggedContent instanceof AbstractFile) {
|
if (taggedContent instanceof AbstractFile) {
|
||||||
final List<CorrelationAttributeInstance> eamArtifact = CorrelationAttributeUtil.makeCorrAttrsForSearch((AbstractFile) taggedContent);
|
final List<CorrelationAttributeInstance> eamArtifact = CorrelationAttributeUtil.makeCorrAttrsForSearch(taggedContent);
|
||||||
if (!eamArtifact.isEmpty()) {
|
if (!eamArtifact.isEmpty()) {
|
||||||
//for an abstract file the 'list' of attributes will be a single attribute or empty and is returning a list for consistancy with other makeCorrAttrsForSearch methods per 7852
|
//for an abstract file the 'list' of attributes will be a single attribute or empty and is returning a list for consistency with other makeCorrAttrsForSearch methods per 7852
|
||||||
CentralRepository.getInstance().setAttributeInstanceKnownStatus(eamArtifact.get(0), tagName.getKnownStatus());
|
CentralRepository.getInstance().setAttributeInstanceKnownStatus(eamArtifact.get(0), tagName.getKnownStatus());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -182,9 +182,13 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
|
|||||||
Pair<Score, String> scorePropAndDescr = getScorePropertyAndDescription(tags);
|
Pair<Score, String> scorePropAndDescr = getScorePropertyAndDescription(tags);
|
||||||
Score value = scorePropAndDescr.getLeft();
|
Score value = scorePropAndDescr.getLeft();
|
||||||
String descr = scorePropAndDescr.getRight();
|
String descr = scorePropAndDescr.getRight();
|
||||||
CorrelationAttributeInstance attribute = getCorrelationAttributeInstance();
|
List<CorrelationAttributeInstance> listWithJustFileAttr = new ArrayList<>();
|
||||||
|
CorrelationAttributeInstance corrInstance = CorrelationAttributeUtil.getCorrAttrForFile(content);
|
||||||
|
if (corrInstance != null) {
|
||||||
|
listWithJustFileAttr.add(corrInstance);
|
||||||
|
}
|
||||||
updateSheet(new NodeProperty<>(SCORE.toString(), SCORE.toString(), descr, value),
|
updateSheet(new NodeProperty<>(SCORE.toString(), SCORE.toString(), descr, value),
|
||||||
new NodeProperty<>(COMMENT.toString(), COMMENT.toString(), NO_DESCR, getCommentProperty(tags, attribute))
|
new NodeProperty<>(COMMENT.toString(), COMMENT.toString(), NO_DESCR, getCommentProperty(tags, listWithJustFileAttr))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else if (eventType.equals(Case.Events.CONTENT_TAG_DELETED.toString())) {
|
} else if (eventType.equals(Case.Events.CONTENT_TAG_DELETED.toString())) {
|
||||||
@ -194,17 +198,25 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
|
|||||||
Pair<Score, String> scorePropAndDescr = getScorePropertyAndDescription(tags);
|
Pair<Score, String> scorePropAndDescr = getScorePropertyAndDescription(tags);
|
||||||
Score value = scorePropAndDescr.getLeft();
|
Score value = scorePropAndDescr.getLeft();
|
||||||
String descr = scorePropAndDescr.getRight();
|
String descr = scorePropAndDescr.getRight();
|
||||||
CorrelationAttributeInstance attribute = getCorrelationAttributeInstance();
|
List<CorrelationAttributeInstance> listWithJustFileAttr = new ArrayList<>();
|
||||||
|
CorrelationAttributeInstance corrInstance = CorrelationAttributeUtil.getCorrAttrForFile(content);
|
||||||
|
if (corrInstance != null) {
|
||||||
|
listWithJustFileAttr.add(corrInstance);
|
||||||
|
}
|
||||||
updateSheet(new NodeProperty<>(SCORE.toString(), SCORE.toString(), descr, value),
|
updateSheet(new NodeProperty<>(SCORE.toString(), SCORE.toString(), descr, value),
|
||||||
new NodeProperty<>(COMMENT.toString(), COMMENT.toString(), NO_DESCR, getCommentProperty(tags, attribute))
|
new NodeProperty<>(COMMENT.toString(), COMMENT.toString(), NO_DESCR, getCommentProperty(tags, listWithJustFileAttr))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else if (eventType.equals(Case.Events.CR_COMMENT_CHANGED.toString())) {
|
} else if (eventType.equals(Case.Events.CR_COMMENT_CHANGED.toString())) {
|
||||||
CommentChangedEvent event = (CommentChangedEvent) evt;
|
CommentChangedEvent event = (CommentChangedEvent) evt;
|
||||||
if (event.getContentID() == content.getId()) {
|
if (event.getContentID() == content.getId()) {
|
||||||
List<Tag> tags = getAllTagsFromDatabase();
|
List<Tag> tags = getAllTagsFromDatabase();
|
||||||
CorrelationAttributeInstance attribute = getCorrelationAttributeInstance();
|
List<CorrelationAttributeInstance> listWithJustFileAttr = new ArrayList<>();
|
||||||
updateSheet(new NodeProperty<>(COMMENT.toString(), COMMENT.toString(), NO_DESCR, getCommentProperty(tags, attribute)));
|
CorrelationAttributeInstance corrInstance = CorrelationAttributeUtil.getCorrAttrForFile(content);
|
||||||
|
if (corrInstance != null) {
|
||||||
|
listWithJustFileAttr.add(corrInstance);
|
||||||
|
}
|
||||||
|
updateSheet(new NodeProperty<>(COMMENT.toString(), COMMENT.toString(), NO_DESCR, getCommentProperty(tags, listWithJustFileAttr)));
|
||||||
}
|
}
|
||||||
} else if (eventType.equals(NodeSpecificEvents.TRANSLATION_AVAILABLE.toString())) {
|
} else if (eventType.equals(NodeSpecificEvents.TRANSLATION_AVAILABLE.toString())) {
|
||||||
this.setDisplayName(evt.getNewValue().toString());
|
this.setDisplayName(evt.getNewValue().toString());
|
||||||
@ -411,16 +423,15 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
|
|||||||
"# {0} - occurrenceCount",
|
"# {0} - occurrenceCount",
|
||||||
"AbstractAbstractFileNode.createSheet.count.description=There were {0} datasource(s) found with occurrences of the MD5 correlation value"})
|
"AbstractAbstractFileNode.createSheet.count.description=There were {0} datasource(s) found with occurrences of the MD5 correlation value"})
|
||||||
@Override
|
@Override
|
||||||
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance.Type attributeType, String attributeValue,
|
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance attributeInstance, String defaultDescription) {
|
||||||
String defaultDescription) {
|
|
||||||
Long count = -1L; //The column renderer will not display negative values, negative value used when count unavailble to preserve sorting
|
Long count = -1L; //The column renderer will not display negative values, negative value used when count unavailble to preserve sorting
|
||||||
String description = defaultDescription;
|
String description = defaultDescription;
|
||||||
try {
|
try {
|
||||||
//don't perform the query if there is no correlation value
|
//don't perform the query if there is no correlation value
|
||||||
if (attributeType != null && StringUtils.isNotBlank(attributeValue)) {
|
if (attributeInstance != null && StringUtils.isNotBlank(attributeInstance.getCorrelationValue())) {
|
||||||
count = CentralRepository.getInstance().getCountUniqueCaseDataSourceTuplesHavingTypeValue(attributeType, attributeValue);
|
count = CentralRepository.getInstance().getCountCasesWithOtherInstances(attributeInstance);
|
||||||
description = Bundle.AbstractAbstractFileNode_createSheet_count_description(count);
|
description = Bundle.AbstractAbstractFileNode_createSheet_count_description(count);
|
||||||
} else if (attributeType != null) {
|
} else if (attributeInstance != null) {
|
||||||
description = Bundle.AbstractAbstractFileNode_createSheet_count_hashLookupNotRun_description();
|
description = Bundle.AbstractAbstractFileNode_createSheet_count_hashLookupNotRun_description();
|
||||||
}
|
}
|
||||||
} catch (CentralRepoException ex) {
|
} catch (CentralRepoException ex) {
|
||||||
@ -434,7 +445,7 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
|
|||||||
@NbBundle.Messages({
|
@NbBundle.Messages({
|
||||||
"AbstractAbstractFileNode.createSheet.comment.displayName=C"})
|
"AbstractAbstractFileNode.createSheet.comment.displayName=C"})
|
||||||
@Override
|
@Override
|
||||||
protected HasCommentStatus getCommentProperty(List<Tag> tags, CorrelationAttributeInstance attribute) {
|
protected HasCommentStatus getCommentProperty(List<Tag> tags, List<CorrelationAttributeInstance> attributes) {
|
||||||
|
|
||||||
DataResultViewerTable.HasCommentStatus status = !tags.isEmpty() ? DataResultViewerTable.HasCommentStatus.TAG_NO_COMMENT : DataResultViewerTable.HasCommentStatus.NO_COMMENT;
|
DataResultViewerTable.HasCommentStatus status = !tags.isEmpty() ? DataResultViewerTable.HasCommentStatus.TAG_NO_COMMENT : DataResultViewerTable.HasCommentStatus.NO_COMMENT;
|
||||||
|
|
||||||
@ -445,11 +456,16 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (attribute != null && !StringUtils.isBlank(attribute.getComment())) {
|
if (attributes != null && !attributes.isEmpty()) {
|
||||||
if (status == DataResultViewerTable.HasCommentStatus.TAG_COMMENT) {
|
for (CorrelationAttributeInstance attribute : attributes) {
|
||||||
status = DataResultViewerTable.HasCommentStatus.CR_AND_TAG_COMMENTS;
|
if (attribute != null && !StringUtils.isBlank(attribute.getComment())) {
|
||||||
} else {
|
if (status == DataResultViewerTable.HasCommentStatus.TAG_COMMENT) {
|
||||||
status = DataResultViewerTable.HasCommentStatus.CR_COMMENT;
|
status = DataResultViewerTable.HasCommentStatus.CR_AND_TAG_COMMENTS;
|
||||||
|
} else {
|
||||||
|
status = DataResultViewerTable.HasCommentStatus.CR_COMMENT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
@ -490,15 +506,6 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
|
|||||||
return new ArrayList<>(getContentTagsFromDatabase());
|
return new ArrayList<>(getContentTagsFromDatabase());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected CorrelationAttributeInstance getCorrelationAttributeInstance() {
|
|
||||||
CorrelationAttributeInstance attribute = null;
|
|
||||||
if (CentralRepository.isEnabled() && !UserPreferences.getHideSCOColumns()) {
|
|
||||||
attribute = CorrelationAttributeUtil.getCorrAttrForFile(content);
|
|
||||||
}
|
|
||||||
return attribute;
|
|
||||||
}
|
|
||||||
|
|
||||||
static String getContentPath(AbstractFile file) {
|
static String getContentPath(AbstractFile file) {
|
||||||
try {
|
try {
|
||||||
return file.getUniquePath();
|
return file.getUniquePath();
|
||||||
|
@ -325,15 +325,6 @@ public abstract class AbstractContentNode<T extends Content> extends ContentNode
|
|||||||
*/
|
*/
|
||||||
abstract protected List<Tag> getAllTagsFromDatabase();
|
abstract protected List<Tag> getAllTagsFromDatabase();
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns correlation attribute instance for the underlying content of the
|
|
||||||
* node.
|
|
||||||
*
|
|
||||||
* @return correlation attribute instance for the underlying content of the
|
|
||||||
* node.
|
|
||||||
*/
|
|
||||||
abstract protected CorrelationAttributeInstance getCorrelationAttributeInstance();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns Score property for the node.
|
* Returns Score property for the node.
|
||||||
*
|
*
|
||||||
@ -352,7 +343,7 @@ public abstract class AbstractContentNode<T extends Content> extends ContentNode
|
|||||||
} catch (TskCoreException ex) {
|
} catch (TskCoreException ex) {
|
||||||
logger.log(Level.WARNING, "Unable to get aggregate score for content with id: " + this.content.getId(), ex);
|
logger.log(Level.WARNING, "Unable to get aggregate score for content with id: " + this.content.getId(), ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
String significanceDisplay = score.getSignificance().getDisplayName();
|
String significanceDisplay = score.getSignificance().getDisplayName();
|
||||||
String description = Bundle.AbstractContentNode_getScorePropertyAndDescription_description(significanceDisplay);
|
String description = Bundle.AbstractContentNode_getScorePropertyAndDescription_description(significanceDisplay);
|
||||||
return Pair.of(score, description);
|
return Pair.of(score, description);
|
||||||
@ -361,22 +352,30 @@ public abstract class AbstractContentNode<T extends Content> extends ContentNode
|
|||||||
/**
|
/**
|
||||||
* Returns comment property for the node.
|
* Returns comment property for the node.
|
||||||
*
|
*
|
||||||
* @param tags list of tags
|
* Default implementation is a null implementation.
|
||||||
* @param attribute correlation attribute instance
|
*
|
||||||
|
* @param tags The list of tags.
|
||||||
|
* @param attributes The list of correlation attribute instances.
|
||||||
*
|
*
|
||||||
* @return Comment property for the underlying content of the node.
|
* @return Comment property for the underlying content of the node.
|
||||||
*/
|
*/
|
||||||
abstract protected DataResultViewerTable.HasCommentStatus getCommentProperty(List<Tag> tags, CorrelationAttributeInstance attribute);
|
protected DataResultViewerTable.HasCommentStatus getCommentProperty(List<Tag> tags, List<CorrelationAttributeInstance> attributes) {
|
||||||
|
return DataResultViewerTable.HasCommentStatus.NO_COMMENT;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns occurrences/count property for the node.
|
* Returns occurrences/count property for the node.
|
||||||
*
|
*
|
||||||
* @param attributeType the type of the attribute to count
|
* Default implementation is a null implementation.
|
||||||
* @param attributeValue the value of the attribute to count
|
*
|
||||||
* @param defaultDescription a description to use when none is determined by
|
* @param attribute The correlation attribute for which data will
|
||||||
* the getCountPropertyAndDescription method
|
* be retrieved.
|
||||||
|
* @param defaultDescription A description to use when none is determined by
|
||||||
|
* the getCountPropertyAndDescription method.
|
||||||
*
|
*
|
||||||
* @return count property for the underlying content of the node.
|
* @return count property for the underlying content of the node.
|
||||||
*/
|
*/
|
||||||
abstract protected Pair<Long, String> getCountPropertyAndDescription(Type attributeType, String attributeValue, String defaultDescription);
|
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance attribute, String defaultDescription) {
|
||||||
|
return Pair.of(-1L, NO_DESCR);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,9 +54,7 @@ import org.sleuthkit.autopsy.casemodule.events.CommentChangedEvent;
|
|||||||
import org.sleuthkit.autopsy.casemodule.events.ContentTagAddedEvent;
|
import org.sleuthkit.autopsy.casemodule.events.ContentTagAddedEvent;
|
||||||
import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent;
|
import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance.Type;
|
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeNormalizationException;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeNormalizationException;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeUtil;
|
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoException;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepoException;
|
||||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
import org.sleuthkit.autopsy.core.UserPreferences;
|
||||||
import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable;
|
import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable;
|
||||||
@ -826,23 +824,6 @@ public class BlackboardArtifactNode extends AbstractContentNode<BlackboardArtifa
|
|||||||
return tags;
|
return tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the correlation attribute for the MD5 hash of the source file of the
|
|
||||||
* artifact represented by this node. The correlation attribute instance can
|
|
||||||
* only be returned if the central repository is enabled and the source
|
|
||||||
* content is a file.
|
|
||||||
*
|
|
||||||
* @return The correlation attribute instance, may be null.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected final CorrelationAttributeInstance getCorrelationAttributeInstance() {
|
|
||||||
CorrelationAttributeInstance correlationAttribute = null;
|
|
||||||
if (CentralRepository.isEnabled() && srcContent instanceof AbstractFile) {
|
|
||||||
correlationAttribute = CorrelationAttributeUtil.getCorrAttrForFile((AbstractFile) srcContent);
|
|
||||||
}
|
|
||||||
return correlationAttribute;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Computes the value of the comment property ("C" in S, C, O) for the
|
* Computes the value of the comment property ("C" in S, C, O) for the
|
||||||
* artifact represented by this node.
|
* artifact represented by this node.
|
||||||
@ -853,13 +834,13 @@ public class BlackboardArtifactNode extends AbstractContentNode<BlackboardArtifa
|
|||||||
* repository.
|
* repository.
|
||||||
*
|
*
|
||||||
* @param tags The tags applied to the artifact and its source content.
|
* @param tags The tags applied to the artifact and its source content.
|
||||||
* @param attribute A correlation attribute instance Ffor the central
|
* @param attribute A correlation attribute instance for the central
|
||||||
* repository lookup.
|
* repository lookup.
|
||||||
*
|
*
|
||||||
* @return The value of the comment property.
|
* @return The value of the comment property.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected DataResultViewerTable.HasCommentStatus getCommentProperty(List<Tag> tags, CorrelationAttributeInstance attribute) {
|
protected DataResultViewerTable.HasCommentStatus getCommentProperty(List<Tag> tags, List<CorrelationAttributeInstance> attributes) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Has a tag with a comment been applied to the artifact or its source
|
* Has a tag with a comment been applied to the artifact or its source
|
||||||
@ -877,50 +858,37 @@ public class BlackboardArtifactNode extends AbstractContentNode<BlackboardArtifa
|
|||||||
* Does the given correlation attribute instance have a comment in the
|
* Does the given correlation attribute instance have a comment in the
|
||||||
* central repository?
|
* central repository?
|
||||||
*/
|
*/
|
||||||
if (attribute != null && !StringUtils.isBlank(attribute.getComment())) {
|
if (attributes != null && !attributes.isEmpty()) {
|
||||||
if (status == HasCommentStatus.TAG_COMMENT) {
|
for (CorrelationAttributeInstance attribute : attributes) {
|
||||||
status = HasCommentStatus.CR_AND_TAG_COMMENTS;
|
if (attribute != null && !StringUtils.isBlank(attribute.getComment())) {
|
||||||
} else {
|
if (status == DataResultViewerTable.HasCommentStatus.TAG_COMMENT) {
|
||||||
status = HasCommentStatus.CR_COMMENT;
|
status = DataResultViewerTable.HasCommentStatus.CR_AND_TAG_COMMENTS;
|
||||||
|
} else {
|
||||||
|
status = DataResultViewerTable.HasCommentStatus.CR_COMMENT;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Computes the value of the other occurrences property ("O" in S, C, O) for
|
|
||||||
* the artifact represented by this node. The value of the other occurrences
|
|
||||||
* property is the number of other data sources this artifact appears in
|
|
||||||
* according to a correlation attribute instance lookup in the central
|
|
||||||
* repository, plus one for the data source for this instance of the
|
|
||||||
* artifact.
|
|
||||||
*
|
|
||||||
* @param corrAttrType The correlation attribute instance type to use
|
|
||||||
* for the central repsoitory lookup.
|
|
||||||
* @param attributeValue The correlation attribute instane value to use
|
|
||||||
* for the central repsoitory lookup.
|
|
||||||
* @param defaultDescription A default description.
|
|
||||||
*
|
|
||||||
* @return The value of the occurrences property as a data sources count and
|
|
||||||
* a description string.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
protected Pair<Long, String> getCountPropertyAndDescription(Type corrAttrType, String attributeValue, String defaultDescription) {
|
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance attribute, String defaultDescription) {
|
||||||
Long count = -1L;
|
Long count = -1L;
|
||||||
String description = defaultDescription;
|
String description = defaultDescription;
|
||||||
try {
|
try {
|
||||||
if (corrAttrType != null && StringUtils.isNotBlank(attributeValue)) {
|
if (attribute != null && StringUtils.isNotBlank(attribute.getCorrelationValue())) {
|
||||||
count = CentralRepository.getInstance().getCountUniqueCaseDataSourceTuplesHavingTypeValue(corrAttrType, attributeValue);
|
count = CentralRepository.getInstance().getCountCasesWithOtherInstances(attribute);
|
||||||
description = Bundle.BlackboardArtifactNode_createSheet_count_description(count, corrAttrType.getDisplayName());
|
description = Bundle.BlackboardArtifactNode_createSheet_count_description(count, attribute.getCorrelationType().getDisplayName());
|
||||||
} else if (corrAttrType != null) {
|
} else if (attribute != null) {
|
||||||
description = Bundle.BlackboardArtifactNode_createSheet_count_noCorrelationValues_description();
|
description = Bundle.BlackboardArtifactNode_createSheet_count_noCorrelationValues_description();
|
||||||
}
|
}
|
||||||
} catch (CentralRepoException ex) {
|
} catch (CentralRepoException ex) {
|
||||||
logger.log(Level.SEVERE, MessageFormat.format("Error querying central repository for other occurences count (artifact objID={0}, corrAttrType={1}, corrAttrValue={2})", artifact.getId(), corrAttrType, attributeValue), ex);
|
logger.log(Level.SEVERE, MessageFormat.format("Error querying central repository for other occurences count (artifact objID={0}, corrAttrType={1}, corrAttrValue={2})", artifact.getId(), attribute.getCorrelationType(), attribute.getCorrelationValue()), ex);
|
||||||
} catch (CorrelationAttributeNormalizationException ex) {
|
} catch (CorrelationAttributeNormalizationException ex) {
|
||||||
logger.log(Level.SEVERE, MessageFormat.format("Error normalizing correlation attribute for central repository query (artifact objID={0}, corrAttrType={2}, corrAttrValue={3})", artifact.getId(), corrAttrType, attributeValue), ex);
|
logger.log(Level.SEVERE, MessageFormat.format("Error normalizing correlation attribute for central repository query (artifact objID={0}, corrAttrType={2}, corrAttrValue={3})", artifact.getId(), attribute.getCorrelationType(), attribute.getCorrelationValue()), ex);
|
||||||
}
|
}
|
||||||
return Pair.of(count, description);
|
return Pair.of(count, description);
|
||||||
}
|
}
|
||||||
@ -953,7 +921,7 @@ public class BlackboardArtifactNode extends AbstractContentNode<BlackboardArtifa
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a "custom" property to the property sheet of this node, indepoendent
|
* Adds a "custom" property to the property sheet of this node, independent
|
||||||
* of the artifact this node represents or its source content.
|
* of the artifact this node represents or its source content.
|
||||||
*
|
*
|
||||||
* @param property The custom property.
|
* @param property The custom property.
|
||||||
@ -1311,7 +1279,7 @@ public class BlackboardArtifactNode extends AbstractContentNode<BlackboardArtifa
|
|||||||
"BlackboardArtifactNode.createSheet.count.description=There were {0} datasource(s) found with occurrences of the correlation value of type {1}"})
|
"BlackboardArtifactNode.createSheet.count.description=There were {0} datasource(s) found with occurrences of the correlation value of type {1}"})
|
||||||
@Deprecated
|
@Deprecated
|
||||||
protected final void addCountProperty(Sheet.Set sheetSet, CorrelationAttributeInstance attribute) {
|
protected final void addCountProperty(Sheet.Set sheetSet, CorrelationAttributeInstance attribute) {
|
||||||
Pair<Long, String> countAndDescription = getCountPropertyAndDescription(attribute.getCorrelationType(), attribute.getCorrelationValue(), Bundle.BlackboardArtifactNode_createSheet_count_noCorrelationAttributes_description());
|
Pair<Long, String> countAndDescription = getCountPropertyAndDescription(attribute, Bundle.BlackboardArtifactNode_createSheet_count_noCorrelationAttributes_description());
|
||||||
sheetSet.put(new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_count_name(), Bundle.BlackboardArtifactNode_createSheet_count_displayName(), countAndDescription.getRight(), countAndDescription.getLeft()));
|
sheetSet.put(new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_count_name(), Bundle.BlackboardArtifactNode_createSheet_count_displayName(), countAndDescription.getRight(), countAndDescription.getLeft()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1333,7 +1301,9 @@ public class BlackboardArtifactNode extends AbstractContentNode<BlackboardArtifa
|
|||||||
"BlackboardArtifactNode.createSheet.comment.displayName=C"})
|
"BlackboardArtifactNode.createSheet.comment.displayName=C"})
|
||||||
@Deprecated
|
@Deprecated
|
||||||
protected final void addCommentProperty(Sheet.Set sheetSet, List<Tag> tags, CorrelationAttributeInstance attribute) {
|
protected final void addCommentProperty(Sheet.Set sheetSet, List<Tag> tags, CorrelationAttributeInstance attribute) {
|
||||||
HasCommentStatus status = getCommentProperty(tags, attribute);
|
List<CorrelationAttributeInstance> attributes = new ArrayList<>();
|
||||||
|
attributes.add(attribute);
|
||||||
|
HasCommentStatus status = getCommentProperty(tags, attributes);
|
||||||
sheetSet.put(new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_comment_name(), Bundle.BlackboardArtifactNode_createSheet_comment_displayName(), NO_DESCR, status));
|
sheetSet.put(new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_comment_name(), Bundle.BlackboardArtifactNode_createSheet_comment_displayName(), NO_DESCR, status));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,12 +24,11 @@ import java.lang.ref.WeakReference;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.openide.util.NbBundle.Messages;
|
import org.openide.util.NbBundle.Messages;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance.Type;
|
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeUtil;
|
|
||||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
import org.sleuthkit.autopsy.core.UserPreferences;
|
||||||
import org.sleuthkit.autopsy.events.AutopsyEvent;
|
import org.sleuthkit.autopsy.events.AutopsyEvent;
|
||||||
import org.sleuthkit.datamodel.Tag;
|
import org.sleuthkit.datamodel.Tag;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CentralRepository;
|
||||||
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Background task to get Score, Comment and Occurrences values for an Abstract
|
* Background task to get Score, Comment and Occurrences values for an Abstract
|
||||||
@ -58,27 +57,23 @@ class GetSCOTask implements Runnable {
|
|||||||
}
|
}
|
||||||
// get the SCO column values
|
// get the SCO column values
|
||||||
List<Tag> tags = contentNode.getAllTagsFromDatabase();
|
List<Tag> tags = contentNode.getAllTagsFromDatabase();
|
||||||
|
|
||||||
SCOData scoData = new SCOData();
|
SCOData scoData = new SCOData();
|
||||||
scoData.setScoreAndDescription(contentNode.getScorePropertyAndDescription(tags));
|
scoData.setScoreAndDescription(contentNode.getScorePropertyAndDescription(tags));
|
||||||
//getting the correlation attribute and setting the comment column is done before the eamdb isEnabled check
|
//getting the correlation attribute and setting the comment column is done before the eamdb isEnabled check
|
||||||
//because the Comment column will reflect the presence of comments in the CR when the CR is enabled, but reflect tag comments regardless
|
//because the Comment column will reflect the presence of comments in the CR when the CR is enabled, but reflect tag comments regardless
|
||||||
CorrelationAttributeInstance fileAttribute = contentNode.getCorrelationAttributeInstance();
|
String description = Bundle.GetSCOTask_occurrences_defaultDescription();
|
||||||
scoData.setComment(contentNode.getCommentProperty(tags, fileAttribute));
|
List<CorrelationAttributeInstance> listOfPossibleAttributes = CorrelationAttributeUtil.makeCorrAttrsForSearch(contentNode.getContent());
|
||||||
|
scoData.setComment(contentNode.getCommentProperty(tags, listOfPossibleAttributes));
|
||||||
|
CorrelationAttributeInstance corInstance = null;
|
||||||
if (CentralRepository.isEnabled()) {
|
if (CentralRepository.isEnabled()) {
|
||||||
Type type = null;
|
|
||||||
String value = null;
|
|
||||||
String description = Bundle.GetSCOTask_occurrences_defaultDescription();
|
|
||||||
List<CorrelationAttributeInstance> listOfPossibleAttributes = CorrelationAttributeUtil.makeCorrAttrsForSearch(contentNode.getContent());
|
|
||||||
if (listOfPossibleAttributes.size() > 1) {
|
if (listOfPossibleAttributes.size() > 1) {
|
||||||
//Don't display anything if there is more than 1 correlation property for an artifact but let the user know
|
//Don't display anything if there is more than 1 correlation property for an artifact but let the user know
|
||||||
description = Bundle.GetSCOTask_occurrences_multipleProperties();
|
description = Bundle.GetSCOTask_occurrences_multipleProperties();
|
||||||
} else if (!listOfPossibleAttributes.isEmpty()) {
|
} else if (!listOfPossibleAttributes.isEmpty()) {
|
||||||
//there should only be one item in the list
|
//there should only be one item in the list
|
||||||
type = listOfPossibleAttributes.get(0).getCorrelationType();
|
corInstance = listOfPossibleAttributes.get(0);
|
||||||
value = listOfPossibleAttributes.get(0).getCorrelationValue();
|
|
||||||
}
|
}
|
||||||
scoData.setCountAndDescription(contentNode.getCountPropertyAndDescription(type, value, description));
|
scoData.setCountAndDescription(contentNode.getCountPropertyAndDescription(corInstance, description));
|
||||||
}
|
}
|
||||||
|
|
||||||
// signal SCO data is available.
|
// signal SCO data is available.
|
||||||
|
@ -27,15 +27,12 @@ import java.util.List;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javax.swing.Action;
|
import javax.swing.Action;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
|
||||||
import org.openide.nodes.Sheet;
|
import org.openide.nodes.Sheet;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.openide.util.NbBundle.Messages;
|
import org.openide.util.NbBundle.Messages;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
import org.sleuthkit.autopsy.casemodule.DeleteDataSourceAction;
|
import org.sleuthkit.autopsy.casemodule.DeleteDataSourceAction;
|
||||||
import org.sleuthkit.autopsy.datasourcesummary.ui.ViewSummaryInformationAction;
|
import org.sleuthkit.autopsy.datasourcesummary.ui.ViewSummaryInformationAction;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
|
||||||
import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable;
|
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.autopsy.directorytree.ExplorerNodeActionVisitor;
|
import org.sleuthkit.autopsy.directorytree.ExplorerNodeActionVisitor;
|
||||||
import org.sleuthkit.autopsy.directorytree.FileSearchAction;
|
import org.sleuthkit.autopsy.directorytree.FileSearchAction;
|
||||||
@ -168,9 +165,9 @@ public class ImageNode extends AbstractContentNode<Image> {
|
|||||||
this.content.getTimeZone()));
|
this.content.getTimeZone()));
|
||||||
|
|
||||||
sheetSet.put(new NodeProperty<>(Bundle.ImageNode_createSheet_deviceId_name(),
|
sheetSet.put(new NodeProperty<>(Bundle.ImageNode_createSheet_deviceId_name(),
|
||||||
Bundle.ImageNode_createSheet_deviceId_displayName(),
|
Bundle.ImageNode_createSheet_deviceId_displayName(),
|
||||||
Bundle.ImageNode_createSheet_deviceId_desc(),
|
Bundle.ImageNode_createSheet_deviceId_desc(),
|
||||||
content.getDeviceId()));
|
content.getDeviceId()));
|
||||||
|
|
||||||
return sheet;
|
return sheet;
|
||||||
}
|
}
|
||||||
@ -256,50 +253,4 @@ public class ImageNode extends AbstractContentNode<Image> {
|
|||||||
protected List<Tag> getAllTagsFromDatabase() {
|
protected List<Tag> getAllTagsFromDatabase() {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns correlation attribute instance for the underlying content of the
|
|
||||||
* node.
|
|
||||||
*
|
|
||||||
* Null implementation of an abstract method.
|
|
||||||
*
|
|
||||||
* @return correlation attribute instance for the underlying content of the
|
|
||||||
* node.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected CorrelationAttributeInstance getCorrelationAttributeInstance() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns comment property for the node.
|
|
||||||
*
|
|
||||||
* Null implementation of an abstract method.
|
|
||||||
*
|
|
||||||
* @param tags list of tags
|
|
||||||
* @param attribute correlation attribute instance
|
|
||||||
*
|
|
||||||
* @return Comment property for the underlying content of the node.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected DataResultViewerTable.HasCommentStatus getCommentProperty(List<Tag> tags, CorrelationAttributeInstance attribute) {
|
|
||||||
return DataResultViewerTable.HasCommentStatus.NO_COMMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns occurrences/count property for the node.
|
|
||||||
*
|
|
||||||
* Null implementation of an abstract method.
|
|
||||||
*
|
|
||||||
* @param attributeType the type of the attribute to count
|
|
||||||
* @param attributeValue the value of the attribute to coun
|
|
||||||
* @param defaultDescription a description to use when none is determined by
|
|
||||||
* the getCountPropertyAndDescription method
|
|
||||||
*
|
|
||||||
* @return count property for the underlying content of the node.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance.Type attributeType, String attributeValue, String defaultDescription) {
|
|
||||||
return Pair.of(-1L, NO_DESCR);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,6 @@ import java.util.List;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javax.swing.Action;
|
import javax.swing.Action;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
|
||||||
import org.openide.nodes.ChildFactory;
|
import org.openide.nodes.ChildFactory;
|
||||||
import org.openide.nodes.Children;
|
import org.openide.nodes.Children;
|
||||||
import org.openide.nodes.Node;
|
import org.openide.nodes.Node;
|
||||||
@ -40,8 +39,6 @@ import org.openide.util.NbBundle.Messages;
|
|||||||
import org.openide.util.WeakListeners;
|
import org.openide.util.WeakListeners;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
import org.sleuthkit.autopsy.casemodule.events.OsAccountsUpdatedEvent;
|
import org.sleuthkit.autopsy.casemodule.events.OsAccountsUpdatedEvent;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
|
||||||
import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable;
|
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.autopsy.coreutils.TimeZoneUtils;
|
import org.sleuthkit.autopsy.coreutils.TimeZoneUtils;
|
||||||
import static org.sleuthkit.autopsy.datamodel.AbstractContentNode.backgroundTasksPool;
|
import static org.sleuthkit.autopsy.datamodel.AbstractContentNode.backgroundTasksPool;
|
||||||
@ -335,21 +332,6 @@ public final class OsAccounts implements AutopsyVisitableItem {
|
|||||||
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected CorrelationAttributeInstance getCorrelationAttributeInstance() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected DataResultViewerTable.HasCommentStatus getCommentProperty(List<Tag> tags, CorrelationAttributeInstance attribute) {
|
|
||||||
return DataResultViewerTable.HasCommentStatus.NO_COMMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance.Type attributeType, String attributeValue, String defaultDescription) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> T accept(ContentNodeVisitor<T> visitor) {
|
public <T> T accept(ContentNodeVisitor<T> visitor) {
|
||||||
return visitor.visit(this);
|
return visitor.visit(this);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2019 Basis Technology Corp.
|
* Copyright 2019-2021 Basis Technology Corp.
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@ -21,12 +21,8 @@ package org.sleuthkit.autopsy.datamodel;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.swing.Action;
|
import javax.swing.Action;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
|
||||||
import org.openide.nodes.Sheet;
|
import org.openide.nodes.Sheet;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
|
||||||
import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable;
|
|
||||||
import static org.sleuthkit.autopsy.datamodel.AbstractContentNode.NO_DESCR;
|
|
||||||
import org.sleuthkit.datamodel.Pool;
|
import org.sleuthkit.datamodel.Pool;
|
||||||
import org.sleuthkit.datamodel.Tag;
|
import org.sleuthkit.datamodel.Tag;
|
||||||
|
|
||||||
@ -141,50 +137,4 @@ public class PoolNode extends AbstractContentNode<Pool> {
|
|||||||
protected List<Tag> getAllTagsFromDatabase() {
|
protected List<Tag> getAllTagsFromDatabase() {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns correlation attribute instance for the underlying content of the
|
|
||||||
* node.
|
|
||||||
*
|
|
||||||
* Null implementation of an abstract method.
|
|
||||||
*
|
|
||||||
* @return correlation attribute instance for the underlying content of the
|
|
||||||
* node.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected CorrelationAttributeInstance getCorrelationAttributeInstance() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns comment property for the node.
|
|
||||||
*
|
|
||||||
* Null implementation of an abstract method.
|
|
||||||
*
|
|
||||||
* @param tags list of tags
|
|
||||||
* @param attribute correlation attribute instance
|
|
||||||
*
|
|
||||||
* @return Comment property for the underlying content of the node.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected DataResultViewerTable.HasCommentStatus getCommentProperty(List<Tag> tags, CorrelationAttributeInstance attribute) {
|
|
||||||
return DataResultViewerTable.HasCommentStatus.NO_COMMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns occurrences/count property for the node.
|
|
||||||
*
|
|
||||||
* Null implementation of an abstract method.
|
|
||||||
*
|
|
||||||
* @param attributeType the type of the attribute to count
|
|
||||||
* @param attributeValue the value of the attribute to coun
|
|
||||||
* @param defaultDescription a description to use when none is determined by
|
|
||||||
* the getCountPropertyAndDescription method
|
|
||||||
*
|
|
||||||
* @return count property for the underlying content of the node.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance.Type attributeType, String attributeValue, String defaultDescription) {
|
|
||||||
return Pair.of(-1L, NO_DESCR);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -21,12 +21,8 @@ package org.sleuthkit.autopsy.datamodel;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.swing.Action;
|
import javax.swing.Action;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
|
||||||
import org.openide.nodes.Sheet;
|
import org.openide.nodes.Sheet;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
|
||||||
import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable;
|
|
||||||
import static org.sleuthkit.autopsy.datamodel.AbstractContentNode.NO_DESCR;
|
|
||||||
import org.sleuthkit.datamodel.UnsupportedContent;
|
import org.sleuthkit.datamodel.UnsupportedContent;
|
||||||
import org.sleuthkit.datamodel.Tag;
|
import org.sleuthkit.datamodel.Tag;
|
||||||
|
|
||||||
@ -40,8 +36,7 @@ public class UnsupportedContentNode extends AbstractContentNode<UnsupportedConte
|
|||||||
* @param unsupportedContent underlying Content instance
|
* @param unsupportedContent underlying Content instance
|
||||||
*/
|
*/
|
||||||
@NbBundle.Messages({
|
@NbBundle.Messages({
|
||||||
"UnsupportedContentNode.displayName=Unsupported Content",
|
"UnsupportedContentNode.displayName=Unsupported Content",})
|
||||||
})
|
|
||||||
public UnsupportedContentNode(UnsupportedContent unsupportedContent) {
|
public UnsupportedContentNode(UnsupportedContent unsupportedContent) {
|
||||||
super(unsupportedContent);
|
super(unsupportedContent);
|
||||||
|
|
||||||
@ -67,14 +62,13 @@ public class UnsupportedContentNode extends AbstractContentNode<UnsupportedConte
|
|||||||
}
|
}
|
||||||
|
|
||||||
return actionsList.toArray(new Action[actionsList.size()]);
|
return actionsList.toArray(new Action[actionsList.size()]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NbBundle.Messages({
|
@NbBundle.Messages({
|
||||||
"UnsupportedContentNode.createSheet.name.name=Name",
|
"UnsupportedContentNode.createSheet.name.name=Name",
|
||||||
"UnsupportedContentNode.createSheet.name.displayName=Name",
|
"UnsupportedContentNode.createSheet.name.displayName=Name",
|
||||||
"UnsupportedContentNode.createSheet.name.desc=no description",
|
"UnsupportedContentNode.createSheet.name.desc=no description",})
|
||||||
})
|
|
||||||
@Override
|
@Override
|
||||||
protected Sheet createSheet() {
|
protected Sheet createSheet() {
|
||||||
Sheet sheet = super.createSheet();
|
Sheet sheet = super.createSheet();
|
||||||
@ -124,49 +118,4 @@ public class UnsupportedContentNode extends AbstractContentNode<UnsupportedConte
|
|||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns correlation attribute instance for the underlying content of the
|
|
||||||
* node.
|
|
||||||
*
|
|
||||||
* Null implementation of an abstract method.
|
|
||||||
*
|
|
||||||
* @return correlation attribute instance for the underlying content of the
|
|
||||||
* node.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected CorrelationAttributeInstance getCorrelationAttributeInstance() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns comment property for the node.
|
|
||||||
*
|
|
||||||
* Null implementation of an abstract method.
|
|
||||||
*
|
|
||||||
* @param tags list of tags
|
|
||||||
* @param attribute correlation attribute instance
|
|
||||||
*
|
|
||||||
* @return Comment property for the underlying content of the node.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected DataResultViewerTable.HasCommentStatus getCommentProperty(List<Tag> tags, CorrelationAttributeInstance attribute) {
|
|
||||||
return DataResultViewerTable.HasCommentStatus.NO_COMMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns occurrences/count property for the node.
|
|
||||||
*
|
|
||||||
* Null implementation of an abstract method.
|
|
||||||
*
|
|
||||||
* @param attributeType the type of the attribute to count
|
|
||||||
* @param attributeValue the value of the attribute to coun
|
|
||||||
* @param defaultDescription a description to use when none is determined by
|
|
||||||
* the getCountPropertyAndDescription method
|
|
||||||
*
|
|
||||||
* @return count property for the underlying content of the node.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance.Type attributeType, String attributeValue, String defaultDescription) {
|
|
||||||
return Pair.of(-1L, NO_DESCR);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2011-2019 Basis Technology Corp.
|
* Copyright 2011-2021 Basis Technology Corp.
|
||||||
* Contact: carrier <at> sleuthkit <dot> org
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@ -26,14 +26,10 @@ import java.util.List;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javax.swing.Action;
|
import javax.swing.Action;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
|
||||||
import org.openide.nodes.Sheet;
|
import org.openide.nodes.Sheet;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
|
||||||
import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable;
|
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import static org.sleuthkit.autopsy.datamodel.AbstractContentNode.NO_DESCR;
|
|
||||||
import org.sleuthkit.autopsy.datamodel.BaseChildFactory.NoSuchEventBusException;
|
import org.sleuthkit.autopsy.datamodel.BaseChildFactory.NoSuchEventBusException;
|
||||||
import org.sleuthkit.autopsy.directorytree.ExplorerNodeActionVisitor;
|
import org.sleuthkit.autopsy.directorytree.ExplorerNodeActionVisitor;
|
||||||
import org.sleuthkit.autopsy.directorytree.NewWindowViewAction;
|
import org.sleuthkit.autopsy.directorytree.NewWindowViewAction;
|
||||||
@ -74,21 +70,21 @@ public class VolumeNode extends AbstractContentNode<Volume> {
|
|||||||
*/
|
*/
|
||||||
public VolumeNode(Volume vol) {
|
public VolumeNode(Volume vol) {
|
||||||
super(vol);
|
super(vol);
|
||||||
|
|
||||||
// set name, display name, and icon
|
// set name, display name, and icon
|
||||||
String volName = nameForVolume(vol);
|
String volName = nameForVolume(vol);
|
||||||
long end = vol.getStart() + (vol.getLength() - 1);
|
long end = vol.getStart() + (vol.getLength() - 1);
|
||||||
String tempVolName = volName + " (" + vol.getDescription() + ": " + vol.getStart() + "-" + end + ")";
|
String tempVolName = volName + " (" + vol.getDescription() + ": " + vol.getStart() + "-" + end + ")";
|
||||||
|
|
||||||
// If this is a pool volume use a custom display name
|
// If this is a pool volume use a custom display name
|
||||||
try {
|
try {
|
||||||
if (vol.getParent() != null &&
|
if (vol.getParent() != null
|
||||||
vol.getParent().getParent() instanceof Pool) {
|
&& vol.getParent().getParent() instanceof Pool) {
|
||||||
// Pool volumes are not contiguous so printing a range of blocks is inaccurate
|
// Pool volumes are not contiguous so printing a range of blocks is inaccurate
|
||||||
tempVolName = volName + " (" + vol.getDescription() + ": " + vol.getStart() + ")";
|
tempVolName = volName + " (" + vol.getDescription() + ": " + vol.getStart() + ")";
|
||||||
}
|
}
|
||||||
} catch (TskCoreException ex) {
|
} catch (TskCoreException ex) {
|
||||||
logger.log(Level.WARNING, "Error looking up parent(s) of volume with obj ID = "+ vol.getId(), ex);
|
logger.log(Level.WARNING, "Error looking up parent(s) of volume with obj ID = " + vol.getId(), ex);
|
||||||
}
|
}
|
||||||
this.setDisplayName(tempVolName);
|
this.setDisplayName(tempVolName);
|
||||||
|
|
||||||
@ -244,49 +240,4 @@ public class VolumeNode extends AbstractContentNode<Volume> {
|
|||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns correlation attribute instance for the underlying content of the
|
|
||||||
* node.
|
|
||||||
*
|
|
||||||
* Null implementation of an abstract method.
|
|
||||||
*
|
|
||||||
* @return correlation attribute instance for the underlying content of the
|
|
||||||
* node.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected CorrelationAttributeInstance getCorrelationAttributeInstance() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns comment property for the node.
|
|
||||||
*
|
|
||||||
* Null implementation of an abstract method.
|
|
||||||
*
|
|
||||||
* @param tags list of tags
|
|
||||||
* @param attribute correlation attribute instance
|
|
||||||
*
|
|
||||||
* @return Comment property for the underlying content of the node.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected DataResultViewerTable.HasCommentStatus getCommentProperty(List<Tag> tags, CorrelationAttributeInstance attribute) {
|
|
||||||
return DataResultViewerTable.HasCommentStatus.NO_COMMENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns occurrences/count property for the node.
|
|
||||||
*
|
|
||||||
* Null implementation of an abstract method.
|
|
||||||
*
|
|
||||||
* @param attributeType the type of the attribute to count
|
|
||||||
* @param attributeValue the value of the attribute to coun
|
|
||||||
* @param defaultDescription a description to use when none is determined by
|
|
||||||
* the getCountPropertyAndDescription method
|
|
||||||
*
|
|
||||||
* @return count property for the underlying content of the node.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance.Type attributeType, String attributeValue, String defaultDescription) {
|
|
||||||
return Pair.of(-1L, NO_DESCR);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user