package org.rr.jeborker.gui; import java.util.ArrayList; import java.util.List; import javax.swing.JScrollPane; import javax.swing.event.ChangeEvent; import javax.swing.event.TableModelEvent; import javax.swing.table.TableModel; import org.rr.commons.swing.components.JRTable; import org.rr.jeborker.db.item.EbookPropertyItem; import org.rr.jeborker.gui.model.EbookPropertyDBTableModel; import org.rr.jeborker.gui.model.ReloadableTableModel; public class MainViewEbookTableComponentHandler { private JRTable mainTable; private JScrollPane mainTableScrollPane; private EbookPropertyDBTableModel ebookPropertyDBTableModel; public MainViewEbookTableComponentHandler(JRTable mainTable, JScrollPane mainTableScrollPane) { this.mainTable = mainTable; this.mainTableScrollPane = mainTableScrollPane; } public void clearSelection() { mainTable.clearSelection(); } public void editingStopped(ChangeEvent changeEvent) { mainTable.editingStopped(changeEvent); } public void setModel(TableModel ebookPropertyDBTableModel) { mainTable.setModel(ebookPropertyDBTableModel); if(ebookPropertyDBTableModel instanceof EbookPropertyDBTableModel) { this.ebookPropertyDBTableModel = (EbookPropertyDBTableModel) ebookPropertyDBTableModel; } } public void stopEdit() { mainTable.stopEdit(); } public ReloadableTableModel getModel() { return (ReloadableTableModel) mainTable.getModel(); } EbookPropertyDBTableModel getDBModel() { TableModel model = mainTable.getModel(); if(model instanceof EbookPropertyDBTableModel) { return (EbookPropertyDBTableModel) model; } return ebookPropertyDBTableModel; } public void refreshTableItem(int[] selectedRows) { TableModel model = getModel(); if(selectedRows == null || selectedRows.length == 0) { return; } else { int editingRow = mainTable.getEditingRow(); for (int i = 0; i < selectedRows.length; i++) { if(editingRow != -1 && editingRow == selectedRows[i]) { mainTable.stopEdit(); } if(model instanceof EbookPropertyDBTableModel) { ((EbookPropertyDBTableModel)model).reloadEbookPropertyItemAt(selectedRows[i]); } mainTable.tableChanged(new TableModelEvent(model, selectedRows[i])); } } } /** * Refresh the whole table. */ public void refreshTable() { final EbookPropertyDBTableModel model = (EbookPropertyDBTableModel) mainTable.getModel(); if(model instanceof EbookPropertyDBTableModel) { ((EbookPropertyDBTableModel)model).setDirty(); } if(mainTable.isEditing()) { mainTable.stopEdit(); } mainTable.tableChanged(new TableModelEvent(model)); if(mainTableScrollPane != null) { mainTableScrollPane.getVerticalScrollBar().setValue(0); } } /** * Refresh the given table rows. * @param rows The rows to be refreshed. * @param refreshMetadataSheet do also refresh the metadata sheet. */ public void refreshTableRows(final int[] rows) { final ReloadableTableModel model = getModel(); if (rows == null || rows.length == 0) { return; } else { int editingRow = mainTable.getEditingRow(); for (int i = 0; i < rows.length; i++) { if (editingRow != -1 && editingRow == rows[i]) { mainTable.editingStopped(null); } model.reloadEbookPropertyItemAt(rows[i]); mainTable.tableChanged(new TableModelEvent(model, rows[i])); } } } /** * Gets all selected rows from the main table. * @return all selected rows or an empty array if no row is selected. Never returns <code>null</code>. */ public int[] getSelectedRows() { if (mainTable != null) { int[] selectedRows = mainTable.getSelectedRows(); // if there is only one row this is always the selected one. if(selectedRows.length == 0 && mainTable.getRowCount() == 1) { return new int[1]; } return selectedRows; } else { return new int[0]; } } /** * Gets all selected items from the main table. * @return The selected items. Never returns <code>null</code>. */ public List<EbookPropertyItem> getSelectedEbookPropertyItems() { final int[] selectedRows = getSelectedRows(); final ArrayList<EbookPropertyItem> result = new ArrayList<>(selectedRows.length); for (int i = 0; i < selectedRows.length; i++) { EbookPropertyItem valueAt = (EbookPropertyItem) getModel().getValueAt(selectedRows[i], 0); result.add(valueAt); } return result; } /** * Gets all selected rows from the main table. * @return all selected rows or an empty array if no row is selected. Never returns <code>null</code>. */ public int[] getSelectedEbookPropertyItemRows() { if (mainTable != null) { final int[] selectedRows = getSelectedRows(); return selectedRows; } else { return new int[0]; } } public void repaint() { mainTable.repaint(); } public int getSelectedRowCount() { return mainTable.getSelectedRowCount(); } }