19 package org.sleuthkit.autopsy.directorytree;
21 import java.awt.Cursor;
22 import java.awt.EventQueue;
23 import java.beans.PropertyChangeEvent;
24 import java.beans.PropertyChangeListener;
25 import java.beans.PropertyVetoException;
26 import java.io.IOException;
27 import java.util.ArrayList;
28 import java.util.Arrays;
29 import java.util.EnumSet;
30 import java.util.LinkedList;
31 import java.util.List;
33 import java.util.concurrent.ExecutionException;
34 import java.util.logging.Level;
35 import java.util.prefs.PreferenceChangeEvent;
36 import java.util.prefs.PreferenceChangeListener;
37 import javax.swing.Action;
38 import javax.swing.SwingUtilities;
39 import javax.swing.SwingWorker;
40 import javax.swing.tree.TreeSelectionModel;
41 import org.apache.commons.lang3.StringUtils;
42 import org.openide.explorer.ExplorerManager;
43 import org.openide.explorer.ExplorerUtils;
44 import org.openide.explorer.view.BeanTreeView;
45 import org.openide.explorer.view.TreeView;
46 import org.openide.nodes.AbstractNode;
47 import org.openide.nodes.Children;
48 import org.openide.nodes.Node;
49 import org.openide.nodes.NodeNotFoundException;
50 import org.openide.nodes.NodeOp;
51 import org.openide.util.NbBundle;
52 import org.openide.util.NbBundle.Messages;
53 import org.openide.windows.TopComponent;
54 import org.openide.windows.WindowManager;
98 "DirectoryTreeTopComponent.resultsView.title=Listing"
100 @SuppressWarnings(
"PMD.SingularField")
103 private final transient ExplorerManager em =
new ExplorerManager();
108 private static final String PREFERRED_ID =
"DirectoryTreeTopComponent";
119 getTree().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
121 putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.TRUE);
125 subscribeToChangeEvents();
126 associateLookup(ExplorerUtils.createLookup(em, getActionMap()));
129 this.backList =
new LinkedList<>();
130 this.forwardList =
new LinkedList<>();
131 backButton.setEnabled(
false);
132 forwardButton.setEnabled(
false);
141 public void preferenceChange(PreferenceChangeEvent evt) {
142 switch (evt.getKey()) {
145 refreshContentTreeSafe();
156 this.em.addPropertyChangeListener(
this);
162 this.dataResult.requestActive();
166 this.dataResult.
open();
170 return this.dataResult;
181 treeView =
new BeanTreeView();
182 backButton =
new javax.swing.JButton();
183 forwardButton =
new javax.swing.JButton();
184 showRejectedCheckBox =
new javax.swing.JCheckBox();
186 treeView.setBorder(null);
188 backButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_back.png")));
189 org.openide.awt.Mnemonics.setLocalizedText(backButton,
org.openide.util.NbBundle.getMessage(
DirectoryTreeTopComponent.class,
"DirectoryTreeTopComponent.backButton.text"));
190 backButton.setBorderPainted(
false);
191 backButton.setContentAreaFilled(
false);
192 backButton.setDisabledIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_back_disabled.png")));
193 backButton.setMargin(
new java.awt.Insets(2, 0, 2, 0));
194 backButton.setMaximumSize(
new java.awt.Dimension(55, 100));
195 backButton.setMinimumSize(
new java.awt.Dimension(5, 5));
196 backButton.setPreferredSize(
new java.awt.Dimension(23, 23));
197 backButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_back_hover.png")));
198 backButton.addActionListener(
new java.awt.event.ActionListener() {
199 public void actionPerformed(java.awt.event.ActionEvent evt) {
200 backButtonActionPerformed(evt);
204 forwardButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_forward.png")));
205 org.openide.awt.Mnemonics.setLocalizedText(forwardButton,
org.openide.util.NbBundle.getMessage(
DirectoryTreeTopComponent.class,
"DirectoryTreeTopComponent.forwardButton.text"));
206 forwardButton.setBorderPainted(
false);
207 forwardButton.setContentAreaFilled(
false);
208 forwardButton.setDisabledIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_forward_disabled.png")));
209 forwardButton.setMargin(
new java.awt.Insets(2, 0, 2, 0));
210 forwardButton.setMaximumSize(
new java.awt.Dimension(55, 100));
211 forwardButton.setMinimumSize(
new java.awt.Dimension(5, 5));
212 forwardButton.setPreferredSize(
new java.awt.Dimension(23, 23));
213 forwardButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_forward_hover.png")));
214 forwardButton.addActionListener(
new java.awt.event.ActionListener() {
215 public void actionPerformed(java.awt.event.ActionEvent evt) {
216 forwardButtonActionPerformed(evt);
220 org.openide.awt.Mnemonics.setLocalizedText(showRejectedCheckBox,
org.openide.util.NbBundle.getMessage(
DirectoryTreeTopComponent.class,
"DirectoryTreeTopComponent.showRejectedCheckBox.text"));
222 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
223 this.setLayout(layout);
224 layout.setHorizontalGroup(
225 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
226 .addComponent(treeView, javax.swing.GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE)
227 .addGroup(layout.createSequentialGroup()
229 .addComponent(backButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
231 .addComponent(forwardButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
232 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 46, Short.MAX_VALUE)
233 .addComponent(showRejectedCheckBox)
236 layout.setVerticalGroup(
237 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
238 .addGroup(layout.createSequentialGroup()
240 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
241 .addComponent(forwardButton, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
242 .addComponent(backButton, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
243 .addComponent(showRejectedCheckBox))
244 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
245 .addComponent(treeView, javax.swing.GroupLayout.DEFAULT_SIZE, 854, Short.MAX_VALUE)
252 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
255 String[] currentNodePath = backList.pollLast();
256 forwardList.addLast(currentNodePath);
257 forwardButton.setEnabled(
true);
264 String[] newCurrentNodePath = backList.peekLast();
267 if (backList.size() > 1) {
268 backButton.setEnabled(
true);
270 backButton.setEnabled(
false);
274 setSelectedNode(newCurrentNodePath, null);
276 this.setCursor(null);
281 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
283 String[] newCurrentNodePath = forwardList.pollLast();
284 if (!forwardList.isEmpty()) {
285 forwardButton.setEnabled(
true);
287 forwardButton.setEnabled(
false);
290 backList.addLast(newCurrentNodePath);
291 backButton.setEnabled(
true);
294 setSelectedNode(newCurrentNodePath, null);
296 this.setCursor(null);
315 if (instance == null) {
328 WindowManager winManager = WindowManager.
getDefault();
329 TopComponent win = winManager.findTopComponent(PREFERRED_ID);
332 "Cannot find " + PREFERRED_ID +
" component. It will not be located properly in the window system.");
336 return (DirectoryTreeTopComponent) win;
339 "There seem to be multiple components with the '" + PREFERRED_ID
340 +
"' ID. That is a potential source of errors and unexpected behavior.");
352 return TopComponent.PERSISTENCE_NEVER;
365 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
366 Case currentCase = null;
374 if (null == currentCase || currentCase.hasData() ==
false) {
375 getTree().setRootVisible(
false);
385 Node root =
new AbstractNode(contentChildren) {
392 public Action[] getActions(
boolean popup) {
393 return new Action[]{};
399 public Node.Handle getHandle() {
400 return new Node.Handle() {
402 public Node getNode()
throws IOException {
403 return em.getRootContext();
409 root =
new DirectoryTreeFilterNode(root,
true);
411 em.setRootContext(root);
412 em.getRootContext().setName(currentCase.getName());
413 em.getRootContext().setDisplayName(currentCase.getName());
414 getTree().setRootVisible(
false);
418 new SwingWorker<Node[], Void>() {
420 protected Node[] doInBackground()
throws Exception {
421 Children rootChildren = em.getRootContext().getChildren();
422 TreeView tree = getTree();
425 tree.expandNode(results);
426 Children resultsChildren = results.getChildren();
427 Arrays.stream(resultsChildren.getNodes()).forEach(tree::expandNode);
431 showRejectedCheckBox.setSelected(
false);
434 Arrays.stream(views.getChildren().getNodes()).forEach(tree::expandNode);
435 tree.collapseNode(views);
445 if (rootChildren.getNodesCount() > 0) {
446 return new Node[]{rootChildren.getNodeAt(0)};
452 protected void done() {
456 if (!dataResult.isOpened()) {
467 em.setSelectedNodes(
get());
468 }
catch (PropertyVetoException ex) {
469 LOGGER.log(Level.SEVERE,
"Error setting default selected node.", ex);
470 }
catch (InterruptedException | ExecutionException ex) {
471 LOGGER.log(Level.SEVERE,
"Error expanding tree to initial state.", ex);
489 contentChildren = null;
492 void writeProperties(java.util.Properties p) {
495 p.setProperty(
"version",
"1.0");
499 Object readProperties(java.util.Properties p) {
500 if (instance == null) {
508 String version = p.getProperty(
"version");
531 return openCase.
hasData() ==
false;
554 return new Action[]{};
565 Node[] selectedNodes = this.getExplorerManager().getSelectedNodes();
566 if (selectedNodes.length > 0) {
567 result = selectedNodes[0];
581 String changed = evt.getPropertyName();
591 if (evt.getOldValue() != null && evt.getNewValue() == null) {
593 SwingUtilities.invokeLater(() -> {
594 Node emptyNode =
new AbstractNode(Children.LEAF);
595 em.setRootContext(emptyNode);
597 }
else if (evt.getNewValue() != null) {
599 Case newCase = (
Case) evt.getNewValue();
600 final String newCaseName = newCase.
getName();
601 SwingUtilities.invokeLater(() -> {
602 em.getRootContext().setName(newCaseName);
603 em.getRootContext().setDisplayName(newCaseName);
635 else if (changed.equals(ExplorerManager.PROP_SELECTED_NODES)) {
636 respondSelection((Node[]) evt.getOldValue(), (Node[]) evt.getNewValue());
652 @NbBundle.Messages(
"DirectoryTreeTopComponent.emptyMimeNode.text=Data not available. Run file type identification module.")
653 void respondSelection(
final Node[] oldNodes,
final Node[] newNodes) {
663 EventQueue.invokeLater(() -> {
665 DirectoryTreeTopComponent.this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
667 Node treeNode = DirectoryTreeTopComponent.this.getSelectedNode();
668 if (treeNode != null) {
669 Node originNode = ((DirectoryTreeFilterNode) treeNode).getOriginal();
671 Node drfn =
new DataResultFilterNode(originNode, DirectoryTreeTopComponent.this.em);
673 if (FileTypesByMimeType.isEmptyMimeTypeNode(originNode)) {
676 EmptyNode emptyNode =
new EmptyNode(Bundle.DirectoryTreeTopComponent_emptyMimeNode_text());
677 dataResult.
setNode(
new TableFilterNode(emptyNode,
true,
"This Node Is Empty"));
678 }
else if (originNode instanceof DisplayableItemNode) {
679 dataResult.
setNode(
new TableFilterNode(drfn,
true, ((DisplayableItemNode) originNode).getItemType()));
681 dataResult.
setNode(
new TableFilterNode(drfn,
true));
683 String displayName =
"";
684 Content content = originNode.getLookup().lookup(Content.class);
685 if (content != null) {
687 displayName = content.getUniquePath();
688 }
catch (TskCoreException ex) {
689 LOGGER.log(Level.SEVERE,
"Exception while calling Content.getUniquePath() for node: {0}", originNode);
691 }
else if (originNode.getLookup().lookup(String.class) != null) {
692 displayName = originNode.getLookup().lookup(String.class);
694 dataResult.
setPath(displayName);
697 if (oldNodes != null && newNodes != null
698 && (oldNodes.length == newNodes.length)) {
699 boolean sameNodes =
true;
700 for (
int i = 0; i < oldNodes.length; i++) {
701 sameNodes = sameNodes && oldNodes[i].getName().equals(newNodes[i].getName());
704 dataResult.requestActive();
713 updateHistory(em.getSelectedNodes());
717 if (selectedNodes.length == 0) {
721 Node selectedNode = selectedNodes[0];
722 String selectedNodeName = selectedNode.getName();
730 String[] currentLast = backList.peekLast();
731 String lastNodeName = null;
732 if (currentLast != null) {
733 lastNodeName = currentLast[currentLast.length - 1];
736 if (currentLast == null || !selectedNodeName.equals(lastNodeName)) {
738 final String[] selectedPath = NodeOp.createPath(selectedNode, em.getRootContext());
739 backList.addLast(selectedPath);
740 if (backList.size() > 1) {
741 backButton.setEnabled(
true);
743 backButton.setEnabled(
false);
747 forwardButton.setEnabled(
false);
759 backButton.setEnabled(
false);
760 forwardButton.setEnabled(
false);
769 return (BeanTreeView) this.treeView;
776 SwingUtilities.invokeLater(this::refreshDataSourceTree);
783 Node selectedNode = getSelectedNode();
784 final String[] selectedPath = NodeOp.createPath(selectedNode, em.getRootContext());
785 Children rootChildren = em.getRootContext().getChildren();
787 if (dataSourcesFilterNode == null) {
788 LOGGER.log(Level.SEVERE,
"Cannot find data sources filter node, won't refresh the content tree");
791 Node dataSourcesNode = ((DirectoryTreeFilterNode) dataSourcesFilterNode).getOriginal();
804 private void setSelectedNode(
final String[] previouslySelectedNodePath,
final String rootNodeName) {
805 if (previouslySelectedNodePath == null) {
808 SwingUtilities.invokeLater(
new Runnable() {
811 if (previouslySelectedNodePath.length > 0 && (rootNodeName == null || previouslySelectedNodePath[0].equals(rootNodeName))) {
812 Node selectedNode = null;
813 ArrayList<String> selectedNodePath =
new ArrayList<>(Arrays.asList(previouslySelectedNodePath));
814 while (null == selectedNode && !selectedNodePath.isEmpty()) {
816 selectedNode = NodeOp.findPath(em.getRootContext(), selectedNodePath.toArray(
new String[selectedNodePath.size()]));
817 }
catch (NodeNotFoundException ex) {
819 if (selectedNodePath.size() > 1) {
820 selectedNodePath.remove(selectedNodePath.size() - 1);
822 StringBuilder nodePath =
new StringBuilder();
823 for (
int i = 0; i < previouslySelectedNodePath.length; ++i) {
824 nodePath.append(previouslySelectedNodePath[i]).append(
"/");
826 LOGGER.log(Level.WARNING,
"Failed to find any nodes to select on path " + nodePath.toString(), ex);
832 if (null != selectedNode) {
833 if (rootNodeName != null) {
839 em.setExploredContextAndSelection(selectedNode,
new Node[]{selectedNode});
840 }
catch (PropertyVetoException ex) {
841 LOGGER.log(Level.WARNING,
"Property veto from ExplorerManager setting selection to " + selectedNode.getName(), ex);
860 int typeID = art.getArtifactTypeID();
861 String typeName = art.getArtifactTypeName();
862 Children rootChilds = em.getRootContext().getChildren();
863 Node treeNode = null;
865 Children resultsChilds = resultsNode.getChildren();
866 if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID()) {
867 Node hashsetRootNode = resultsChilds.findChild(typeName);
868 Children hashsetRootChilds = hashsetRootNode.getChildren();
870 String setName = null;
871 List<BlackboardAttribute> attributes = art.getAttributes();
872 for (BlackboardAttribute att : attributes) {
873 int typeId = att.getAttributeType().getTypeID();
874 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID()) {
875 setName = att.getValueString();
878 treeNode = hashsetRootChilds.findChild(setName);
879 }
catch (TskCoreException ex) {
880 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
882 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID()) {
883 Node keywordRootNode = resultsChilds.findChild(typeName);
884 Children keywordRootChilds = keywordRootNode.getChildren();
886 String listName = null;
887 String keywordName = null;
889 List<BlackboardAttribute> attributes = art.getAttributes();
890 for (BlackboardAttribute att : attributes) {
891 int typeId = att.getAttributeType().getTypeID();
892 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID()) {
893 listName = att.getValueString();
894 }
else if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_KEYWORD.getTypeID()) {
895 keywordName = att.getValueString();
896 }
else if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_KEYWORD_REGEXP.getTypeID()) {
897 regex = att.getValueString();
900 if (listName == null) {
902 listName = NbBundle.getMessage(
KeywordHits.class,
"KeywordHits.simpleLiteralSearch.text");
904 listName = NbBundle.getMessage(
KeywordHits.class,
"KeywordHits.singleRegexSearch.text");
907 Node listNode = keywordRootChilds.findChild(listName);
908 if (listNode == null) {
911 Children listChildren = listNode.getChildren();
912 if (listChildren == null) {
916 Node regexNode = listChildren.findChild(regex);
917 if (regexNode == null) {
920 listChildren = regexNode.getChildren();
921 if (listChildren == null) {
926 treeNode = listChildren.findChild(keywordName);
928 }
catch (TskCoreException ex) {
929 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
931 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT.getTypeID()
932 || typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_ARTIFACT_HIT.getTypeID()) {
933 Node interestingItemsRootNode = resultsChilds.findChild(NbBundle
934 .getMessage(
InterestingHits.class,
"InterestingHits.interestingItems.text"));
935 Children interestingItemsRootChildren = interestingItemsRootNode.getChildren();
937 String setName = null;
938 List<BlackboardAttribute> attributes = art.getAttributes();
939 for (BlackboardAttribute att : attributes) {
940 int typeId = att.getAttributeType().getTypeID();
941 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID()) {
942 setName = att.getValueString();
945 Node setNode = interestingItemsRootChildren.findChild(setName);
946 if (setNode == null) {
949 Children interestingChildren = setNode.getChildren();
950 if (interestingChildren == null) {
953 treeNode = interestingChildren.findChild(art.getDisplayName());
954 }
catch (TskCoreException ex) {
955 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
957 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID()) {
958 Node emailMsgRootNode = resultsChilds.findChild(typeName);
959 Children emailMsgRootChilds = emailMsgRootNode.getChildren();
960 Map<String, String> parsedPath = null;
962 List<BlackboardAttribute> attributes = art.getAttributes();
963 for (BlackboardAttribute att : attributes) {
964 int typeId = att.getAttributeType().getTypeID();
965 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH.getTypeID()) {
970 if (parsedPath == null) {
973 Node defaultNode = emailMsgRootChilds.findChild(parsedPath.get(NbBundle.getMessage(
EmailExtracted.class,
"EmailExtracted.defaultAcct.text")));
974 Children defaultChildren = defaultNode.getChildren();
975 treeNode = defaultChildren.findChild(parsedPath.get(NbBundle.getMessage(
EmailExtracted.class,
"EmailExtracted.defaultFolder.text")));
976 }
catch (TskCoreException ex) {
977 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
980 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_ACCOUNT.getTypeID()) {
981 Node accountRootNode = resultsChilds.findChild(art.getDisplayName());
982 Children accountRootChilds = accountRootNode.getChildren();
983 List<BlackboardAttribute> attributes;
984 String accountType = null;
985 String ccNumberName = null;
987 attributes = art.getAttributes();
988 for (BlackboardAttribute att : attributes) {
989 int typeId = att.getAttributeType().getTypeID();
990 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ACCOUNT_TYPE.getTypeID()) {
991 accountType = att.getValueString();
993 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_CARD_NUMBER.getTypeID()) {
994 ccNumberName = att.getValueString();
997 if (accountType == null) {
1001 if (accountType.equals(Account.Type.CREDIT_CARD.getTypeName())) {
1002 Node accountNode = accountRootChilds.findChild(Account.Type.CREDIT_CARD.getDisplayName());
1003 if (accountNode == null) {
1006 Children accountChildren = accountNode.getChildren();
1007 if (accountChildren == null) {
1010 Node binNode = accountChildren.findChild(NbBundle.getMessage(
Accounts.class,
"Accounts.ByBINNode.name"));
1011 if (binNode == null) {
1014 Children binChildren = binNode.getChildren();
1015 if (ccNumberName == null) {
1020 String binName = StringUtils.rightPad(ccNumberName, 8,
"0");
1021 binName = binName.substring(0, 8);
1024 bin = Integer.parseInt(binName);
1025 }
catch (NumberFormatException ex) {
1026 LOGGER.log(Level.WARNING,
"Unable to parseInt a BIN for node selection from string binName=" + binName, ex);
1030 if (binInfo != null) {
1031 int startBin = ((
BINRange) binInfo).getBINstart();
1032 int endBin = ((
BINRange) binInfo).getBINend();
1033 if (startBin != endBin) {
1034 binName = Integer.toString(startBin) +
"-" + Integer.toString(endBin).substring(5);
1037 if (binName == null) {
1040 treeNode = binChildren.findChild(binName);
1042 treeNode = accountRootChilds.findChild(accountType);
1044 }
catch (TskCoreException ex) {
1045 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
1049 Children extractedChilds = extractedContent.getChildren();
1050 if (extractedChilds == null) {
1053 treeNode = extractedChilds.findChild(typeName);
1056 if (treeNode == null) {
1060 DisplayableItemNode undecoratedParentNode = (DisplayableItemNode) ((DirectoryTreeFilterNode) treeNode).getOriginal();
1062 getTree().expandNode(treeNode);
1063 if (this.getSelectedNode().equals(treeNode)) {
1064 this.setDirectoryListingActive();
1065 this.respondSelection(em.getSelectedNodes(),
new Node[]{treeNode});
1068 em.setExploredContextAndSelection(treeNode,
new Node[]{treeNode});
1069 }
catch (PropertyVetoException ex) {
1070 LOGGER.log(Level.WARNING,
"Property Veto: ", ex);
1078 NbBundle.getMessage(
this.getClass(),
"DirectoryTreeTopComponent.action.viewArtContent.text"),
List< Content > getDataSources()
TopComponent getTopComponent()
void viewArtifact(final BlackboardArtifact art)
static final String HIDE_SLACK_FILES_IN_VIEWS_TREE
javax.swing.JScrollPane treeView
static final String HIDE_KNOWN_FILES_IN_VIEWS_TREE
javax.swing.JCheckBox showRejectedCheckBox
static synchronized IngestManager getInstance()
DataResultTopComponent getDirectoryListing()
final LinkedList< String[]> forwardList
void setDirectoryListingActive()
static boolean runningWithGUI
RootContentChildren contentChildren
void setSelectedNode(final String[] previouslySelectedNodePath, final String rootNodeName)
boolean hasMenuOpenAction()
void propertyChange(PropertyChangeEvent evt)
static void openCoreWindows()
void updateHistory(Node[] selectedNodes)
final LinkedList< String[]> backList
static synchronized BankIdentificationNumber getBINInfo(int bin)
void openDirectoryListing()
void refreshContentTreeSafe()
void readPropertiesImpl(java.util.Properties p)
void backButtonActionPerformed(java.awt.event.ActionEvent evt)
static final String HIDE_KNOWN_FILES_IN_DATA_SRCS_TREE
DirectoryTreeTopComponent()
static synchronized DirectoryTreeTopComponent getDefault()
javax.swing.JButton forwardButton
void addIngestJobEventListener(final PropertyChangeListener listener)
void refreshContentKeys()
void viewArtifactContent(BlackboardArtifact art)
void refreshDataSourceTree()
Action newToggleShowRejectedAction()
ExplorerManager getExplorerManager()
javax.swing.JButton backButton
static final String HIDE_SLACK_FILES_IN_DATA_SRCS_TREE
SleuthkitCase getSleuthkitCase()
static DirectoryTreeTopComponent instance
void addOnFinishedListener(PropertyChangeListener l)
void addIngestModuleEventListener(final PropertyChangeListener listener)
synchronized static Logger getLogger(String name)
static Case getCurrentCaseThrows()
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
static void addChangeListener(PreferenceChangeListener listener)
void setChildNodeSelectionInfo(NodeSelectionInfo selectedChildNodeInfo)
void forwardButtonActionPerformed(java.awt.event.ActionEvent evt)
void subscribeToChangeEvents()
static synchronized DirectoryTreeTopComponent findInstance()
void setPath(String pathText)
static boolean isCaseOpen()
void setNode(Node selectedNode)