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;
 
   62     private final List<UpdateWrapper> 
viewers = 
new ArrayList<>();
 
   72             "DataResultPanel.pleasewaitNodeDisplayName");
 
  138         newDataResult.
open();
 
  139         return newDataResult;
 
  160         newDataResult.
open();
 
  161         return newDataResult;
 
  183         return newDataResult;
 
  198         newDataResult.
setNode(givenNode);
 
  199         newDataResult.
setPath(pathText);
 
  218         if (null == explorerManager) {
 
  227             explorerManager = ExplorerManager.find(
this);
 
  234             explorerManager.addPropertyChangeListener(emNodeSelectionListener);
 
  240         if (totalTabs == 0) {
 
  267             if (rootNode == null) {
 
  272         this.setVisible(
true);
 
  281             } 
catch (IllegalStateException ex) {
 
  287             if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
 
  288                 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 
  292                 if (contentViewer == null) {
 
  293                     contentViewer = Lookup.getDefault().lookup(
DataContent.class);
 
  297                     if (contentViewer != null) {
 
  298                         Node[] selectedNodes = explorerManager.getSelectedNodes();
 
  300                             drv.setSelectedNodes(selectedNodes);
 
  306                         if (selectedNodes.length == 1) {
 
  307                             contentViewer.
setNode(selectedNodes[0]);
 
  309                             contentViewer.setNode(null);
 
  321         if (null != this.customContentViewer) {
 
  322             viewerWrapper.setContentViewer(this.customContentViewer);
 
  324         this.viewers.add(viewerWrapper);
 
  335         if (null != explorerManager && null != emNodeSelectionListener) {
 
  336             explorerManager.removePropertyChangeListener(emNodeSelectionListener);
 
  337             explorerManager = null;
 
  341         for (UpdateWrapper drv : this.viewers) {
 
  346             for (UpdateWrapper drv : this.viewers) {
 
  347                 drv.clearComponent();
 
  355             this.setLayout(null);
 
  357             this.setVisible(
false);
 
  368         if (this.rootNode != null) {
 
  369             this.rootNode.removeNodeListener(rootNodeListener);
 
  373         if (listeningToTabbedPane == 
false) {
 
  375             listeningToTabbedPane = 
true;
 
  378         this.rootNode = selectedNode;
 
  379         if (this.rootNode != null) {
 
  380             rootNodeListener.
reset();
 
  381             this.rootNode.addNodeListener(rootNodeListener);
 
  387         if (selectedNode != null) {
 
  388             int childrenCount = selectedNode.getChildren().getNodesCount();
 
  399             if (drv.isSupported(selectedNode)) {
 
  408         boolean hasViewerEnabled = 
true;
 
  411             hasViewerEnabled = 
false;
 
  414                     currentActiveTab = i;
 
  415                     hasViewerEnabled = 
true;
 
  420             if (hasViewerEnabled) {
 
  425         if (hasViewerEnabled) {
 
  426             viewers.get(currentActiveTab).setNode(selectedNode);
 
  448         List<DataResultViewer> ret = 
new ArrayList<>();
 
  450             ret.add(w.getViewer());
 
  467         JTabbedPane pane = (JTabbedPane) e.getSource();
 
  470         int currentTab = pane.getSelectedIndex();
 
  471         if (currentTab != -1) {
 
  478             this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 
  480                 drv.setNode(rootNode);
 
  482                 this.setCursor(null);
 
  501             drv.resetComponent();
 
  507             drv.setSelectedNodes(selected);
 
  520     @SuppressWarnings(
"unchecked")
 
  529         setMinimumSize(
new java.awt.Dimension(0, 5));
 
  530         setPreferredSize(
new java.awt.Dimension(5, 5));
 
  537         org.openide.awt.Mnemonics.setLocalizedText(
matchLabel, 
org.openide.util.NbBundle.getMessage(
DataResultPanel.class, 
"DataResultPanel.matchLabel.text")); 
 
  541         javax.swing.GroupLayout layout = 
new javax.swing.GroupLayout(
this);
 
  542         this.setLayout(layout);
 
  543         layout.setHorizontalGroup(
 
  544             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  545             .addGroup(layout.createSequentialGroup()
 
  546                 .addComponent(
directoryTablePath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  547                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 
  549                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  551             .addComponent(
dataResultTabbedPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 
  553         layout.setVerticalGroup(
 
  554             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  555             .addGroup(layout.createSequentialGroup()
 
  556                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  557                     .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 
  560                     .addComponent(
directoryTablePath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 
  562                 .addComponent(
dataResultTabbedPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
 
  579             this.outdated = 
true;
 
  586         void setNode(Node selectedNode) {
 
  587             this.wrapped.
setNode(selectedNode);
 
  588             this.outdated = 
false;
 
  591         void resetComponent() {
 
  593             this.outdated = 
true;
 
  596         void clearComponent() {
 
  598             this.outdated = 
true;
 
  601         boolean isOutdated() {
 
  605         void setSelectedNodes(Node[] selected) {
 
  609         boolean isSupported(Node selectedNode) {
 
  613         void setContentViewer(DataContent contentViewer) {
 
  634             waitingForData = 
true;
 
  639             Node[] delta = nme.getDelta();
 
  649                 waitingForData = 
false;
 
  650                 if (SwingUtilities.isEventDispatchThread()) {
 
  653                     SwingUtilities.invokeLater(
new Runnable() {
 
  664             for (Node n : delta) {
 
  665                 if (!n.getDisplayName().equals(PLEASEWAIT_NODE_DISPLAY_NAME)) {
 
  677             if (rootNode != null && rootNode.getChildren() != null) {
 
void setupTabs(Node selectedNode)
 
static void createInstanceCommon(String pathText, Node givenNode, int totalMatches, DataResultPanel newDataResult)
 
boolean isSupported(Node selectedNode)
 
void propertyChange(PropertyChangeEvent evt)
 
ExplorerManager explorerManager
 
static final Logger logger
 
DataContent customContentViewer
 
volatile boolean waitingForData
 
void setSelectedNodes(Node[] selected)
 
void childrenReordered(NodeReorderEvent nre)
 
javax.swing.JLabel numberMatchLabel
 
final List< UpdateWrapper > viewers
 
static DataResultPanel createInstanceUninitialized(String title, String pathText, Node givenNode, int totalMatches, DataContent dataContent)
 
static DataResultPanel createInstance(String title, String pathText, Node givenNode, int totalMatches, DataContent dataContent)
 
void setSelectedNodes(Node[] selected)
 
void setNode(Node selectedNode)
 
List< DataResultViewer > getViewers()
 
void childrenRemoved(NodeMemberEvent nme)
 
void setContentViewer(DataContent customContentViewer)
 
javax.swing.JTabbedPane dataResultTabbedPanel
 
void setNode(Node selectedNode)
 
DataResultViewer createInstance()
 
ExplorerManagerNodeSelectionListener emNodeSelectionListener
 
void nodeDestroyed(NodeEvent ne)
 
void setNode(Node selectedNode)
 
void addDataResultViewer(DataResultViewer dataResultViewer)
 
void childrenAdded(final NodeMemberEvent nme)
 
javax.swing.JLabel directoryTablePath
 
void resetTabs(Node selectedNode)
 
void setNumMatches(Integer numMatches)
 
boolean listeningToTabbedPane
 
static DataResultPanel createInstance(String title, String pathText, Node givenNode, int totalMatches)
 
void stateChanged(ChangeEvent e)
 
void setPath(String pathText)
 
boolean containsReal(Node[] delta)
 
static Case getCurrentCase()
 
synchronized static Logger getLogger(String name)
 
javax.swing.JLabel matchLabel
 
void setContentViewer(DataContent contentViewer)
 
final RootNodeListener rootNodeListener
 
void setTitle(String title)
 
void propertyChange(PropertyChangeEvent evt)
 
static boolean isCaseOpen()
 
static final String PLEASEWAIT_NODE_DISPLAY_NAME