19package org.sleuthkit.autopsy.contentviewers.textcontentviewer;
21import java.awt.Cursor;
22import java.beans.PropertyChangeEvent;
23import java.util.ArrayList;
24import java.util.Collection;
26import java.util.logging.Level;
27import javax.swing.JTabbedPane;
28import javax.swing.event.ChangeEvent;
29import javax.swing.event.ChangeListener;
30import org.openide.nodes.Node;
31import org.openide.util.Lookup;
32import org.openide.util.NbBundle.Messages;
33import org.sleuthkit.autopsy.contentviewers.utils.ViewerPriority;
34import org.sleuthkit.autopsy.core.UserPreferences;
35import org.sleuthkit.autopsy.corecomponentinterfaces.DataContent;
36import org.sleuthkit.autopsy.corecomponentinterfaces.TextViewer;
37import org.sleuthkit.datamodel.TskCoreException;
38import org.sleuthkit.autopsy.coreutils.Logger;
39import org.sleuthkit.datamodel.Content;
49 private final List<UpdateWrapper>
textViewers =
new ArrayList<>();
59 Collection<? extends TextViewer> dcvs = Lookup.getDefault().lookupAll(
TextViewer.class);
69 javax.swing.JScrollPane scrollTab =
new javax.swing.JScrollPane(dcv.
getComponent());
70 scrollTab.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_NEVER);
77 for (
int tab = 0; tab < numTabs; ++tab) {
91 boolean isSupported(Node node) {
93 if (textViewer.isSupported(node)) {
109 int isPreffered(Node node) {
110 int max = ViewerPriority.viewerPriority.LevelOne.getFlag();
112 if (textViewer.isSupported(node)) {
113 max = Integer.max(max, textViewer.isPreferred(node));
119 @Messages({
"TextContentViewerPanel.defaultName=Text"})
123 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
126 String defaultName = Bundle.TextContentViewerPanel_defaultName();
128 if (selectedNode ==
null) {
129 setName(defaultName);
131 Content content = selectedNode.getLookup().lookup(Content.class);
132 if (content !=
null) {
133 String path = defaultName;
135 path = content.getUniquePath();
136 }
catch (TskCoreException ex) {
137 logger.log(Level.SEVERE,
"Exception while calling Content.getUniquePath() for " + content.toString(), ex);
141 setName(defaultName);
149 this.setCursor(
null);
169 int maxPreferred = 0;
170 int preferredViewerIndex = 0;
171 for (
int i = 0; i < totalTabs; ++i) {
173 dcv.resetComponent();
176 if ((selectedNode ==
null) || (dcv.isSupported(selectedNode) ==
false)) {
182 int currentPreferred = dcv.isPreferred(selectedNode);
183 if (currentPreferred > maxPreferred) {
184 preferredViewerIndex = i;
185 maxPreferred = currentPreferred;
196 dcv.resetComponent();
198 dcv.setNode(selectedNode);
213 JTabbedPane pane = (JTabbedPane) evt.getSource();
216 int currentTab = pane.getSelectedIndex();
217 if (currentTab != -1 && pane.isEnabledAt(currentTab)) {
219 if (dcv.isOutdated()) {
221 this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
225 this.setCursor(
null);
236 @SuppressWarnings(
"unchecked")
242 javax.swing.GroupLayout
layout =
new javax.swing.GroupLayout(
this);
244 layout.setHorizontalGroup(
245 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
246 .addGap(0, 50, Short.MAX_VALUE)
247 .addGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
251 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
252 .addGap(0, 27, Short.MAX_VALUE)
253 .addGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
266 private static class UpdateWrapper {
273 this.outdated =
true;
276 void setNode(Node selectedNode) {
277 this.wrapped.
setNode(selectedNode);
278 this.outdated =
false;
281 void resetComponent() {
283 this.outdated =
true;
286 boolean isOutdated() {
287 return this.outdated;
290 boolean isSupported(Node node) {
294 int isPreferred(Node node) {
void propertyChange(PropertyChangeEvent evt)
boolean listeningToTabbedPane
void setupTabs(Node selectedNode)
static final long serialVersionUID
TextContentViewerPanel(boolean isMain)
static final Logger logger
void stateChanged(ChangeEvent evt)
final List< UpdateWrapper > textViewers
void setNode(Node selectedNode)
javax.swing.JTabbedPane textViewerTabbedPane
static boolean keepPreferredContentViewer()
synchronized static Logger getLogger(String name)
boolean isSupported(Node node)
int isPreferred(Node node)
TextViewer createInstance()
void setNode(Node selectedNode)