Autopsy  3.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
FileTypesNode.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2014 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.beans.PropertyChangeEvent;
22 import java.beans.PropertyChangeListener;
23 import java.util.Arrays;
24 import java.util.List;
25 import java.util.Observable;
26 import org.openide.nodes.ChildFactory;
27 import org.openide.nodes.Children;
28 import org.openide.nodes.Node;
29 import org.openide.nodes.Sheet;
30 import org.openide.util.NbBundle;
31 import org.openide.util.lookup.Lookups;
35 
39 public class FileTypesNode extends DisplayableItemNode {
40 
41  private static final String FNAME = NbBundle.getMessage(FileTypesNode.class, "FileTypesNode.fname.text");
42 
49  FileTypesNode(SleuthkitCase skCase, FileTypeExtensionFilters.RootFilter filter) {
50  super(Children.create(new FileTypesChildren(skCase, filter, null), true), Lookups.singleton(filter == null ? FNAME : filter.getName()));
51  init(filter);
52  }
53 
61  private FileTypesNode(SleuthkitCase skCase, FileTypeExtensionFilters.RootFilter filter, Observable o) {
62  super(Children.create(new FileTypesChildren(skCase, filter, o), true), Lookups.singleton(filter == null ? FNAME : filter.getName()));
63  init(filter);
64  }
65 
66  private void init(FileTypeExtensionFilters.RootFilter filter) {
67  // root node of tree
68  if (filter == null) {
69  super.setName(FNAME);
70  super.setDisplayName(FNAME);
71  } // sub-node in file tree (i.e. documents, exec, etc.)
72  else {
73  super.setName(filter.getName());
74  super.setDisplayName(filter.getDisplayName());
75  }
76  this.setIconBaseWithExtension("org/sleuthkit/autopsy/images/file_types.png"); //NON-NLS
77  }
78 
79  @Override
80  public boolean isLeafTypeNode() {
81  return false;
82  }
83 
84  @Override
85  public <T> T accept(DisplayableItemNodeVisitor<T> v) {
86  return v.visit(this);
87  }
88 
89  @Override
90  protected Sheet createSheet() {
91  Sheet s = super.createSheet();
92  Sheet.Set ss = s.get(Sheet.PROPERTIES);
93  if (ss == null) {
94  ss = Sheet.createPropertiesSet();
95  s.put(ss);
96  }
97 
98  ss.put(new NodeProperty<>(NbBundle.getMessage(this.getClass(), "FileTypesNode.createSheet.name.name"),
99  NbBundle.getMessage(this.getClass(), "FileTypesNode.createSheet.name.displayName"),
100  NbBundle.getMessage(this.getClass(), "FileTypesNode.createSheet.name.desc"),
101  getName()));
102  return s;
103  }
104 
108  static class FileTypesChildren extends ChildFactory<FileTypeExtensionFilters.SearchFilterInterface> {
109 
110  private SleuthkitCase skCase;
111  private FileTypeExtensionFilters.RootFilter filter;
112  private Observable notifier;
113 
121  public FileTypesChildren(SleuthkitCase skCase, FileTypeExtensionFilters.RootFilter filter, Observable o) {
122  super();
123  this.skCase = skCase;
124  this.filter = filter;
125  if (o == null) {
126  this.notifier = new FileTypesChildrenObservable();
127  } else {
128  this.notifier = o;
129  }
130  }
131 
136  private final class FileTypesChildrenObservable extends Observable {
137 
142  }
143 
144  private void removeListeners() {
145  deleteObservers();
149  }
150 
151  private final PropertyChangeListener pcl = new PropertyChangeListener() {
152  @Override
153  public void propertyChange(PropertyChangeEvent evt) {
154  String eventType = evt.getPropertyName();
155 
156  // new file was added
157  if (eventType.equals(IngestManager.IngestModuleEvent.CONTENT_CHANGED.toString())) {
158  update();
159  } else if (eventType.equals(IngestManager.IngestJobEvent.COMPLETED.toString())
160  || eventType.equals(IngestManager.IngestJobEvent.CANCELLED.toString())) {
161  update();
162  } else if (eventType.equals(Case.Events.DATA_SOURCE_ADDED.toString())) {
163  update();
164  } else if (eventType.equals(Case.Events.CURRENT_CASE.toString())) {
165  // case was closed. Remove listeners so that we don't get called with a stale case handle
166  if (evt.getNewValue() == null) {
167  removeListeners();
168  }
169  }
170  }
171  };
172 
173  private void update() {
174  setChanged();
175  notifyObservers();
176  }
177  }
178 
179  @Override
180  protected boolean createKeys(List<FileTypeExtensionFilters.SearchFilterInterface> list) {
181  // root node
182  if (filter == null) {
183  list.addAll(Arrays.asList(FileTypeExtensionFilters.RootFilter.values()));
184  } // document and executable has another level of nodes
185  else if (filter.equals(FileTypeExtensionFilters.RootFilter.TSK_DOCUMENT_FILTER)) {
186  list.addAll(Arrays.asList(FileTypeExtensionFilters.DocumentFilter.values()));
187  } else if (filter.equals(FileTypeExtensionFilters.RootFilter.TSK_EXECUTABLE_FILTER)) {
188  list.addAll(Arrays.asList(FileTypeExtensionFilters.ExecutableFilter.values()));
189  }
190  return true;
191  }
192 
193  @Override
194  protected Node createNodeForKey(FileTypeExtensionFilters.SearchFilterInterface key) {
195  // make new nodes for the sub-nodes
196  if (key.getName().equals(FileTypeExtensionFilters.RootFilter.TSK_DOCUMENT_FILTER.getName())) {
197  return new FileTypesNode(skCase, FileTypeExtensionFilters.RootFilter.TSK_DOCUMENT_FILTER, notifier);
198  } else if (key.getName().equals(FileTypeExtensionFilters.RootFilter.TSK_EXECUTABLE_FILTER.getName())) {
199  return new FileTypesNode(skCase, FileTypeExtensionFilters.RootFilter.TSK_EXECUTABLE_FILTER, notifier);
200  } else {
201  return new FileTypeNode(key, skCase, notifier);
202  }
203  }
204  }
205 }
void removeIngestModuleEventListener(final PropertyChangeListener listener)
static synchronized IngestManager getInstance()
void removeIngestJobEventListener(final PropertyChangeListener listener)
FileTypesNode(SleuthkitCase skCase, FileTypeExtensionFilters.RootFilter filter, Observable o)
void addIngestJobEventListener(final PropertyChangeListener listener)
void init(FileTypeExtensionFilters.RootFilter filter)
static synchronized void removePropertyChangeListener(PropertyChangeListener listener)
Definition: Case.java:837
void addIngestModuleEventListener(final PropertyChangeListener listener)
static synchronized void addPropertyChangeListener(PropertyChangeListener listener)
Definition: Case.java:833

Copyright © 2012-2015 Basis Technology. Generated on: Mon Oct 19 2015
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.