19 package org.sleuthkit.autopsy.communications;
21 import java.util.Collections;
23 import java.util.stream.Collectors;
24 import java.util.stream.Stream;
25 import org.openide.explorer.ExplorerManager;
26 import org.openide.nodes.Node;
40 final class MessageBrowser
extends javax.swing.JPanel implements ExplorerManager.Provider {
42 private static final long serialVersionUID = 1L;
43 private final ExplorerManager gacExplorerManager;
44 private final DataResultPanel messagesResultPanel;
45 private DataResultViewerTable dataResultViewerTable;
56 MessageBrowser(ExplorerManager gacExplorerManager) {
57 this.gacExplorerManager = gacExplorerManager;
60 messagesResultPanel = DataResultPanel.createInstanceUninitialized(
"Account",
"", Node.EMPTY, 0, messageDataContent);
61 splitPane.setTopComponent(messagesResultPanel);
62 splitPane.setBottomComponent(messageDataContent);
66 public void addNotify() {
68 ExplorerManager parentExplorerManager = ExplorerManager.find(
this);
69 parentExplorerManager.addPropertyChangeListener(pce -> {
70 if (pce.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
71 final Node[] selectedNodes = parentExplorerManager.getSelectedNodes();
73 messagesResultPanel.setNumMatches(0);
74 messagesResultPanel.setNode(null);
76 if (selectedNodes.length == 0) {
78 messagesResultPanel.setPath(
"");
80 AccountDeviceInstanceNode adiNode = (AccountDeviceInstanceNode) selectedNodes[0];
81 CommunicationsFilter filter = adiNode.getFilter();
82 CommunicationsManager commsManager = adiNode.getCommsManager();
83 final Set<AccountDeviceInstance> accountDeviceInstances;
85 if (selectedNodes.length == 1) {
86 final AccountDeviceInstance accountDeviceInstance = adiNode.getAccountDeviceInstance();
87 accountDeviceInstances = Collections.singleton(accountDeviceInstance);
88 messagesResultPanel.setPath(accountDeviceInstance.getAccount().getTypeSpecificID());
90 accountDeviceInstances = Stream.of(selectedNodes)
91 .map(node -> (AccountDeviceInstanceNode) node)
92 .map(AccountDeviceInstanceNode::getAccountDeviceInstance)
93 .collect(Collectors.toSet());
94 messagesResultPanel.setPath(selectedNodes.length +
" accounts");
96 AccountDetailsNode accountDetailsNode
97 =
new AccountDetailsNode(accountDeviceInstances, filter, commsManager);
98 TableFilterNode wrappedNode
99 =
new TableFilterNode(
new DataResultFilterNode(accountDetailsNode, parentExplorerManager),
true);
100 messagesResultPanel.setNode(wrappedNode);
106 if (null == dataResultViewerTable) {
107 dataResultViewerTable =
new DataResultViewerTable(gacExplorerManager,
"Messages");
108 messagesResultPanel.addResultViewer(dataResultViewerTable);
110 messagesResultPanel.open();
114 public ExplorerManager getExplorerManager() {
115 return gacExplorerManager;
123 @SuppressWarnings(
"unchecked")
125 private
void initComponents() {
127 splitPane =
new javax.swing.JSplitPane();
130 splitPane.setDividerLocation(400);
131 splitPane.setDividerSize(10);
132 splitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
133 splitPane.setResizeWeight(0.5);
134 splitPane.setBottomComponent(messageDataContent);
136 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
137 this.setLayout(layout);
138 layout.setHorizontalGroup(
139 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
140 .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
142 .addComponent(splitPane))
144 layout.setVerticalGroup(
145 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
146 .addGroup(layout.createSequentialGroup()
148 .addComponent(splitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 1083, Short.MAX_VALUE)
156 private javax.swing.JSplitPane splitPane;