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