Autopsy  4.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
IngestMessageDetailsPanel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011 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.ingest;
20 
21 import java.awt.*;
22 import java.awt.event.ActionEvent;
23 import java.awt.event.ActionListener;
24 import java.beans.PropertyChangeEvent;
25 import java.beans.PropertyChangeListener;
26 import javax.swing.JMenuItem;
27 import javax.swing.text.html.HTMLEditorKit;
28 import javax.swing.text.html.StyleSheet;
29 import org.openide.util.Lookup;
33 import org.sleuthkit.datamodel.AbstractFile;
34 import org.sleuthkit.datamodel.BlackboardArtifact;
35 import org.sleuthkit.datamodel.TskData.TSK_DB_FILES_TYPE_ENUM;
36 import org.sleuthkit.datamodel.TskException;
37 
41 class IngestMessageDetailsPanel extends javax.swing.JPanel {
42 
43  private IngestMessageMainPanel mainPanel;
44 
48  IngestMessageDetailsPanel(IngestMessageMainPanel mainPanel) {
49  this.mainPanel = mainPanel;
50  initComponents();
51  customizeComponents();
52  }
53 
54  private void customizeComponents() {
55  messageDetailsPane.setContentType("text/html"); //NON-NLS
56  viewArtifactButton.setEnabled(false);
57  viewContentButton.setEnabled(false);
58  HTMLEditorKit kit = new HTMLEditorKit();
59  messageDetailsPane.setEditorKit(kit);
60  StyleSheet styleSheet = kit.getStyleSheet();
61  /*
62  * I tried to define the font-size only on body to have it inherit, it
63  * didn't work in all cases.
64  */
65  styleSheet.addRule("body {font-family:Arial;font-size:10pt;}"); //NON-NLS
66  styleSheet.addRule("p {font-family:Arial;font-size:10pt;}"); //NON-NLS
67  styleSheet.addRule("li {font-family:Arial;font-size:10pt;}"); //NON-NLS
68  styleSheet.addRule("table {table-layout:fixed;}"); //NON-NLS
69  styleSheet.addRule("td {white-space:pre-wrap;overflow:hidden;}"); //NON-NLS
70  styleSheet.addRule("th {font-weight:bold;}"); //NON-NLS
71 
72  BlackboardResultViewer v = Lookup.getDefault().lookup(BlackboardResultViewer.class);
73  v.addOnFinishedListener(new PropertyChangeListener() {
74 
75  @Override
76  public void propertyChange(PropertyChangeEvent evt) {
77  if (evt.getPropertyName().equals(BlackboardResultViewer.FINISHED_DISPLAY_EVT)) {
78  artifactViewerFinished();
79  }
80  }
81 
82  });
83 
84  //right click
85  messageDetailsPane.setComponentPopupMenu(rightClickMenu);
86  ActionListener actList = new ActionListener() {
87  @Override
88  public void actionPerformed(ActionEvent e) {
89  JMenuItem jmi = (JMenuItem) e.getSource();
90  if (jmi.equals(copyMenuItem)) {
91  messageDetailsPane.copy();
92  } else if (jmi.equals(selectAllMenuItem)) {
93  messageDetailsPane.selectAll();
94  }
95  }
96  };
97  copyMenuItem.addActionListener(actList);
98  selectAllMenuItem.addActionListener(actList);
99  }
100 
106  @SuppressWarnings("unchecked")
107  // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
108  private void initComponents() {
109 
110  rightClickMenu = new javax.swing.JPopupMenu();
111  copyMenuItem = new javax.swing.JMenuItem();
112  selectAllMenuItem = new javax.swing.JMenuItem();
113  jScrollPane1 = new javax.swing.JScrollPane();
114  messageDetailsPane = new javax.swing.JTextPane();
115  jToolBar1 = new javax.swing.JToolBar();
116  backButton = new javax.swing.JButton();
117  filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 0));
118  viewArtifactButton = new javax.swing.JButton();
119  viewContentButton = new javax.swing.JButton();
120 
121  copyMenuItem.setText(org.openide.util.NbBundle.getMessage(IngestMessageDetailsPanel.class, "IngestMessageDetailsPanel.copyMenuItem.text")); // NOI18N
122  rightClickMenu.add(copyMenuItem);
123 
124  selectAllMenuItem.setText(org.openide.util.NbBundle.getMessage(IngestMessageDetailsPanel.class, "IngestMessageDetailsPanel.selectAllMenuItem.text")); // NOI18N
125  rightClickMenu.add(selectAllMenuItem);
126 
127  messageDetailsPane.setEditable(false);
128  messageDetailsPane.setBackground(new java.awt.Color(221, 221, 235));
129  messageDetailsPane.setBorder(null);
130  messageDetailsPane.setContentType(org.openide.util.NbBundle.getMessage(IngestMessageDetailsPanel.class, "IngestMessageDetailsPanel.messageDetailsPane.contentType")); // NOI18N
131  messageDetailsPane.setFont(messageDetailsPane.getFont().deriveFont(messageDetailsPane.getFont().getStyle() & ~java.awt.Font.BOLD, 10));
132  messageDetailsPane.setToolTipText(org.openide.util.NbBundle.getMessage(IngestMessageDetailsPanel.class, "IngestMessageDetailsPanel.messageDetailsPane.toolTipText")); // NOI18N
133  jScrollPane1.setViewportView(messageDetailsPane);
134 
135  jToolBar1.setFloatable(false);
136  jToolBar1.setRollover(true);
137 
138  backButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/ingest/btn_step_back.png"))); // NOI18N
139  backButton.setText(org.openide.util.NbBundle.getMessage(IngestMessageDetailsPanel.class, "IngestMessageDetailsPanel.backButton.text")); // NOI18N
140  backButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
141  backButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
142  backButton.setMaximumSize(new java.awt.Dimension(23, 23));
143  backButton.setMinimumSize(new java.awt.Dimension(23, 23));
144  backButton.setPreferredSize(new java.awt.Dimension(23, 23));
145  backButton.setPressedIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/ingest/btn_step_back_hover.png"))); // NOI18N
146  backButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/ingest/btn_step_back_hover.png"))); // NOI18N
147  backButton.addActionListener(new java.awt.event.ActionListener() {
148  public void actionPerformed(java.awt.event.ActionEvent evt) {
149  backButtonActionPerformed(evt);
150  }
151  });
152  jToolBar1.add(backButton);
153  jToolBar1.add(filler1);
154 
155  viewArtifactButton.setFont(viewArtifactButton.getFont().deriveFont(viewArtifactButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
156  viewArtifactButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/ingest/goto_res.png"))); // NOI18N
157  viewArtifactButton.setText(org.openide.util.NbBundle.getMessage(IngestMessageDetailsPanel.class, "IngestMessageDetailsPanel.viewArtifactButton.text")); // NOI18N
158  viewArtifactButton.setIconTextGap(2);
159  viewArtifactButton.setPreferredSize(new java.awt.Dimension(93, 23));
160  viewArtifactButton.addActionListener(new java.awt.event.ActionListener() {
161  public void actionPerformed(java.awt.event.ActionEvent evt) {
162  viewArtifactButtonActionPerformed(evt);
163  }
164  });
165  jToolBar1.add(viewArtifactButton);
166 
167  viewContentButton.setFont(viewContentButton.getFont().deriveFont(viewContentButton.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
168  viewContentButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/ingest/goto_dir.png"))); // NOI18N
169  viewContentButton.setText(org.openide.util.NbBundle.getMessage(IngestMessageDetailsPanel.class, "IngestMessageDetailsPanel.viewContentButton.text")); // NOI18N
170  viewContentButton.setIconTextGap(2);
171  viewContentButton.setPreferredSize(new java.awt.Dimension(111, 23));
172  viewContentButton.addActionListener(new java.awt.event.ActionListener() {
173  public void actionPerformed(java.awt.event.ActionEvent evt) {
174  viewContentButtonActionPerformed(evt);
175  }
176  });
177  jToolBar1.add(viewContentButton);
178 
179  javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
180  this.setLayout(layout);
181  layout.setHorizontalGroup(
182  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
183  .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 429, Short.MAX_VALUE)
184  .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 429, Short.MAX_VALUE)
185  );
186  layout.setVerticalGroup(
187  layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
188  .addGroup(layout.createSequentialGroup()
189  .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
190  .addGap(0, 0, 0)
191  .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 267, Short.MAX_VALUE))
192  );
193  }// </editor-fold>//GEN-END:initComponents
194 
195  private void viewContentButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_viewContentButtonActionPerformed
196  viewContent(evt);
197  }//GEN-LAST:event_viewContentButtonActionPerformed
198 
199  private void viewArtifactButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_viewArtifactButtonActionPerformed
200  viewArtifact(evt);
201  }//GEN-LAST:event_viewArtifactButtonActionPerformed
202 
203  private void backButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backButtonActionPerformed
204  mainPanel.showMessages();
205  }//GEN-LAST:event_backButtonActionPerformed
206  // Variables declaration - do not modify//GEN-BEGIN:variables
207  private javax.swing.JButton backButton;
208  private javax.swing.JMenuItem copyMenuItem;
209  private javax.swing.Box.Filler filler1;
210  private javax.swing.JScrollPane jScrollPane1;
211  private javax.swing.JToolBar jToolBar1;
212  private javax.swing.JTextPane messageDetailsPane;
213  private javax.swing.JPopupMenu rightClickMenu;
214  private javax.swing.JMenuItem selectAllMenuItem;
215  private javax.swing.JButton viewArtifactButton;
216  private javax.swing.JButton viewContentButton;
217  // End of variables declaration//GEN-END:variables
218 
219  private void viewArtifact(java.awt.event.ActionEvent evt) {
220  artifactViewerInvoked();
221 
222  final IngestMessageGroup messageGroup = mainPanel.getMessagePanel().getSelectedMessage();
223  if (messageGroup != null) {
224  BlackboardArtifact art = messageGroup.getData();
225  if (art != null) {
226  BlackboardResultViewer v = Lookup.getDefault().lookup(BlackboardResultViewer.class);
227  v.viewArtifact(art);
228  }
229  }
230 
231  }
232 
233  private void viewContent(java.awt.event.ActionEvent evt) {
234  artifactViewerInvoked();
235 
236  final IngestMessageGroup messageGroup = mainPanel.getMessagePanel().getSelectedMessage();
237  if (messageGroup != null) {
238  BlackboardArtifact art = messageGroup.getData();
239  if (art != null) {
240  BlackboardResultViewer v = Lookup.getDefault().lookup(BlackboardResultViewer.class);
241  v.viewArtifactContent(art);
242  }
243  }
244  }
245 
246  private void artifactViewerInvoked() {
247  //viewArtifactButton.setEnabled(false);
248  //viewContentButton.setEnabled(false);
249  messageDetailsPane.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
250 
251  }
252 
253  private void artifactViewerFinished() {
254  //viewArtifactButton.setEnabled(true);
255  //viewContentButton.setEnabled(true);
256  messageDetailsPane.setCursor(null);
257  }
258 
264  void showDetails(int rowNumber) {
265  final IngestMessageGroup messageGroup = mainPanel.getMessagePanel().getMessageGroup(rowNumber);
266  if (messageGroup != null) {
267  String details = messageGroup.getDetails();
268  if (details != null) {
269  StringBuilder b = new StringBuilder();
270  if (details.startsWith("<html><body>") == false) { //NON-NLS
271  b.append("<html><body>"); //NON-NLS
272  b.append(details);
273  b.append("</body></html>"); //NON-NLS
274  } else {
275  b.append(details);
276  }
277  this.messageDetailsPane.setText(b.toString());
278  } else {
279  this.messageDetailsPane.setText("");
280  }
281  //show artifact/content only for a message group with a single message
282  BlackboardArtifact artifact = messageGroup.getData();;
283  if (artifact != null && messageGroup.getCount() == 1) {
284  viewArtifactButton.setEnabled(true);
285 
286  //check file type
287  long objId = artifact.getObjectID();
288  AbstractFile file = null;
289  try {
290  file = Case.getCurrentCase().getSleuthkitCase().getAbstractFileById(objId);
291  } catch (TskException ex) {
292 
293  }
294  if (file == null) {
295  viewContentButton.setEnabled(false);
296  } else if (!file.getType().equals(TSK_DB_FILES_TYPE_ENUM.FS)) {
297  viewContentButton.setEnabled(false);
298  } else {
299  viewContentButton.setEnabled(true);
300  }
301  } else {
302  viewArtifactButton.setEnabled(false);
303  viewContentButton.setEnabled(false);
304  }
305  } else {
306  viewArtifactButton.setEnabled(false);
307  viewContentButton.setEnabled(false);
308  messageDetailsPane.setText("");
309  }
310 
311  }
312 }

Copyright © 2012-2016 Basis Technology. Generated on: Mon Jan 2 2017
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.