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