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

Copyright © 2012-2016 Basis Technology. Generated on: Tue Jun 13 2017
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.