19 package org.sleuthkit.autopsy.ingest;
22 import java.awt.event.ActionEvent;
23 import java.awt.event.ActionListener;
24 import javax.swing.JMenuItem;
25 import javax.swing.text.html.HTMLEditorKit;
26 import javax.swing.text.html.StyleSheet;
32 import org.
sleuthkit.datamodel.TskData.TSK_DB_FILES_TYPE_ENUM;
38 class IngestMessageDetailsPanel
extends javax.swing.JPanel {
40 private final IngestMessageMainPanel mainPanel;
41 private final DirectoryTreeTopComponent dtc = DirectoryTreeTopComponent.findInstance();
46 IngestMessageDetailsPanel(IngestMessageMainPanel mainPanel) {
47 this.mainPanel = mainPanel;
49 customizeComponents();
52 private void customizeComponents() {
53 messageDetailsPane.setContentType(
"text/html");
54 viewArtifactButton.setEnabled(
false);
55 viewContentButton.setEnabled(
false);
56 HTMLEditorKit kit =
new HTMLEditorKit();
57 messageDetailsPane.setEditorKit(kit);
58 StyleSheet styleSheet = kit.getStyleSheet();
63 styleSheet.addRule(
"body {font-family:Arial;font-size:10pt;}");
64 styleSheet.addRule(
"p {font-family:Arial;font-size:10pt;}");
65 styleSheet.addRule(
"li {font-family:Arial;font-size:10pt;}");
66 styleSheet.addRule(
"table {table-layout:fixed;}");
67 styleSheet.addRule(
"td {white-space:pre-wrap;overflow:hidden;}");
68 styleSheet.addRule(
"th {font-weight:bold;}");
71 messageDetailsPane.setComponentPopupMenu(rightClickMenu);
72 ActionListener actList =
new ActionListener() {
74 public void actionPerformed(ActionEvent e) {
75 JMenuItem jmi = (JMenuItem) e.getSource();
76 if (jmi.equals(copyMenuItem)) {
77 messageDetailsPane.copy();
78 }
else if (jmi.equals(selectAllMenuItem)) {
79 messageDetailsPane.selectAll();
83 copyMenuItem.addActionListener(actList);
84 selectAllMenuItem.addActionListener(actList);
92 @SuppressWarnings(
"unchecked")
94 private
void initComponents() {
96 rightClickMenu =
new javax.swing.JPopupMenu();
97 copyMenuItem =
new javax.swing.JMenuItem();
98 selectAllMenuItem =
new javax.swing.JMenuItem();
99 jScrollPane1 =
new javax.swing.JScrollPane();
100 messageDetailsPane =
new javax.swing.JTextPane();
101 jToolBar1 =
new javax.swing.JToolBar();
102 backButton =
new javax.swing.JButton();
103 filler1 =
new javax.swing.Box.Filler(
new java.awt.Dimension(0, 0),
new java.awt.Dimension(0, 0),
new java.awt.Dimension(32767, 0));
104 viewArtifactButton =
new javax.swing.JButton();
105 viewContentButton =
new javax.swing.JButton();
107 copyMenuItem.setText(
org.openide.util.NbBundle.getMessage(IngestMessageDetailsPanel.class,
"IngestMessageDetailsPanel.copyMenuItem.text"));
108 rightClickMenu.add(copyMenuItem);
110 selectAllMenuItem.setText(
org.openide.util.NbBundle.getMessage(IngestMessageDetailsPanel.class,
"IngestMessageDetailsPanel.selectAllMenuItem.text"));
111 rightClickMenu.add(selectAllMenuItem);
113 messageDetailsPane.setEditable(
false);
114 messageDetailsPane.setBackground(
new java.awt.Color(221, 221, 235));
115 messageDetailsPane.setBorder(null);
116 messageDetailsPane.setContentType(
org.openide.util.NbBundle.getMessage(IngestMessageDetailsPanel.class,
"IngestMessageDetailsPanel.messageDetailsPane.contentType"));
117 messageDetailsPane.setFont(messageDetailsPane.getFont().deriveFont(messageDetailsPane.getFont().getStyle() & ~java.awt.Font.BOLD, 10));
118 messageDetailsPane.setToolTipText(
org.openide.util.NbBundle.getMessage(IngestMessageDetailsPanel.class,
"IngestMessageDetailsPanel.messageDetailsPane.toolTipText"));
119 jScrollPane1.setViewportView(messageDetailsPane);
121 jToolBar1.setFloatable(
false);
122 jToolBar1.setRollover(
true);
124 backButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/ingest/btn_step_back.png")));
125 backButton.setText(
org.openide.util.NbBundle.getMessage(IngestMessageDetailsPanel.class,
"IngestMessageDetailsPanel.backButton.text"));
126 backButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
127 backButton.setMargin(
new java.awt.Insets(2, 2, 2, 2));
128 backButton.setMaximumSize(
new java.awt.Dimension(23, 23));
129 backButton.setMinimumSize(
new java.awt.Dimension(23, 23));
130 backButton.setPreferredSize(
new java.awt.Dimension(23, 23));
131 backButton.setPressedIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/ingest/btn_step_back_hover.png")));
132 backButton.setRolloverIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/ingest/btn_step_back_hover.png")));
133 backButton.addActionListener(
new java.awt.event.ActionListener() {
134 public void actionPerformed(java.awt.event.ActionEvent evt) {
135 backButtonActionPerformed(evt);
138 jToolBar1.add(backButton);
139 jToolBar1.add(filler1);
141 viewArtifactButton.setFont(viewArtifactButton.getFont().deriveFont(viewArtifactButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
142 viewArtifactButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/ingest/goto_res.png")));
143 viewArtifactButton.setText(
org.openide.util.NbBundle.getMessage(IngestMessageDetailsPanel.class,
"IngestMessageDetailsPanel.viewArtifactButton.text"));
144 viewArtifactButton.setIconTextGap(2);
145 viewArtifactButton.setPreferredSize(
new java.awt.Dimension(93, 23));
146 viewArtifactButton.addActionListener(
new java.awt.event.ActionListener() {
147 public void actionPerformed(java.awt.event.ActionEvent evt) {
148 viewArtifactButtonActionPerformed(evt);
151 jToolBar1.add(viewArtifactButton);
153 viewContentButton.setFont(viewContentButton.getFont().deriveFont(viewContentButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
154 viewContentButton.setIcon(
new javax.swing.ImageIcon(getClass().getResource(
"/org/sleuthkit/autopsy/ingest/goto_dir.png")));
155 viewContentButton.setText(
org.openide.util.NbBundle.getMessage(IngestMessageDetailsPanel.class,
"IngestMessageDetailsPanel.viewContentButton.text"));
156 viewContentButton.setIconTextGap(2);
157 viewContentButton.setPreferredSize(
new java.awt.Dimension(111, 23));
158 viewContentButton.addActionListener(
new java.awt.event.ActionListener() {
159 public void actionPerformed(java.awt.event.ActionEvent evt) {
160 viewContentButtonActionPerformed(evt);
163 jToolBar1.add(viewContentButton);
165 javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(
this);
166 this.setLayout(layout);
167 layout.setHorizontalGroup(
168 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
169 .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 429, Short.MAX_VALUE)
170 .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 429, Short.MAX_VALUE)
172 layout.setVerticalGroup(
173 layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
174 .addGroup(layout.createSequentialGroup()
175 .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
177 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 267, Short.MAX_VALUE))
181 private void viewContentButtonActionPerformed(java.awt.event.ActionEvent evt) {
182 messageDetailsPane.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
183 final IngestMessageGroup messageGroup = mainPanel.getMessagePanel().getSelectedMessage();
184 if (messageGroup != null) {
185 BlackboardArtifact art = messageGroup.getData();
187 dtc.viewArtifactContent(art);
190 messageDetailsPane.setCursor(null);
193 private void viewArtifactButtonActionPerformed(java.awt.event.ActionEvent evt) {
194 messageDetailsPane.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
195 final IngestMessageGroup messageGroup = mainPanel.getMessagePanel().getSelectedMessage();
196 if (messageGroup != null) {
197 BlackboardArtifact art = messageGroup.getData();
199 dtc.viewArtifact(art);
202 messageDetailsPane.setCursor(null);
205 private void backButtonActionPerformed(java.awt.event.ActionEvent evt) {
206 mainPanel.showMessages();
209 private javax.swing.JButton backButton;
210 private javax.swing.JMenuItem copyMenuItem;
211 private javax.swing.Box.Filler filler1;
212 private javax.swing.JScrollPane jScrollPane1;
213 private javax.swing.JToolBar jToolBar1;
214 private javax.swing.JTextPane messageDetailsPane;
215 private javax.swing.JPopupMenu rightClickMenu;
216 private javax.swing.JMenuItem selectAllMenuItem;
217 private javax.swing.JButton viewArtifactButton;
218 private javax.swing.JButton viewContentButton;
226 void showDetails(
int rowNumber) {
227 final IngestMessageGroup messageGroup = mainPanel.getMessagePanel().getMessageGroup(rowNumber);
228 if (messageGroup != null) {
229 String details = messageGroup.getDetails();
230 if (details != null) {
231 StringBuilder b =
new StringBuilder();
232 if (details.startsWith(
"<html><body>") ==
false) {
233 b.append(
"<html><body>");
235 b.append(
"</body></html>");
239 this.messageDetailsPane.setText(b.toString());
241 this.messageDetailsPane.setText(
"");
244 BlackboardArtifact artifact = messageGroup.getData();;
245 if (artifact != null && messageGroup.getCount() == 1) {
246 viewArtifactButton.setEnabled(
true);
249 long objId = artifact.getObjectID();
250 AbstractFile file = null;
252 file = Case.getCurrentCase().getSleuthkitCase().getAbstractFileById(objId);
253 }
catch (TskException ex) {
257 viewContentButton.setEnabled(
false);
258 }
else if (!file.getType().equals(TSK_DB_FILES_TYPE_ENUM.FS)) {
259 viewContentButton.setEnabled(
false);
261 viewContentButton.setEnabled(
true);
264 viewArtifactButton.setEnabled(
false);
265 viewContentButton.setEnabled(
false);
268 viewArtifactButton.setEnabled(
false);
269 viewContentButton.setEnabled(
false);
270 messageDetailsPane.setText(
"");