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.dummyNodeDisplayName");
 
  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);
 
  285             if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
 
  286                 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 
  290                 if (contentViewer == null) {
 
  291                     contentViewer = Lookup.getDefault().lookup(
DataContent.class);
 
  295                     if (contentViewer != null) {
 
  296                         Node[] selectedNodes = explorerManager.getSelectedNodes();
 
  298                             drv.setSelectedNodes(selectedNodes);
 
  304                         if (selectedNodes.length == 1) {
 
  305                             contentViewer.
setNode(selectedNodes[0]);
 
  307                             contentViewer.setNode(null);
 
  319         if (null != this.customContentViewer) {
 
  320             viewerWrapper.setContentViewer(this.customContentViewer);
 
  322         this.viewers.add(viewerWrapper);
 
  333         if (null != explorerManager && null != emNodeSelectionListener) {
 
  334             explorerManager.removePropertyChangeListener(emNodeSelectionListener);
 
  335             explorerManager = null;
 
  339         for (UpdateWrapper drv : this.viewers) {
 
  344             for (UpdateWrapper drv : this.viewers) {
 
  345                 drv.clearComponent();
 
  353             this.setLayout(null);
 
  355             this.setVisible(
false);
 
  366         if (this.rootNode != null) {
 
  367             this.rootNode.removeNodeListener(rootNodeListener);
 
  371         if (listeningToTabbedPane == 
false) {
 
  373             listeningToTabbedPane = 
true;
 
  376         this.rootNode = selectedNode;
 
  377         if (this.rootNode != null) {
 
  378             rootNodeListener.
reset();
 
  379             this.rootNode.addNodeListener(rootNodeListener);
 
  385         if (selectedNode != null) {
 
  386             int childrenCount = selectedNode.getChildren().getNodesCount();
 
  397             if (drv.isSupported(selectedNode)) {
 
  406         boolean hasViewerEnabled = 
true;
 
  409             hasViewerEnabled = 
false;
 
  412                     currentActiveTab = i;
 
  413                     hasViewerEnabled = 
true;
 
  418             if (hasViewerEnabled) {
 
  423         if (hasViewerEnabled) {
 
  424             viewers.get(currentActiveTab).setNode(selectedNode);
 
  446         List<DataResultViewer> ret = 
new ArrayList<DataResultViewer>();
 
  448             ret.add(w.getViewer());
 
  460         JTabbedPane pane = (JTabbedPane) e.getSource();
 
  463         int currentTab = pane.getSelectedIndex();
 
  464         if (currentTab != -1) {
 
  471             this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 
  473                 drv.setNode(rootNode);
 
  475                 this.setCursor(null);
 
  494             drv.resetComponent();
 
  500             drv.setSelectedNodes(selected);
 
  513     @SuppressWarnings(
"unchecked")
 
  522         setMinimumSize(
new java.awt.Dimension(0, 5));
 
  523         setPreferredSize(
new java.awt.Dimension(5, 5));
 
  530         org.openide.awt.Mnemonics.setLocalizedText(
matchLabel, 
org.openide.util.NbBundle.getMessage(
DataResultPanel.class, 
"DataResultPanel.matchLabel.text")); 
 
  534         javax.swing.GroupLayout layout = 
new javax.swing.GroupLayout(
this);
 
  535         this.setLayout(layout);
 
  536         layout.setHorizontalGroup(
 
  537             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  538             .addGroup(layout.createSequentialGroup()
 
  539                 .addComponent(
directoryTablePath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
 
  540                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 
  542                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
 
  544             .addComponent(
dataResultTabbedPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 
  546         layout.setVerticalGroup(
 
  547             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  548             .addGroup(layout.createSequentialGroup()
 
  549                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  550                     .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
 
  553                     .addComponent(
directoryTablePath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
 
  555                 .addComponent(
dataResultTabbedPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
 
  572             this.outdated = 
true;
 
  579         void setNode(Node selectedNode) {
 
  580             this.wrapped.
setNode(selectedNode);
 
  581             this.outdated = 
false;
 
  584         void resetComponent() {
 
  586             this.outdated = 
true;
 
  589         void clearComponent() {
 
  591             this.outdated = 
true;
 
  594         boolean isOutdated() {
 
  598         void setSelectedNodes(Node[] selected) {
 
  602         boolean isSupported(Node selectedNode) {
 
  606         void setContentViewer(DataContent contentViewer) {
 
  627             waitingForData = 
true;
 
  632             Node[] delta = nme.getDelta();
 
  642                 waitingForData = 
false;
 
  643                 if (SwingUtilities.isEventDispatchThread()) {
 
  646                     SwingUtilities.invokeLater(
new Runnable() {
 
  657             for (Node n : delta) {
 
  658                 if (!n.getDisplayName().equals(DUMMY_NODE_DISPLAY_NAME)) {
 
  670             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()
static final String DUMMY_NODE_DISPLAY_NAME
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()