4961 WindowsRegistryViewer working as a FileTypeViewer

This commit is contained in:
William Schaefer
2019-05-09 17:20:33 -04:00
parent b5b1cdefe8
commit 3e53741237
7 changed files with 74 additions and 53 deletions
@@ -52,4 +52,6 @@ interface FileTypeViewer {
* fine. Otherwise, it is ambiguous.
*/
void resetComponent();
boolean isSupported(AbstractFile file);
}
@@ -18,7 +18,6 @@
*/
package org.sleuthkit.autopsy.contentviewers;
import com.google.common.base.Strings;
import java.awt.Component;
import java.util.HashMap;
@@ -50,7 +49,8 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer
new SQLiteViewer(),
new PListViewer(),
new MediaFileViewer(),
new HtmlViewer()
new HtmlViewer(),
new WindowsRegistryViewer()
};
private FileTypeViewer lastViewer;
@@ -81,10 +81,15 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer
*
* @param mimeType
*
* @return FileTypeViewer, null if no known content viewer supports the mimetype
* @return FileTypeViewer, null if no known content viewer supports the
* mimetype
*/
private FileTypeViewer getSupportingViewer(String mimeType) {
return mimeTypeToViewerMap.get(mimeType);
private FileTypeViewer getSupportingViewer(AbstractFile file) {
FileTypeViewer viewer = mimeTypeToViewerMap.get(file.getMIMEType());
if (viewer == null || viewer.isSupported(file)) {
return viewer;
}
return null;
}
/**
@@ -102,12 +107,11 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer
// Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables
@Override
public void setNode(Node selectedNode) {
resetComponent();
if (selectedNode == null) {
return;
}
@@ -123,27 +127,22 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer
try {
FileTypeDetector fileTypeDetector = new FileTypeDetector();
mimeType = fileTypeDetector.getMIMEType(file);
}catch (FileTypeDetector.FileTypeDetectorInitException ex) {
} catch (FileTypeDetector.FileTypeDetectorInitException ex) {
LOGGER.log(Level.SEVERE, "Failed to initialize FileTypeDetector.", ex); //NON-NLS
return;
}
}
if (mimeType.equalsIgnoreCase("application/octet-stream")) {
return;
}
else {
FileTypeViewer viewer = getSupportingViewer(mimeType);
if (viewer != null) {
lastViewer = viewer;
viewer.setFile(file);
this.removeAll();
this.add(viewer.getComponent());
this.repaint();
}
FileTypeViewer viewer = getSupportingViewer(file);
if (viewer != null) {
lastViewer = viewer;
viewer.setFile(file);
this.removeAll();
this.add(viewer.getComponent());
this.repaint();
}
}
@Override
@@ -196,44 +195,36 @@ public class FileViewer extends javax.swing.JPanel implements DataContentViewer
try {
FileTypeDetector fileTypeDetector = new FileTypeDetector();
mimeType = fileTypeDetector.getMIMEType(aFile);
}catch (FileTypeDetector.FileTypeDetectorInitException ex) {
} catch (FileTypeDetector.FileTypeDetectorInitException ex) {
LOGGER.log(Level.SEVERE, "Failed to initialize FileTypeDetector.", ex); //NON-NLS
return false;
}
}
if (mimeType.equalsIgnoreCase("application/octet-stream")) {
return false;
} else {
return (getSupportingViewer(mimeType) != null);
}
return (getSupportingViewer(aFile) != null);
}
@Override
public int isPreferred(Node node) {
AbstractFile file = node.getLookup().lookup(AbstractFile.class);
String mimeType = file.getMIMEType();
if (Strings.isNullOrEmpty(mimeType)) {
LOGGER.log(Level.INFO, "Mimetype not known for file: {0}", file.getName()); //NON-NLS
try {
FileTypeDetector fileTypeDetector = new FileTypeDetector();
mimeType = fileTypeDetector.getMIMEType(file);
}catch (FileTypeDetector.FileTypeDetectorInitException ex) {
} catch (FileTypeDetector.FileTypeDetectorInitException ex) {
LOGGER.log(Level.SEVERE, "Failed to initialize FileTypeDetector.", ex); //NON-NLS
return 0;
}
}
if (mimeType.equalsIgnoreCase("application/octet-stream")) {
return 0;
} else {
if (null != getSupportingViewer(mimeType)) {
return CONFIDENCE_LEVEL;
}
if (null != getSupportingViewer(file)) {
return CONFIDENCE_LEVEL;
}
return 0;
}
}
@@ -37,29 +37,28 @@ final class HtmlViewer extends javax.swing.JPanel implements FileTypeViewer {
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(HtmlViewer.class.getName());
private static final String[] SUPPORTED_MIMETYPES = new String[]{
"text/html",
"application/xhtml+xml"
"text/html",
"application/xhtml+xml"
};
/**
* Creates new form HtmlViewerPanel
*/
HtmlViewer() {
initComponents();
}
/**
* Retrieve the HTML text content from the supplied file.
*
*
* @param abstractFile The file to read.
*
*
* @return The text content of the file.
*/
@NbBundle.Messages({
"HtmlViewer_file_error=This file is missing or unreadable.",
})
"HtmlViewer_file_error=This file is missing or unreadable.",})
private String getHtmlText(AbstractFile abstractFile) {
try {
int fileSize = (int) abstractFile.getSize();
@@ -128,4 +127,9 @@ final class HtmlViewer extends javax.swing.JPanel implements FileTypeViewer {
public void resetComponent() {
htmlPanel.reset();
}
@Override
public boolean isSupported(AbstractFile file) {
return true;
}
}
@@ -191,4 +191,8 @@ class MediaFileViewer extends javax.swing.JPanel implements FileTypeViewer {
boolean isSupported(AbstractFile file);
}
@Override
public boolean isSupported(AbstractFile file){
return true;
}
}
@@ -538,6 +538,11 @@ class PListViewer extends javax.swing.JPanel implements FileTypeViewer, Explorer
}
@Override
public boolean isSupported(AbstractFile file){
return true;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton exportButton;
private javax.swing.JPanel hdrPanel;
@@ -413,8 +413,8 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer {
currentTableHeader = new ArrayList<>();
viewReader.read(tableName);
Map<String, Object> columnRow = new LinkedHashMap<>();
for(int i = 0; i< currentTableHeader.size(); i++){
columnRow.put(currentTableHeader.get(i), "");
for (int i = 0; i < currentTableHeader.size(); i++) {
columnRow.put(currentTableHeader.get(i), "");
}
selectedTableView.setupTable(Collections.singletonList(columnRow));
}
@@ -617,4 +617,9 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer {
}
};
}
@Override
public boolean isSupported(AbstractFile file) {
return true;
}
}
@@ -48,9 +48,11 @@ class WindowsRegistryViewer extends JPanel implements FileTypeViewer {
WindowsRegistryViewer() {
super(new BorderLayout());
System.out.println("CREATED REGISTRY VIEWER");
}
private void setDataView(Content content) {
System.out.println("setDataview called");
if (content == null) {
this.resetComponent();
return;
@@ -80,11 +82,13 @@ class WindowsRegistryViewer extends JPanel implements FileTypeViewer {
@Override
public Component getComponent() {
System.out.println("component GOTTEN");
return this;
}
@Override
public void resetComponent() {
System.out.println("RESETING COMP");
// cleanup anything
if (this.regview != null) {
this.remove(this.regview);
@@ -92,7 +96,9 @@ class WindowsRegistryViewer extends JPanel implements FileTypeViewer {
}
}
private boolean isSupported(AbstractFile file) {
@Override
public boolean isSupported(AbstractFile file) {
System.out.println("IS THIS SUPPORTED?");
if (file == null) {
return false;
}
@@ -111,19 +117,23 @@ class WindowsRegistryViewer extends JPanel implements FileTypeViewer {
RegistryHive hive = new RegistryHiveBuffer(buf);
try {
hive.getHeader();
System.out.println("is supported " + file.getName());
return true;
} catch (RegistryParseException ex) {
System.out.println("not supported "+ file.getName());
return false;
}
}
@Override
public List<String> getSupportedMIMETypes() {
System.out.println("GET SUPPORTED MIME TYPES");
return Arrays.asList(SUPPORTED_MIMETYPES);
}
@Override
public void setFile(AbstractFile file) {
System.out.println("SET THE FILE");
if (file == null) {
resetComponent();
return;