From 59de878b3a3ec171b12957bdc119827fefabd9ab Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Mon, 3 Aug 2015 18:21:40 +0200 Subject: [client] add column classes to generic ListTable better handling of view vs model idnex getters --- .../gui/control/table/ImagePermissionTable.java | 30 ++++++++++- .../dozmod/gui/control/table/ImageTable.java | 8 +-- .../gui/control/table/LecturePermissionTable.java | 4 +- .../dozmod/gui/control/table/LectureTable.java | 4 +- .../dozmod/gui/control/table/ListTable.java | 59 +++++++++++++++++++--- .../openslx/dozmod/gui/window/ImageListWindow.java | 4 +- 6 files changed, 93 insertions(+), 16 deletions(-) (limited to 'dozentenmodul/src/main/java') diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java index bfab9ede..9092e8af 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java @@ -1,5 +1,6 @@ package org.openslx.dozmod.gui.control.table; +import org.apache.log4j.Logger; import org.openslx.bwlp.thrift.iface.ImagePermissions; import org.openslx.dozmod.gui.control.table.ImagePermissionTable.UserImagePermissions; import org.openslx.dozmod.thrift.UserCache; @@ -8,15 +9,19 @@ import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") public class ImagePermissionTable extends ListTable { + private final static Logger LOGGER = Logger.getLogger(ImagePermissionTable.class); + private static String[] columnNames = { "Benutzer", "Link", "Download", "Bearbeiten", "Admin" }; + private static Class[] columnClasses = { String.class, Boolean.class, Boolean.class, Boolean.class, Boolean.class }; + public ImagePermissionTable() { - super(columnNames); + super(columnNames, columnClasses); } @Override protected Object getValueAtInternal(int rowIndex, int columnIndex) { - UserImagePermissions row = get(rowIndex); + UserImagePermissions row = getModelRow(rowIndex); if (columnIndex == 0) return FormatHelper.userName(UserCache.find(row.userId)); if (columnIndex == 1) @@ -29,6 +34,27 @@ public class ImagePermissionTable extends ListTable { return row.permissions.admin; throw new IndexOutOfBoundsException(); } + @Override + public boolean isCellEditable(int row, int col) { + // TODO actual permission checks + return col != 0; + } + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + // aValue must be boolean + if (!(aValue instanceof Boolean)) return; + // TODO convert index to model index + UserImagePermissions row = getViewRow(rowIndex); + if (columnIndex == 1) + row.permissions.link = (boolean) aValue; + if (columnIndex == 2) + row.permissions.download = (boolean) aValue; + if (columnIndex == 3) + row.permissions.edit = (boolean) aValue; + if (columnIndex == 4) + row.permissions.admin = (boolean) aValue; + return; + } /** * Helper class for linking UserIds to permissions of an image. diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java index b6ccba23..dfe0858a 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java @@ -11,13 +11,16 @@ public class ImageTable extends ListTable { private static String[] columnNames = { "Name", "OS", "Verantwortlicher", "Letztes Update", "Größe" }; + private static Class[] columnClasses = + { String.class, String.class, String.class, String.class, String.class }; + public ImageTable() { - super(columnNames); + super(columnNames, columnClasses); } @Override protected Object getValueAtInternal(int rowIndex, int columnIndex) { - ImageSummaryRead row = get(rowIndex); + ImageSummaryRead row = getModelRow(rowIndex); if (columnIndex == 0) return row.getImageName(); if (columnIndex == 1) @@ -30,5 +33,4 @@ public class ImageTable extends ListTable { return row.getCurrentVersionId() == null ? "-" : FormatHelper.bytes(row.getFileSize(), false); throw new IndexOutOfBoundsException(); } - } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java index 67a7e53d..28ff9f9b 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java @@ -11,12 +11,12 @@ public class LecturePermissionTable extends ListTable { private static String[] columnNames = { "Benutzer", "Bearbeiten", "Admin" }; public LecturePermissionTable() { - super(columnNames); + super(columnNames, null); } @Override protected Object getValueAtInternal(int rowIndex, int columnIndex) { - UserLecturePermissions row = get(rowIndex); + UserLecturePermissions row = getModelRow(rowIndex); if (columnIndex == 0) return FormatHelper.userName(UserCache.find(row.userId)); if (columnIndex == 1) diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java index dc2c93f8..97e553bc 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java @@ -10,12 +10,12 @@ public class LectureTable extends ListTable { private static String[] columnNames = { "Name", "Verantwortlicher" }; public LectureTable() { - super(columnNames); + super(columnNames, null); } @Override protected Object getValueAtInternal(int rowIndex, int columnIndex) { - LectureSummary row = get(rowIndex); + LectureSummary row = getModelRow(rowIndex); if (columnIndex == 0) return row.getLectureName(); if (columnIndex == 1) diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ListTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ListTable.java index cf1a4c5f..18f3d015 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ListTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ListTable.java @@ -10,6 +10,8 @@ import javax.swing.RowSorter; import javax.swing.SortOrder; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; import javax.swing.table.TableRowSorter; import org.openslx.dozmod.gui.helper.TableColumnAdjuster; @@ -20,14 +22,14 @@ public abstract class ListTable extends JTable { private final ListModel model; private final TableRowSorter sorter; + private List sortKeys = new ArrayList<>(); private final TableColumnAdjuster adjuster; - public ListTable(String[] columnNames) { - //System.setProperty("sun.awt.noerasebackground", "true"); needed? + public ListTable(String[] columnNames, Class[] columnClasses) { super(); - this.model = new ListModel(columnNames); + this.model = new ListModel(columnNames, columnClasses); this.sorter = new TableRowSorter(model); this.adjuster = new TableColumnAdjuster(this, 5); this.setModel(model); @@ -44,17 +46,21 @@ public abstract class ListTable extends JTable { protected abstract Object getValueAtInternal(int rowIndex, int columnIndex); - public T get(int rowIndex) { + public T getModelRow(int rowIndex) { if (rowIndex < 0 || rowIndex >= model.getRowCount()) throw new IndexOutOfBoundsException(); return model.data.get(rowIndex); } + public T getViewRow(int rowIndex) { + return getModelRow(convertRowIndexToModel(rowIndex)); + } + public T getSelectedItem() { int rowIndex = getSelectedRow(); if (rowIndex == -1) return null; - return get(convertRowIndexToModel(rowIndex)); + return getViewRow(rowIndex); } public void setData(List data, boolean sort) { @@ -74,6 +80,40 @@ public abstract class ListTable extends JTable { public TableRowSorter getRowSorter() { return sorter; } + private Class editingClass; + + @Override + public TableCellRenderer getCellRenderer(int row, int column) { + editingClass = null; + int modelColumn = convertColumnIndexToModel(column); + if (modelColumn >= 1) { + Class rowClass = getModel().getValueAt(row, modelColumn).getClass(); + return getDefaultRenderer(rowClass); + } else { + return super.getCellRenderer(row, column); + } + } + + @Override + public TableCellEditor getCellEditor(int row, int column) { + editingClass = null; + int modelColumn = convertColumnIndexToModel(column); + if (modelColumn > 0) { + editingClass = getModel().getValueAt(row, modelColumn).getClass(); + return getDefaultEditor(editingClass); + } else { + return super.getCellEditor(row, column); + } + } + // This method is also invoked by the editor when the value in the editor + // component is saved in the TableModel. The class was saved when the + // editor was invoked so the proper class can be created. + + @Override + public Class getColumnClass(int column) { + return editingClass != null ? editingClass : model.getColumnClass(column); + } + /** * Model for our table @@ -82,10 +122,14 @@ public abstract class ListTable extends JTable { private final String[] columnNames; + private final Class[] columnClasses; + protected List data = null; - public ListModel(String[] columnNames) { + public ListModel(String[] columnNames, Class[] columnClasses) { this.columnNames = columnNames; + this.columnClasses = columnClasses; + // TODO check same length or IllegalArgumentException } public void setData(List list) { @@ -110,6 +154,9 @@ public abstract class ListTable extends JTable { @Override public Class getColumnClass(int c) { + if (columnClasses != null && c < columnClasses.length) { + return columnClasses[c]; + } return String.class; } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java index 65084021..af70b22b 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java @@ -6,6 +6,7 @@ import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.List; +import java.util.regex.PatternSyntaxException; import javax.swing.JFrame; import javax.swing.JTextField; @@ -41,6 +42,7 @@ public class ImageListWindow extends ImageListWindowLayout { // filter the objects in the table depending on the search field searchTextField.getDocument().addDocumentListener(new DocumentListener() { + @Override public void removeUpdate(DocumentEvent e) { changedUpdate(e); @@ -56,7 +58,7 @@ public class ImageListWindow extends ImageListWindowLayout { // stuff try { imageTable.getRowSorter().setRowFilter(RowFilter.regexFilter("(?i)"+searchTextField.getText(), 0, 1, 2)); - } catch (Exception ex) { + } catch (IllegalArgumentException ex) { // TODO set background color of search field to something redish searchTextField.setBackground(Color.RED); } -- cgit v1.2.3-55-g7522