summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Bauer2015-08-03 18:21:40 +0200
committerJonathan Bauer2015-08-03 18:21:40 +0200
commit59de878b3a3ec171b12957bdc119827fefabd9ab (patch)
tree60ffd0b45f2464fa88b5a575176be5b304ab585b
parentMerge branch 'v1.1' of git.openslx.org:openslx-ng/tutor-module into v1.1 (diff)
downloadtutor-module-59de878b3a3ec171b12957bdc119827fefabd9ab.tar.gz
tutor-module-59de878b3a3ec171b12957bdc119827fefabd9ab.tar.xz
tutor-module-59de878b3a3ec171b12957bdc119827fefabd9ab.zip
[client] add column classes to generic ListTable
better handling of view vs model idnex getters
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java30
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java8
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java4
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java4
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ListTable.java59
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java4
6 files changed, 93 insertions, 16 deletions
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<UserImagePermissions> {
+ 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<UserImagePermissions> {
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<ImageSummaryRead> {
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<ImageSummaryRead> {
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<UserLecturePermissions> {
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<LectureSummary> {
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<T> extends JTable {
private final ListModel model;
private final TableRowSorter<ListModel> sorter;
+
private List<RowSorter.SortKey> 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<ListModel>(model);
this.adjuster = new TableColumnAdjuster(this, 5);
this.setModel(model);
@@ -44,17 +46,21 @@ public abstract class ListTable<T> 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<T> data, boolean sort) {
@@ -74,6 +80,40 @@ public abstract class ListTable<T> extends JTable {
public TableRowSorter<ListModel> 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<T> extends JTable {
private final String[] columnNames;
+ private final Class<?>[] columnClasses;
+
protected List<T> 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<T> list) {
@@ -110,6 +154,9 @@ public abstract class ListTable<T> 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);
}