19 package org.sleuthkit.autopsy.discovery.ui;
22 import com.google.common.eventbus.Subscribe;
23 import java.util.logging.Level;
24 import javax.swing.JPanel;
25 import javax.swing.SwingUtilities;
26 import javax.swing.event.ListSelectionEvent;
27 import javax.swing.event.ListSelectionListener;
37 final class DomainArtifactsTabPanel
extends JPanel {
39 private static final long serialVersionUID = 1L;
40 private final static Logger logger = Logger.getLogger(DomainArtifactsTabPanel.class.getName());
41 private final ArtifactsListPanel listPanel;
42 private final BlackboardArtifact.ARTIFACT_TYPE artifactType;
43 private AbstractArtifactDetailsPanel rightPanel = null;
45 private ArtifactRetrievalStatus status = ArtifactRetrievalStatus.UNPOPULATED;
46 private final ListSelectionListener listener =
new ListSelectionListener() {
48 public void valueChanged(ListSelectionEvent event) {
49 if (!event.getValueIsAdjusting()) {
50 rightPanel.setArtifact(listPanel.getSelectedArtifact());
60 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
61 DomainArtifactsTabPanel(BlackboardArtifact.ARTIFACT_TYPE type) {
63 this.artifactType = type;
64 listPanel =
new ArtifactsListPanel(artifactType);
65 listPanel.addMouseListener(
new ArtifactMenuMouseAdapter(listPanel));
66 mainSplitPane.setLeftComponent(listPanel);
69 listPanel.addSelectionListener(listener);
76 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
77 private
void setRightComponent() {
78 switch (artifactType) {
81 case TSK_WEB_SEARCH_QUERY:
82 case TSK_WEB_BOOKMARK:
83 rightPanel =
new GeneralPurposeArtifactViewer();
85 case TSK_WEB_DOWNLOAD:
87 rightPanel =
new ContentViewerDetailsPanel();
90 rightPanel =
new DefaultTableArtifactContentViewer();
93 if (rightPanel != null) {
94 mainSplitPane.setRightComponent(rightPanel.getComponent());
103 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
104 ArtifactRetrievalStatus getStatus() {
113 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
114 void setStatus(ArtifactRetrievalStatus status) {
115 this.status = status;
116 if (status == ArtifactRetrievalStatus.UNPOPULATED) {
117 listPanel.clearList();
120 if (rightPanel != null) {
121 rightPanel.setArtifact(null);
123 }
else if (status == ArtifactRetrievalStatus.POPULATING) {
125 add(
new LoadingPanel(artifactType.getDisplayName()));
136 void handleArtifactSearchResultEvent(DiscoveryEventUtils.ArtifactSearchResultEvent artifactresultEvent) {
137 if (artifactType == artifactresultEvent.getArtifactType() && status == ArtifactRetrievalStatus.POPULATING) {
138 SwingUtilities.invokeLater(() -> {
139 listPanel.removeSelectionListener(listener);
140 listPanel.addArtifacts(artifactresultEvent.getListOfArtifacts());
141 status = ArtifactRetrievalStatus.POPULATED;
142 setEnabled(!listPanel.isEmpty());
143 listPanel.addSelectionListener(listener);
144 listPanel.selectFirst();
150 DiscoveryEventUtils.getDiscoveryEventBus().unregister(
this);
151 }
catch (IllegalArgumentException notRegistered) {
152 logger.log(Level.INFO,
"Attempting to unregister tab which was not registered");
164 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
165 BlackboardArtifact.ARTIFACT_TYPE getArtifactType() {
174 @SuppressWarnings(
"unchecked")
176 private
void initComponents() {
178 mainSplitPane =
new javax.swing.JSplitPane();
180 mainSplitPane.setDividerLocation(350);
181 mainSplitPane.setResizeWeight(0.1);
183 setCursor(
new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
184 setMinimumSize(
new java.awt.Dimension(0, 0));
185 setLayout(
new java.awt.BorderLayout());
190 private javax.swing.JSplitPane mainSplitPane;
196 enum ArtifactRetrievalStatus {