19 package org.sleuthkit.autopsy.contentviewers;
21 import java.awt.BorderLayout;
22 import java.awt.Component;
23 import java.util.List;
25 import java.util.Objects;
26 import javax.swing.JPanel;
27 import javax.swing.JTable;
28 import javax.swing.ListSelectionModel;
29 import javax.swing.ScrollPaneConstants;
30 import javax.swing.SwingWorker;
31 import javax.swing.table.TableCellRenderer;
32 import javax.swing.table.TableColumnModel;
33 import org.netbeans.swing.etable.ETableColumn;
34 import org.netbeans.swing.etable.ETableColumnModel;
35 import org.netbeans.swing.outline.Outline;
36 import org.openide.explorer.ExplorerManager;
37 import org.openide.nodes.AbstractNode;
38 import org.openide.nodes.Children;
40 class SQLiteTableView
extends JPanel implements ExplorerManager.Provider {
42 private final org.openide.explorer.view.OutlineView outlineView;
43 private final Outline outline;
44 private final ExplorerManager explorerManager;
53 outlineView =
new org.openide.explorer.view.OutlineView();
54 add(outlineView, BorderLayout.CENTER);
55 outlineView.setPropertyColumns();
56 outlineView.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
57 outlineView.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
59 outline = outlineView.getOutline();
61 outline.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
62 outline.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
63 outline.setRowSelectionAllowed(
false);
64 outline.setRootVisible(
false);
66 explorerManager =
new ExplorerManager();
74 void setupTable(List<Map<String, Object>> tableRows) {
77 if (Objects.isNull(tableRows) || tableRows.isEmpty()) {
78 outlineView.setPropertyColumns();
82 Map<String, Object> row = tableRows.get(0);
83 String[] propStrings =
new String[row.size() * 2];
85 for (Map.Entry<String, Object> col : row.entrySet()) {
86 String colName = col.getKey();
87 propStrings[2 * i] = colName;
88 propStrings[2 * i + 1] = colName;
92 outlineView.setPropertyColumns(propStrings);
96 TableColumnModel columnModel = outline.getColumnModel();
97 ETableColumn column = (ETableColumn) columnModel.getColumn(0);
98 ((ETableColumnModel) columnModel).setColumnHidden(column,
true);
102 new SwingWorker<Boolean, Void>() {
104 protected Boolean doInBackground() throws Exception {
106 explorerManager.setRootContext(
new AbstractNode(Children.create(
new SQLiteTableRowFactory(tableRows),
true)));
111 protected void done() {
120 private void setColumnWidths() {
125 final int rows = Math.min(20, outline.getRowCount());
126 for (
int col = 1; col < outline.getColumnCount(); col++) {
127 int columnWidthLimit = 500;
128 int columnWidth = 50;
130 for (
int row = 0; row < rows; row++) {
131 TableCellRenderer renderer = outline.getCellRenderer(row, col);
132 Component comp = outline.prepareRenderer(renderer, row, col);
134 columnWidth = Math.max(comp.getPreferredSize().width, columnWidth);
137 columnWidth += 2 * margin + padding;
138 columnWidth = Math.min(columnWidth, columnWidthLimit);
139 outline.getColumnModel().getColumn(col).setPreferredWidth(columnWidth);
149 @SuppressWarnings(
"unchecked")
151 private
void initComponents() {
153 setLayout(
new java.awt.BorderLayout());
157 public ExplorerManager getExplorerManager() {
158 return explorerManager;