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