Autopsy  4.4
Graphical digital forensics platform for The Sleuth Kit and other tools.
FilterTreeTableRow.java
Go to the documentation of this file.
1 /*
2  * To change this license header, choose License Headers in Project Properties.
3  * To change this template file, choose Tools | Templates
4  * and open the template in the editor.
5  */
6 package org.sleuthkit.autopsy.timeline.ui.filtering;
7 
8 import java.util.Arrays;
9 import java.util.function.BiPredicate;
10 import javafx.scene.control.TreeItem;
11 import javafx.scene.control.TreeTableRow;
12 import org.controlsfx.control.action.Action;
13 import org.controlsfx.control.action.ActionGroup;
14 import org.controlsfx.control.action.ActionUtils;
15 import org.openide.util.NbBundle;
17 
21 class FilterTreeTableRow extends TreeTableRow<Filter> {
22 
23  @Override
24  protected void updateItem(Filter item, boolean empty) {
25  super.updateItem(item, empty);
26  if (item == null || empty) {
27  setContextMenu(null);
28  } else {
29  setContextMenu(ActionUtils.createContextMenu(Arrays.asList(new SelectActionsGroup(this))));
30  }
31  }
32 
33  @NbBundle.Messages(value = {
34  "Timeline.ui.filtering.menuItem.select=select",
35  "Timeline.ui.filtering.menuItem.all=all",
36  "Timeline.ui.filtering.menuItem.none=none",
37  "Timeline.ui.filtering.menuItem.only=only",
38  "Timeline.ui.filtering.menuItem.others=others"})
39  private static enum SelectionAction {
40  ALL(Bundle.Timeline_ui_filtering_menuItem_all(),
41  (treeItem, row) -> true),
42 
43  NONE(Bundle.Timeline_ui_filtering_menuItem_none(),
44  (treeItem, row) -> false),
45 
46  ONLY(Bundle.Timeline_ui_filtering_menuItem_only(),
47  (treeItem, row) -> treeItem == row.getTreeItem()),
48 
49  OTHER(Bundle.Timeline_ui_filtering_menuItem_others(),
50  (treeItem, row) -> treeItem != row.getTreeItem()),
51 
52  SELECT(Bundle.Timeline_ui_filtering_menuItem_select(),
53  (treeItem, row) -> false == row.getItem().isSelected());
54 
55  private final BiPredicate<TreeItem<Filter>, TreeTableRow<Filter>> selectionPredicate;
56 
57  private final String displayName;
58 
59  private SelectionAction(String displayName, BiPredicate<TreeItem<Filter>, TreeTableRow<Filter>> predicate) {
60  this.selectionPredicate = predicate;
61  this.displayName = displayName;
62  }
63 
64  public void doSelection(TreeItem<Filter> treeItem, TreeTableRow<Filter> row) {
65  treeItem.getValue().setSelected(selectionPredicate.test(treeItem, row));
66  }
67 
68  public String getDisplayName() {
69  return displayName;
70  }
71  }
72 
73  private static final class SelectActionsGroup extends ActionGroup {
74 
75  SelectActionsGroup(TreeTableRow<Filter> row) {
76  super(Bundle.Timeline_ui_filtering_menuItem_select(),
77  new Select(SelectionAction.ALL, row),
78  new Select(SelectionAction.NONE, row),
79  new Select(SelectionAction.ONLY, row),
80  new Select(SelectionAction.OTHER, row));
81  setEventHandler(new Select(SelectionAction.SELECT, row)::handle);
82  }
83  }
84 
85  private static final class Select extends Action {
86 
87  public TreeTableRow<Filter> getRow() {
88  return row;
89  }
90  private final TreeTableRow<Filter> row;
92 
93  Select(SelectionAction strategy, TreeTableRow<Filter> row) {
94  super(strategy.getDisplayName());
95  this.row = row;
96  this.selectionAction = strategy;
97  setEventHandler(actionEvent -> row.getTreeItem().getParent().getChildren().forEach(this::doSelection));
98  }
99 
100  private void doSelection(TreeItem<Filter> treeItem) {
101  selectionAction.doSelection(treeItem, getRow());
102  }
103  }
104 }
SelectionAction(String displayName, BiPredicate< TreeItem< Filter >, TreeTableRow< Filter >> predicate)
final BiPredicate< TreeItem< Filter >, TreeTableRow< Filter > > selectionPredicate
void doSelection(TreeItem< Filter > treeItem, TreeTableRow< Filter > row)

Copyright © 2012-2016 Basis Technology. Generated on: Tue Jun 13 2017
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.