mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-15 01:07:42 +00:00
Removed the db calls for the sql viewer from the edt
This commit is contained in:
parent
775e28a99f
commit
917acfd1d2
@ -32,11 +32,13 @@ import java.util.LinkedHashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javax.swing.JComboBox;
|
import javax.swing.JComboBox;
|
||||||
import javax.swing.JFileChooser;
|
import javax.swing.JFileChooser;
|
||||||
import javax.swing.JOptionPane;
|
import javax.swing.JOptionPane;
|
||||||
|
import javax.swing.SwingWorker;
|
||||||
import javax.swing.filechooser.FileNameExtensionFilter;
|
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||||
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.io.FilenameUtils;
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
@ -71,6 +73,8 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer {
|
|||||||
private int numRows; // num of rows in the selected table
|
private int numRows; // num of rows in the selected table
|
||||||
private int currPage = 0; // curr page of rows being displayed
|
private int currPage = 0; // curr page of rows being displayed
|
||||||
|
|
||||||
|
SwingWorker<?, ?> worker;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a file content viewer for SQLite database files.
|
* Constructs a file content viewer for SQLite database files.
|
||||||
*/
|
*/
|
||||||
@ -326,11 +330,17 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setFile(AbstractFile file) {
|
public void setFile(AbstractFile file) {
|
||||||
WindowManager.getDefault().getMainWindow().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
if (worker != null) {
|
||||||
sqliteDbFile = file;
|
worker.cancel(true);
|
||||||
initReader();
|
worker = null;
|
||||||
processSQLiteFile();
|
}
|
||||||
WindowManager.getDefault().getMainWindow().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
|
resetComponent();
|
||||||
|
|
||||||
|
if (file == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
processSQLiteFile(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -367,25 +377,40 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer {
|
|||||||
"SQLiteViewer.errorMessage.failedToQueryDatabase=The database tables in the file could not be read.",
|
"SQLiteViewer.errorMessage.failedToQueryDatabase=The database tables in the file could not be read.",
|
||||||
"SQLiteViewer.errorMessage.failedToinitJDBCDriver=The JDBC driver for SQLite could not be loaded.",
|
"SQLiteViewer.errorMessage.failedToinitJDBCDriver=The JDBC driver for SQLite could not be loaded.",
|
||||||
"# {0} - exception message", "SQLiteViewer.errorMessage.unexpectedError=An unexpected error occurred:\n{0).",})
|
"# {0} - exception message", "SQLiteViewer.errorMessage.unexpectedError=An unexpected error occurred:\n{0).",})
|
||||||
private void processSQLiteFile() {
|
private void processSQLiteFile(final AbstractFile file) {
|
||||||
try {
|
|
||||||
tablesDropdownList.removeAllItems();
|
|
||||||
|
|
||||||
Collection<String> dbTablesMap = viewReader.getTableNames();
|
WindowManager.getDefault().getMainWindow().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
|
||||||
if (dbTablesMap.isEmpty()) {
|
worker = new SQLiteViewerWorker(file) {
|
||||||
tablesDropdownList.addItem(Bundle.SQLiteViewer_comboBox_noTableEntry());
|
@Override
|
||||||
tablesDropdownList.setEnabled(false);
|
public void done() {
|
||||||
} else {
|
if (isCancelled()) {
|
||||||
dbTablesMap.forEach((tableName) -> {
|
return;
|
||||||
tablesDropdownList.addItem(tableName);
|
}
|
||||||
});
|
|
||||||
|
WorkerResults results;
|
||||||
|
try {
|
||||||
|
results = get();
|
||||||
|
sqliteDbFile = file;
|
||||||
|
viewReader = results.getReader();
|
||||||
|
tablesDropdownList.removeAllItems();
|
||||||
|
Collection<String> dbTablesMap = results.getDbTablesMap();
|
||||||
|
if (dbTablesMap.isEmpty()) {
|
||||||
|
tablesDropdownList.addItem(Bundle.SQLiteViewer_comboBox_noTableEntry());
|
||||||
|
tablesDropdownList.setEnabled(false);
|
||||||
|
} else {
|
||||||
|
dbTablesMap.forEach((tableName) -> {
|
||||||
|
tablesDropdownList.addItem(tableName);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
WindowManager.getDefault().getMainWindow().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
|
||||||
|
} catch (InterruptedException | ExecutionException ex) {
|
||||||
|
logger.log(Level.SEVERE, String.format("Failed to display SQL Viewer for file (%d)", file.getId()), ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLiteTableReaderException ex) {
|
};
|
||||||
logger.log(Level.WARNING, String.format("Unable to get table names "
|
|
||||||
+ "from sqlite file [%s] with id=[%d].", sqliteDbFile.getName(),
|
worker.execute();
|
||||||
sqliteDbFile.getId(), ex.getMessage()));
|
|
||||||
MessageNotifyUtil.Message.error(Bundle.SQLiteViewer_errorMessage_failedToQueryDatabase());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NbBundle.Messages({"# {0} - tableName",
|
@NbBundle.Messages({"# {0} - tableName",
|
||||||
@ -455,8 +480,8 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer {
|
|||||||
* data type. For our use, we want to define an action when encountering
|
* data type. For our use, we want to define an action when encountering
|
||||||
* column names and an action for all other data types.
|
* column names and an action for all other data types.
|
||||||
*/
|
*/
|
||||||
private void initReader() {
|
private SQLiteTableReader initReader(AbstractFile sqliteFile) {
|
||||||
viewReader = new SQLiteTableReader.Builder(sqliteDbFile)
|
return new SQLiteTableReader.Builder(sqliteFile)
|
||||||
.forAllColumnNames((columnName) -> {
|
.forAllColumnNames((columnName) -> {
|
||||||
currentTableHeader.add(columnName);
|
currentTableHeader.add(columnName);
|
||||||
})
|
})
|
||||||
@ -506,21 +531,44 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer {
|
|||||||
"SQLiteViewer.exportTableToCsv.TableName=Table name: "
|
"SQLiteViewer.exportTableToCsv.TableName=Table name: "
|
||||||
})
|
})
|
||||||
private void exportTableToCsv(File file) {
|
private void exportTableToCsv(File file) {
|
||||||
File csvFile = new File(file.toString() + ".csv");
|
final File csvFile = new File(file.toString() + ".csv");
|
||||||
String tableName = (String) this.tablesDropdownList.getSelectedItem();
|
final String tableName = (String) this.tablesDropdownList.getSelectedItem();
|
||||||
try (FileOutputStream out = new FileOutputStream(csvFile, false)) {
|
|
||||||
try (SQLiteTableReader sqliteStream = new SQLiteTableReader.Builder(sqliteDbFile)
|
SwingWorker<String, Void> csvWorker = new SwingWorker<String, Void>() {
|
||||||
.forAllColumnNames(getColumnNameCSVStrategy(out))
|
@Override
|
||||||
.forAllTableValues(getForAllCSVStrategy(out)).build()) {
|
protected String doInBackground() throws Exception {
|
||||||
totalColumnCount = sqliteStream.getColumnCount(tableName);
|
try (FileOutputStream out = new FileOutputStream(csvFile, false)) {
|
||||||
sqliteStream.read(tableName);
|
try (SQLiteTableReader sqliteStream = new SQLiteTableReader.Builder(sqliteDbFile)
|
||||||
|
.forAllColumnNames(getColumnNameCSVStrategy(out))
|
||||||
|
.forAllTableValues(getForAllCSVStrategy(out)).build()) {
|
||||||
|
totalColumnCount = sqliteStream.getColumnCount(tableName);
|
||||||
|
sqliteStream.read(tableName);
|
||||||
|
}
|
||||||
|
} catch (IOException | SQLiteTableReaderException | RuntimeException ex) {
|
||||||
|
logger.log(Level.WARNING, String.format("Failed to export table [%s]"
|
||||||
|
+ " to CSV in sqlite file '%s' (objId=%d)", tableName, sqliteDbFile.getName(),
|
||||||
|
sqliteDbFile.getId()), ex.getMessage()); //NON-NLS
|
||||||
|
|
||||||
|
return Bundle.SQLiteViewer_exportTableToCsv_write_errText();
|
||||||
|
}
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
} catch (IOException | SQLiteTableReaderException | RuntimeException ex) {
|
|
||||||
logger.log(Level.WARNING, String.format("Failed to export table [%s]"
|
@Override
|
||||||
+ " to CSV in sqlite file '%s' (objId=%d)", tableName, sqliteDbFile.getName(),
|
public void done() {
|
||||||
sqliteDbFile.getId()), ex.getMessage()); //NON-NLS
|
try {
|
||||||
MessageNotifyUtil.Message.error(Bundle.SQLiteViewer_exportTableToCsv_write_errText());
|
String message = get();
|
||||||
}
|
if (!message.isEmpty()) {
|
||||||
|
MessageNotifyUtil.Message.error(message);
|
||||||
|
}
|
||||||
|
} catch (InterruptedException | ExecutionException ex) {
|
||||||
|
logger.log(Level.SEVERE, "Failure occurred writing sql csv file.", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
csvWorker.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -622,4 +670,49 @@ class SQLiteViewer extends javax.swing.JPanel implements FileTypeViewer {
|
|||||||
public boolean isSupported(AbstractFile file) {
|
public boolean isSupported(AbstractFile file) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SwingWorker that will gather the data needed to display the given
|
||||||
|
* file in the SQL viewer.
|
||||||
|
*/
|
||||||
|
private class SQLiteViewerWorker extends SwingWorker<WorkerResults, Void> {
|
||||||
|
|
||||||
|
private final AbstractFile file;
|
||||||
|
|
||||||
|
SQLiteViewerWorker(AbstractFile file) {
|
||||||
|
this.file = file;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected WorkerResults doInBackground() throws Exception {
|
||||||
|
SQLiteTableReader reader = initReader(file);
|
||||||
|
Collection<String> dbTablesMap = reader.getTableNames();
|
||||||
|
|
||||||
|
return new WorkerResults(reader, dbTablesMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Stores the data gather from the
|
||||||
|
*/
|
||||||
|
private class WorkerResults {
|
||||||
|
|
||||||
|
private final SQLiteTableReader reader;
|
||||||
|
private final Collection<String> dbTablesMap;
|
||||||
|
|
||||||
|
WorkerResults(SQLiteTableReader reader, Collection<String> dbTablesMap) {
|
||||||
|
this.reader = reader;
|
||||||
|
this.dbTablesMap = dbTablesMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
SQLiteTableReader getReader() {
|
||||||
|
return reader;
|
||||||
|
}
|
||||||
|
|
||||||
|
Collection<String> getDbTablesMap() {
|
||||||
|
return dbTablesMap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user