19 package org.sleuthkit.autopsy.corecomponents;
21 import java.awt.Cursor;
22 import java.beans.PropertyChangeEvent;
23 import java.beans.PropertyChangeListener;
24 import java.util.ArrayList;
25 import java.util.Collections;
26 import java.util.List;
27 import javax.swing.JTabbedPane;
28 import javax.swing.SwingUtilities;
29 import javax.swing.event.ChangeEvent;
30 import javax.swing.event.ChangeListener;
31 import org.openide.explorer.ExplorerManager;
32 import org.openide.nodes.Node;
33 import org.openide.nodes.NodeEvent;
34 import org.openide.nodes.NodeListener;
35 import org.openide.nodes.NodeMemberEvent;
36 import org.openide.nodes.NodeReorderEvent;
37 import org.openide.util.Lookup;
38 import org.openide.util.NbBundle;
156 resultViewPanel.setName(title);
158 resultViewPanel.
setNode(rootNode);
159 resultViewPanel.
setPath(pathText);
188 this(
false, customContentView);
240 resultViewers.add(resultViewer);
251 return Collections.unmodifiableList(resultViewers);
262 this.contentView = customContentView;
270 if (null == explorerManager) {
280 explorerManager = ExplorerManager.find(
this);
282 explorerManager.addPropertyChangeListener(emNodeSelectionListener);
300 resultViewer = factory;
308 if (isMain && null == rootNode) {
312 this.setVisible(
true);
325 if (this.rootNode != null) {
326 this.rootNode.removeNodeListener(rootNodeListener);
334 if (listeningToTabbedPane ==
false) {
336 listeningToTabbedPane =
true;
340 if (this.rootNode != null) {
341 rootNodeListener.
reset();
342 this.rootNode.addNodeListener(rootNodeListener);
348 if (null != this.rootNode) {
349 int childrenCount = this.rootNode.getChildren().getNodesCount();
384 this.resultViewers.forEach((viewer) -> viewer.setSelectedNodes(selectedNodes));
399 if (resultViewers.get(i).isSupported(selectedNode)) {
414 NodeSelectionInfo selectedChildInfo = ((TableFilterNode) selectedNode).getChildNodeSelectionInfo();
415 if (null != selectedChildInfo) {
416 for (
int i = 0; i < resultViewers.size(); ++i) {
423 if (NO_TAB_SELECTED == tabToSelect) {
439 if (NO_TAB_SELECTED != tabToSelect) {
441 resultViewers.get(tabToSelect).setNode(selectedNode);
452 this.resultViewers.forEach((viewer) -> {
453 viewer.resetComponent();
465 JTabbedPane pane = (JTabbedPane) event.getSource();
466 int currentTab = pane.getSelectedIndex();
467 if (-1 != currentTab) {
469 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
471 currentViewer.
setNode(rootNode);
473 this.setCursor(null);
497 if (null != explorerManager && null != emNodeSelectionListener) {
498 explorerManager.removePropertyChangeListener(emNodeSelectionListener);
499 explorerManager = null;
502 this.resultViewers.forEach((viewer) -> viewer.setNode(null));
512 this.setLayout(null);
514 this.setVisible(
false);
532 }
catch (IllegalStateException ex) {
539 if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
540 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
542 if (contentView != null) {
543 Node[] selectedNodes = explorerManager.getSelectedNodes();
549 resultViewers.forEach((viewer) -> viewer.setSelectedNodes(selectedNodes));
557 if (1 == selectedNodes.length) {
558 contentView.
setNode(selectedNodes[0]);
579 waitingForData =
true;
584 Node[] delta = nme.getDelta();
594 waitingForData =
false;
595 if (SwingUtilities.isEventDispatchThread()) {
598 SwingUtilities.invokeLater(() -> {
606 for (Node n : delta) {
607 if (!n.getDisplayName().equals(PLEASE_WAIT_NODE_DISPLAY_NAME)) {
619 if (rootNode != null && rootNode.getChildren() != null) {
647 @SuppressWarnings(
"unchecked")
656 setMinimumSize(
new java.awt.Dimension(0, 5));
657 setPreferredSize(
new java.awt.Dimension(5, 5));
664 org.openide.awt.Mnemonics.setLocalizedText(
matchLabel,
org.openide.util.NbBundle.getMessage(
DataResultPanel.class,
"DataResultPanel.matchLabel.text"));
668 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
669 this.setLayout(layout);
670 layout.setHorizontalGroup(
671 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
672 .addGroup(layout.createSequentialGroup()
673 .addComponent(
directoryTablePath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
674 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
676 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
678 .addComponent(
dataResultTabbedPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
680 layout.setVerticalGroup(
681 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
682 .addGroup(layout.createSequentialGroup()
683 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
684 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
687 .addComponent(
directoryTablePath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
689 .addComponent(
dataResultTabbedPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
void setupTabs(Node selectedNode)
static void createInstanceCommon(String title, String pathText, Node rootNode, int totalMatches, DataResultPanel resultViewPanel)
void propertyChange(PropertyChangeEvent evt)
static final long serialVersionUID
ExplorerManager explorerManager
static final int NO_TAB_SELECTED
volatile boolean waitingForData
void setNumMatches(Integer numberOfChildNodes)
void childrenReordered(NodeReorderEvent nre)
javax.swing.JLabel numberMatchLabel
ExplorerManager getExplorerManager()
void setNode(Node rootNode)
List< DataResultViewer > getViewers()
void stateChanged(ChangeEvent event)
void childrenRemoved(NodeMemberEvent nme)
void setSelectedNodes(Node[] selectedNodes)
javax.swing.JTabbedPane dataResultTabbedPanel
void setContentViewer(DataContent customContentView)
void setNode(Node selectedNode)
DataResultViewer createInstance()
final List< DataResultViewer > resultViewers
ExplorerManagerNodeSelectionListener emNodeSelectionListener
void addResultViewer(DataResultViewer resultViewer)
void nodeDestroyed(NodeEvent ne)
void setNode(Node selectedNode)
void childrenAdded(final NodeMemberEvent nme)
javax.swing.JLabel directoryTablePath
static final String PLEASE_WAIT_NODE_DISPLAY_NAME
boolean listeningToTabbedPane
static DataResultPanel createInstanceUninitialized(String title, String pathText, Node rootNode, int totalMatches, DataContent customContentView)
void setPath(String pathText)
boolean containsReal(Node[] delta)
static Case getCurrentCase()
javax.swing.JLabel matchLabel
static DataResultPanel createInstance(String title, String pathText, Node rootNode, int totalMatches, DataContent customContentView)
final RootNodeListener rootNodeListener
static DataResultPanel createInstance(String title, String pathText, Node rootNode, int totalMatches)
void setTitle(String title)
void resetTabs(Node unusedSelectedNode)
void propertyChange(PropertyChangeEvent evt)
static boolean isCaseOpen()
DataResultPanel(boolean isMain, DataContent contentView)