19 package org.sleuthkit.autopsy.contentviewers;
21 import java.awt.Component;
22 import org.openide.nodes.Node;
23 import org.openide.util.NbBundle;
24 import org.openide.util.NbBundle.Messages;
25 import org.openide.util.lookup.ServiceProvider;
31 import org.
sleuthkit.datamodel.TskData.TSK_DB_FILES_TYPE_ENUM;
38 @ServiceProvider(service = DataContentViewer.class, position = 6)
46 customizeComponents();
54 @SuppressWarnings(
"unchecked")
56 private
void initComponents() {
58 jPopupMenu1 =
new javax.swing.JPopupMenu();
59 jScrollPane2 =
new javax.swing.JScrollPane();
60 jTextPane1 =
new javax.swing.JTextPane();
62 setPreferredSize(
new java.awt.Dimension(100, 52));
64 jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
65 jScrollPane2.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
66 jScrollPane2.setPreferredSize(
new java.awt.Dimension(610, 52));
68 jTextPane1.setEditable(
false);
69 jTextPane1.setPreferredSize(
new java.awt.Dimension(600, 52));
70 jScrollPane2.setViewportView(jTextPane1);
72 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
73 this.setLayout(layout);
74 layout.setHorizontalGroup(
75 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
76 .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
78 layout.setVerticalGroup(
79 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
80 .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
104 jTextPane1.setText(
"<html><body>" + str +
"</body></html>");
108 sb.append(
"<table>");
112 sb.append(
"</table>");
115 private void addRow(StringBuilder sb, String key, String value) {
116 sb.append(
"<tr><td>");
118 sb.append(
"</td><td>");
120 sb.append(
"</td></tr>");
124 "Metadata.tableRowTitle.mimeType=MIME Type",
125 "Metadata.nodeText.truncated=(results truncated)"})
128 AbstractFile file = node.getLookup().lookup(AbstractFile.class);
130 setText(NbBundle.getMessage(
this.getClass(),
"Metadata.nodeText.nonFilePassedIn"));
134 StringBuilder sb =
new StringBuilder();
138 addRow(sb, NbBundle.getMessage(
this.getClass(),
"Metadata.tableRowTitle.name"), file.getUniquePath());
139 }
catch (TskCoreException ex) {
140 addRow(sb, NbBundle.getMessage(
this.getClass(),
"Metadata.tableRowTitle.name"), file.getParentPath() +
"/" + file.getName());
143 addRow(sb, NbBundle.getMessage(
this.getClass(),
"Metadata.tableRowTitle.type"), file.getType().getName());
144 addRow(sb, Bundle.Metadata_tableRowTitle_mimeType(), file.getMIMEType());
145 addRow(sb, NbBundle.getMessage(
this.getClass(),
"Metadata.tableRowTitle.size"), Long.toString(file.getSize()));
146 addRow(sb, NbBundle.getMessage(
this.getClass(),
"Metadata.tableRowTitle.fileNameAlloc"), file.getDirFlagAsString());
147 addRow(sb, NbBundle.getMessage(
this.getClass(),
"Metadata.tableRowTitle.metadataAlloc"), file.getMetaFlagsAsString());
148 addRow(sb, NbBundle.getMessage(
this.getClass(),
"Metadata.tableRowTitle.modified"),
ContentUtils.
getStringTime(file.getMtime(), file));
149 addRow(sb, NbBundle.getMessage(
this.getClass(),
"Metadata.tableRowTitle.accessed"),
ContentUtils.
getStringTime(file.getAtime(), file));
150 addRow(sb, NbBundle.getMessage(
this.getClass(),
"Metadata.tableRowTitle.created"),
ContentUtils.
getStringTime(file.getCrtime(), file));
151 addRow(sb, NbBundle.getMessage(
this.getClass(),
"Metadata.tableRowTitle.changed"),
ContentUtils.
getStringTime(file.getCtime(), file));
154 String md5 = file.getMd5Hash();
156 md5 = NbBundle.getMessage(this.getClass(),
"Metadata.tableRowContent.md5notCalc");
158 addRow(sb, NbBundle.getMessage(
this.getClass(),
"Metadata.tableRowTitle.md5"), md5);
159 addRow(sb, NbBundle.getMessage(
this.getClass(),
"Metadata.tableRowTitle.hashLookupResults"), file.getKnown().toString());
161 addRow(sb, NbBundle.getMessage(
this.getClass(),
"Metadata.tableRowTitle.internalid"), Long.toString(file.getId()));
162 if (file.getType().compareTo(TSK_DB_FILES_TYPE_ENUM.LOCAL) == 0) {
163 addRow(sb, NbBundle.getMessage(
this.getClass(),
"Metadata.tableRowTitle.localPath"), file.getLocalAbsPath());
173 if (file instanceof FsContent) {
174 FsContent fsFile = (FsContent) file;
176 sb.append(
"<hr /><pre>\n");
177 sb.append(NbBundle.getMessage(
this.getClass(),
"Metadata.nodeText.text"));
178 sb.append(
" <br /><br />");
179 for (String str : fsFile.getMetaDataText()) {
180 sb.append(str).append(
"<br />");
186 if(sb.length() > 50000){
187 sb.append(NbBundle.getMessage(
this.getClass(),
"Metadata.nodeText.truncated"));
191 sb.append(
"</pre>\n");
193 }
catch (TskCoreException ex) {
194 sb.append(NbBundle.getMessage(
this.getClass(),
"Metadata.nodeText.exceptionNotice.text")).append(ex.getLocalizedMessage());
197 setText(sb.toString());
198 jTextPane1.setCaretPosition(0);
199 this.setCursor(null);
204 return NbBundle.getMessage(this.getClass(),
"Metadata.title");
209 return NbBundle.getMessage(this.getClass(),
"Metadata.toolTip");
230 AbstractFile file = node.getLookup().lookup(AbstractFile.class);
void endTable(StringBuilder sb)
static String getStringTime(long epochSeconds, TimeZone tzone)
void addRow(StringBuilder sb, String key, String value)
javax.swing.JTextPane jTextPane1
javax.swing.JPopupMenu jPopupMenu1
void customizeComponents()
static void configureTextPaneAsHtml(JTextPane pane)
boolean isSupported(Node node)
DataContentViewer createInstance()
int isPreferred(Node node)
javax.swing.JScrollPane jScrollPane2
void startTable(StringBuilder sb)