Autopsy  4.7.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;
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  public static final String SEARCH_FOR_FILES_SAME_MD5 = NbBundle
80  .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.srfFileSameMD5.text");
81 
82  public static List<Action> getActions(File file, boolean isArtifactSource) {
83  List<Action> actionsList = new ArrayList<>();
84  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file));
85  final FileNode fileNode = new FileNode(file);
86  actionsList.add(null); // creates a menu separator
87  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, fileNode));
88  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, fileNode));
89  actionsList.add(null); // creates a menu separator
90  actionsList.add(ExtractAction.getInstance());
91  actionsList.add(new HashSearchAction(SEARCH_FOR_FILES_SAME_MD5, fileNode));
92  actionsList.add(null); // creates a menu separator
93  actionsList.add(AddContentTagAction.getInstance());
94  if (isArtifactSource) {
96  }
97 
98  final Collection<AbstractFile> selectedFilesList =
99  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
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 
111  actionsList.addAll(ContextMenuExtensionPoint.getActions());
112  return actionsList;
113  }
114 
115  public static List<Action> getActions(SlackFile slackFile, boolean isArtifactSource) {
116  List<Action> actionsList = new ArrayList<>();
117  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), slackFile));
118  final SlackFileNode slackFileNode = new SlackFileNode(slackFile);
119  actionsList.add(null); // creates a menu separator
120  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, slackFileNode));
121  actionsList.add(null); // creates a menu separator
122  actionsList.add(ExtractAction.getInstance());
123  actionsList.add(null); // creates a menu separator
124  actionsList.add(AddContentTagAction.getInstance());
125  if (isArtifactSource) {
126  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
127  }
128 
129  final Collection<AbstractFile> selectedFilesList =
130  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
131  if(selectedFilesList.size() == 1) {
132  actionsList.add(DeleteFileContentTagAction.getInstance());
133  }
134  if(isArtifactSource) {
135  final Collection<BlackboardArtifact> selectedArtifactsList =
136  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
137  if(selectedArtifactsList.size() == 1) {
139  }
140  }
141 
142  actionsList.addAll(ContextMenuExtensionPoint.getActions());
143  return actionsList;
144  }
145 
146  public static List<Action> getActions(LayoutFile file, boolean isArtifactSource) {
147  List<Action> actionsList = new ArrayList<>();
148  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file));
149  LayoutFileNode layoutFileNode = new LayoutFileNode(file);
150  actionsList.add(null); // creates a menu separator
151  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, layoutFileNode));
152  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, layoutFileNode));
153  actionsList.add(null); // creates a menu separator
154  actionsList.add(ExtractAction.getInstance());//
155  actionsList.add(null); // creates a menu separator
156  actionsList.add(AddContentTagAction.getInstance());
157  if (isArtifactSource) {
158  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
159  }
160 
161  final Collection<AbstractFile> selectedFilesList =
162  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
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 
174  actionsList.addAll(ContextMenuExtensionPoint.getActions());
175  return actionsList;
176  }
177 
178  public static List<Action> getActions(Directory directory, boolean isArtifactSource) {
179  List<Action> actionsList = new ArrayList<>();
180  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), directory));
181  DirectoryNode directoryNode = new DirectoryNode(directory);
182  actionsList.add(null); // creates a menu separator
183  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, directoryNode));
184  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, directoryNode));
185  actionsList.add(null); // creates a menu separator
186  actionsList.add(ExtractAction.getInstance());
187  actionsList.add(null); // creates a menu separator
188  actionsList.add(AddContentTagAction.getInstance());
189  if (isArtifactSource) {
190  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
191  }
192 
193  final Collection<AbstractFile> selectedFilesList =
194  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
195  if(selectedFilesList.size() == 1) {
196  actionsList.add(DeleteFileContentTagAction.getInstance());
197  }
198  if(isArtifactSource) {
199  final Collection<BlackboardArtifact> selectedArtifactsList =
200  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
201  if(selectedArtifactsList.size() == 1) {
203  }
204  }
205 
206  actionsList.addAll(ContextMenuExtensionPoint.getActions());
207  return actionsList;
208  }
209 
210  public static List<Action> getActions(VirtualDirectory directory, boolean isArtifactSource) {
211  List<Action> actionsList = new ArrayList<>();
212  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), directory));
213  VirtualDirectoryNode directoryNode = new VirtualDirectoryNode(directory);
214  actionsList.add(null); // creates a menu separator
215  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, directoryNode));
216  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, directoryNode));
217  actionsList.add(null); // creates a menu separator
218  actionsList.add(ExtractAction.getInstance());
219  actionsList.add(null); // creates a menu separator
220  actionsList.add(AddContentTagAction.getInstance());
221  if (isArtifactSource) {
222  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
223  }
224 
225  final Collection<AbstractFile> selectedFilesList =
226  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
227  if(selectedFilesList.size() == 1) {
228  actionsList.add(DeleteFileContentTagAction.getInstance());
229  }
230  if(isArtifactSource) {
231  final Collection<BlackboardArtifact> selectedArtifactsList =
232  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
233  if(selectedArtifactsList.size() == 1) {
235  }
236  }
237 
238  actionsList.addAll(ContextMenuExtensionPoint.getActions());
239  return actionsList;
240  }
241 
242  public static List<Action> getActions(LocalDirectory directory, boolean isArtifactSource) {
243  List<Action> actionsList = new ArrayList<>();
244  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), directory));
245  LocalDirectoryNode directoryNode = new LocalDirectoryNode(directory);
246  actionsList.add(null); // creates a menu separator
247  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, directoryNode));
248  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, directoryNode));
249  actionsList.add(null); // creates a menu separator
250  actionsList.add(ExtractAction.getInstance());
251  actionsList.add(null); // creates a menu separator
252  actionsList.add(AddContentTagAction.getInstance());
253  if (isArtifactSource) {
254  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
255  }
256 
257  final Collection<AbstractFile> selectedFilesList =
258  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
259  if(selectedFilesList.size() == 1) {
260  actionsList.add(DeleteFileContentTagAction.getInstance());
261  }
262  if(isArtifactSource) {
263  final Collection<BlackboardArtifact> selectedArtifactsList =
264  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
265  if(selectedArtifactsList.size() == 1) {
267  }
268  }
269 
270  actionsList.addAll(ContextMenuExtensionPoint.getActions());
271  return actionsList;
272  }
273 
274  public static List<Action> getActions(LocalFile file, boolean isArtifactSource) {
275  List<Action> actionsList = new ArrayList<>();
276  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file));
277  final LocalFileNode localFileNode = new LocalFileNode(file);
278  actionsList.add(null); // creates a menu separator
279  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, localFileNode));
280  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, localFileNode));
281  actionsList.add(null); // creates a menu separator
282  actionsList.add(ExtractAction.getInstance());
283  actionsList.add(null); // creates a menu separator
284  actionsList.add(AddContentTagAction.getInstance());
285  if (isArtifactSource) {
286  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
287  }
288 
289  final Collection<AbstractFile> selectedFilesList =
290  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
291  if(selectedFilesList.size() == 1) {
292  actionsList.add(DeleteFileContentTagAction.getInstance());
293  }
294  if(isArtifactSource) {
295  final Collection<BlackboardArtifact> selectedArtifactsList =
296  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
297  if(selectedArtifactsList.size() == 1) {
299  }
300  }
301 
302  actionsList.addAll(ContextMenuExtensionPoint.getActions());
303  return actionsList;
304  }
305 
306  public static List<Action> getActions(DerivedFile file, boolean isArtifactSource) {
307  List<Action> actionsList = new ArrayList<>();
308  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file));
309  final LocalFileNode localFileNode = new LocalFileNode(file);
310  actionsList.add(null); // creates a menu separator
311  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, localFileNode));
312  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, localFileNode));
313  actionsList.add(null); // creates a menu separator
314  actionsList.add(ExtractAction.getInstance());
315  actionsList.add(null); // creates a menu separator
316  actionsList.add(AddContentTagAction.getInstance());
317  if (isArtifactSource) {
318  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
319  }
320 
321  final Collection<AbstractFile> selectedFilesList =
322  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
323  if(selectedFilesList.size() == 1) {
324  actionsList.add(DeleteFileContentTagAction.getInstance());
325  }
326  if(isArtifactSource) {
327  final Collection<BlackboardArtifact> selectedArtifactsList =
328  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
329  if(selectedArtifactsList.size() == 1) {
331  }
332  }
333 
334  actionsList.addAll(ContextMenuExtensionPoint.getActions());
335  return actionsList;
336  }
337 
338  public static List<Action> getActions(Report report, boolean isArtifactSource) {
339  List<Action> actionsList = new ArrayList<>();
340  final ReportNode reportNode = new ReportNode(report);
341  actionsList.add(null); // creates a menu separator
342  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, reportNode));
343  actionsList.add(null); // creates a menu separator
344  if (isArtifactSource) {
345  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
346  }
347 
348  if (isArtifactSource) {
349  final Collection<BlackboardArtifact> selectedArtifactsList
350  = new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
351  if (selectedArtifactsList.size() == 1) {
353  }
354  }
355 
356  actionsList.addAll(ContextMenuExtensionPoint.getActions());
357  return actionsList;
358  }
359 
360  public static List<Action> getActions(ContentTag contentTag, boolean isArtifactSource) {
361 
362  List<Action> actionsList = new ArrayList<>();
363  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), contentTag.getContent()));
364  final ContentTagNode tagNode = new ContentTagNode(contentTag);
365  actionsList.add(null); // creates a menu separator
366  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, tagNode));
367  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, tagNode));
368  actionsList.add(null); // creates a menu separator
369  actionsList.add(ExtractAction.getInstance());
370  actionsList.add(new HashSearchAction(SEARCH_FOR_FILES_SAME_MD5, tagNode));
371  actionsList.add(null); // creates a menu separator
372  actionsList.add(AddContentTagAction.getInstance());
373  if (isArtifactSource) {
374  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
375  }
376 
377  final Collection<AbstractFile> selectedFilesList =
378  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
379  if(selectedFilesList.size() == 1) {
380  actionsList.add(DeleteFileContentTagAction.getInstance());
381  }
382  if(isArtifactSource) {
383  final Collection<BlackboardArtifact> selectedArtifactsList =
384  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
385  if(selectedArtifactsList.size() == 1) {
387  }
388  }
389 
390  actionsList.add(DeleteContentTagAction.getInstance());
391  actionsList.add(ReplaceContentTagAction.getInstance());
392 
393  actionsList.addAll(ContextMenuExtensionPoint.getActions());
394  return actionsList;
395  }
396 
397 
398  public static List<Action> getActions(BlackboardArtifactTag artifactTag, boolean isArtifactSource) {
399  List<Action> actionsList = new ArrayList<>();
400  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), artifactTag.getContent()));
401  final BlackboardArtifactTagNode tagNode = new BlackboardArtifactTagNode(artifactTag);
402  actionsList.add(null); // creates a menu separator
403  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, tagNode));
404  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, tagNode));
405  actionsList.add(null); // creates a menu separator
406  actionsList.add(ExtractAction.getInstance());
407  actionsList.add(new HashSearchAction(SEARCH_FOR_FILES_SAME_MD5, tagNode));
408  actionsList.add(null); // creates a menu separator
409  actionsList.add(AddContentTagAction.getInstance());
410  if (isArtifactSource) {
411  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
412  }
413 
414  final Collection<AbstractFile> selectedFilesList =
415  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
416  if(selectedFilesList.size() == 1) {
417  actionsList.add(DeleteFileContentTagAction.getInstance());
418  }
419  if(isArtifactSource) {
420  final Collection<BlackboardArtifact> selectedArtifactsList =
421  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
422  if(selectedArtifactsList.size() == 1) {
424  }
425  }
426 
429 
430  actionsList.addAll(ContextMenuExtensionPoint.getActions());
431  return actionsList;
432  }
433 
434  public static List<Action> getActions(Content content, boolean isArtifactSource) {
435  if (content instanceof File) {
436  return getActions((File) content, isArtifactSource);
437  } else if (content instanceof LayoutFile) {
438  return getActions((LayoutFile) content, isArtifactSource);
439  } else if (content instanceof Directory) {
440  return getActions((Directory) content, isArtifactSource);
441  } else if (content instanceof VirtualDirectory) {
442  return getActions((VirtualDirectory) content, isArtifactSource);
443  } else if (content instanceof LocalFile) {
444  return getActions((LocalFile) content, isArtifactSource);
445  } else if (content instanceof DerivedFile) {
446  return getActions((DerivedFile) content, isArtifactSource);
447  } else if (content instanceof SlackFile) {
448  return getActions((SlackFile) content, isArtifactSource);
449  } else if (content instanceof Report) {
450  return getActions((Report) content, isArtifactSource);
451  } else {
452  return new ArrayList<>();
453  }
454  }
455 }
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-2016 Basis Technology. Generated on: Mon Jun 18 2018
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.