mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-15 01:07:42 +00:00
Addressed review comments.
This commit is contained in:
parent
ed4da71c1a
commit
2ecd3a56b4
@ -18,13 +18,10 @@
|
|||||||
*/
|
*/
|
||||||
package org.sleuthkit.autopsy.communications.relationships;
|
package org.sleuthkit.autopsy.communications.relationships;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.openide.nodes.Sheet;
|
import org.openide.nodes.Sheet;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
|
||||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
|
||||||
import org.openide.util.NbBundle.Messages;
|
import org.openide.util.NbBundle.Messages;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.autopsy.datamodel.BlackboardArtifactNode;
|
import org.sleuthkit.autopsy.datamodel.BlackboardArtifactNode;
|
||||||
@ -40,7 +37,6 @@ import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHO
|
|||||||
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_TO;
|
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PHONE_NUMBER_TO;
|
||||||
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SUBJECT;
|
import static org.sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SUBJECT;
|
||||||
import static org.sleuthkit.datamodel.BlackboardAttribute.TSK_BLACKBOARD_ATTRIBUTE_VALUE_TYPE.DATETIME;
|
import static org.sleuthkit.datamodel.BlackboardAttribute.TSK_BLACKBOARD_ATTRIBUTE_VALUE_TYPE.DATETIME;
|
||||||
import org.sleuthkit.datamodel.Tag;
|
|
||||||
import org.sleuthkit.datamodel.TimeUtilities;
|
import org.sleuthkit.datamodel.TimeUtilities;
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
import org.sleuthkit.autopsy.communications.Utils;
|
import org.sleuthkit.autopsy.communications.Utils;
|
||||||
@ -72,7 +68,6 @@ final class MessageNode extends BlackboardArtifactNode {
|
|||||||
@Override
|
@Override
|
||||||
protected Sheet createSheet() {
|
protected Sheet createSheet() {
|
||||||
Sheet sheet = super.createSheet();
|
Sheet sheet = super.createSheet();
|
||||||
List<Tag> tags = getAllTagsFromDatabase();
|
|
||||||
Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
|
Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
|
||||||
if (sheetSet == null) {
|
if (sheetSet == null) {
|
||||||
sheetSet = Sheet.createPropertiesSet();
|
sheetSet = Sheet.createPropertiesSet();
|
||||||
|
@ -74,8 +74,6 @@ import org.sleuthkit.datamodel.TskData;
|
|||||||
public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends AbstractContentNode<T> {
|
public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends AbstractContentNode<T> {
|
||||||
|
|
||||||
private static final Logger logger = Logger.getLogger(AbstractAbstractFileNode.class.getName());
|
private static final Logger logger = Logger.getLogger(AbstractAbstractFileNode.class.getName());
|
||||||
@NbBundle.Messages("AbstractAbstractFileNode.addFileProperty.desc=no description")
|
|
||||||
private static final String NO_DESCR = AbstractAbstractFileNode_addFileProperty_desc();
|
|
||||||
|
|
||||||
private static final Set<Case.Events> CASE_EVENTS_OF_INTEREST = EnumSet.of(Case.Events.CURRENT_CASE,
|
private static final Set<Case.Events> CASE_EVENTS_OF_INTEREST = EnumSet.of(Case.Events.CURRENT_CASE,
|
||||||
Case.Events.CONTENT_TAG_ADDED, Case.Events.CONTENT_TAG_DELETED, Case.Events.CR_COMMENT_CHANGED);
|
Case.Events.CONTENT_TAG_ADDED, Case.Events.CONTENT_TAG_DELETED, Case.Events.CR_COMMENT_CHANGED);
|
||||||
@ -328,9 +326,11 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create place holders for S C O
|
// Create place holders for S C O
|
||||||
properties.add(new NodeProperty<>(SCORE.toString(), SCORE.toString(), NO_DESCR, ""));
|
properties.add(new NodeProperty<>(SCORE.toString(), SCORE.toString(), VALUE_LOADING, ""));
|
||||||
properties.add(new NodeProperty<>(COMMENT.toString(), COMMENT.toString(), NO_DESCR, ""));
|
properties.add(new NodeProperty<>(COMMENT.toString(), COMMENT.toString(), VALUE_LOADING, ""));
|
||||||
properties.add(new NodeProperty<>(OCCURRENCES.toString(), OCCURRENCES.toString(), NO_DESCR, ""));
|
if (UserPreferences.hideCentralRepoCommentsAndOccurrences() == false) {
|
||||||
|
properties.add(new NodeProperty<>(OCCURRENCES.toString(), OCCURRENCES.toString(), VALUE_LOADING, ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Get the SCO columns data in a background task
|
// Get the SCO columns data in a background task
|
||||||
|
@ -64,14 +64,15 @@ public abstract class AbstractContentNode<T extends Content> extends ContentNode
|
|||||||
* populate this node.
|
* populate this node.
|
||||||
*/
|
*/
|
||||||
static final ExecutorService backgroundTasksPool;
|
static final ExecutorService backgroundTasksPool;
|
||||||
static final Integer MAX_POOL_SIZE = 10;
|
private static final Integer MAX_POOL_SIZE = 10;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default no description string
|
* Default no description string
|
||||||
*/
|
*/
|
||||||
@NbBundle.Messages("AbstractContentNode.nodescription=no description")
|
@NbBundle.Messages({"AbstractContentNode.nodescription=no description",
|
||||||
|
"AbstractContentNode.valueLoading=value loading"})
|
||||||
protected static final String NO_DESCR = Bundle.AbstractContentNode_nodescription();
|
protected static final String NO_DESCR = Bundle.AbstractContentNode_nodescription();
|
||||||
|
protected static final String VALUE_LOADING = Bundle.AbstractContentNode_valueLoading();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event signals to indicate the background tasks have completed processing.
|
* Event signals to indicate the background tasks have completed processing.
|
||||||
|
@ -99,10 +99,7 @@ public class BlackboardArtifactNode extends AbstractContentNode<BlackboardArtifa
|
|||||||
private Content associated = null;
|
private Content associated = null;
|
||||||
|
|
||||||
private List<NodeProperty<? extends Object>> customProperties;
|
private List<NodeProperty<? extends Object>> customProperties;
|
||||||
|
|
||||||
protected final static String NO_DESCR = NbBundle.getMessage(BlackboardArtifactNode.class, "BlackboardArtifactNode.noDesc.text");
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Artifact types which should have the full unique path of the associated
|
* Artifact types which should have the full unique path of the associated
|
||||||
* content as a property.
|
* content as a property.
|
||||||
@ -367,9 +364,11 @@ public class BlackboardArtifactNode extends AbstractContentNode<BlackboardArtifa
|
|||||||
this.getSourceName()));
|
this.getSourceName()));
|
||||||
|
|
||||||
// Create place holders for S C O
|
// Create place holders for S C O
|
||||||
sheetSet.put(new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_score_name(), Bundle.BlackboardArtifactNode_createSheet_score_displayName(), NO_DESCR, ""));
|
sheetSet.put(new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_score_name(), Bundle.BlackboardArtifactNode_createSheet_score_displayName(), VALUE_LOADING, ""));
|
||||||
sheetSet.put(new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_comment_name(), Bundle.BlackboardArtifactNode_createSheet_comment_displayName(), NO_DESCR, ""));
|
sheetSet.put(new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_comment_name(), Bundle.BlackboardArtifactNode_createSheet_comment_displayName(), VALUE_LOADING, ""));
|
||||||
sheetSet.put(new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_count_name(), Bundle.BlackboardArtifactNode_createSheet_count_displayName(), NO_DESCR, ""));
|
if (UserPreferences.hideCentralRepoCommentsAndOccurrences() == false) {
|
||||||
|
sheetSet.put(new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_count_name(), Bundle.BlackboardArtifactNode_createSheet_count_displayName(), VALUE_LOADING, ""));
|
||||||
|
}
|
||||||
|
|
||||||
// Get the SCO columns data in a background task
|
// Get the SCO columns data in a background task
|
||||||
backgroundTasksPool.submit(new GetSCOTask(
|
backgroundTasksPool.submit(new GetSCOTask(
|
||||||
@ -596,14 +595,33 @@ public class BlackboardArtifactNode extends AbstractContentNode<BlackboardArtifa
|
|||||||
* Used by (subclasses of) BlackboardArtifactNode to add the comment
|
* Used by (subclasses of) BlackboardArtifactNode to add the comment
|
||||||
* property to their sheets.
|
* property to their sheets.
|
||||||
*
|
*
|
||||||
|
* @param sheetSet the modifiable Sheet.Set to add the property to
|
||||||
|
* @param tags the list of tags associated with the file
|
||||||
|
* @param attribute the correlation attribute associated with this
|
||||||
|
* artifact's associated file, null if central repo is not
|
||||||
|
* enabled
|
||||||
|
*
|
||||||
|
* @deprecated Use the GetSCOTask to get this data on a background thread...,
|
||||||
|
* and then update the property sheet asynchronously
|
||||||
|
*/
|
||||||
|
@NbBundle.Messages({"BlackboardArtifactNode.createSheet.comment.name=C",
|
||||||
|
"BlackboardArtifactNode.createSheet.comment.displayName=C"})
|
||||||
|
@Deprecated
|
||||||
|
protected final void addCommentProperty(Sheet.Set sheetSet, List<Tag> tags, CorrelationAttributeInstance attribute) {
|
||||||
|
HasCommentStatus status = getCommentProperty(tags, attribute );
|
||||||
|
sheetSet.put(new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_comment_name(), Bundle.BlackboardArtifactNode_createSheet_comment_displayName(), NO_DESCR,
|
||||||
|
status));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the comment property for the node
|
||||||
|
*
|
||||||
* @param tags the list of tags associated with the file
|
* @param tags the list of tags associated with the file
|
||||||
* @param attribute the correlation attribute associated with this
|
* @param attribute the correlation attribute associated with this
|
||||||
* artifact's associated file, null if central repo is not
|
* artifact's associated file, null if central repo is not
|
||||||
* enabled
|
* enabled
|
||||||
* @return comment property
|
* @return comment property
|
||||||
*/
|
*/
|
||||||
@NbBundle.Messages({"BlackboardArtifactNode.createSheet.comment.name=C",
|
|
||||||
"BlackboardArtifactNode.createSheet.comment.displayName=C"})
|
|
||||||
@Override
|
@Override
|
||||||
protected DataResultViewerTable.HasCommentStatus getCommentProperty(List<Tag> tags, CorrelationAttributeInstance attribute) {
|
protected DataResultViewerTable.HasCommentStatus getCommentProperty(List<Tag> tags, CorrelationAttributeInstance attribute) {
|
||||||
|
|
||||||
@ -627,14 +645,15 @@ public class BlackboardArtifactNode extends AbstractContentNode<BlackboardArtifa
|
|||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used by (subclasses of) BlackboardArtifactNode to add the Score property
|
* Used by (subclasses of) BlackboardArtifactNode to add the Score property
|
||||||
* to their sheets.
|
* to their sheets.
|
||||||
*
|
*
|
||||||
|
* @param sheetSet the modifiable Sheet.Set to add the property to
|
||||||
* @param tags the list of tags associated with the file
|
* @param tags the list of tags associated with the file
|
||||||
*
|
*
|
||||||
* @return score property
|
* @deprecated Use the GetSCOTask to get this data on a background thread...,
|
||||||
|
* and then update the property sheet asynchronously
|
||||||
*/
|
*/
|
||||||
@NbBundle.Messages({"BlackboardArtifactNode.createSheet.score.name=S",
|
@NbBundle.Messages({"BlackboardArtifactNode.createSheet.score.name=S",
|
||||||
"BlackboardArtifactNode.createSheet.score.displayName=S",
|
"BlackboardArtifactNode.createSheet.score.displayName=S",
|
||||||
@ -643,7 +662,19 @@ public class BlackboardArtifactNode extends AbstractContentNode<BlackboardArtifa
|
|||||||
"BlackboardArtifactNode.createSheet.taggedItem.description=Result or associated file has been tagged.",
|
"BlackboardArtifactNode.createSheet.taggedItem.description=Result or associated file has been tagged.",
|
||||||
"BlackboardArtifactNode.createSheet.notableTaggedItem.description=Result or associated file tagged with notable tag.",
|
"BlackboardArtifactNode.createSheet.notableTaggedItem.description=Result or associated file tagged with notable tag.",
|
||||||
"BlackboardArtifactNode.createSheet.noScore.description=No score"})
|
"BlackboardArtifactNode.createSheet.noScore.description=No score"})
|
||||||
|
@Deprecated
|
||||||
|
protected final void addScorePropertyAndDescription(Sheet.Set sheetSet, List<Tag> tags) {
|
||||||
|
Pair<DataResultViewerTable.Score, String> scoreAndDescription = getScorePropertyAndDescription(tags);
|
||||||
|
sheetSet.put(new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_score_name(), Bundle.BlackboardArtifactNode_createSheet_score_displayName(), scoreAndDescription.getRight(), scoreAndDescription.getLeft()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the score property for the node.
|
||||||
|
*
|
||||||
|
* @param tags the list of tags associated with the file
|
||||||
|
*
|
||||||
|
* @return score property and description
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Pair<DataResultViewerTable.Score, String> getScorePropertyAndDescription(List<Tag> tags) {
|
protected Pair<DataResultViewerTable.Score, String> getScorePropertyAndDescription(List<Tag> tags) {
|
||||||
Score score = Score.NO_SCORE;
|
Score score = Score.NO_SCORE;
|
||||||
@ -693,17 +724,40 @@ public class BlackboardArtifactNode extends AbstractContentNode<BlackboardArtifa
|
|||||||
|
|
||||||
return Pair.of(score, description);
|
return Pair.of(score, description);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Used by (subclasses of) BlackboardArtifactNode to add the Occurrences property
|
||||||
|
* to their sheets.
|
||||||
|
*
|
||||||
|
* @param sheetSet the modifiable Sheet.Set to add the property to
|
||||||
|
* @param attribute correlation attribute instance
|
||||||
|
*
|
||||||
|
* @deprecated Use the GetSCOTask to get this data on a background thread...,
|
||||||
|
* and then update the property sheet asynchronously
|
||||||
|
*/
|
||||||
@NbBundle.Messages({"BlackboardArtifactNode.createSheet.count.name=O",
|
@NbBundle.Messages({"BlackboardArtifactNode.createSheet.count.name=O",
|
||||||
"BlackboardArtifactNode.createSheet.count.displayName=O",
|
"BlackboardArtifactNode.createSheet.count.displayName=O",
|
||||||
"BlackboardArtifactNode.createSheet.count.noCentralRepo.description=Central repository was not enabled when this column was populated",
|
"BlackboardArtifactNode.createSheet.count.noCentralRepo.description=Central repository was not enabled when this column was populated",
|
||||||
"BlackboardArtifactNode.createSheet.count.hashLookupNotRun.description=Hash lookup had not been run on this artifact's associated file when the column was populated",
|
"BlackboardArtifactNode.createSheet.count.hashLookupNotRun.description=Hash lookup had not been run on this artifact's associated file when the column was populated",
|
||||||
"# {0} - occuranceCount",
|
"# {0} - occuranceCount",
|
||||||
"BlackboardArtifactNode.createSheet.count.description=There were {0} datasource(s) found with occurances of the correlation value"})
|
"BlackboardArtifactNode.createSheet.count.description=There were {0} datasource(s) found with occurances of the correlation value"})
|
||||||
|
@Deprecated
|
||||||
|
protected final void addCountProperty(Sheet.Set sheetSet, CorrelationAttributeInstance attribute) {
|
||||||
|
Pair<Long, String> countAndDescription = getCountPropertyAndDescription(attribute);
|
||||||
|
sheetSet.put(
|
||||||
|
new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_count_name(), Bundle.BlackboardArtifactNode_createSheet_count_displayName(), countAndDescription.getRight(), countAndDescription.getLeft()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the Occurrences property for the node.
|
||||||
|
*
|
||||||
|
* @param attribute correlation attribute instance
|
||||||
|
*
|
||||||
|
* @return count and description
|
||||||
|
*
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance attribute) {
|
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance attribute) {
|
||||||
Long count = -1L; //The column renderer will not display negative values, negative value used when count unavailble to preserve sorting
|
Long count = -1L;
|
||||||
String description = Bundle.BlackboardArtifactNode_createSheet_count_noCentralRepo_description();
|
String description = Bundle.BlackboardArtifactNode_createSheet_count_noCentralRepo_description();
|
||||||
try {
|
try {
|
||||||
//don't perform the query if there is no correlation value
|
//don't perform the query if there is no correlation value
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
AbstractAbstractFileNode.accessTimeColLbl=Access Time
|
AbstractAbstractFileNode.accessTimeColLbl=Access Time
|
||||||
AbstractAbstractFileNode.addFileProperty.desc=no description
|
|
||||||
AbstractAbstractFileNode.attrAddrColLbl=Attr. Addr.
|
AbstractAbstractFileNode.attrAddrColLbl=Attr. Addr.
|
||||||
AbstractAbstractFileNode.changeTimeColLbl=Change Time
|
AbstractAbstractFileNode.changeTimeColLbl=Change Time
|
||||||
AbstractAbstractFileNode.createdTimeColLbl=Created Time
|
AbstractAbstractFileNode.createdTimeColLbl=Created Time
|
||||||
@ -38,6 +37,7 @@ AbstractAbstractFileNode.typeDirColLbl=Type(Dir)
|
|||||||
AbstractAbstractFileNode.typeMetaColLbl=Type(Meta)
|
AbstractAbstractFileNode.typeMetaColLbl=Type(Meta)
|
||||||
AbstractAbstractFileNode.useridColLbl=UserID
|
AbstractAbstractFileNode.useridColLbl=UserID
|
||||||
AbstractContentNode.nodescription=no description
|
AbstractContentNode.nodescription=no description
|
||||||
|
AbstractContentNode.valueLoading=value loading
|
||||||
AbstractFsContentNode.noDesc.text=no description
|
AbstractFsContentNode.noDesc.text=no description
|
||||||
ArtifactStringContent.attrsTableHeader.sources=Source(s)
|
ArtifactStringContent.attrsTableHeader.sources=Source(s)
|
||||||
ArtifactStringContent.attrsTableHeader.type=Type
|
ArtifactStringContent.attrsTableHeader.type=Type
|
||||||
|
@ -37,7 +37,7 @@ class GetSCOTask implements Runnable {
|
|||||||
private final WeakReference<AbstractContentNode<?>> weakNodeRef;
|
private final WeakReference<AbstractContentNode<?>> weakNodeRef;
|
||||||
private final PropertyChangeListener listener;
|
private final PropertyChangeListener listener;
|
||||||
|
|
||||||
public GetSCOTask(WeakReference<AbstractContentNode<?>> weakContentRef, PropertyChangeListener listener) {
|
GetSCOTask(WeakReference<AbstractContentNode<?>> weakContentRef, PropertyChangeListener listener) {
|
||||||
this.weakNodeRef = weakContentRef;
|
this.weakNodeRef = weakContentRef;
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user