use of au.gov.asd.tac.constellation.views.tableview.api.UserTablePreferences in project constellation by constellation-app.
the class PreferencesMenu method loadPreferences.
/**
* Loads a saved table preferences JSON file and updates the table format
* (displayed column/column order and sort order) to match the values found.
* <p/>
* This method will place a lock on the table to prevent any updates to the
* preferences whilst this load is happening.
* <p/>
* This method will start work on the JavaFX thread to update certain parts
* of the table like column visibility. Once the method returns it is
* recommended that the current thread waits for that work to complete
* before initiating any other actions.
*/
protected void loadPreferences() {
synchronized (TABLE_LOCK) {
if (getTableViewTopComponent().getCurrentState() != null) {
// Load the local table preferences JSON file
final UserTablePreferences tablePrefs = TableViewPreferencesIoProvider.getPreferences(getTableViewTopComponent().getCurrentState().getElementType());
// cannot occur with 0 columns
if (tablePrefs == null || CollectionUtils.isEmpty(tablePrefs.getColumnOrder())) {
return;
}
final List<TableColumn<ObservableList<String>, ?>> newColumnOrder = new ArrayList<>();
// Loop through column names in the loaded preferences and add the
// associated columns to newColumnOrder (if found). Also set the
// found columns to visible.
tablePrefs.getColumnOrder().forEach(columnName -> getTable().getTableView().getColumns().stream().filter(column -> column.getText().equals(columnName)).forEachOrdered(column -> {
column.setVisible(true);
newColumnOrder.add(column);
}));
// Populate orderedColumns with entries from column index that match
// the names of the columns in the loaded preferences.
final List<Tuple<String, Attribute>> orderedColumns = newColumnOrder.stream().map(tableColumn -> {
for (final Column column : getTable().getColumnIndex()) {
if (tableColumn.getText().equals(column.getTableColumn().getText())) {
return column;
}
}
// column specified in the preferences
return null;
}).filter(Objects::nonNull).map(column -> Tuple.create(column.getAttributeNamePrefix(), column.getAttribute())).collect(Collectors.toList());
// Update the sort preferences
getActiveTableReference().saveSortDetails(tablePrefs.getSortColumn(), tablePrefs.getSortDirection());
try {
// Update the visibile columns and wait for the state plugin to complete its update
getActiveTableReference().updateVisibleColumns(getTableViewTopComponent().getCurrentGraph(), getTableViewTopComponent().getCurrentState(), orderedColumns, UpdateMethod.REPLACE).get(1000, TimeUnit.MILLISECONDS);
} catch (final InterruptedException ex) {
LOGGER.log(Level.WARNING, "Update state plugin was interrupted");
Thread.currentThread().interrupt();
} catch (final TimeoutException | ExecutionException ex) {
LOGGER.log(Level.WARNING, "Update state plugin failed to complete within the alloted time", ex);
}
// Update the page size menu selection and page size preferences
for (final Toggle t : getPageSizeToggle().getToggles()) {
final RadioMenuItem pageSizeOption = (RadioMenuItem) t;
if (Integer.parseInt(pageSizeOption.getText()) == tablePrefs.getMaxRowsPerPage()) {
pageSizeOption.setSelected(true);
getActiveTableReference().getUserTablePreferences().setMaxRowsPerPage(tablePrefs.getMaxRowsPerPage());
break;
}
}
}
}
}
Aggregations