mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-17 02:07:42 +00:00
3202 remove confirmation for changing tag status in current case
This commit is contained in:
parent
bb40f1d8e8
commit
9b7ada8f64
@ -57,7 +57,6 @@ public final class TagNameDefinition implements Comparable<TagNameDefinition> {
|
||||
* @param color The color for the tag name.
|
||||
* @param knownStatus The status denoted by the tag.
|
||||
*/
|
||||
|
||||
public TagNameDefinition(String displayName, String description, TagName.HTML_COLOR color, TskData.FileKnown status) {
|
||||
|
||||
this.displayName = displayName;
|
||||
@ -93,7 +92,6 @@ public final class TagNameDefinition implements Comparable<TagNameDefinition> {
|
||||
return color;
|
||||
}
|
||||
|
||||
|
||||
public TskData.FileKnown getKnownStatus() {
|
||||
return knownStatusDenoted;
|
||||
}
|
||||
@ -139,8 +137,9 @@ public final class TagNameDefinition implements Comparable<TagNameDefinition> {
|
||||
if (!(obj instanceof TagNameDefinition)) {
|
||||
return false;
|
||||
}
|
||||
TagNameDefinition thatTagName = (TagNameDefinition) obj;
|
||||
return this.getDisplayName().equals(thatTagName.getDisplayName());
|
||||
boolean sameName = this.getDisplayName().equals(((TagNameDefinition) obj).getDisplayName());
|
||||
boolean sameStatus = this.getKnownStatus().equals(((TagNameDefinition) obj).getKnownStatus());
|
||||
return sameName && sameStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.casemodule.services;
|
||||
import java.awt.EventQueue;
|
||||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import javax.swing.DefaultListModel;
|
||||
@ -28,6 +29,7 @@ import javax.swing.JOptionPane;
|
||||
import javax.swing.event.ListSelectionEvent;
|
||||
import org.netbeans.spi.options.OptionsPanelController;
|
||||
import org.openide.util.NbBundle;
|
||||
import org.openide.util.NbBundle.Messages;
|
||||
import org.sleuthkit.autopsy.casemodule.Case;
|
||||
import org.sleuthkit.autopsy.corecomponents.OptionsPanel;
|
||||
import org.sleuthkit.autopsy.ingest.IngestManager;
|
||||
@ -40,11 +42,11 @@ import org.sleuthkit.datamodel.TskData;
|
||||
final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private static final String DEFAULT_DESCRIPTION = "";
|
||||
private static final TagName.HTML_COLOR DEFAULT_COLOR = TagName.HTML_COLOR.NONE;
|
||||
private final DefaultListModel<TagNameDefinition> tagTypesListModel;
|
||||
private Set<TagNameDefinition> tagTypes;
|
||||
private IngestJobEventPropertyChangeListener ingestJobEventsListener;
|
||||
private Set<TagPair> updatedStatusTags;
|
||||
|
||||
/**
|
||||
* Creates new form TagOptionsPanel
|
||||
@ -52,6 +54,7 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel {
|
||||
TagOptionsPanel() {
|
||||
tagTypesListModel = new DefaultListModel<>();
|
||||
tagTypes = new TreeSet<>(TagNameDefinition.getTagNameDefinitions());
|
||||
updatedStatusTags = new HashSet<>();
|
||||
initComponents();
|
||||
customizeComponents();
|
||||
}
|
||||
@ -295,12 +298,15 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel {
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
@Messages({"TagOptionsPanel.TagNameDialog.tagNameAlreadyExists.message=Tag name must be unique. A tag with this name already exists.",
|
||||
"TagOptionsPanel.TagNameDialog.tagNameAlreadyExists.title=Duplicate Tag Name"})
|
||||
|
||||
private void newTagNameButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newTagNameButtonActionPerformed
|
||||
TagNameDialog dialog = new TagNameDialog();
|
||||
TagNameDialog.BUTTON_PRESSED result = dialog.getResult();
|
||||
if (result == TagNameDialog.BUTTON_PRESSED.OK) {
|
||||
TskData.FileKnown status = dialog.isTagNotable() ? TskData.FileKnown.BAD : TskData.FileKnown.UNKNOWN;
|
||||
TagNameDefinition newTagType = new TagNameDefinition(dialog.getTagName(), DEFAULT_DESCRIPTION, DEFAULT_COLOR, status);
|
||||
TagNameDefinition newTagType = new TagNameDefinition(dialog.getTagName(), dialog.getTagDesciption(), DEFAULT_COLOR, status);
|
||||
/*
|
||||
* If tag name already exists, don't add the tag name.
|
||||
*/
|
||||
@ -312,8 +318,8 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel {
|
||||
firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(null,
|
||||
NbBundle.getMessage(TagOptionsPanel.class, "TagNamesSettingsPanel.JOptionPane.tagNameAlreadyExists.message"),
|
||||
NbBundle.getMessage(TagOptionsPanel.class, "TagNamesSettingsPanel.JOptionPane.tagNameAlreadyExists.title"),
|
||||
NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.TagNameDialog.tagNameAlreadyExists.message"),
|
||||
NbBundle.getMessage(TagOptionsPanel.class, "TagOptionsPanel.TagNameDialog.tagNameAlreadyExists.title"),
|
||||
JOptionPane.INFORMATION_MESSAGE);
|
||||
}
|
||||
}
|
||||
@ -337,15 +343,15 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel {
|
||||
TagNameDefinition newTagType = new TagNameDefinition(dialog.getTagName(), dialog.getTagDesciption(), DEFAULT_COLOR, status);
|
||||
/*
|
||||
* If tag name already exists, don't add the tag name.
|
||||
*/
|
||||
*/
|
||||
tagTypes.remove(originalTagName);
|
||||
tagTypes.add(newTagType);
|
||||
updateTagNamesListModel();
|
||||
tagNamesList.setSelectedValue(newTagType, true);
|
||||
updatePanel();
|
||||
firePropertyChange(OptionsPanelController.PROP_CHANGED, null, null);
|
||||
if (originalTagName.getKnownStatus() != newTagType.getKnownStatus() && Case.isCaseOpen()){
|
||||
Case.getCurrentCase().notifyTagStatusChanged(originalTagName,newTagType);
|
||||
if (originalTagName.getKnownStatus() != newTagType.getKnownStatus() && Case.isCaseOpen()) {
|
||||
updatedStatusTags.add(new TagPair(originalTagName, newTagType));
|
||||
}
|
||||
}
|
||||
}//GEN-LAST:event_editTagNameButtonActionPerformed
|
||||
@ -398,6 +404,18 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel {
|
||||
@Override
|
||||
public void store() {
|
||||
TagNameDefinition.setTagNameDefinitions(tagTypes);
|
||||
sendStatusChangedEvents();
|
||||
}
|
||||
|
||||
void cancelChanges() {
|
||||
updatedStatusTags.clear();
|
||||
}
|
||||
|
||||
private void sendStatusChangedEvents() {
|
||||
for (TagPair modifiedTag : updatedStatusTags) {
|
||||
Case.getCurrentCase().notifyTagStatusChanged(modifiedTag.getOldValue(), modifiedTag.getNewValue());
|
||||
}
|
||||
updatedStatusTags.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -440,6 +458,42 @@ final class TagOptionsPanel extends javax.swing.JPanel implements OptionsPanel {
|
||||
super.finalize();
|
||||
}
|
||||
|
||||
private class TagPair implements Comparable<TagPair> {
|
||||
|
||||
private TagNameDefinition oldValue;
|
||||
private TagNameDefinition newValue;
|
||||
|
||||
private TagPair(TagNameDefinition oldV, TagNameDefinition newV) {
|
||||
oldValue = oldV;
|
||||
newValue = newV;
|
||||
}
|
||||
|
||||
private TagNameDefinition getOldValue() {
|
||||
return oldValue;
|
||||
}
|
||||
|
||||
private TagNameDefinition getNewValue() {
|
||||
return newValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares this tag name definition with the specified tag name
|
||||
* definition for order.
|
||||
*
|
||||
* @param other The tag name definition to which to compare this tag
|
||||
* name definition.
|
||||
*
|
||||
* @return Negative integer, zero, or a positive integer to indicate
|
||||
* that this tag name definition is less than, equal to, or
|
||||
* greater than the specified tag name definition.
|
||||
*/
|
||||
@Override
|
||||
public int compareTo(TagPair other) {
|
||||
return this.getNewValue().compareTo(other.getNewValue());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* A property change listener that listens to ingest job events.
|
||||
*/
|
||||
|
@ -69,6 +69,7 @@ public final class TagsOptionsPanelController extends OptionsPanelController {
|
||||
*/
|
||||
@Override
|
||||
public void cancel() {
|
||||
getPanel().cancelChanges();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -100,10 +100,9 @@ final class CaseEventListener implements PropertyChangeListener {
|
||||
}
|
||||
break;
|
||||
case TAG_STATUS_CHANGED: {
|
||||
//WJS-TODO actaully do stuff when event is seen.
|
||||
jobProcessingExecutor.submit(new TagStatusChangeTask(dbManager, evt));
|
||||
}
|
||||
|
||||
break;
|
||||
case CURRENT_CASE: {
|
||||
jobProcessingExecutor.submit(new CurrentCaseTask(dbManager, evt));
|
||||
}
|
||||
@ -318,12 +317,9 @@ final class CaseEventListener implements PropertyChangeListener {
|
||||
TskData.FileKnown status = ((TagNameDefinition) event.getNewValue()).getKnownStatus();
|
||||
/**
|
||||
* Set knownBad status for all files/artifacts in the given case
|
||||
* that are tagged with the given tag name. Files/artifacts that are
|
||||
* not already in the database will be added.
|
||||
*
|
||||
* @param tagName The name of the tag to search for
|
||||
* @param curCase The case to search in
|
||||
* that are tagged with the given tag name.
|
||||
*/
|
||||
System.out.println("TAG " + ((TagNameDefinition) event.getNewValue()).getDisplayName() + " event FROM " + ((TagNameDefinition) event.getOldValue()).getKnownStatus().toString() + " TO " + status.toString());
|
||||
try {
|
||||
TagName tagName = Case.getCurrentCase().getServices().getTagsManager().getDisplayNamesToTagNamesMap().get(((TagNameDefinition) event.getNewValue()).getDisplayName());
|
||||
// First find any matching artifacts
|
||||
@ -332,50 +328,54 @@ final class CaseEventListener implements PropertyChangeListener {
|
||||
for (BlackboardArtifactTag bbTag : artifactTags) {
|
||||
List<CorrelationAttribute> convertedArtifacts = EamArtifactUtil.getCorrelationAttributeFromBlackboardArtifact(bbTag.getArtifact(), true, true);
|
||||
for (CorrelationAttribute eamArtifact : convertedArtifacts) {
|
||||
boolean hasOtherBadTags = false;
|
||||
if (status == TskData.FileKnown.UNKNOWN) {
|
||||
Content content = bbTag.getContent();
|
||||
BlackboardArtifact bbArtifact = bbTag.getArtifact();
|
||||
TagsManager tagsManager = Case.getCurrentCase().getServices().getTagsManager();
|
||||
List<BlackboardArtifactTag> tags = tagsManager.getBlackboardArtifactTagsByArtifact(bbArtifact);
|
||||
if (!(tags.stream()
|
||||
.map(tag -> tag.getName().getDisplayName())
|
||||
.filter(notableTags::contains)
|
||||
.collect(Collectors.toList())
|
||||
.isEmpty())) { // There are more bad tags on the object
|
||||
break;
|
||||
}
|
||||
if ((content instanceof AbstractFile) && (((AbstractFile) content).getKnown() == TskData.FileKnown.KNOWN)) {
|
||||
break;
|
||||
}
|
||||
BlackboardArtifact bbArtifact = bbTag.getArtifact();
|
||||
TagsManager tagsManager = Case.getCurrentCase().getServices().getTagsManager();
|
||||
List<BlackboardArtifactTag> tags = tagsManager.getBlackboardArtifactTagsByArtifact(bbArtifact);
|
||||
for (BlackboardArtifactTag t : tags) {
|
||||
if (t.getName().equals(tagName)) {
|
||||
continue;
|
||||
}
|
||||
if (notableTags.contains(t.getName().getDisplayName())) {
|
||||
hasOtherBadTags = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!hasOtherBadTags) {
|
||||
EamDb.getInstance().setArtifactInstanceKnownStatus(eamArtifact, status);
|
||||
}
|
||||
System.out.println(
|
||||
"TAG " + ((TagNameDefinition) event.getNewValue()).getDisplayName() + " event FROM " + ((TagNameDefinition) event.getOldValue()).getKnownStatus() + " TO " + ((TagNameDefinition) event.getNewValue()).getKnownStatus());
|
||||
EamDb.getInstance().setArtifactInstanceKnownStatus(eamArtifact, status);
|
||||
}
|
||||
}
|
||||
|
||||
// Now search for files
|
||||
List<ContentTag> fileTags = Case.getCurrentCase().getSleuthkitCase().getContentTagsByTagName(tagName);
|
||||
for (ContentTag contentTag : fileTags) {
|
||||
boolean hasOtherBadTags = false;
|
||||
if (status == TskData.FileKnown.UNKNOWN) {
|
||||
Content content = contentTag.getContent();
|
||||
TagsManager tagsManager = Case.getCurrentCase().getServices().getTagsManager();
|
||||
List<ContentTag> tags = tagsManager.getContentTagsByContent(content);
|
||||
if (!(tags.stream()
|
||||
.map(tag -> tag.getName().getDisplayName())
|
||||
.filter(notableTags::contains)
|
||||
.collect(Collectors.toList())
|
||||
.isEmpty())) { // There are more bad tags on the object
|
||||
continue;
|
||||
for (ContentTag t : tags) {
|
||||
if (t.getName().equals(tagName)) {
|
||||
continue;
|
||||
}
|
||||
if (notableTags.contains(t.getName().getDisplayName())) {
|
||||
hasOtherBadTags = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
System.out.println("MAKING ARTIFACT");
|
||||
final CorrelationAttribute eamArtifact = EamArtifactUtil.getEamArtifactFromContent(contentTag.getContent(),
|
||||
TskData.FileKnown.BAD, "");
|
||||
if (eamArtifact != null) {
|
||||
EamDb.getInstance().setArtifactInstanceKnownStatus(eamArtifact, status);
|
||||
System.out.println(
|
||||
"TAG " + ((TagNameDefinition) event.getNewValue()).getDisplayName() + " event FROM " + ((TagNameDefinition) event.getOldValue()).getKnownStatus() + " TO " + ((TagNameDefinition) event.getNewValue()).getKnownStatus());
|
||||
if (!hasOtherBadTags) {
|
||||
final CorrelationAttribute eamArtifact = EamArtifactUtil.getEamArtifactFromContent(contentTag.getContent(),
|
||||
status, "");
|
||||
if (eamArtifact != null) {
|
||||
EamDb.getInstance().setArtifactInstanceKnownStatus(eamArtifact, status);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (TskCoreException ex) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user