Autopsy 4.22.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
DataSourceSummaryNode.java
Go to the documentation of this file.
1/*
2 * Autopsy Forensic Browser
3 *
4 * Copyright 2019-2021 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 */
19package org.sleuthkit.autopsy.datasourcesummary.ui;
20
21import java.awt.event.ActionEvent;
22import java.util.ArrayList;
23import java.util.List;
24import java.util.Observable;
25import java.util.Observer;
26import javax.swing.Action;
27import org.openide.nodes.AbstractNode;
28import org.openide.nodes.ChildFactory;
29import org.openide.nodes.Children;
30import org.openide.nodes.Node;
31import org.openide.nodes.Sheet;
32import org.openide.util.NbBundle.Messages;
33import org.sleuthkit.autopsy.datamodel.NodeProperty;
34import org.sleuthkit.autopsy.directorytree.ViewContextAction;
35import org.sleuthkit.datamodel.DataSource;
36
42final class DataSourceSummaryNode extends AbstractNode {
43
44 private final static Observable closeDialogObservable = new Observable() {
45 @Override
46 public void notifyObservers() {
47 //set changed before notify observers
48 //we want this observerable to always cause the observer to update when notified
49 this.setChanged();
50 super.notifyObservers();
51 }
52 };
53
60 DataSourceSummaryNode(List<DataSourceSummary> dataSourceList) {
61 super(Children.create(new DataSourceSummaryChildren(dataSourceList), true));
62 }
63
69 void addObserver(Observer observer) {
70 closeDialogObservable.addObserver(observer);
71 }
72
77 static final class DataSourceSummaryChildren extends ChildFactory<DataSourceSummary> {
78
79 private final List<DataSourceSummary> dataSourceList;
80
88 DataSourceSummaryChildren(List<DataSourceSummary> dataSourceList) {
89 this.dataSourceList = dataSourceList;
90 }
91
92 @Override
93 protected boolean createKeys(List<DataSourceSummary> list) {
94 if (dataSourceList != null && !dataSourceList.isEmpty()) {
95 list.addAll(dataSourceList);
96 }
97 return true;
98 }
99
100 @Override
101 protected Node createNodeForKey(DataSourceSummary key) {
102 return new DataSourceSummaryEntryNode(key);
103 }
104 }
105
109 static final class DataSourceSummaryEntryNode extends AbstractNode {
110
111 private final DataSource dataSource;
112 private final String status;
113 private final String type;
114 private final long filesCount;
115 private final long resultsCount;
116 private final long tagsCount;
117
125 DataSourceSummaryEntryNode(DataSourceSummary dataSourceSummary) {
126 super(Children.LEAF);
127 dataSource = dataSourceSummary.getDataSource();
128 status = dataSourceSummary.getIngestStatus() == null ? "" : dataSourceSummary.getIngestStatus().getDisplayName();
129 type = dataSourceSummary.getType();
130 filesCount = dataSourceSummary.getFilesCount();
131 resultsCount = dataSourceSummary.getResultsCount();
132 tagsCount = dataSourceSummary.getTagsCount();
133 super.setName(dataSource.getName());
134 setName(dataSource.getName());
135 setDisplayName(dataSource.getName());
136 }
137
143 DataSource getDataSource() {
144 return dataSource;
145 }
146
147 @Messages({"DataSourceSummaryNode.column.dataSourceName.header=Data Source Name",
148 "DataSourceSummaryNode.column.status.header=Ingest Status",
149 "DataSourceSummaryNode.column.type.header=Type",
150 "DataSourceSummaryNode.column.files.header=Files",
151 "DataSourceSummaryNode.column.results.header=Artifacts",
152 "DataSourceSummaryNode.column.tags.header=Tags"})
153 @Override
154 protected Sheet createSheet() {
155 Sheet sheet = super.createSheet();
156 Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
157 if (sheetSet == null) {
158 sheetSet = Sheet.createPropertiesSet();
159 sheet.put(sheetSet);
160 }
161 sheetSet.put(new NodeProperty<>(Bundle.DataSourceSummaryNode_column_dataSourceName_header(), Bundle.DataSourceSummaryNode_column_dataSourceName_header(), Bundle.DataSourceSummaryNode_column_dataSourceName_header(),
162 dataSource));
163 sheetSet.put(new NodeProperty<>(Bundle.DataSourceSummaryNode_column_status_header(), Bundle.DataSourceSummaryNode_column_status_header(), Bundle.DataSourceSummaryNode_column_status_header(), status));
164 sheetSet.put(new NodeProperty<>(Bundle.DataSourceSummaryNode_column_type_header(), Bundle.DataSourceSummaryNode_column_type_header(), Bundle.DataSourceSummaryNode_column_type_header(),
165 type));
166 sheetSet.put(new NodeProperty<>(Bundle.DataSourceSummaryNode_column_files_header(), Bundle.DataSourceSummaryNode_column_files_header(), Bundle.DataSourceSummaryNode_column_files_header(),
167 filesCount));
168 sheetSet.put(new NodeProperty<>(Bundle.DataSourceSummaryNode_column_results_header(), Bundle.DataSourceSummaryNode_column_results_header(), Bundle.DataSourceSummaryNode_column_results_header(),
169 resultsCount));
170 sheetSet.put(new NodeProperty<>(Bundle.DataSourceSummaryNode_column_tags_header(), Bundle.DataSourceSummaryNode_column_tags_header(), Bundle.DataSourceSummaryNode_column_tags_header(),
171 tagsCount));
172 return sheet;
173 }
174
180 @Override
181 public Action getPreferredAction() {
183 }
184
185 @Override
186 public Action[] getActions(boolean context) {
187 List<Action> actions = new ArrayList<>();
188 actions.add(new ViewDataSourceInContextAction());
189 return actions.toArray(new Action[actions.size()]);
190 }
191
196 private class ViewDataSourceInContextAction extends ViewContextAction {
197
198 private static final long serialVersionUID = 1L;
199
203 @Messages({"DataSourceSummaryNode.viewDataSourceAction.text=Go to Data Source"})
205 super(Bundle.DataSourceSummaryNode_viewDataSourceAction_text(), dataSource);
206 }
207
208 @Override
209 public void actionPerformed(ActionEvent e) {
210 closeDialogObservable.notifyObservers();
211 super.actionPerformed(e);
212 }
213 }
214 }
215
216}
ViewContextAction(String displayName, BlackboardArtifactNode artifactNode)

Copyright © 2012-2024 Sleuth Kit Labs. Generated on:
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.