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()