mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-14 17:06:16 +00:00
remove uneeded notification code; let event handlers do it all. optionalize DrawableView
This commit is contained in:
parent
1665dc11b9
commit
1f1d59d76f
@ -19,7 +19,6 @@
|
|||||||
package org.sleuthkit.autopsy.imagegallery.actions;
|
package org.sleuthkit.autopsy.imagegallery.actions;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -37,8 +36,6 @@ import org.sleuthkit.autopsy.imagegallery.datamodel.Category;
|
|||||||
import org.sleuthkit.autopsy.imagegallery.datamodel.CategoryManager;
|
import org.sleuthkit.autopsy.imagegallery.datamodel.CategoryManager;
|
||||||
import org.sleuthkit.autopsy.imagegallery.datamodel.DrawableFile;
|
import org.sleuthkit.autopsy.imagegallery.datamodel.DrawableFile;
|
||||||
import org.sleuthkit.autopsy.imagegallery.datamodel.DrawableTagsManager;
|
import org.sleuthkit.autopsy.imagegallery.datamodel.DrawableTagsManager;
|
||||||
import org.sleuthkit.autopsy.imagegallery.grouping.GroupManager;
|
|
||||||
import org.sleuthkit.datamodel.ContentTag;
|
|
||||||
import org.sleuthkit.datamodel.Tag;
|
import org.sleuthkit.datamodel.Tag;
|
||||||
import org.sleuthkit.datamodel.TagName;
|
import org.sleuthkit.datamodel.TagName;
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
@ -154,6 +151,16 @@ public class CategorizeAction extends AddTagAction {
|
|||||||
.collect(Collectors.toList()).isEmpty()) {
|
.collect(Collectors.toList()).isEmpty()) {
|
||||||
tagsManager.addContentTag(file, tagName, comment);
|
tagsManager.addContentTag(file, tagName, comment);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
tagsManager.getContentTagsByContent(file).stream()
|
||||||
|
.filter(tag -> CategoryManager.isCategoryTagName(tag.getName()))
|
||||||
|
.forEach((ct) -> {
|
||||||
|
try {
|
||||||
|
tagsManager.deleteContentTag(ct);
|
||||||
|
} catch (TskCoreException ex) {
|
||||||
|
LOGGER.log(Level.SEVERE, "Error removing old categories result", ex);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (TskCoreException ex) {
|
} catch (TskCoreException ex) {
|
||||||
|
@ -26,10 +26,7 @@ import org.controlsfx.control.action.Action;
|
|||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.autopsy.imagegallery.DrawableTagsManager;
|
import org.sleuthkit.autopsy.imagegallery.DrawableTagsManager;
|
||||||
import org.sleuthkit.autopsy.imagegallery.ImageGalleryController;
|
import org.sleuthkit.autopsy.imagegallery.ImageGalleryController;
|
||||||
import org.sleuthkit.autopsy.imagegallery.datamodel.DrawableAttribute;
|
|
||||||
import org.sleuthkit.autopsy.imagegallery.datamodel.DrawableFile;
|
import org.sleuthkit.autopsy.imagegallery.datamodel.DrawableFile;
|
||||||
import org.sleuthkit.autopsy.imagegallery.grouping.GroupKey;
|
|
||||||
import org.sleuthkit.autopsy.imagegallery.grouping.GroupManager;
|
|
||||||
import org.sleuthkit.datamodel.ContentTag;
|
import org.sleuthkit.datamodel.ContentTag;
|
||||||
import org.sleuthkit.datamodel.TagName;
|
import org.sleuthkit.datamodel.TagName;
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
@ -50,23 +47,17 @@ public class DeleteFollowUpTagAction extends Action {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Void doInBackground() throws Exception {
|
protected Void doInBackground() throws Exception {
|
||||||
final GroupManager groupManager = controller.getGroupManager();
|
|
||||||
final DrawableTagsManager tagsManager = controller.getTagsManager();
|
final DrawableTagsManager tagsManager = controller.getTagsManager();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final TagName followUpTagName = tagsManager.getFollowUpTagName();
|
final TagName followUpTagName = tagsManager.getFollowUpTagName();
|
||||||
// remove file from old category group
|
|
||||||
groupManager.removeFromGroup(new GroupKey<TagName>(DrawableAttribute.TAGS, followUpTagName), fileID);
|
|
||||||
|
|
||||||
List<ContentTag> contentTagsByContent = tagsManager.getContentTagsByContent(file);
|
List<ContentTag> contentTagsByContent = tagsManager.getContentTagsByContent(file);
|
||||||
for (ContentTag ct : contentTagsByContent) {
|
for (ContentTag ct : contentTagsByContent) {
|
||||||
if (ct.getName().getDisplayName().equals(followUpTagName.getDisplayName())) {
|
if (ct.getName().getDisplayName().equals(followUpTagName.getDisplayName())) {
|
||||||
tagsManager.deleteContentTag(ct);
|
tagsManager.deleteContentTag(ct);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//make sure rest of ui hears category change.
|
|
||||||
// groupManager.handleFileUpdate(FileUpdateEvent.newUpdateEvent(Collections.singleton(fileID), DrawableAttribute.TAGS));
|
|
||||||
} catch (TskCoreException ex) {
|
} catch (TskCoreException ex) {
|
||||||
LOGGER.log(Level.SEVERE, "Failed to delete follow up tag.", ex);
|
LOGGER.log(Level.SEVERE, "Failed to delete follow up tag.", ex);
|
||||||
}
|
}
|
||||||
|
@ -262,7 +262,7 @@ public class CategoryManager {
|
|||||||
fireChange(Collections.singleton(addedTag.getContent().getId()), newCat);
|
fireChange(Collections.singleton(addedTag.getContent().getId()), newCat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@Subscribe
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void handleTagDeleted(ContentTagDeletedEvent event) {
|
public void handleTagDeleted(ContentTagDeletedEvent event) {
|
||||||
ContentTag deleted = event.getTag();
|
ContentTag deleted = event.getTag();
|
||||||
|
@ -293,6 +293,7 @@ public class GroupManager {
|
|||||||
if (unSeenGroups.contains(group)) {
|
if (unSeenGroups.contains(group)) {
|
||||||
unSeenGroups.remove(group);
|
unSeenGroups.remove(group);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else { //group == null
|
} else { //group == null
|
||||||
@ -550,10 +551,12 @@ public class GroupManager {
|
|||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void handleTagAdded(ContentTagAddedEvent evt) {
|
public void handleTagAdded(ContentTagAddedEvent evt) {
|
||||||
final GroupKey<TagName> groupKey = new GroupKey<>(DrawableAttribute.TAGS, evt.getAddedTag().getName());
|
if (groupBy == DrawableAttribute.TAGS || groupBy == DrawableAttribute.CATEGORY) {
|
||||||
final long fileID = evt.getAddedTag().getContent().getId();
|
final GroupKey<TagName> groupKey = new GroupKey<>(DrawableAttribute.TAGS, evt.getAddedTag().getName());
|
||||||
DrawableGroup g = getGroupForKey(groupKey);
|
final long fileID = evt.getAddedTag().getContent().getId();
|
||||||
addFileToGroup(g, groupKey, fileID);
|
DrawableGroup g = getGroupForKey(groupKey);
|
||||||
|
addFileToGroup(g, groupKey, fileID);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -615,6 +618,7 @@ public class GroupManager {
|
|||||||
final long fileID = evt.getTag().getContent().getId();
|
final long fileID = evt.getTag().getContent().getId();
|
||||||
DrawableGroup g = removeFromGroup(groupKey, fileID);
|
DrawableGroup g = removeFromGroup(groupKey, fileID);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
@ -23,6 +23,8 @@ import com.google.common.eventbus.Subscribe;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import static java.util.Objects.nonNull;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.beans.Observable;
|
import javafx.beans.Observable;
|
||||||
@ -126,6 +128,30 @@ public abstract class DrawableTileBase extends DrawableUIBase {
|
|||||||
@FXML
|
@FXML
|
||||||
protected BorderPane imageBorder;
|
protected BorderPane imageBorder;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<Long> getFileID() {
|
||||||
|
return fileIDOpt;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<DrawableFile<?>> getFile() {
|
||||||
|
if (fileIDOpt.isPresent()) {
|
||||||
|
if (fileOpt.isPresent() && fileOpt.get().getId() == fileIDOpt.get()) {
|
||||||
|
return fileOpt;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
fileOpt = Optional.of(ImageGalleryController.getDefault().getFileFromId(fileIDOpt.get()));
|
||||||
|
} catch (TskCoreException ex) {
|
||||||
|
Logger.getAnonymousLogger().log(Level.WARNING, "failed to get DrawableFile for obj_id" + fileIDOpt.get(), ex);
|
||||||
|
fileOpt = Optional.empty();
|
||||||
|
}
|
||||||
|
return fileOpt;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* the groupPane this {@link DrawableTileBase} is embedded in
|
* the groupPane this {@link DrawableTileBase} is embedded in
|
||||||
*/
|
*/
|
||||||
@ -258,7 +284,7 @@ public abstract class DrawableTileBase extends DrawableUIBase {
|
|||||||
try {
|
try {
|
||||||
globalSelectionModel.clearAndSelect(file.getId());
|
globalSelectionModel.clearAndSelect(file.getId());
|
||||||
new AddDrawableTagAction(getController()).addTag(getController().getTagsManager().getFollowUpTagName(), "");
|
new AddDrawableTagAction(getController()).addTag(getController().getTagsManager().getFollowUpTagName(), "");
|
||||||
new AddDrawableTagAction(controller).addTag(followUpTagName, "");
|
new AddDrawableTagAction(controller).addTag(followUpTagName, "");
|
||||||
} catch (TskCoreException ex) {
|
} catch (TskCoreException ex) {
|
||||||
LOGGER.log(Level.SEVERE, "Failed to add Follow Up tag. Could not load TagName.", ex);
|
LOGGER.log(Level.SEVERE, "Failed to add Follow Up tag. Could not load TagName.", ex);
|
||||||
}
|
}
|
||||||
@ -281,10 +307,12 @@ public abstract class DrawableTileBase extends DrawableUIBase {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
if (Objects.equals(newFileID, fileIDOpt.get()) == false) {
|
||||||
|
setFileHelper(newFileID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private void setFileHelper(final Long newFileID) {
|
||||||
protected void setFileHelper(final Long newFileID) {
|
protected void setFileHelper(final Long newFileID) {
|
||||||
setFileIDOpt(Optional.ofNullable(newFileID));
|
setFileIDOpt(Optional.ofNullable(newFileID));
|
||||||
disposeContent();
|
disposeContent();
|
||||||
@ -352,14 +380,44 @@ public abstract class DrawableTileBase extends DrawableUIBase {
|
|||||||
@Subscribe
|
@Subscribe
|
||||||
@Override
|
@Override
|
||||||
public void handleTagAdded(ContentTagAddedEvent evt) {
|
public void handleTagAdded(ContentTagAddedEvent evt) {
|
||||||
|
fileIDOpt.ifPresent(fileID -> {
|
||||||
|
try {
|
||||||
|
if (fileID == evt.getAddedTag().getContent().getId()
|
||||||
|
&& evt.getAddedTag().getName() == getController().getTagsManager().getFollowUpTagName()) {
|
||||||
|
|
||||||
updateFollowUpIcon();
|
Platform.runLater(() -> {
|
||||||
|
followUpImageView.setImage(followUpIcon);
|
||||||
|
followUpToggle.setSelected(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (TskCoreException ex) {
|
||||||
|
LOGGER.log(Level.SEVERE, "Failed to get follow up status for file.", ex);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
@Override
|
@Override
|
||||||
public void handleTagDeleted(ContentTagDeletedEvent evt) {
|
public void handleTagDeleted(ContentTagDeletedEvent evt) {
|
||||||
updateFollowUpIcon();
|
|
||||||
|
fileIDOpt.ifPresent(fileID -> {
|
||||||
|
try {
|
||||||
|
if (fileID == evt.getDeletedTag().getContent().getId()
|
||||||
|
&& evt.getDeletedTag().getName() == controller.getTagsManager().getFollowUpTagName()) {
|
||||||
|
updateFollowUpIcon();
|
||||||
|
}
|
||||||
|
} catch (TskCoreException ex) {
|
||||||
|
LOGGER.log(Level.SEVERE, "Failed to get follow up status for file.", ex);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateFollowUpIcon() {
|
||||||
|
boolean hasFollowUp = hasFollowUp();
|
||||||
|
Platform.runLater(() -> {
|
||||||
|
followUpImageView.setImage(hasFollowUp ? followUpIcon : followUpGray);
|
||||||
|
followUpToggle.setSelected(hasFollowUp);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
|
@ -2,6 +2,7 @@ package org.sleuthkit.autopsy.imagegallery.gui.drawableviews;
|
|||||||
|
|
||||||
import com.google.common.eventbus.Subscribe;
|
import com.google.common.eventbus.Subscribe;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.scene.layout.Border;
|
import javafx.scene.layout.Border;
|
||||||
|
@ -24,6 +24,7 @@ import java.util.Arrays;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.beans.property.SimpleObjectProperty;
|
import javafx.beans.property.SimpleObjectProperty;
|
||||||
@ -83,7 +84,6 @@ public class MetaDataPane extends DrawableUIBase {
|
|||||||
|
|
||||||
public MetaDataPane(ImageGalleryController controller) {
|
public MetaDataPane(ImageGalleryController controller) {
|
||||||
super(controller);
|
super(controller);
|
||||||
|
|
||||||
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("MetaDataPane.fxml"));
|
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("MetaDataPane.fxml"));
|
||||||
fxmlLoader.setRoot(this);
|
fxmlLoader.setRoot(this);
|
||||||
fxmlLoader.setController(this);
|
fxmlLoader.setController(this);
|
||||||
@ -93,8 +93,6 @@ public class MetaDataPane extends DrawableUIBase {
|
|||||||
} catch (IOException exception) {
|
} catch (IOException exception) {
|
||||||
throw new RuntimeException(exception);
|
throw new RuntimeException(exception);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
void initialize() {
|
void initialize() {
|
||||||
@ -155,10 +153,35 @@ public class MetaDataPane extends DrawableUIBase {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
volatile private Optional<DrawableFile<?>> fileOpt = Optional.empty();
|
||||||
|
|
||||||
|
volatile private Optional<Long> fileIDOpt = Optional.empty();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected synchronized void setFileHelper(Long newFileID) {
|
protected synchronized void setFileHelper(Long newFileID) {
|
||||||
setFileIDOpt(Optional.ofNullable(newFileID));
|
setFileIDOpt(Optional.ofNullable(newFileID));
|
||||||
if (newFileID == null) {
|
if (newFileID == null) {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<DrawableFile<?>> getFile() {
|
||||||
|
if (fileIDOpt.isPresent()) {
|
||||||
|
if (fileOpt.isPresent() && fileOpt.get().getId() == fileIDOpt.get()) {
|
||||||
|
return fileOpt;
|
||||||
|
} else {
|
||||||
|
return fileOpt;
|
||||||
|
if (Objects.equals(newFileID, fileIDOpt.get()) == false) {
|
||||||
|
setFileHelper(newFileID);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (nonNull(newFileID)) {
|
||||||
|
setFileHelper(newFileID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setFileHelper(newFileID);
|
||||||
|
}
|
||||||
|
private void setFileHelper(Long newFileID) {
|
||||||
|
fileIDOpt = Optional.of(newFileID);
|
||||||
|
if (newFileID == null) {
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
imageView.setImage(null);
|
imageView.setImage(null);
|
||||||
tableView.getItems().clear();
|
tableView.getItems().clear();
|
||||||
@ -183,6 +206,7 @@ public class MetaDataPane extends DrawableUIBase {
|
|||||||
|
|
||||||
updateCategory();
|
updateCategory();
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -227,9 +251,14 @@ public class MetaDataPane extends DrawableUIBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleTagDeleted(ContentTagDeletedEvent evt) {
|
public void handleTagDeleted(ContentTagDeletedEvent evt) {
|
||||||
if (getFile() != null && evt.getDeletedTag().getContent().getId() == getFileID()) {
|
handleTagChanged(evt.getDeletedTag().getContent().getId());
|
||||||
updateUI();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void handleTagChanged(Long tagFileID) {
|
||||||
|
getFileID().ifPresent(fileID -> {
|
||||||
|
if (Objects.equals(tagFileID, fileID)) {
|
||||||
|
updateUI();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,6 @@ import org.openide.util.Exceptions;
|
|||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.autopsy.coreutils.ThreadConfined;
|
import org.sleuthkit.autopsy.coreutils.ThreadConfined;
|
||||||
import org.sleuthkit.autopsy.coreutils.ThreadConfined.ThreadType;
|
import org.sleuthkit.autopsy.coreutils.ThreadConfined.ThreadType;
|
||||||
import org.sleuthkit.autopsy.imagegallery.DrawableTagsManager;
|
|
||||||
import org.sleuthkit.autopsy.imagegallery.FXMLConstructor;
|
import org.sleuthkit.autopsy.imagegallery.FXMLConstructor;
|
||||||
import org.sleuthkit.autopsy.imagegallery.FileIDSelectionModel;
|
import org.sleuthkit.autopsy.imagegallery.FileIDSelectionModel;
|
||||||
import org.sleuthkit.autopsy.imagegallery.actions.CategorizeAction;
|
import org.sleuthkit.autopsy.imagegallery.actions.CategorizeAction;
|
||||||
@ -319,6 +318,7 @@ public class SlideShowView extends DrawableTileBase {
|
|||||||
public Category updateCategory() {
|
public Category updateCategory() {
|
||||||
if (getFile().isPresent()) {
|
if (getFile().isPresent()) {
|
||||||
final Category category = super.updateCategory();
|
final Category category = super.updateCategory();
|
||||||
|
final Border border1 = hasHashHit() && (category == Category.ZERO)
|
||||||
ToggleButton toggleForCategory = getToggleForCategory(category);
|
ToggleButton toggleForCategory = getToggleForCategory(category);
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
toggleForCategory.setSelected(true);
|
toggleForCategory.setSelected(true);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user