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.List;
26 import javax.swing.JTabbedPane;
27 import javax.swing.SwingUtilities;
28 import javax.swing.event.ChangeEvent;
29 import javax.swing.event.ChangeListener;
30 import org.openide.explorer.ExplorerManager;
31 import org.openide.nodes.Node;
32 import org.openide.nodes.NodeEvent;
33 import org.openide.nodes.NodeListener;
34 import org.openide.nodes.NodeMemberEvent;
35 import org.openide.nodes.NodeReorderEvent;
36 import org.openide.util.Lookup;
37 import org.openide.util.NbBundle;
155 resultViewPanel.setName(title);
157 resultViewPanel.
setNode(rootNode);
158 resultViewPanel.
setPath(pathText);
183 this.contentView = Lookup.getDefault().lookup(
DataContent.class);
197 this.contentView = customContentView;
249 if (null != contentView) {
252 resultViewers.add(resultViewer);
263 List<DataResultViewer> viewers =
new ArrayList<>();
264 resultViewers.forEach((viewer) -> {
278 this.contentView = customContentView;
286 if (null == explorerManager) {
296 explorerManager = ExplorerManager.find(
this);
298 explorerManager.addPropertyChangeListener(emNodeSelectionListener);
316 resultViewer = factory;
324 if (isMain && null == rootNode) {
328 this.setVisible(
true);
341 if (this.rootNode != null) {
342 this.rootNode.removeNodeListener(rootNodeListener);
350 if (listeningToTabbedPane ==
false) {
352 listeningToTabbedPane =
true;
356 if (this.rootNode != null) {
357 rootNodeListener.
reset();
358 this.rootNode.addNodeListener(rootNodeListener);
364 if (null != this.rootNode) {
365 int childrenCount = this.rootNode.getChildren().getNodesCount();
400 this.resultViewers.forEach((viewer) -> {
401 viewer.setSelectedNodes(selectedNodes);
417 if (resultViewers.get(i).isSupported(selectedNode)) {
432 NodeSelectionInfo selectedChildInfo = ((TableFilterNode) selectedNode).getChildNodeSelectionInfo();
433 if (null != selectedChildInfo) {
434 for (
int i = 0; i < resultViewers.size(); ++i) {
441 if (NO_TAB_SELECTED == tabToSelect) {
457 if (NO_TAB_SELECTED != tabToSelect) {
459 resultViewers.get(tabToSelect).setNode(selectedNode);
470 this.resultViewers.forEach((viewer) -> {
471 viewer.resetComponent();
483 JTabbedPane pane = (JTabbedPane) event.getSource();
484 int currentTab = pane.getSelectedIndex();
485 if (-1 != currentTab) {
487 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
489 currentViewer.
setNode(rootNode);
491 this.setCursor(null);
515 if (null != explorerManager && null != emNodeSelectionListener) {
516 explorerManager.removePropertyChangeListener(emNodeSelectionListener);
517 explorerManager = null;
520 this.resultViewers.forEach((viewer) -> {
521 viewer.setNode(null);
525 this.resultViewers.forEach((viewer) -> {
526 viewer.clearComponent();
534 this.setLayout(null);
536 this.setVisible(
false);
549 }
catch (IllegalStateException ex) {
556 if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
557 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
559 if (contentView != null) {
560 Node[] selectedNodes = explorerManager.getSelectedNodes();
566 resultViewers.forEach((viewer) -> {
567 viewer.setSelectedNodes(selectedNodes);
576 if (1 == selectedNodes.length) {
577 contentView.
setNode(selectedNodes[0]);
598 waitingForData =
true;
603 Node[] delta = nme.getDelta();
613 waitingForData =
false;
614 if (SwingUtilities.isEventDispatchThread()) {
617 SwingUtilities.invokeLater(() -> {
625 for (Node n : delta) {
626 if (!n.getDisplayName().equals(PLEASE_WAIT_NODE_DISPLAY_NAME)) {
638 if (rootNode != null && rootNode.getChildren() != null) {
666 @SuppressWarnings(
"unchecked")
675 setMinimumSize(
new java.awt.Dimension(0, 5));
676 setPreferredSize(
new java.awt.Dimension(5, 5));
683 org.openide.awt.Mnemonics.setLocalizedText(
matchLabel,
org.openide.util.NbBundle.getMessage(
DataResultPanel.class,
"DataResultPanel.matchLabel.text"));
687 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
688 this.setLayout(layout);
689 layout.setHorizontalGroup(
690 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
691 .addGroup(layout.createSequentialGroup()
692 .addComponent(
directoryTablePath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
693 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
695 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
697 .addComponent(
dataResultTabbedPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
699 layout.setVerticalGroup(
700 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
701 .addGroup(layout.createSequentialGroup()
702 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
703 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
706 .addComponent(
directoryTablePath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
708 .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
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)
void setContentViewer(DataContent contentViewer)
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()