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;
97 "DirectoryTreeTopComponent.resultsView.title=Listing"
101 private final transient ExplorerManager em =
new ExplorerManager();
106 private static final String PREFERRED_ID =
"DirectoryTreeTopComponent";
117 getTree().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
119 putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.TRUE);
123 subscribeToChangeEvents();
124 associateLookup(ExplorerUtils.createLookup(em, getActionMap()));
127 this.backList =
new LinkedList<>();
128 this.forwardList =
new LinkedList<>();
129 backButton.setEnabled(
false);
130 forwardButton.setEnabled(
false);
139 public void preferenceChange(PreferenceChangeEvent evt) {
140 switch (evt.getKey()) {
143 refreshContentTreeSafe();
154 this.em.addPropertyChangeListener(
this);
160 this.dataResult.requestActive();
164 this.dataResult.
open();
168 return this.dataResult;
179 treeView =
new BeanTreeView();
180 backButton =
new javax.swing.JButton();
181 forwardButton =
new javax.swing.JButton();
182 showRejectedCheckBox =
new javax.swing.JCheckBox();
184 treeView.setBorder(null);
186 backButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_back.png")));
187 org.openide.awt.Mnemonics.setLocalizedText(backButton,
org.openide.util.NbBundle.getMessage(
DirectoryTreeTopComponent.class,
"DirectoryTreeTopComponent.backButton.text"));
188 backButton.setBorderPainted(
false);
189 backButton.setContentAreaFilled(
false);
190 backButton.setDisabledIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_back_disabled.png")));
191 backButton.setMargin(
new java.awt.Insets(2, 0, 2, 0));
192 backButton.setMaximumSize(
new java.awt.Dimension(55, 100));
193 backButton.setMinimumSize(
new java.awt.Dimension(5, 5));
194 backButton.setPreferredSize(
new java.awt.Dimension(23, 23));
195 backButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_back_hover.png")));
196 backButton.addActionListener(
new java.awt.event.ActionListener() {
197 public void actionPerformed(java.awt.event.ActionEvent evt) {
198 backButtonActionPerformed(evt);
202 forwardButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_forward.png")));
203 org.openide.awt.Mnemonics.setLocalizedText(forwardButton,
org.openide.util.NbBundle.getMessage(
DirectoryTreeTopComponent.class,
"DirectoryTreeTopComponent.forwardButton.text"));
204 forwardButton.setBorderPainted(
false);
205 forwardButton.setContentAreaFilled(
false);
206 forwardButton.setDisabledIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_forward_disabled.png")));
207 forwardButton.setMargin(
new java.awt.Insets(2, 0, 2, 0));
208 forwardButton.setMaximumSize(
new java.awt.Dimension(55, 100));
209 forwardButton.setMinimumSize(
new java.awt.Dimension(5, 5));
210 forwardButton.setPreferredSize(
new java.awt.Dimension(23, 23));
211 forwardButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_forward_hover.png")));
212 forwardButton.addActionListener(
new java.awt.event.ActionListener() {
213 public void actionPerformed(java.awt.event.ActionEvent evt) {
214 forwardButtonActionPerformed(evt);
218 org.openide.awt.Mnemonics.setLocalizedText(showRejectedCheckBox,
org.openide.util.NbBundle.getMessage(
DirectoryTreeTopComponent.class,
"DirectoryTreeTopComponent.showRejectedCheckBox.text"));
220 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
221 this.setLayout(layout);
222 layout.setHorizontalGroup(
223 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
224 .addComponent(treeView, javax.swing.GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE)
225 .addGroup(layout.createSequentialGroup()
227 .addComponent(backButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
229 .addComponent(forwardButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
230 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 46, Short.MAX_VALUE)
231 .addComponent(showRejectedCheckBox)
234 layout.setVerticalGroup(
235 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
236 .addGroup(layout.createSequentialGroup()
238 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
239 .addComponent(forwardButton, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
240 .addComponent(backButton, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
241 .addComponent(showRejectedCheckBox))
242 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
243 .addComponent(treeView, javax.swing.GroupLayout.DEFAULT_SIZE, 854, Short.MAX_VALUE)
250 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
253 String[] currentNodePath = backList.pollLast();
254 forwardList.addLast(currentNodePath);
255 forwardButton.setEnabled(
true);
262 String[] newCurrentNodePath = backList.peekLast();
265 if (backList.size() > 1) {
266 backButton.setEnabled(
true);
268 backButton.setEnabled(
false);
272 setSelectedNode(newCurrentNodePath, null);
274 this.setCursor(null);
279 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
281 String[] newCurrentNodePath = forwardList.pollLast();
282 if (!forwardList.isEmpty()) {
283 forwardButton.setEnabled(
true);
285 forwardButton.setEnabled(
false);
288 backList.addLast(newCurrentNodePath);
289 backButton.setEnabled(
true);
292 setSelectedNode(newCurrentNodePath, null);
294 this.setCursor(null);
313 if (instance == null) {
326 WindowManager winManager = WindowManager.
getDefault();
327 TopComponent win = winManager.findTopComponent(PREFERRED_ID);
330 "Cannot find " + PREFERRED_ID +
" component. It will not be located properly in the window system.");
334 return (DirectoryTreeTopComponent) win;
337 "There seem to be multiple components with the '" + PREFERRED_ID
338 +
"' ID. That is a potential source of errors and unexpected behavior.");
350 return TopComponent.PERSISTENCE_NEVER;
363 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
364 Case currentCase = null;
367 }
catch (IllegalStateException ex) {
372 if (null == currentCase || currentCase.hasData() ==
false) {
373 getTree().setRootVisible(
false);
383 Node root =
new AbstractNode(contentChildren) {
390 public Action[] getActions(
boolean popup) {
391 return new Action[]{};
397 public Node.Handle getHandle() {
398 return new Node.Handle() {
400 public Node getNode()
throws IOException {
401 return em.getRootContext();
407 root =
new DirectoryTreeFilterNode(root,
true);
409 em.setRootContext(root);
410 em.getRootContext().setName(currentCase.getName());
411 em.getRootContext().setDisplayName(currentCase.getName());
412 getTree().setRootVisible(
false);
416 new SwingWorker<Node[], Void>() {
418 protected Node[] doInBackground()
throws Exception {
419 Children rootChildren = em.getRootContext().getChildren();
420 TreeView tree = getTree();
423 tree.expandNode(results);
424 Children resultsChildren = results.getChildren();
425 Arrays.stream(resultsChildren.getNodes()).forEach(tree::expandNode);
429 showRejectedCheckBox.setSelected(
false);
432 Arrays.stream(views.getChildren().getNodes()).forEach(tree::expandNode);
433 tree.collapseNode(views);
443 if (rootChildren.getNodesCount() > 0) {
444 return new Node[]{rootChildren.getNodeAt(0)};
450 protected void done() {
454 if (!dataResult.isOpened()) {
465 em.setSelectedNodes(
get());
466 }
catch (PropertyVetoException ex) {
467 LOGGER.log(Level.SEVERE,
"Error setting default selected node.", ex);
468 }
catch (InterruptedException | ExecutionException ex) {
469 LOGGER.log(Level.SEVERE,
"Error expanding tree to initial state.", ex);
487 contentChildren = null;
490 void writeProperties(java.util.Properties p) {
493 p.setProperty(
"version",
"1.0");
497 Object readProperties(java.util.Properties p) {
498 if (instance == null) {
506 String version = p.getProperty(
"version");
547 return new Action[]{};
558 Node[] selectedNodes = this.getExplorerManager().getSelectedNodes();
559 if (selectedNodes.length > 0) {
560 result = selectedNodes[0];
574 String changed = evt.getPropertyName();
584 if (evt.getOldValue() != null && evt.getNewValue() == null) {
586 SwingUtilities.invokeLater(() -> {
587 Node emptyNode =
new AbstractNode(Children.LEAF);
588 em.setRootContext(emptyNode);
590 }
else if (evt.getNewValue() != null) {
592 Case newCase = (
Case) evt.getNewValue();
593 final String newCaseName = newCase.
getName();
594 SwingUtilities.invokeLater(() -> {
595 em.getRootContext().setName(newCaseName);
596 em.getRootContext().setDisplayName(newCaseName);
622 }
catch (IllegalStateException | TskCoreException notUsed) {
628 else if (changed.equals(ExplorerManager.PROP_SELECTED_NODES)) {
629 respondSelection((Node[]) evt.getOldValue(), (Node[]) evt.getNewValue());
645 @NbBundle.Messages(
"DirectoryTreeTopComponent.emptyMimeNode.text=Data not available. Run file type identification module.")
646 void respondSelection(
final Node[] oldNodes,
final Node[] newNodes) {
656 EventQueue.invokeLater(() -> {
658 DirectoryTreeTopComponent.this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
660 Node treeNode = DirectoryTreeTopComponent.this.getSelectedNode();
661 if (treeNode != null) {
662 Node originNode = ((DirectoryTreeFilterNode) treeNode).getOriginal();
664 Node drfn =
new DataResultFilterNode(originNode, DirectoryTreeTopComponent.this.em);
666 if (FileTypesByMimeType.isEmptyMimeTypeNode(originNode)) {
669 EmptyNode emptyNode =
new EmptyNode(Bundle.DirectoryTreeTopComponent_emptyMimeNode_text());
670 dataResult.
setNode(
new TableFilterNode(emptyNode,
true,
"This Node Is Empty"));
671 }
else if (originNode instanceof DisplayableItemNode) {
672 dataResult.
setNode(
new TableFilterNode(drfn,
true, ((DisplayableItemNode) originNode).getItemType()));
674 dataResult.
setNode(
new TableFilterNode(drfn,
true));
676 String displayName =
"";
677 Content content = originNode.getLookup().lookup(Content.class);
678 if (content != null) {
680 displayName = content.getUniquePath();
681 }
catch (TskCoreException ex) {
682 LOGGER.log(Level.SEVERE,
"Exception while calling Content.getUniquePath() for node: {0}", originNode);
684 }
else if (originNode.getLookup().lookup(String.class) != null) {
685 displayName = originNode.getLookup().lookup(String.class);
687 dataResult.
setPath(displayName);
690 if (oldNodes != null && newNodes != null
691 && (oldNodes.length == newNodes.length)) {
692 boolean sameNodes =
true;
693 for (
int i = 0; i < oldNodes.length; i++) {
694 sameNodes = sameNodes && oldNodes[i].getName().equals(newNodes[i].getName());
697 dataResult.requestActive();
706 updateHistory(em.getSelectedNodes());
710 if (selectedNodes.length == 0) {
714 Node selectedNode = selectedNodes[0];
715 String selectedNodeName = selectedNode.getName();
723 String[] currentLast = backList.peekLast();
724 String lastNodeName = null;
725 if (currentLast != null) {
726 lastNodeName = currentLast[currentLast.length - 1];
729 if (currentLast == null || !selectedNodeName.equals(lastNodeName)) {
731 final String[] selectedPath = NodeOp.createPath(selectedNode, em.getRootContext());
732 backList.addLast(selectedPath);
733 if (backList.size() > 1) {
734 backButton.setEnabled(
true);
736 backButton.setEnabled(
false);
740 forwardButton.setEnabled(
false);
752 backButton.setEnabled(
false);
753 forwardButton.setEnabled(
false);
762 return (BeanTreeView) this.treeView;
769 SwingUtilities.invokeLater(this::refreshDataSourceTree);
776 Node selectedNode = getSelectedNode();
777 final String[] selectedPath = NodeOp.createPath(selectedNode, em.getRootContext());
778 Children rootChildren = em.getRootContext().getChildren();
780 if (dataSourcesFilterNode == null) {
781 LOGGER.log(Level.SEVERE,
"Cannot find data sources filter node, won't refresh the content tree");
784 Node dataSourcesNode = ((DirectoryTreeFilterNode) dataSourcesFilterNode).getOriginal();
797 private void setSelectedNode(
final String[] previouslySelectedNodePath,
final String rootNodeName) {
798 if (previouslySelectedNodePath == null) {
801 SwingUtilities.invokeLater(
new Runnable() {
804 if (previouslySelectedNodePath.length > 0 && (rootNodeName == null || previouslySelectedNodePath[0].equals(rootNodeName))) {
805 Node selectedNode = null;
806 ArrayList<String> selectedNodePath =
new ArrayList<>(Arrays.asList(previouslySelectedNodePath));
807 while (null == selectedNode && !selectedNodePath.isEmpty()) {
809 selectedNode = NodeOp.findPath(em.getRootContext(), selectedNodePath.toArray(
new String[selectedNodePath.size()]));
810 }
catch (NodeNotFoundException ex) {
812 if (selectedNodePath.size() > 1) {
813 selectedNodePath.remove(selectedNodePath.size() - 1);
815 StringBuilder nodePath =
new StringBuilder();
816 for (
int i = 0; i < previouslySelectedNodePath.length; ++i) {
817 nodePath.append(previouslySelectedNodePath[i]).append(
"/");
819 LOGGER.log(Level.WARNING,
"Failed to find any nodes to select on path " + nodePath.toString(), ex);
825 if (null != selectedNode) {
826 if (rootNodeName != null) {
832 em.setExploredContextAndSelection(selectedNode,
new Node[]{selectedNode});
833 }
catch (PropertyVetoException ex) {
834 LOGGER.log(Level.WARNING,
"Property veto from ExplorerManager setting selection to " + selectedNode.getName(), ex);
853 int typeID = art.getArtifactTypeID();
854 String typeName = art.getArtifactTypeName();
855 Children rootChilds = em.getRootContext().getChildren();
856 Node treeNode = null;
858 Children resultsChilds = resultsNode.getChildren();
859 if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID()) {
860 Node hashsetRootNode = resultsChilds.findChild(typeName);
861 Children hashsetRootChilds = hashsetRootNode.getChildren();
863 String setName = null;
864 List<BlackboardAttribute> attributes = art.getAttributes();
865 for (BlackboardAttribute att : attributes) {
866 int typeId = att.getAttributeType().getTypeID();
867 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID()) {
868 setName = att.getValueString();
871 treeNode = hashsetRootChilds.findChild(setName);
872 }
catch (TskCoreException ex) {
873 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
875 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID()) {
876 Node keywordRootNode = resultsChilds.findChild(typeName);
877 Children keywordRootChilds = keywordRootNode.getChildren();
879 String listName = null;
880 String keywordName = null;
882 List<BlackboardAttribute> attributes = art.getAttributes();
883 for (BlackboardAttribute att : attributes) {
884 int typeId = att.getAttributeType().getTypeID();
885 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID()) {
886 listName = att.getValueString();
887 }
else if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_KEYWORD.getTypeID()) {
888 keywordName = att.getValueString();
889 }
else if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_KEYWORD_REGEXP.getTypeID()) {
890 regex = att.getValueString();
893 if (listName == null) {
895 listName = NbBundle.getMessage(
KeywordHits.class,
"KeywordHits.simpleLiteralSearch.text");
897 listName = NbBundle.getMessage(
KeywordHits.class,
"KeywordHits.singleRegexSearch.text");
900 Node listNode = keywordRootChilds.findChild(listName);
901 if (listNode == null) {
904 Children listChildren = listNode.getChildren();
905 if (listChildren == null) {
909 Node regexNode = listChildren.findChild(regex);
910 if (regexNode == null) {
913 listChildren = regexNode.getChildren();
914 if (listChildren == null) {
919 treeNode = listChildren.findChild(keywordName);
921 }
catch (TskCoreException ex) {
922 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
924 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT.getTypeID()
925 || typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_ARTIFACT_HIT.getTypeID()) {
926 Node interestingItemsRootNode = resultsChilds.findChild(NbBundle
927 .getMessage(
InterestingHits.class,
"InterestingHits.interestingItems.text"));
928 Children interestingItemsRootChildren = interestingItemsRootNode.getChildren();
930 String setName = null;
931 List<BlackboardAttribute> attributes = art.getAttributes();
932 for (BlackboardAttribute att : attributes) {
933 int typeId = att.getAttributeType().getTypeID();
934 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID()) {
935 setName = att.getValueString();
938 Node setNode = interestingItemsRootChildren.findChild(setName);
939 if (setNode == null) {
942 Children interestingChildren = setNode.getChildren();
943 if (interestingChildren == null) {
946 treeNode = interestingChildren.findChild(art.getDisplayName());
947 }
catch (TskCoreException ex) {
948 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
950 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID()) {
951 Node emailMsgRootNode = resultsChilds.findChild(typeName);
952 Children emailMsgRootChilds = emailMsgRootNode.getChildren();
953 Map<String, String> parsedPath = null;
955 List<BlackboardAttribute> attributes = art.getAttributes();
956 for (BlackboardAttribute att : attributes) {
957 int typeId = att.getAttributeType().getTypeID();
958 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH.getTypeID()) {
963 if (parsedPath == null) {
966 Node defaultNode = emailMsgRootChilds.findChild(parsedPath.get(NbBundle.getMessage(
EmailExtracted.class,
"EmailExtracted.defaultAcct.text")));
967 Children defaultChildren = defaultNode.getChildren();
968 treeNode = defaultChildren.findChild(parsedPath.get(NbBundle.getMessage(
EmailExtracted.class,
"EmailExtracted.defaultFolder.text")));
969 }
catch (TskCoreException ex) {
970 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
973 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_ACCOUNT.getTypeID()) {
974 Node accountRootNode = resultsChilds.findChild(art.getDisplayName());
975 Children accountRootChilds = accountRootNode.getChildren();
976 List<BlackboardAttribute> attributes;
977 String accountType = null;
978 String ccNumberName = null;
980 attributes = art.getAttributes();
981 for (BlackboardAttribute att : attributes) {
982 int typeId = att.getAttributeType().getTypeID();
983 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ACCOUNT_TYPE.getTypeID()) {
984 accountType = att.getValueString();
986 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_CARD_NUMBER.getTypeID()) {
987 ccNumberName = att.getValueString();
990 if (accountType == null) {
994 if (accountType.equals(Account.Type.CREDIT_CARD.getTypeName())) {
995 Node accountNode = accountRootChilds.findChild(Account.Type.CREDIT_CARD.getDisplayName());
996 if (accountNode == null) {
999 Children accountChildren = accountNode.getChildren();
1000 if (accountChildren == null) {
1003 Node binNode = accountChildren.findChild(NbBundle.getMessage(
Accounts.class,
"Accounts.ByBINNode.name"));
1004 if (binNode == null) {
1007 Children binChildren = binNode.getChildren();
1008 if (ccNumberName == null) {
1013 String binName = StringUtils.rightPad(ccNumberName, 8,
"0");
1014 binName = binName.substring(0, 8);
1017 bin = Integer.parseInt(binName);
1018 }
catch (NumberFormatException ex) {
1019 LOGGER.log(Level.WARNING,
"Unable to parseInt a BIN for node selection from string binName=" + binName, ex);
1023 if (binInfo != null) {
1024 int startBin = ((
BINRange) binInfo).getBINstart();
1025 int endBin = ((
BINRange) binInfo).getBINend();
1026 if (startBin != endBin) {
1027 binName = Integer.toString(startBin) +
"-" + Integer.toString(endBin).substring(5);
1030 if (binName == null) {
1033 treeNode = binChildren.findChild(binName);
1035 treeNode = accountRootChilds.findChild(accountType);
1037 }
catch (TskCoreException ex) {
1038 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
1042 Children extractedChilds = extractedContent.getChildren();
1043 if (extractedChilds == null) {
1046 treeNode = extractedChilds.findChild(typeName);
1049 if (treeNode == null) {
1053 DisplayableItemNode undecoratedParentNode = (DisplayableItemNode) ((DirectoryTreeFilterNode) treeNode).getOriginal();
1055 getTree().expandNode(treeNode);
1057 em.setExploredContextAndSelection(treeNode,
new Node[]{treeNode});
1058 }
catch (PropertyVetoException ex) {
1059 LOGGER.log(Level.WARNING,
"Property Veto: ", ex);
1066 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)
static Case getCurrentCase()
synchronized static Logger getLogger(String name)
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)