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"
102 private final transient ExplorerManager em =
new ExplorerManager();
107 private static final String PREFERRED_ID =
"DirectoryTreeTopComponent";
118 getTree().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
120 putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.TRUE);
124 subscribeToChangeEvents();
125 associateLookup(ExplorerUtils.createLookup(em, getActionMap()));
128 this.backList =
new LinkedList<>();
129 this.forwardList =
new LinkedList<>();
130 backButton.setEnabled(
false);
131 forwardButton.setEnabled(
false);
140 public void preferenceChange(PreferenceChangeEvent evt) {
141 switch (evt.getKey()) {
144 refreshContentTreeSafe();
155 this.em.addPropertyChangeListener(
this);
161 this.dataResult.requestActive();
165 this.dataResult.
open();
169 return this.dataResult;
180 treeView =
new BeanTreeView();
181 backButton =
new javax.swing.JButton();
182 forwardButton =
new javax.swing.JButton();
183 showRejectedCheckBox =
new javax.swing.JCheckBox();
185 treeView.setBorder(null);
187 backButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_back.png")));
188 org.openide.awt.Mnemonics.setLocalizedText(backButton,
org.openide.util.NbBundle.getMessage(
DirectoryTreeTopComponent.class,
"DirectoryTreeTopComponent.backButton.text"));
189 backButton.setBorderPainted(
false);
190 backButton.setContentAreaFilled(
false);
191 backButton.setDisabledIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_back_disabled.png")));
192 backButton.setMargin(
new java.awt.Insets(2, 0, 2, 0));
193 backButton.setMaximumSize(
new java.awt.Dimension(55, 100));
194 backButton.setMinimumSize(
new java.awt.Dimension(5, 5));
195 backButton.setPreferredSize(
new java.awt.Dimension(23, 23));
196 backButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_back_hover.png")));
197 backButton.addActionListener(
new java.awt.event.ActionListener() {
198 public void actionPerformed(java.awt.event.ActionEvent evt) {
199 backButtonActionPerformed(evt);
203 forwardButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_forward.png")));
204 org.openide.awt.Mnemonics.setLocalizedText(forwardButton,
org.openide.util.NbBundle.getMessage(
DirectoryTreeTopComponent.class,
"DirectoryTreeTopComponent.forwardButton.text"));
205 forwardButton.setBorderPainted(
false);
206 forwardButton.setContentAreaFilled(
false);
207 forwardButton.setDisabledIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_forward_disabled.png")));
208 forwardButton.setMargin(
new java.awt.Insets(2, 0, 2, 0));
209 forwardButton.setMaximumSize(
new java.awt.Dimension(55, 100));
210 forwardButton.setMinimumSize(
new java.awt.Dimension(5, 5));
211 forwardButton.setPreferredSize(
new java.awt.Dimension(23, 23));
212 forwardButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/directorytree/btn_step_forward_hover.png")));
213 forwardButton.addActionListener(
new java.awt.event.ActionListener() {
214 public void actionPerformed(java.awt.event.ActionEvent evt) {
215 forwardButtonActionPerformed(evt);
219 org.openide.awt.Mnemonics.setLocalizedText(showRejectedCheckBox,
org.openide.util.NbBundle.getMessage(
DirectoryTreeTopComponent.class,
"DirectoryTreeTopComponent.showRejectedCheckBox.text"));
221 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
222 this.setLayout(layout);
223 layout.setHorizontalGroup(
224 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
225 .addComponent(treeView, javax.swing.GroupLayout.DEFAULT_SIZE, 262, Short.MAX_VALUE)
226 .addGroup(layout.createSequentialGroup()
228 .addComponent(backButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
230 .addComponent(forwardButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
231 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 46, Short.MAX_VALUE)
232 .addComponent(showRejectedCheckBox)
235 layout.setVerticalGroup(
236 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
237 .addGroup(layout.createSequentialGroup()
239 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
240 .addComponent(forwardButton, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
241 .addComponent(backButton, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
242 .addComponent(showRejectedCheckBox))
243 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
244 .addComponent(treeView, javax.swing.GroupLayout.DEFAULT_SIZE, 854, Short.MAX_VALUE)
251 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
254 String[] currentNodePath = backList.pollLast();
255 forwardList.addLast(currentNodePath);
256 forwardButton.setEnabled(
true);
263 String[] newCurrentNodePath = backList.peekLast();
266 if (backList.size() > 1) {
267 backButton.setEnabled(
true);
269 backButton.setEnabled(
false);
273 setSelectedNode(newCurrentNodePath, null);
275 this.setCursor(null);
280 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
282 String[] newCurrentNodePath = forwardList.pollLast();
283 if (!forwardList.isEmpty()) {
284 forwardButton.setEnabled(
true);
286 forwardButton.setEnabled(
false);
289 backList.addLast(newCurrentNodePath);
290 backButton.setEnabled(
true);
293 setSelectedNode(newCurrentNodePath, null);
295 this.setCursor(null);
314 if (instance == null) {
327 WindowManager winManager = WindowManager.
getDefault();
328 TopComponent win = winManager.findTopComponent(PREFERRED_ID);
331 "Cannot find " + PREFERRED_ID +
" component. It will not be located properly in the window system.");
335 return (DirectoryTreeTopComponent) win;
338 "There seem to be multiple components with the '" + PREFERRED_ID
339 +
"' ID. That is a potential source of errors and unexpected behavior.");
351 return TopComponent.PERSISTENCE_NEVER;
364 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
365 Case currentCase = null;
373 if (null == currentCase || currentCase.hasData() ==
false) {
374 getTree().setRootVisible(
false);
384 Node root =
new AbstractNode(contentChildren) {
391 public Action[] getActions(
boolean popup) {
392 return new Action[]{};
398 public Node.Handle getHandle() {
399 return new Node.Handle() {
401 public Node getNode()
throws IOException {
402 return em.getRootContext();
408 root =
new DirectoryTreeFilterNode(root,
true);
410 em.setRootContext(root);
411 em.getRootContext().setName(currentCase.getName());
412 em.getRootContext().setDisplayName(currentCase.getName());
413 getTree().setRootVisible(
false);
417 new SwingWorker<Node[], Void>() {
419 protected Node[] doInBackground()
throws Exception {
420 Children rootChildren = em.getRootContext().getChildren();
421 TreeView tree = getTree();
424 tree.expandNode(results);
425 Children resultsChildren = results.getChildren();
426 Arrays.stream(resultsChildren.getNodes()).forEach(tree::expandNode);
430 showRejectedCheckBox.setSelected(
false);
433 Arrays.stream(views.getChildren().getNodes()).forEach(tree::expandNode);
434 tree.collapseNode(views);
444 if (rootChildren.getNodesCount() > 0) {
445 return new Node[]{rootChildren.getNodeAt(0)};
451 protected void done() {
455 if (!dataResult.isOpened()) {
466 em.setSelectedNodes(
get());
467 }
catch (PropertyVetoException ex) {
468 LOGGER.log(Level.SEVERE,
"Error setting default selected node.", ex);
469 }
catch (InterruptedException | ExecutionException ex) {
470 LOGGER.log(Level.SEVERE,
"Error expanding tree to initial state.", ex);
488 contentChildren = null;
491 void writeProperties(java.util.Properties p) {
494 p.setProperty(
"version",
"1.0");
498 Object readProperties(java.util.Properties p) {
499 if (instance == null) {
507 String version = p.getProperty(
"version");
530 return openCase.
hasData() ==
false;
553 return new Action[]{};
564 Node[] selectedNodes = this.getExplorerManager().getSelectedNodes();
565 if (selectedNodes.length > 0) {
566 result = selectedNodes[0];
580 String changed = evt.getPropertyName();
590 if (evt.getOldValue() != null && evt.getNewValue() == null) {
592 SwingUtilities.invokeLater(() -> {
593 Node emptyNode =
new AbstractNode(Children.LEAF);
594 em.setRootContext(emptyNode);
596 }
else if (evt.getNewValue() != null) {
598 Case newCase = (
Case) evt.getNewValue();
599 final String newCaseName = newCase.
getName();
600 SwingUtilities.invokeLater(() -> {
601 em.getRootContext().setName(newCaseName);
602 em.getRootContext().setDisplayName(newCaseName);
634 else if (changed.equals(ExplorerManager.PROP_SELECTED_NODES)) {
635 respondSelection((Node[]) evt.getOldValue(), (Node[]) evt.getNewValue());
651 @NbBundle.Messages(
"DirectoryTreeTopComponent.emptyMimeNode.text=Data not available. Run file type identification module.")
652 void respondSelection(
final Node[] oldNodes,
final Node[] newNodes) {
662 EventQueue.invokeLater(() -> {
664 DirectoryTreeTopComponent.this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
666 Node treeNode = DirectoryTreeTopComponent.this.getSelectedNode();
667 if (treeNode != null) {
668 Node originNode = ((DirectoryTreeFilterNode) treeNode).getOriginal();
670 Node drfn =
new DataResultFilterNode(originNode, DirectoryTreeTopComponent.this.em);
672 if (FileTypesByMimeType.isEmptyMimeTypeNode(originNode)) {
675 EmptyNode emptyNode =
new EmptyNode(Bundle.DirectoryTreeTopComponent_emptyMimeNode_text());
676 dataResult.
setNode(
new TableFilterNode(emptyNode,
true,
"This Node Is Empty"));
677 }
else if (originNode instanceof DisplayableItemNode) {
678 dataResult.
setNode(
new TableFilterNode(drfn,
true, ((DisplayableItemNode) originNode).getItemType()));
680 dataResult.
setNode(
new TableFilterNode(drfn,
true));
682 String displayName =
"";
683 Content content = originNode.getLookup().lookup(Content.class);
684 if (content != null) {
686 displayName = content.getUniquePath();
687 }
catch (TskCoreException ex) {
688 LOGGER.log(Level.SEVERE,
"Exception while calling Content.getUniquePath() for node: {0}", originNode);
690 }
else if (originNode.getLookup().lookup(String.class) != null) {
691 displayName = originNode.getLookup().lookup(String.class);
693 dataResult.
setPath(displayName);
696 if (oldNodes != null && newNodes != null
697 && (oldNodes.length == newNodes.length)) {
698 boolean sameNodes =
true;
699 for (
int i = 0; i < oldNodes.length; i++) {
700 sameNodes = sameNodes && oldNodes[i].getName().equals(newNodes[i].getName());
703 dataResult.requestActive();
712 updateHistory(em.getSelectedNodes());
716 if (selectedNodes.length == 0) {
720 Node selectedNode = selectedNodes[0];
721 String selectedNodeName = selectedNode.getName();
729 String[] currentLast = backList.peekLast();
730 String lastNodeName = null;
731 if (currentLast != null) {
732 lastNodeName = currentLast[currentLast.length - 1];
735 if (currentLast == null || !selectedNodeName.equals(lastNodeName)) {
737 final String[] selectedPath = NodeOp.createPath(selectedNode, em.getRootContext());
738 backList.addLast(selectedPath);
739 if (backList.size() > 1) {
740 backButton.setEnabled(
true);
742 backButton.setEnabled(
false);
746 forwardButton.setEnabled(
false);
758 backButton.setEnabled(
false);
759 forwardButton.setEnabled(
false);
768 return (BeanTreeView) this.treeView;
775 SwingUtilities.invokeLater(this::refreshDataSourceTree);
782 Node selectedNode = getSelectedNode();
783 final String[] selectedPath = NodeOp.createPath(selectedNode, em.getRootContext());
784 Children rootChildren = em.getRootContext().getChildren();
786 if (dataSourcesFilterNode == null) {
787 LOGGER.log(Level.SEVERE,
"Cannot find data sources filter node, won't refresh the content tree");
790 Node dataSourcesNode = ((DirectoryTreeFilterNode) dataSourcesFilterNode).getOriginal();
803 private void setSelectedNode(
final String[] previouslySelectedNodePath,
final String rootNodeName) {
804 if (previouslySelectedNodePath == null) {
807 SwingUtilities.invokeLater(
new Runnable() {
810 if (previouslySelectedNodePath.length > 0 && (rootNodeName == null || previouslySelectedNodePath[0].equals(rootNodeName))) {
811 Node selectedNode = null;
812 ArrayList<String> selectedNodePath =
new ArrayList<>(Arrays.asList(previouslySelectedNodePath));
813 while (null == selectedNode && !selectedNodePath.isEmpty()) {
815 selectedNode = NodeOp.findPath(em.getRootContext(), selectedNodePath.toArray(
new String[selectedNodePath.size()]));
816 }
catch (NodeNotFoundException ex) {
818 if (selectedNodePath.size() > 1) {
819 selectedNodePath.remove(selectedNodePath.size() - 1);
821 StringBuilder nodePath =
new StringBuilder();
822 for (
int i = 0; i < previouslySelectedNodePath.length; ++i) {
823 nodePath.append(previouslySelectedNodePath[i]).append(
"/");
825 LOGGER.log(Level.WARNING,
"Failed to find any nodes to select on path " + nodePath.toString(), ex);
831 if (null != selectedNode) {
832 if (rootNodeName != null) {
838 em.setExploredContextAndSelection(selectedNode,
new Node[]{selectedNode});
839 }
catch (PropertyVetoException ex) {
840 LOGGER.log(Level.WARNING,
"Property veto from ExplorerManager setting selection to " + selectedNode.getName(), ex);
859 int typeID = art.getArtifactTypeID();
860 String typeName = art.getArtifactTypeName();
861 Children rootChilds = em.getRootContext().getChildren();
862 Node treeNode = null;
864 Children resultsChilds = resultsNode.getChildren();
865 if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID()) {
866 Node hashsetRootNode = resultsChilds.findChild(typeName);
867 Children hashsetRootChilds = hashsetRootNode.getChildren();
869 String setName = null;
870 List<BlackboardAttribute> attributes = art.getAttributes();
871 for (BlackboardAttribute att : attributes) {
872 int typeId = att.getAttributeType().getTypeID();
873 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID()) {
874 setName = att.getValueString();
877 treeNode = hashsetRootChilds.findChild(setName);
878 }
catch (TskCoreException ex) {
879 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
881 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID()) {
882 Node keywordRootNode = resultsChilds.findChild(typeName);
883 Children keywordRootChilds = keywordRootNode.getChildren();
885 String listName = null;
886 String keywordName = null;
888 List<BlackboardAttribute> attributes = art.getAttributes();
889 for (BlackboardAttribute att : attributes) {
890 int typeId = att.getAttributeType().getTypeID();
891 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID()) {
892 listName = att.getValueString();
893 }
else if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_KEYWORD.getTypeID()) {
894 keywordName = att.getValueString();
895 }
else if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_KEYWORD_REGEXP.getTypeID()) {
896 regex = att.getValueString();
899 if (listName == null) {
901 listName = NbBundle.getMessage(
KeywordHits.class,
"KeywordHits.simpleLiteralSearch.text");
903 listName = NbBundle.getMessage(
KeywordHits.class,
"KeywordHits.singleRegexSearch.text");
906 Node listNode = keywordRootChilds.findChild(listName);
907 if (listNode == null) {
910 Children listChildren = listNode.getChildren();
911 if (listChildren == null) {
915 Node regexNode = listChildren.findChild(regex);
916 if (regexNode == null) {
919 listChildren = regexNode.getChildren();
920 if (listChildren == null) {
925 treeNode = listChildren.findChild(keywordName);
927 }
catch (TskCoreException ex) {
928 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
930 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT.getTypeID()
931 || typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_ARTIFACT_HIT.getTypeID()) {
932 Node interestingItemsRootNode = resultsChilds.findChild(NbBundle
933 .getMessage(
InterestingHits.class,
"InterestingHits.interestingItems.text"));
934 Children interestingItemsRootChildren = interestingItemsRootNode.getChildren();
936 String setName = null;
937 List<BlackboardAttribute> attributes = art.getAttributes();
938 for (BlackboardAttribute att : attributes) {
939 int typeId = att.getAttributeType().getTypeID();
940 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID()) {
941 setName = att.getValueString();
944 Node setNode = interestingItemsRootChildren.findChild(setName);
945 if (setNode == null) {
948 Children interestingChildren = setNode.getChildren();
949 if (interestingChildren == null) {
952 treeNode = interestingChildren.findChild(art.getDisplayName());
953 }
catch (TskCoreException ex) {
954 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
956 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID()) {
957 Node emailMsgRootNode = resultsChilds.findChild(typeName);
958 Children emailMsgRootChilds = emailMsgRootNode.getChildren();
959 Map<String, String> parsedPath = null;
961 List<BlackboardAttribute> attributes = art.getAttributes();
962 for (BlackboardAttribute att : attributes) {
963 int typeId = att.getAttributeType().getTypeID();
964 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH.getTypeID()) {
969 if (parsedPath == null) {
972 Node defaultNode = emailMsgRootChilds.findChild(parsedPath.get(NbBundle.getMessage(
EmailExtracted.class,
"EmailExtracted.defaultAcct.text")));
973 Children defaultChildren = defaultNode.getChildren();
974 treeNode = defaultChildren.findChild(parsedPath.get(NbBundle.getMessage(
EmailExtracted.class,
"EmailExtracted.defaultFolder.text")));
975 }
catch (TskCoreException ex) {
976 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
979 }
else if (typeID == BlackboardArtifact.ARTIFACT_TYPE.TSK_ACCOUNT.getTypeID()) {
980 Node accountRootNode = resultsChilds.findChild(art.getDisplayName());
981 Children accountRootChilds = accountRootNode.getChildren();
982 List<BlackboardAttribute> attributes;
983 String accountType = null;
984 String ccNumberName = null;
986 attributes = art.getAttributes();
987 for (BlackboardAttribute att : attributes) {
988 int typeId = att.getAttributeType().getTypeID();
989 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_ACCOUNT_TYPE.getTypeID()) {
990 accountType = att.getValueString();
992 if (typeId == BlackboardAttribute.ATTRIBUTE_TYPE.TSK_CARD_NUMBER.getTypeID()) {
993 ccNumberName = att.getValueString();
996 if (accountType == null) {
1000 if (accountType.equals(Account.Type.CREDIT_CARD.getTypeName())) {
1001 Node accountNode = accountRootChilds.findChild(Account.Type.CREDIT_CARD.getDisplayName());
1002 if (accountNode == null) {
1005 Children accountChildren = accountNode.getChildren();
1006 if (accountChildren == null) {
1009 Node binNode = accountChildren.findChild(NbBundle.getMessage(
Accounts.class,
"Accounts.ByBINNode.name"));
1010 if (binNode == null) {
1013 Children binChildren = binNode.getChildren();
1014 if (ccNumberName == null) {
1019 String binName = StringUtils.rightPad(ccNumberName, 8,
"0");
1020 binName = binName.substring(0, 8);
1023 bin = Integer.parseInt(binName);
1024 }
catch (NumberFormatException ex) {
1025 LOGGER.log(Level.WARNING,
"Unable to parseInt a BIN for node selection from string binName=" + binName, ex);
1029 if (binInfo != null) {
1030 int startBin = ((
BINRange) binInfo).getBINstart();
1031 int endBin = ((
BINRange) binInfo).getBINend();
1032 if (startBin != endBin) {
1033 binName = Integer.toString(startBin) +
"-" + Integer.toString(endBin).substring(5);
1036 if (binName == null) {
1039 treeNode = binChildren.findChild(binName);
1041 treeNode = accountRootChilds.findChild(accountType);
1043 }
catch (TskCoreException ex) {
1044 LOGGER.log(Level.WARNING,
"Error retrieving attributes", ex);
1048 Children extractedChilds = extractedContent.getChildren();
1049 if (extractedChilds == null) {
1052 treeNode = extractedChilds.findChild(typeName);
1055 if (treeNode == null) {
1059 DisplayableItemNode undecoratedParentNode = (DisplayableItemNode) ((DirectoryTreeFilterNode) treeNode).getOriginal();
1061 getTree().expandNode(treeNode);
1063 em.setExploredContextAndSelection(treeNode,
new Node[]{treeNode});
1064 }
catch (PropertyVetoException ex) {
1065 LOGGER.log(Level.WARNING,
"Property Veto: ", ex);
1072 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)
static Case getOpenCase()
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 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)