Autopsy  4.6.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;
40 import org.sleuthkit.datamodel.AbstractFile;
41 import org.sleuthkit.datamodel.BlackboardArtifact;
42 import org.sleuthkit.datamodel.Content;
43 import org.sleuthkit.datamodel.DerivedFile;
44 import org.sleuthkit.datamodel.Directory;
45 import org.sleuthkit.datamodel.File;
46 import org.sleuthkit.datamodel.LayoutFile;
47 import org.sleuthkit.datamodel.LocalFile;
48 import org.sleuthkit.datamodel.LocalDirectory;
49 import org.sleuthkit.datamodel.Report;
50 import org.sleuthkit.datamodel.SlackFile;
51 import org.sleuthkit.datamodel.VirtualDirectory;
52 
57 // 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.
58 // 1. Do the types of the wrapper nodes really need to vary? If not, it would mean a single
59 // static List<Action> getActions(AbstrctFile file, boolean isArtifactSource)
60 // method could be implemented. If the different nodes are necessary, is it merely because of some misuse of the Visitor pattern somewhere?
61 // 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
62 // handle selections.
64 
65  public static final String VIEW_SOURCE_FILE_IN_DIR = NbBundle
66  .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.srcFileInDir.text");
67  public static final String VIEW_FILE_IN_DIR = NbBundle
68  .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.fileInDir.text");
69  public static final String VIEW_IN_NEW_WINDOW = NbBundle
70  .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.viewNewWin.text");
71  public static final String OPEN_IN_EXTERNAL_VIEWER = NbBundle
72  .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.openExtViewer.text");
73  public static final String SEARCH_FOR_FILES_SAME_MD5 = NbBundle
74  .getMessage(DataModelActionsFactory.class, "DataModelActionsFactory.srfFileSameMD5.text");
75 
76  public static List<Action> getActions(File file, boolean isArtifactSource) {
77  List<Action> actionsList = new ArrayList<>();
78  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file));
79  final FileNode fileNode = new FileNode(file);
80  actionsList.add(null); // creates a menu separator
81  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, fileNode));
82  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, fileNode));
83  actionsList.add(null); // creates a menu separator
84  actionsList.add(ExtractAction.getInstance());
85  actionsList.add(new HashSearchAction(SEARCH_FOR_FILES_SAME_MD5, fileNode));
86  actionsList.add(null); // creates a menu separator
87  actionsList.add(AddContentTagAction.getInstance());
88  if (isArtifactSource) {
90  }
91 
92  final Collection<AbstractFile> selectedFilesList =
93  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
94  if(selectedFilesList.size() == 1) {
95  actionsList.add(DeleteFileContentTagAction.getInstance());
96  }
97  if(isArtifactSource) {
98  final Collection<BlackboardArtifact> selectedArtifactsList =
99  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
100  if(selectedArtifactsList.size() == 1) {
102  }
103  }
104 
105  actionsList.addAll(ContextMenuExtensionPoint.getActions());
106  return actionsList;
107  }
108 
109  public static List<Action> getActions(SlackFile slackFile, boolean isArtifactSource) {
110  List<Action> actionsList = new ArrayList<>();
111  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), slackFile));
112  final SlackFileNode slackFileNode = new SlackFileNode(slackFile);
113  actionsList.add(null); // creates a menu separator
114  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, slackFileNode));
115  actionsList.add(null); // creates a menu separator
116  actionsList.add(ExtractAction.getInstance());
117  actionsList.add(null); // creates a menu separator
118  actionsList.add(AddContentTagAction.getInstance());
119  if (isArtifactSource) {
120  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
121  }
122 
123  final Collection<AbstractFile> selectedFilesList =
124  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
125  if(selectedFilesList.size() == 1) {
126  actionsList.add(DeleteFileContentTagAction.getInstance());
127  }
128  if(isArtifactSource) {
129  final Collection<BlackboardArtifact> selectedArtifactsList =
130  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
131  if(selectedArtifactsList.size() == 1) {
133  }
134  }
135 
136  actionsList.addAll(ContextMenuExtensionPoint.getActions());
137  return actionsList;
138  }
139 
140  public static List<Action> getActions(LayoutFile file, boolean isArtifactSource) {
141  List<Action> actionsList = new ArrayList<>();
142  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file));
143  LayoutFileNode layoutFileNode = new LayoutFileNode(file);
144  actionsList.add(null); // creates a menu separator
145  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, layoutFileNode));
146  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, layoutFileNode));
147  actionsList.add(null); // creates a menu separator
148  actionsList.add(ExtractAction.getInstance());//
149  actionsList.add(null); // creates a menu separator
150  actionsList.add(AddContentTagAction.getInstance());
151  if (isArtifactSource) {
152  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
153  }
154 
155  final Collection<AbstractFile> selectedFilesList =
156  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
157  if(selectedFilesList.size() == 1) {
158  actionsList.add(DeleteFileContentTagAction.getInstance());
159  }
160  if(isArtifactSource) {
161  final Collection<BlackboardArtifact> selectedArtifactsList =
162  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
163  if(selectedArtifactsList.size() == 1) {
165  }
166  }
167 
168  actionsList.addAll(ContextMenuExtensionPoint.getActions());
169  return actionsList;
170  }
171 
172  public static List<Action> getActions(Directory directory, boolean isArtifactSource) {
173  List<Action> actionsList = new ArrayList<>();
174  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), directory));
175  DirectoryNode directoryNode = new DirectoryNode(directory);
176  actionsList.add(null); // creates a menu separator
177  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, directoryNode));
178  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, directoryNode));
179  actionsList.add(null); // creates a menu separator
180  actionsList.add(ExtractAction.getInstance());
181  actionsList.add(null); // creates a menu separator
182  actionsList.add(AddContentTagAction.getInstance());
183  if (isArtifactSource) {
184  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
185  }
186 
187  final Collection<AbstractFile> selectedFilesList =
188  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
189  if(selectedFilesList.size() == 1) {
190  actionsList.add(DeleteFileContentTagAction.getInstance());
191  }
192  if(isArtifactSource) {
193  final Collection<BlackboardArtifact> selectedArtifactsList =
194  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
195  if(selectedArtifactsList.size() == 1) {
197  }
198  }
199 
200  actionsList.addAll(ContextMenuExtensionPoint.getActions());
201  return actionsList;
202  }
203 
204  public static List<Action> getActions(VirtualDirectory directory, boolean isArtifactSource) {
205  List<Action> actionsList = new ArrayList<>();
206  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), directory));
207  VirtualDirectoryNode directoryNode = new VirtualDirectoryNode(directory);
208  actionsList.add(null); // creates a menu separator
209  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, directoryNode));
210  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, directoryNode));
211  actionsList.add(null); // creates a menu separator
212  actionsList.add(ExtractAction.getInstance());
213  actionsList.add(null); // creates a menu separator
214  actionsList.add(AddContentTagAction.getInstance());
215  if (isArtifactSource) {
216  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
217  }
218 
219  final Collection<AbstractFile> selectedFilesList =
220  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
221  if(selectedFilesList.size() == 1) {
222  actionsList.add(DeleteFileContentTagAction.getInstance());
223  }
224  if(isArtifactSource) {
225  final Collection<BlackboardArtifact> selectedArtifactsList =
226  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
227  if(selectedArtifactsList.size() == 1) {
229  }
230  }
231 
232  actionsList.addAll(ContextMenuExtensionPoint.getActions());
233  return actionsList;
234  }
235 
236  public static List<Action> getActions(LocalDirectory directory, boolean isArtifactSource) {
237  List<Action> actionsList = new ArrayList<>();
238  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), directory));
239  LocalDirectoryNode directoryNode = new LocalDirectoryNode(directory);
240  actionsList.add(null); // creates a menu separator
241  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, directoryNode));
242  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, directoryNode));
243  actionsList.add(null); // creates a menu separator
244  actionsList.add(ExtractAction.getInstance());
245  actionsList.add(null); // creates a menu separator
246  actionsList.add(AddContentTagAction.getInstance());
247  if (isArtifactSource) {
248  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
249  }
250 
251  final Collection<AbstractFile> selectedFilesList =
252  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
253  if(selectedFilesList.size() == 1) {
254  actionsList.add(DeleteFileContentTagAction.getInstance());
255  }
256  if(isArtifactSource) {
257  final Collection<BlackboardArtifact> selectedArtifactsList =
258  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
259  if(selectedArtifactsList.size() == 1) {
261  }
262  }
263 
264  actionsList.addAll(ContextMenuExtensionPoint.getActions());
265  return actionsList;
266  }
267 
268  public static List<Action> getActions(LocalFile file, boolean isArtifactSource) {
269  List<Action> actionsList = new ArrayList<>();
270  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file));
271  final LocalFileNode localFileNode = new LocalFileNode(file);
272  actionsList.add(null); // creates a menu separator
273  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, localFileNode));
274  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, localFileNode));
275  actionsList.add(null); // creates a menu separator
276  actionsList.add(ExtractAction.getInstance());
277  actionsList.add(null); // creates a menu separator
278  actionsList.add(AddContentTagAction.getInstance());
279  if (isArtifactSource) {
280  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
281  }
282 
283  final Collection<AbstractFile> selectedFilesList =
284  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
285  if(selectedFilesList.size() == 1) {
286  actionsList.add(DeleteFileContentTagAction.getInstance());
287  }
288  if(isArtifactSource) {
289  final Collection<BlackboardArtifact> selectedArtifactsList =
290  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
291  if(selectedArtifactsList.size() == 1) {
293  }
294  }
295 
296  actionsList.addAll(ContextMenuExtensionPoint.getActions());
297  return actionsList;
298  }
299 
300  public static List<Action> getActions(DerivedFile file, boolean isArtifactSource) {
301  List<Action> actionsList = new ArrayList<>();
302  actionsList.add(new ViewContextAction((isArtifactSource ? VIEW_SOURCE_FILE_IN_DIR : VIEW_FILE_IN_DIR), file));
303  final LocalFileNode localFileNode = new LocalFileNode(file);
304  actionsList.add(null); // creates a menu separator
305  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, localFileNode));
306  actionsList.add(new ExternalViewerAction(OPEN_IN_EXTERNAL_VIEWER, localFileNode));
307  actionsList.add(null); // creates a menu separator
308  actionsList.add(ExtractAction.getInstance());
309  actionsList.add(null); // creates a menu separator
310  actionsList.add(AddContentTagAction.getInstance());
311  if (isArtifactSource) {
312  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
313  }
314 
315  final Collection<AbstractFile> selectedFilesList =
316  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(AbstractFile.class));
317  if(selectedFilesList.size() == 1) {
318  actionsList.add(DeleteFileContentTagAction.getInstance());
319  }
320  if(isArtifactSource) {
321  final Collection<BlackboardArtifact> selectedArtifactsList =
322  new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
323  if(selectedArtifactsList.size() == 1) {
325  }
326  }
327 
328  actionsList.addAll(ContextMenuExtensionPoint.getActions());
329  return actionsList;
330  }
331 
332  public static List<Action> getActions(Report report, boolean isArtifactSource) {
333  List<Action> actionsList = new ArrayList<>();
334  final ReportNode reportNode = new ReportNode(report);
335  actionsList.add(null); // creates a menu separator
336  actionsList.add(new NewWindowViewAction(VIEW_IN_NEW_WINDOW, reportNode));
337  actionsList.add(null); // creates a menu separator
338  if (isArtifactSource) {
339  actionsList.add(AddBlackboardArtifactTagAction.getInstance());
340  }
341 
342  if (isArtifactSource) {
343  final Collection<BlackboardArtifact> selectedArtifactsList
344  = new HashSet<>(Utilities.actionsGlobalContext().lookupAll(BlackboardArtifact.class));
345  if (selectedArtifactsList.size() == 1) {
347  }
348  }
349 
350  actionsList.addAll(ContextMenuExtensionPoint.getActions());
351  return actionsList;
352  }
353 
354  public static List<Action> getActions(Content content, boolean isArtifactSource) {
355  if (content instanceof File) {
356  return getActions((File) content, isArtifactSource);
357  } else if (content instanceof LayoutFile) {
358  return getActions((LayoutFile) content, isArtifactSource);
359  } else if (content instanceof Directory) {
360  return getActions((Directory) content, isArtifactSource);
361  } else if (content instanceof VirtualDirectory) {
362  return getActions((VirtualDirectory) content, isArtifactSource);
363  } else if (content instanceof LocalFile) {
364  return getActions((LocalFile) content, isArtifactSource);
365  } else if (content instanceof DerivedFile) {
366  return getActions((DerivedFile) content, isArtifactSource);
367  } else if (content instanceof SlackFile) {
368  return getActions((SlackFile) content, isArtifactSource);
369  } else if (content instanceof Report) {
370  return getActions((Report) content, isArtifactSource);
371  } else {
372  return new ArrayList<>();
373  }
374  }
375 }
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 List< Action > getActions(Content content, boolean isArtifactSource)
static synchronized ExtractAction getInstance()
static synchronized DeleteFileContentTagAction getInstance()
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 May 7 2018
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.