Autopsy  4.18.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
PastCasesPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2020 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.datasourcesummary.ui;
20 
21 import java.util.Arrays;
22 import java.util.Collections;
23 import java.util.List;
24 import org.apache.commons.lang3.tuple.Pair;
25 import org.openide.util.NbBundle.Messages;
39 import org.sleuthkit.datamodel.DataSource;
40 
45 @Messages({
46  "PastCasesPanel_caseColumn_title=Case",
47  "PastCasesPanel_countColumn_title=Count",
48  "PastCasesPanel_onNoCrIngest_message=No results will be shown because the Central Repository module was not run.",
49  "PastCasesPanel_notableFileTable_tabName=Cases with Common Notable",
50  "PastCasesPanel_sameIdsTable_tabName=Past Cases with the Same Devices",})
51 public class PastCasesPanel extends BaseDataSourceSummaryPanel {
52 
53  private static final long serialVersionUID = 1L;
54 
55  // model for column indicating the case
56  private static final ColumnModel<Pair<String, Long>, DefaultCellModel<?>> CASE_COL = new ColumnModel<>(
57  Bundle.PastCasesPanel_caseColumn_title(),
58  (pair) -> new DefaultCellModel<>(pair.getKey()),
59  300
60  );
61 
62  // model for column indicating the count
63  private static final ColumnModel<Pair<String, Long>, DefaultCellModel<?>> COUNT_COL = new ColumnModel<>(
64  Bundle.PastCasesPanel_countColumn_title(),
65  (pair) -> new DefaultCellModel<>(pair.getValue()),
66  100
67  );
68 
69  // the template for columns in both tables in this tab
70  private static List<ColumnModel<Pair<String, Long>, DefaultCellModel<?>>> DEFAULT_TEMPLATE
71  = Arrays.asList(CASE_COL, COUNT_COL);
72 
73  private final JTablePanel<Pair<String, Long>> notableFileTable = JTablePanel.getJTablePanel(DEFAULT_TEMPLATE);
74 
75  private final JTablePanel<Pair<String, Long>> sameIdTable = JTablePanel.getJTablePanel(DEFAULT_TEMPLATE);
76 
77  private final List<JTablePanel<?>> tables = Arrays.asList(
78  notableFileTable,
79  sameIdTable
80  );
81 
82  private final List<DataFetchComponents<DataSource, ?>> dataFetchComponents;
83 
84  private final IngestRunningLabel ingestRunningLabel = new IngestRunningLabel();
85 
87 
88  public PastCasesPanel() {
89  this(new PastCasesSummary());
90  }
91 
95  public PastCasesPanel(PastCasesSummary pastCaseData) {
96  super(pastCaseData);
97 
98  this.pastCasesFetcher = (dataSource) -> pastCaseData.getPastCasesData(dataSource);
99 
100  // set up data acquisition methods
101  dataFetchComponents = Arrays.asList(
103  pastCasesFetcher,
104  (result) -> handleResult(result))
105  );
106 
107  initComponents();
108  }
109 
117  notableFileTable.showDataFetchResult(DataFetchResult.getSubResult(result, (res) -> res.getTaggedNotable()));
118  sameIdTable.showDataFetchResult(DataFetchResult.getSubResult(result, (res) -> res.getSameIdsResults()));
119  }
120 
121  @Override
122  protected void fetchInformation(DataSource dataSource) {
123  fetchInformation(dataFetchComponents, dataSource);
124  }
125 
126  @Override
127  protected void onNewDataSource(DataSource dataSource) {
128  onNewDataSource(dataFetchComponents, tables, dataSource);
129  }
130 
131  @Override
132  List<ExcelExport.ExcelSheetExport> getExports(DataSource dataSource) {
133  PastCasesResult result = getFetchResult(pastCasesFetcher, "Past cases sheets", dataSource);
134  if (result == null) {
135  return Collections.emptyList();
136  }
137 
138  return Arrays.asList(
139  getTableExport(DEFAULT_TEMPLATE, Bundle.PastCasesPanel_notableFileTable_tabName(), result.getTaggedNotable()),
140  getTableExport(DEFAULT_TEMPLATE, Bundle.PastCasesPanel_sameIdsTable_tabName(), result.getSameIdsResults())
141  );
142  }
143 
144  @Override
145  public void close() {
146  ingestRunningLabel.unregister();
147  super.close();
148  }
149 
155  @SuppressWarnings("unchecked")
156  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
157  private void initComponents() {
158 
159  javax.swing.JScrollPane mainScrollPane = new javax.swing.JScrollPane();
160  javax.swing.JPanel mainContentPanel = new javax.swing.JPanel();
161  javax.swing.JPanel ingestRunningPanel = ingestRunningLabel;
162  javax.swing.JLabel notableFileLabel = new javax.swing.JLabel();
163  javax.swing.Box.Filler filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2));
164  javax.swing.JPanel notableFilePanel = notableFileTable;
165  javax.swing.Box.Filler filler2 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20), new java.awt.Dimension(0, 20));
166  javax.swing.JLabel sameIdLabel = new javax.swing.JLabel();
167  javax.swing.Box.Filler filler3 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2), new java.awt.Dimension(0, 2));
168  javax.swing.JPanel sameIdPanel = sameIdTable;
169  javax.swing.Box.Filler filler5 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 32767));
170 
171  mainContentPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
172  mainContentPanel.setLayout(new javax.swing.BoxLayout(mainContentPanel, javax.swing.BoxLayout.PAGE_AXIS));
173 
174  ingestRunningPanel.setAlignmentX(0.0F);
175  ingestRunningPanel.setMaximumSize(new java.awt.Dimension(32767, 25));
176  ingestRunningPanel.setMinimumSize(new java.awt.Dimension(10, 25));
177  ingestRunningPanel.setPreferredSize(new java.awt.Dimension(10, 25));
178  mainContentPanel.add(ingestRunningPanel);
179 
180  org.openide.awt.Mnemonics.setLocalizedText(notableFileLabel, org.openide.util.NbBundle.getMessage(PastCasesPanel.class, "PastCasesPanel.notableFileLabel.text")); // NOI18N
181  mainContentPanel.add(notableFileLabel);
182  notableFileLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(PastCasesPanel.class, "PastCasesPanel.notableFileLabel.text")); // NOI18N
183 
184  filler1.setAlignmentX(0.0F);
185  mainContentPanel.add(filler1);
186 
187  notableFilePanel.setAlignmentX(0.0F);
188  notableFilePanel.setMaximumSize(new java.awt.Dimension(32767, 106));
189  notableFilePanel.setMinimumSize(new java.awt.Dimension(100, 106));
190  notableFilePanel.setPreferredSize(new java.awt.Dimension(100, 106));
191  mainContentPanel.add(notableFilePanel);
192 
193  filler2.setAlignmentX(0.0F);
194  mainContentPanel.add(filler2);
195 
196  org.openide.awt.Mnemonics.setLocalizedText(sameIdLabel, org.openide.util.NbBundle.getMessage(PastCasesPanel.class, "PastCasesPanel.sameIdLabel.text")); // NOI18N
197  mainContentPanel.add(sameIdLabel);
198 
199  filler3.setAlignmentX(0.0F);
200  mainContentPanel.add(filler3);
201 
202  sameIdPanel.setAlignmentX(0.0F);
203  sameIdPanel.setMaximumSize(new java.awt.Dimension(32767, 106));
204  sameIdPanel.setMinimumSize(new java.awt.Dimension(100, 106));
205  sameIdPanel.setPreferredSize(new java.awt.Dimension(100, 106));
206  mainContentPanel.add(sameIdPanel);
207 
208  filler5.setAlignmentX(0.0F);
209  mainContentPanel.add(filler5);
210 
211  mainScrollPane.setViewportView(mainContentPanel);
212 
213  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
214  this.setLayout(layout);
215  layout.setHorizontalGroup(
216  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
217  .addComponent(mainScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
218  );
219  layout.setVerticalGroup(
220  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
221  .addComponent(mainScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
222  );
223  }// </editor-fold>//GEN-END:initComponents
224 
225 
226  // Variables declaration - do not modify//GEN-BEGIN:variables
227  // End of variables declaration//GEN-END:variables
228 }
void handleResult(DataFetchResult< PastCasesResult > result)
static< I, O > DataFetchResult< O > getSubResult(DataFetchResult< I > inputResult, Function< I, O > getSubResult)
void showDataFetchResult(DataFetchResult< T > result, String errorMessage, String noResultsMessage)
static< T, CextendsGuiCellModel > JTablePanel< T > getJTablePanel(List< ColumnModel< T, C >> columns)
final List< DataFetchComponents< DataSource,?> > dataFetchComponents
final DataFetcher< DataSource, PastCasesResult > pastCasesFetcher

Copyright © 2012-2021 Basis Technology. Generated on: Thu Jul 8 2021
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.