19package org.sleuthkit.autopsy.communications;
21import com.google.common.eventbus.Subscribe;
22import java.awt.Component;
23import java.util.HashSet;
25import java.util.logging.Level;
26import javax.swing.JPanel;
27import javax.swing.ListSelectionModel;
28import javax.swing.SwingUtilities;
29import javax.swing.table.TableCellRenderer;
30import org.netbeans.swing.outline.DefaultOutlineModel;
31import org.netbeans.swing.outline.Outline;
32import org.openide.explorer.ExplorerManager;
33import org.openide.explorer.ExplorerUtils;
34import org.openide.nodes.AbstractNode;
35import org.openide.nodes.Children;
36import org.openide.nodes.Node;
37import org.openide.util.Lookup;
38import org.openide.util.lookup.ProxyLookup;
39import org.sleuthkit.autopsy.casemodule.Case;
40import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
41import org.sleuthkit.autopsy.communications.relationships.RelationshipBrowser;
42import org.sleuthkit.autopsy.communications.relationships.SelectionInfo;
43import org.sleuthkit.autopsy.coreutils.Logger;
44import org.sleuthkit.datamodel.AccountDeviceInstance;
45import org.sleuthkit.datamodel.CommunicationsFilter;
46import org.sleuthkit.datamodel.CommunicationsManager;
47import org.sleuthkit.datamodel.TskCoreException;
58@SuppressWarnings(
"PMD.SingularField")
59public final class
AccountsBrowser extends JPanel implements ExplorerManager.Provider, Lookup.Provider {
79 "device", Bundle.AccountNode_device(),
80 "type", Bundle.AccountNode_accountType(),
81 "count", Bundle.AccountNode_messageCount()
85 ((DefaultOutlineModel)
outline.getOutlineModel()).setNodesColumnLabel(Bundle.AccountNode_accountName());
86 outline.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
87 outline.setColumnSorted(3,
false, 1);
90 if (ExplorerManager.PROP_ROOT_CONTEXT.equals(evt.getPropertyName())) {
91 SwingUtilities.invokeLater(this::setColumnWidths);
92 }
else if (ExplorerManager.PROP_EXPLORED_CONTEXT.equals(evt.getPropertyName())) {
93 SwingUtilities.invokeLater(this::setColumnWidths);
94 }
else if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
96 final Set<AccountDeviceInstance> accountDeviceInstances =
new HashSet<>();
98 CommunicationsFilter filter =
null;
99 for (
final Node node : selectedNodes) {
100 accountDeviceInstances.add(((AccountDeviceInstanceNode) node).getAccountDeviceInstance());
101 filter = ((AccountDeviceInstanceNode)node).getFilter();
115 final int rows = Math.min(100,
outline.getRowCount());
117 for (
int column = 0; column <
outline.getColumnCount(); column++) {
118 int columnWidthLimit = 500;
122 for (
int row = 0; row < rows; row++) {
123 TableCellRenderer renderer =
outline.getCellRenderer(row, column);
124 Component comp =
outline.prepareRenderer(renderer, row, column);
125 columnWidth = Math.max(comp.getPreferredSize().width, columnWidth);
128 columnWidth += 2 * margin + padding;
129 columnWidth = Math.min(columnWidth, columnWidthLimit);
131 outline.getColumnModel().getColumn(column).setPreferredWidth(columnWidth);
136 void handleFilterEvent(CVTEvents.FilterChangeEvent filterChangeEvent) {
139 accountsTableEM.setRootContext(
new AbstractNode(Children.create(
new AccountDeviceInstanceNodeFactory(commsManager, filterChangeEvent.getNewFilter()),
true)));
140 }
catch (TskCoreException ex) {
141 logger.log(Level.SEVERE,
"There was an error getting the CommunicationsManager for the current case.", ex);
142 }
catch (NoCurrentCaseException ex) {
148 void historyChange(CVTEvents.StateChangeEvent event) {
150 final CommunicationsManager commsManager = Case.getCurrentCaseThrows().getSleuthkitCase().getCommunicationsManager();
151 accountsTableEM.setRootContext(
new AbstractNode(Children.create(
new AccountDeviceInstanceNodeFactory(commsManager, event.getCommunicationsState().getCommunicationsFilter()),
true)));
152 }
catch (TskCoreException ex) {
153 logger.log(Level.SEVERE,
"There was an error getting the CommunicationsManager for the current case.", ex);
165 @SuppressWarnings(
"unchecked")
169 outlineView =
new org.openide.explorer.view.OutlineView();
171 setLayout(
new java.awt.BorderLayout());
SleuthkitCase getSleuthkitCase()
static Case getCurrentCaseThrows()
static final Logger logger
final ExplorerManager accountsTableEM
static final long serialVersionUID
ExplorerManager getExplorerManager()
AccountsBrowser(RelationshipBrowser relationshipBrowser)
final ProxyLookup proxyLookup
org.openide.explorer.view.OutlineView outlineView
void setSelectionInfo(SelectionInfo info)
synchronized static Logger getLogger(String name)