19package org.sleuthkit.autopsy.report.modules.datasourcesummaryexport;
22import java.text.DateFormat;
23import java.util.ArrayList;
24import java.util.Arrays;
25import java.util.Collections;
28import org.apache.commons.collections.CollectionUtils;
29import org.openide.util.NbBundle.Messages;
30import org.sleuthkit.autopsy.datasourcesummary.uiutils.BarChartSeries;
31import org.sleuthkit.autopsy.datasourcesummary.uiutils.BarChartSeries.BarChartItem;
32import org.sleuthkit.autopsy.datasourcesummary.uiutils.BarChartSeries.OrderedKey;
33import org.sleuthkit.autopsy.datasourcesummary.datamodel.DataFetcher;
34import org.sleuthkit.autopsy.datasourcesummary.datamodel.TimelineSummary;
35import org.sleuthkit.autopsy.datasourcesummary.datamodel.TimelineSummary.DailyActivityAmount;
36import org.sleuthkit.autopsy.datasourcesummary.datamodel.TimelineSummary.TimelineSummaryData;
37import org.sleuthkit.autopsy.report.modules.datasourcesummaryexport.ExcelSpecialFormatExport.KeyValueItemExportable;
38import org.sleuthkit.autopsy.report.modules.datasourcesummaryexport.ExcelSpecialFormatExport.TitledExportable;
39import org.sleuthkit.datamodel.DataSource;
45 "TimelinePanel_earliestLabel_title=Earliest",
46 "TimelinePanel_latestLabel_title=Latest",
47 "TimlinePanel_last30DaysChart_title=Last 30 Days",
48 "TimlinePanel_last30DaysChart_fileEvts_title=File Events",
49 "TimlinePanel_last30DaysChart_artifactEvts_title=Result Events",})
54 private static final String EARLIEST_LATEST_FORMAT_STR =
"MMM d, yyyy";
57 private static final int MOST_RECENT_DAYS_COUNT = 30;
59 private static final Color FILE_EVT_COLOR =
new Color(228, 22, 28);
60 private static final Color ARTIFACT_EVT_COLOR =
new Color(21, 227, 100);
80 private static List<BarChartSeries> parseChartData(List<DailyActivityAmount> recentDaysActivity,
boolean showIntermediateDates) {
82 if (CollectionUtils.isEmpty(recentDaysActivity)) {
87 List<BarChartItem> fileEvtCounts =
new ArrayList<>();
88 List<BarChartItem> artifactEvtCounts =
new ArrayList<>();
90 for (
int i = 0; i < recentDaysActivity.size(); i++) {
94 long artifactAmt = curItem.getArtifactActivityCount() * 100;
95 String formattedDate = (showIntermediateDates || i == 0 || i == recentDaysActivity.size() - 1)
100 artifactEvtCounts.add(
new BarChartItem(thisKey, artifactAmt));
103 return Arrays.asList(
104 new BarChartSeries(Bundle.TimlinePanel_last30DaysChart_fileEvts_title(), FILE_EVT_COLOR, fileEvtCounts),
105 new BarChartSeries(Bundle.TimlinePanel_last30DaysChart_artifactEvts_title(), ARTIFACT_EVT_COLOR, artifactEvtCounts));
115 private static DefaultCellModel<?> getEarliestLatestCell(Date date) {
116 return new DefaultCellModel<>(date, (dt) -> dt ==
null ?
"" : EARLIEST_LATEST_FORMAT.format(dt), EARLIEST_LATEST_FORMAT_STR);
120 "TimelinePanel_getExports_sheetName=Timeline",
121 "TimelinePanel_getExports_activityRange=Activity Range",
122 "TimelinePanel_getExports_earliest=Earliest:",
123 "TimelinePanel_getExports_latest=Latest:",
124 "TimelinePanel_getExports_dateColumnHeader=Date",
125 "TimelinePanel_getExports_chartName=Last 30 Days",})
126 List<ExcelExport.ExcelSheetExport> getExports(DataSource dataSource) {
128 TimelineSummaryData summaryData = ExcelExportAction.getFetchResult(dataFetcher,
"Timeline", dataSource);
129 if (summaryData ==
null) {
130 return Collections.emptyList();
133 return Arrays.asList(
134 new ExcelSpecialFormatExport(Bundle.TimelinePanel_getExports_sheetName(),
136 new TitledExportable(Bundle.TimelinePanel_getExports_activityRange(), Collections.emptyList()),
137 new KeyValueItemExportable(Bundle.TimelinePanel_getExports_earliest(), getEarliestLatestCell(summaryData.getMinDate())),
138 new KeyValueItemExportable(Bundle.TimelinePanel_getExports_latest(), getEarliestLatestCell(summaryData.getMaxDate())),
139 new BarChartExport(Bundle.TimelinePanel_getExports_dateColumnHeader(),
141 Bundle.TimelinePanel_getExports_chartName(),
142 parseChartData(summaryData.getMostRecentDaysActivity(),
true)))));
long getFileActivityCount()
static String formatDate(Date date, DateFormat formatter)
static DateFormat getUtcFormat(String formatString)