19 package org.sleuthkit.autopsy.discovery.ui;
 
   21 import java.awt.Dimension;
 
   22 import java.awt.Point;
 
   23 import java.util.ArrayList;
 
   24 import java.util.List;
 
   25 import java.util.logging.Level;
 
   26 import javax.swing.JPopupMenu;
 
   27 import javax.swing.event.ListSelectionListener;
 
   28 import javax.swing.table.AbstractTableModel;
 
   29 import javax.swing.table.TableCellRenderer;
 
   30 import org.apache.commons.io.FilenameUtils;
 
   31 import org.apache.commons.lang.StringUtils;
 
   32 import org.openide.util.NbBundle;
 
   46 final class ArtifactsListPanel 
extends AbstractArtifactListPanel {
 
   48     private static final long serialVersionUID = 1L;
 
   49     private static final Logger logger = Logger.getLogger(ArtifactsListPanel.class.getName());
 
   50     private final DomainArtifactTableModel tableModel;
 
   57     @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
 
   58     ArtifactsListPanel(BlackboardArtifact.ARTIFACT_TYPE artifactType) {
 
   59         tableModel = 
new DomainArtifactTableModel(artifactType);
 
   62         TableCellRenderer renderer = 
new SimpleTableCellRenderer();
 
   63         for (
int i = 0; i < tableModel.getColumnCount(); ++i) {
 
   64             artifactsTable.getColumnModel().getColumn(i).setCellRenderer(renderer);
 
   66         setMinimumSize(
new Dimension(125, 20));
 
   67         artifactsTable.getRowSorter().toggleSortOrder(0);
 
   68         artifactsTable.getRowSorter().toggleSortOrder(0);
 
   72     void addMouseListener(java.awt.event.MouseAdapter mouseListener) {
 
   73         artifactsTable.addMouseListener(mouseListener);
 
   77     void showPopupMenu(JPopupMenu popupMenu, Point point) {
 
   78         popupMenu.show(artifactsTable, point.x, point.y);
 
   82     void addSelectionListener(ListSelectionListener listener) {
 
   83         artifactsTable.getSelectionModel().addListSelectionListener(listener);
 
   89     @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
 
   91         artifactsTable.grabFocus();
 
   95     void removeSelectionListener(ListSelectionListener listener) {
 
   96         artifactsTable.getSelectionModel().removeListSelectionListener(listener);
 
  100     boolean selectAtPoint(Point point) {
 
  101         boolean pointSelected = 
false;
 
  102         int row = artifactsTable.rowAtPoint(point);
 
  103         if (row < artifactsTable.getRowCount() && row >= 0) {
 
  104             artifactsTable.clearSelection();
 
  105             artifactsTable.addRowSelectionInterval(row, row);
 
  106             pointSelected = 
true;
 
  108         return pointSelected;
 
  112     BlackboardArtifact getSelectedArtifact() {
 
  113         if (artifactsTable.getModel() instanceof DomainArtifactTableModel) {
 
  114             int selectedIndex = artifactsTable.getSelectionModel().getLeadSelectionIndex();
 
  115             if (selectedIndex < artifactsTable.getSelectionModel().getMinSelectionIndex() || artifactsTable.getSelectionModel().getMaxSelectionIndex() < 0 || selectedIndex > artifactsTable.getSelectionModel().getMaxSelectionIndex()) {
 
  118             return tableModel.getArtifactByRow(artifactsTable.convertRowIndexToModel(selectedIndex));
 
  126         return tableModel.getRowCount() <= 0;
 
  132             artifactsTable.setRowSelectionInterval(0, 0);
 
  134             artifactsTable.clearSelection();
 
  144     @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
 
  146     void addArtifacts(List<BlackboardArtifact> artifactList) {
 
  147         if (!artifactList.isEmpty()) {
 
  148             artifactsTable.setModel(tableModel);
 
  149             tableModel.setContents(artifactList);
 
  151             artifactsTable.setModel(
new EmptyTableModel());
 
  153         artifactsTable.validate();
 
  154         artifactsTable.repaint();
 
  155         tableModel.fireTableDataChanged();
 
  161     @ThreadConfined(type = ThreadConfined.ThreadType.AWT)
 
  164         addArtifacts(
new ArrayList<>());
 
  173     private void initComponents() {
 
  175         javax.swing.JScrollPane jScrollPane1 = 
new javax.swing.JScrollPane();
 
  176         artifactsTable = 
new javax.swing.JTable();
 
  179         setPreferredSize(
new java.awt.Dimension(350, 10));
 
  181         jScrollPane1.setBorder(null);
 
  182         jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
 
  183         jScrollPane1.setMinimumSize(
new java.awt.Dimension(0, 0));
 
  184         jScrollPane1.setPreferredSize(
new java.awt.Dimension(350, 10));
 
  186         artifactsTable.setAutoCreateRowSorter(
true);
 
  187         artifactsTable.setModel(tableModel);
 
  188         artifactsTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
 
  189         jScrollPane1.setViewportView(artifactsTable);
 
  191         javax.swing.GroupLayout layout = 
new javax.swing.GroupLayout(
this);
 
  192         this.setLayout(layout);
 
  193         layout.setHorizontalGroup(
 
  194             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  195             .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 
  197         layout.setVerticalGroup(
 
  198             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
 
  199             .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
 
  209         private static final long serialVersionUID = 1L;
 
  210         private final List<BlackboardArtifact> artifactList = 
new ArrayList<>();
 
  231             artifactsTable.clearSelection();
 
  232             artifactList.clear();
 
  233             artifactList.addAll(artifacts);
 
  239             return artifactList.size();
 
  261             return artifactList.get(rowIndex);
 
  265         @NbBundle.Messages({
"ArtifactsListPanel.value.noValue=No value available."})
 
  272                         if (!StringUtils.isBlank(bba.getDisplayString())) {
 
  274                             if (!StringUtils.isBlank(stringFromAttribute)) {
 
  275                                 return stringFromAttribute;
 
  281                     logger.log(Level.WARNING, 
"Error getting attributes for artifact " + artifact.
getArtifactID(), ex);
 
  284             return Bundle.ArtifactsListPanel_value_noValue();
 
  306             } 
else if (columnIndex == 1) {
 
  311                         return FilenameUtils.
getName(bba.getDisplayString());
 
  314                     return bba.getDisplayString();
 
  340                 if (columnIndex == 0 && bba.getAttributeType().getTypeName().startsWith(
"TSK_DATETIME") && !StringUtils.isBlank(bba.getDisplayString())) {
 
  343                     return bba.getDisplayString();
 
  345                     return bba.getDisplayString();
 
  347                     return bba.getDisplayString();
 
  350             return Bundle.ArtifactsListPanel_value_noValue();
 
  354         @NbBundle.Messages({
"ArtifactsListPanel.titleColumn.name=Title",
 
  355             "ArtifactsListPanel.fileNameColumn.name=Name",
 
  356             "ArtifactsListPanel.dateColumn.name=Date/Time",
 
  357             "ArtifactsListPanel.urlColumn.name=URL",
 
  358             "ArtifactsListPanel.termColumn.name=Term",
 
  359             "ArtifactsListPanel.mimeTypeColumn.name=MIME Type"})
 
  364                     return Bundle.ArtifactsListPanel_dateColumn_name();
 
  366                     if (artifactType != null) {
 
  367                         switch (artifactType) {
 
  369                             case TSK_WEB_DOWNLOAD:
 
  370                                 return Bundle.ArtifactsListPanel_fileNameColumn_name();
 
  372                                 return Bundle.ArtifactsListPanel_urlColumn_name();
 
  373                             case TSK_WEB_SEARCH_QUERY:
 
  374                                 return Bundle.ArtifactsListPanel_termColumn_name();
 
  378                     return Bundle.ArtifactsListPanel_titleColumn_name();
 
  380                     return Bundle.ArtifactsListPanel_mimeTypeColumn_name();
 
  392         private static final long serialVersionUID = 1L;
 
  404         @NbBundle.Messages({
"ArtifactsListPanel.noResultsFound.text=No results found"})
 
  407             return Bundle.ArtifactsListPanel_noResultsFound_text();
 
  414                     return Bundle.ArtifactsListPanel_dateColumn_name();
 
  416                     return Bundle.ArtifactsListPanel_titleColumn_name();
 
  418                     return Bundle.ArtifactsListPanel_mimeTypeColumn_name();
 
  427     private javax.swing.JTable artifactsTable;
 
Object getValueAt(int rowIndex, int columnIndex)
String getFallbackValue(int rowIndex, int columnIndex)
static String getFormattedTime(long epochTime)
AbstractFile getAbstractFileById(long id)
Object getValueAt(int rowIndex, int columnIndex)
SleuthkitCase getSleuthkitCase()
String getStringForColumn(BlackboardArtifact artifact, BlackboardAttribute bba, int columnIndex)
List< BlackboardAttribute > getAttributes()
static Case getCurrentCase()
String getColumnName(int column)
final BlackboardArtifact.ARTIFACT_TYPE artifactType
String getColumnName(int column)