Autopsy  4.8.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
DataModelActionsFactory.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2013-2018 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.datamodel;
20 
21 import java.util.ArrayList;
22 import java.util.Collection;
23 import java.util.HashSet;
24 import java.util.List;
25 import javax.swing.Action;
26 
27 import org.openide.util.NbBundle;
28 import org.openide.util.Utilities;
43 import org.sleuthkit.datamodel.AbstractFile;
44 import org.sleuthkit.datamodel.BlackboardArtifact;
45 import org.sleuthkit.datamodel.BlackboardArtifactTag;
46 import org.sleuthkit.datamodel.Content;
47 import org.sleuthkit.datamodel.ContentTag;
48 import org.sleuthkit.datamodel.DerivedFile;
49 import org.sleuthkit.datamodel.Directory;
50 import org.sleuthkit.datamodel.File;
51 import org.sleuthkit.datamodel.LayoutFile;
52 import org.sleuthkit.datamodel.LocalFile;
53 import org.sleuthkit.datamodel.LocalDirectory;
54 import org.sleuthkit.datamodel.Report;
55 import org.sleuthkit.datamodel.SlackFile;
56 import org.sleuthkit.datamodel.VirtualDirectory;
57 
62 // TODO: All of the methods below that deal with classes derived from AbstractFile are the same except for the creation of wrapper nodes to pass to actions.
63 // 1. Do the types of the wrapper nodes really need to vary? If not, it would mean a single
64 // static List<Action> getActions(AbstrctFile file, boolean isArtifactSource)
65 // method could be implemented. If the different nodes are necessary, is it merely because of some misuse of the Visitor pattern somewhere?
66 // 2. All of this would be much improved by not constructing nodes with actions, but this might be necessary with pushing of nodes rather than use of lookups to
67 // handle selections.
69 
70  public static final String VIEW_SOURCE_FILE_IN_DIR = NbBundle
71  .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.srcFileInDir.text");
72  public static final String VIEW_FILE_IN_DIR = NbBundle
73  .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.fileInDir.text");
74  public static final String VIEW_IN_NEW_WINDOW = NbBundle
75  .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.viewNewWin.text");
76  public static final String OPEN_IN_EXTERNAL_VIEWER = NbBundle
77  .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.openExtViewer.text");
78 
79  public static List<Action> getActions(File file, boolean isArtifactSource) {
80  List<Action> actionsList = new ArrayList<>();
81  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file));
82  final FileNode fileNode = new FileNode(file);
83  actionsList.add(null); // creates a menu separator
84  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, fileNode));
85  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, fileNode));
86  actionsList.add(null); // creates a menu separator
87  actionsList.add(ExtractAction.getInstance());
88  actionsList.add(null); // creates a menu separator
89  actionsList.add(AddContentTagAction.getInstance());
90  if (isArtifactSource) {
92  }
93 
94  final Collection<AbstractFile> selectedFilesList =
95  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
96  if(selectedFilesList.size() == 1) {
97  actionsList.add(DeleteFileContentTagAction.getInstance());
98  }
99  if(isArtifactSource) {
100  final Collection<BlackboardArtifact> selectedArtifactsList =
101  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
102  if(selectedArtifactsList.size() == 1) {
104  }
105  }
106 
107  actionsList.addAll(ContextMenuExtensionPoint.getActions());
108  return actionsList;
109  }
110 
111  public static List<Action> getActions(SlackFile slackFile, boolean isArtifactSource) {
112  List<Action> actionsList = new ArrayList<>();
113  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), slackFile));
114  final SlackFileNode slackFileNode = new SlackFileNode(slackFile);
115  actionsList.add(null); // creates a menu separator
116  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, slackFileNode));
117  actionsList.add(null); // creates a menu separator
118  actionsList.add(ExtractAction.getInstance());
119  actionsList.add(null); // creates a menu separator
120  actionsList.add(AddContentTagAction.getInstance());
121  if (isArtifactSource) {
122  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
123  }
124 
125  final Collection<AbstractFile> selectedFilesList =
126  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
127  if(selectedFilesList.size() == 1) {
128  actionsList.add(DeleteFileContentTagAction.getInstance());
129  }
130  if(isArtifactSource) {
131  final Collection<BlackboardArtifact> selectedArtifactsList =
132  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
133  if(selectedArtifactsList.size() == 1) {
135  }
136  }
137 
138  actionsList.addAll(ContextMenuExtensionPoint.getActions());
139  return actionsList;
140  }
141 
142  public static List<Action> getActions(LayoutFile file, boolean isArtifactSource) {
143  List<Action> actionsList = new ArrayList<>();
144  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file));
145  LayoutFileNode layoutFileNode = new LayoutFileNode(file);
146  actionsList.add(null); // creates a menu separator
147  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, layoutFileNode));
148  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, layoutFileNode));
149  actionsList.add(null); // creates a menu separator
150  actionsList.add(ExtractAction.getInstance());//
151  actionsList.add(null); // creates a menu separator
152  actionsList.add(AddContentTagAction.getInstance());
153  if (isArtifactSource) {
154  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
155  }
156 
157  final Collection<AbstractFile> selectedFilesList =
158  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
159  if(selectedFilesList.size() == 1) {
160  actionsList.add(DeleteFileContentTagAction.getInstance());
161  }
162  if(isArtifactSource) {
163  final Collection<BlackboardArtifact> selectedArtifactsList =
164  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
165  if(selectedArtifactsList.size() == 1) {
167  }
168  }
169 
170  actionsList.addAll(ContextMenuExtensionPoint.getActions());
171  return actionsList;
172  }
173 
174  public static List<Action> getActions(Directory directory, boolean isArtifactSource) {
175  List<Action> actionsList = new ArrayList<>();
176  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), directory));
177  DirectoryNode directoryNode = new DirectoryNode(directory);
178  actionsList.add(null); // creates a menu separator
179  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, directoryNode));
180  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, directoryNode));
181  actionsList.add(null); // creates a menu separator
182  actionsList.add(ExtractAction.getInstance());
183  actionsList.add(null); // creates a menu separator
184  actionsList.add(AddContentTagAction.getInstance());
185  if (isArtifactSource) {
186  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
187  }
188 
189  final Collection<AbstractFile> selectedFilesList =
190  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
191  if(selectedFilesList.size() == 1) {
192  actionsList.add(DeleteFileContentTagAction.getInstance());
193  }
194  if(isArtifactSource) {
195  final Collection<BlackboardArtifact> selectedArtifactsList =
196  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
197  if(selectedArtifactsList.size() == 1) {
199  }
200  }
201 
202  actionsList.addAll(ContextMenuExtensionPoint.getActions());
203  return actionsList;
204  }
205 
206  public static List<Action> getActions(VirtualDirectory directory, boolean isArtifactSource) {
207  List<Action> actionsList = new ArrayList<>();
208  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), directory));
209  VirtualDirectoryNode directoryNode = new VirtualDirectoryNode(directory);
210  actionsList.add(null); // creates a menu separator
211  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, directoryNode));
212  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, directoryNode));
213  actionsList.add(null); // creates a menu separator
214  actionsList.add(ExtractAction.getInstance());
215  actionsList.add(null); // creates a menu separator
216  actionsList.add(AddContentTagAction.getInstance());
217  if (isArtifactSource) {
218  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
219  }
220 
221  final Collection<AbstractFile> selectedFilesList =
222  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
223  if(selectedFilesList.size() == 1) {
224  actionsList.add(DeleteFileContentTagAction.getInstance());
225  }
226  if(isArtifactSource) {
227  final Collection<BlackboardArtifact> selectedArtifactsList =
228  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
229  if(selectedArtifactsList.size() == 1) {
231  }
232  }
233 
234  actionsList.addAll(ContextMenuExtensionPoint.getActions());
235  return actionsList;
236  }
237 
238  public static List<Action> getActions(LocalDirectory directory, boolean isArtifactSource) {
239  List<Action> actionsList = new ArrayList<>();
240  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), directory));
241  LocalDirectoryNode directoryNode = new LocalDirectoryNode(directory);
242  actionsList.add(null); // creates a menu separator
243  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, directoryNode));
244  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, directoryNode));
245  actionsList.add(null); // creates a menu separator
246  actionsList.add(ExtractAction.getInstance());
247  actionsList.add(null); // creates a menu separator
248  actionsList.add(AddContentTagAction.getInstance());
249  if (isArtifactSource) {
250  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
251  }
252 
253  final Collection<AbstractFile> selectedFilesList =
254  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
255  if(selectedFilesList.size() == 1) {
256  actionsList.add(DeleteFileContentTagAction.getInstance());
257  }
258  if(isArtifactSource) {
259  final Collection<BlackboardArtifact> selectedArtifactsList =
260  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
261  if(selectedArtifactsList.size() == 1) {
263  }
264  }
265 
266  actionsList.addAll(ContextMenuExtensionPoint.getActions());
267  return actionsList;
268  }
269 
270  public static List<Action> getActions(LocalFile file, boolean isArtifactSource) {
271  List<Action> actionsList = new ArrayList<>();
272  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file));
273  final LocalFileNode localFileNode = new LocalFileNode(file);
274  actionsList.add(null); // creates a menu separator
275  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, localFileNode));
276  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, localFileNode));
277  actionsList.add(null); // creates a menu separator
278  actionsList.add(ExtractAction.getInstance());
279  actionsList.add(null); // creates a menu separator
280  actionsList.add(AddContentTagAction.getInstance());
281  if (isArtifactSource) {
282  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
283  }
284 
285  final Collection<AbstractFile> selectedFilesList =
286  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
287  if(selectedFilesList.size() == 1) {
288  actionsList.add(DeleteFileContentTagAction.getInstance());
289  }
290  if(isArtifactSource) {
291  final Collection<BlackboardArtifact> selectedArtifactsList =
292  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
293  if(selectedArtifactsList.size() == 1) {
295  }
296  }
297 
298  actionsList.addAll(ContextMenuExtensionPoint.getActions());
299  return actionsList;
300  }
301 
302  public static List<Action> getActions(DerivedFile file, boolean isArtifactSource) {
303  List<Action> actionsList = new ArrayList<>();
304  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file));
305  final LocalFileNode localFileNode = new LocalFileNode(file);
306  actionsList.add(null); // creates a menu separator
307  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, localFileNode));
308  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, localFileNode));
309  actionsList.add(null); // creates a menu separator
310  actionsList.add(ExtractAction.getInstance());
311  actionsList.add(null); // creates a menu separator
312  actionsList.add(AddContentTagAction.getInstance());
313  if (isArtifactSource) {
314  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
315  }
316 
317  final Collection<AbstractFile> selectedFilesList =
318  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
319  if(selectedFilesList.size() == 1) {
320  actionsList.add(DeleteFileContentTagAction.getInstance());
321  }
322  if(isArtifactSource) {
323  final Collection<BlackboardArtifact> selectedArtifactsList =
324  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
325  if(selectedArtifactsList.size() == 1) {
327  }
328  }
329 
330  actionsList.addAll(ContextMenuExtensionPoint.getActions());
331  return actionsList;
332  }
333 
334  public static List<Action> getActions(Report report, boolean isArtifactSource) {
335  List<Action> actionsList = new ArrayList<>();
336  final ReportNode reportNode = new ReportNode(report);
337  actionsList.add(null); // creates a menu separator
338  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, reportNode));
339  actionsList.add(null); // creates a menu separator
340  if (isArtifactSource) {
341  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
342  }
343 
344  if (isArtifactSource) {
345  final Collection<BlackboardArtifact> selectedArtifactsList
346  = new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
347  if (selectedArtifactsList.size() == 1) {
349  }
350  }
351 
352  actionsList.addAll(ContextMenuExtensionPoint.getActions());
353  return actionsList;
354  }
355 
356  public static List<Action> getActions(ContentTag contentTag, boolean isArtifactSource) {
357 
358  List<Action> actionsList = new ArrayList<>();
359  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), contentTag.getContent()));
360  final ContentTagNode tagNode = new ContentTagNode(contentTag);
361  actionsList.add(null); // creates a menu separator
362  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, tagNode));
363  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, tagNode));
364  actionsList.add(null); // creates a menu separator
365  actionsList.add(ExtractAction.getInstance());
366  actionsList.add(null); // creates a menu separator
367  actionsList.add(AddContentTagAction.getInstance());
368  if (isArtifactSource) {
369  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
370  }
371 
372  final Collection<AbstractFile> selectedFilesList =
373  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
374  if(selectedFilesList.size() == 1) {
375  actionsList.add(DeleteFileContentTagAction.getInstance());
376  }
377  if(isArtifactSource) {
378  final Collection<BlackboardArtifact> selectedArtifactsList =
379  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
380  if(selectedArtifactsList.size() == 1) {
382  }
383  }
384 
385  actionsList.add(DeleteContentTagAction.getInstance());
386  actionsList.add(ReplaceContentTagAction.getInstance());
387 
388  actionsList.addAll(ContextMenuExtensionPoint.getActions());
389  return actionsList;
390  }
391 
392 
393  public static List<Action> getActions(BlackboardArtifactTag artifactTag, boolean isArtifactSource) {
394  List<Action> actionsList = new ArrayList<>();
395  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), artifactTag.getContent()));
396  final BlackboardArtifactTagNode tagNode = new BlackboardArtifactTagNode(artifactTag);
397  actionsList.add(null); // creates a menu separator
398  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, tagNode));
399  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, tagNode));
400  actionsList.add(null); // creates a menu separator
401  actionsList.add(ExtractAction.getInstance());
402  actionsList.add(null); // creates a menu separator
403  actionsList.add(AddContentTagAction.getInstance());
404  if (isArtifactSource) {
405  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
406  }
407 
408  final Collection<AbstractFile> selectedFilesList =
409  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
410  if(selectedFilesList.size() == 1) {
411  actionsList.add(DeleteFileContentTagAction.getInstance());
412  }
413  if(isArtifactSource) {
414  final Collection<BlackboardArtifact> selectedArtifactsList =
415  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
416  if(selectedArtifactsList.size() == 1) {
418  }
419  }
420 
423 
424  actionsList.addAll(ContextMenuExtensionPoint.getActions());
425  return actionsList;
426  }
427 
428  public static List<Action> getActions(Content content, boolean isArtifactSource) {
429  if (content instanceof File) {
430  return getActions((File) content, isArtifactSource);
431  } else if (content instanceof LayoutFile) {
432  return getActions((LayoutFile) content, isArtifactSource);
433  } else if (content instanceof Directory) {
434  return getActions((Directory) content, isArtifactSource);
435  } else if (content instanceof VirtualDirectory) {
436  return getActions((VirtualDirectory) content, isArtifactSource);
437  } else if (content instanceof LocalFile) {
438  return getActions((LocalFile) content, isArtifactSource);
439  } else if (content instanceof DerivedFile) {
440  return getActions((DerivedFile) content, isArtifactSource);
441  } else if (content instanceof SlackFile) {
442  return getActions((SlackFile) content, isArtifactSource);
443  } else if (content instanceof Report) {
444  return getActions((Report) content, isArtifactSource);
445  } else {
446  return new ArrayList<>();
447  }
448  }
449 }
static synchronized DeleteContentTagAction getInstance()
static List< Action > getActions(LayoutFile file, boolean isArtifactSource)
static List< Action > getActions(File file, boolean isArtifactSource)
static synchronized AddBlackboardArtifactTagAction getInstance()
static synchronized DeleteFileBlackboardArtifactTagAction getInstance()
static List< Action > getActions(Report report, boolean isArtifactSource)
static synchronized DeleteBlackboardArtifactTagAction getInstance()
static List< Action > getActions(Content content, boolean isArtifactSource)
static synchronized ReplaceContentTagAction getInstance()
static synchronized ExtractAction getInstance()
static synchronized DeleteFileContentTagAction getInstance()
static List< Action > getActions(BlackboardArtifactTag artifactTag, boolean isArtifactSource)
static synchronized ReplaceBlackboardArtifactTagAction getInstance()
static List< Action > getActions(ContentTag contentTag, boolean isArtifactSource)
static List< Action > getActions(LocalFile file, boolean isArtifactSource)
static List< Action > getActions(SlackFile slackFile, boolean isArtifactSource)
static List< Action > getActions(DerivedFile file, boolean isArtifactSource)
static List< Action > getActions(Directory directory, boolean isArtifactSource)
static List< Action > getActions(LocalDirectory directory, boolean isArtifactSource)
static synchronized AddContentTagAction getInstance()
static List< Action > getActions(VirtualDirectory directory, boolean isArtifactSource)

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