19 package org.sleuthkit.autopsy.discovery.ui;
21 import com.google.common.eventbus.Subscribe;
22 import javax.swing.SwingUtilities;
23 import javax.swing.event.ListSelectionEvent;
24 import javax.swing.event.ListSelectionListener;
25 import org.openide.util.NbBundle;
34 final class MiniTimelinePanel
extends javax.swing.JPanel {
36 private static final long serialVersionUID = 1L;
38 private final MiniTimelineDateListPanel dateListPanel =
new MiniTimelineDateListPanel();
39 private final MiniTimelineArtifactListPanel artifactListPanel =
new MiniTimelineArtifactListPanel();
40 private DomainArtifactsTabPanel.ArtifactRetrievalStatus status = DomainArtifactsTabPanel.ArtifactRetrievalStatus.UNPOPULATED;
41 private AbstractArtifactDetailsPanel rightPanel =
new GeneralPurposeArtifactViewer();
42 private String selectedDomain = null;
43 private final ListSelectionListener artifactListener;
44 private final ListSelectionListener dateListener;
46 @NbBundle.Messages({
"MiniTimelinePanel.loadingPanel.details=the Timeline view"})
50 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
53 artifactListPanel.addMouseListener(
new ArtifactMenuMouseAdapter(artifactListPanel));
54 artifactListener =
new ListSelectionListener() {
56 public void valueChanged(ListSelectionEvent event) {
57 if (!event.getValueIsAdjusting()) {
58 BlackboardArtifact artifact = artifactListPanel.getSelectedArtifact();
59 if (artifact != null && (artifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_CACHE.getTypeID()
60 || artifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_WEB_DOWNLOAD.getTypeID())) {
61 rightPanel =
new ContentViewerDetailsPanel();
63 rightPanel =
new GeneralPurposeArtifactViewer();
65 mainSplitPane.setRightComponent(rightPanel.getComponent());
66 rightPanel.setArtifact(artifact);
72 dateListener =
new ListSelectionListener() {
74 public void valueChanged(ListSelectionEvent event) {
75 if (!event.getValueIsAdjusting()) {
76 artifactListPanel.removeSelectionListener(artifactListener);
77 artifactListPanel.clearList();
78 artifactListPanel.addArtifacts(dateListPanel.getArtifactsForSelectedDate());
79 artifactListPanel.addSelectionListener(artifactListener);
80 artifactListPanel.selectFirst();
86 dateListPanel.addSelectionListener(dateListener);
87 artifactListPanel.addSelectionListener(artifactListener);
88 leftSplitPane.setLeftComponent(dateListPanel);
89 leftSplitPane.setRightComponent(artifactListPanel);
90 mainSplitPane.setRightComponent(rightPanel.getComponent());
99 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
100 DomainArtifactsTabPanel.ArtifactRetrievalStatus getStatus() {
110 @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
111 void setStatus(DomainArtifactsTabPanel.ArtifactRetrievalStatus status, String domain) {
112 this.status = status;
113 this.selectedDomain = domain;
114 if (status == DomainArtifactsTabPanel.ArtifactRetrievalStatus.UNPOPULATED) {
115 artifactListPanel.clearList();
116 dateListPanel.clearList();
119 if (rightPanel != null) {
120 rightPanel.setArtifact(null);
122 }
else if (status == DomainArtifactsTabPanel.ArtifactRetrievalStatus.POPULATING) {
124 add(
new LoadingPanel(Bundle.MiniTimelinePanel_loadingPanel_details()));
135 void handleMiniTimelineResultEvent(DiscoveryEventUtils.MiniTimelineResultEvent miniTimelineResultEvent) {
136 SwingUtilities.invokeLater(() -> {
137 if (miniTimelineResultEvent.getDomain().equals(selectedDomain)) {
138 dateListPanel.removeListSelectionListener(dateListener);
139 artifactListPanel.removeSelectionListener(artifactListener);
140 dateListPanel.addArtifacts(miniTimelineResultEvent.getResultList());
141 status = DomainArtifactsTabPanel.ArtifactRetrievalStatus.POPULATED;
142 setEnabled(!dateListPanel.isEmpty());
143 dateListPanel.addSelectionListener(dateListener);
144 artifactListPanel.addSelectionListener(artifactListener);
145 dateListPanel.selectFirst();
159 @SuppressWarnings(
"unchecked")
161 private
void initComponents() {
163 mainSplitPane =
new javax.swing.JSplitPane();
164 leftSplitPane =
new javax.swing.JSplitPane();
166 mainSplitPane.setDividerLocation(400);
167 mainSplitPane.setResizeWeight(0.1);
168 mainSplitPane.setToolTipText(
"");
169 mainSplitPane.setMinimumSize(
new java.awt.Dimension(0, 0));
171 leftSplitPane.setDividerLocation(198);
172 leftSplitPane.setResizeWeight(0.5);
173 leftSplitPane.setMinimumSize(
new java.awt.Dimension(0, 0));
174 mainSplitPane.setLeftComponent(leftSplitPane);
176 setMinimumSize(
new java.awt.Dimension(0, 0));
177 setLayout(
new java.awt.BorderLayout());
182 private javax.swing.JSplitPane leftSplitPane;
183 private javax.swing.JSplitPane mainSplitPane;