summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table
diff options
context:
space:
mode:
authorSimon Rettberg2015-08-27 11:00:38 +0200
committerSimon Rettberg2015-08-27 11:00:38 +0200
commitba9fe6f36af0fbf576ba136cbf22bf2e005a1733 (patch)
tree8354e9915c39dc008b13e02d8c416735772e43a8 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table
parent[client] reworked ThriftActions.deleteImageBase and deleteImageVersion (diff)
downloadtutor-module-ba9fe6f36af0fbf576ba136cbf22bf2e005a1733.tar.gz
tutor-module-ba9fe6f36af0fbf576ba136cbf22bf2e005a1733.tar.xz
tutor-module-ba9fe6f36af0fbf576ba136cbf22bf2e005a1733.zip
[client] Changes to column handling in ListTable
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImagePermissionTable.java26
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java51
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageVersionTable.java47
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LecturePermissionTable.java21
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java48
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ListTable.java101
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/UserTable.java11
7 files changed, 168 insertions, 137 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 869e0f1a..cec937c2 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,6 +1,5 @@
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.cache.UserCache;
@@ -9,28 +8,27 @@ 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 };
+ private static final ListTableColumn COL_USER = new ListTableColumn("Benutzer");
+ private static final ListTableColumn COL_LINK = new ListTableColumn(Boolean.class, "Link");
+ private static final ListTableColumn COL_DOWNLOAD = new ListTableColumn(Boolean.class, "Download");
+ private static final ListTableColumn COL_EDIT = new ListTableColumn(Boolean.class, "Edit");
+ private static final ListTableColumn COL_ADMIN = new ListTableColumn(Boolean.class, "Admin");
public ImagePermissionTable() {
- super(columnNames, columnClasses);
+ super(COL_USER, COL_LINK, COL_DOWNLOAD, COL_EDIT, COL_ADMIN);
}
@Override
- protected Object getValueAtInternal(UserImagePermissions row, int columnIndex) {
- if (columnIndex == 0)
+ protected Object getValueAtInternal(UserImagePermissions row, ListTableColumn column) {
+ if (column == COL_USER)
return FormatHelper.userName(UserCache.find(row.userId));
- if (columnIndex == 1)
+ if (column == COL_LINK)
return row.permissions.link;
- if (columnIndex == 2)
+ if (column == COL_DOWNLOAD)
return row.permissions.download;
- if (columnIndex == 3)
+ if (column == COL_EDIT)
return row.permissions.edit;
- if (columnIndex == 4)
+ if (column == COL_ADMIN)
return row.permissions.admin;
throw new IndexOutOfBoundsException();
}
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 9db22ed0..9f757592 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,14 +11,16 @@ import org.openslx.dozmod.util.FormatHelper;
@SuppressWarnings("serial")
public class ImageTable extends ListTable<ImageSummaryRead> {
- private static String[] columnNames = { "Name", "OS", "Besitzer", "Letztes Update", "Größe", "Valid",
- "Vorlage" };
-
- private static Class<?>[] columnClasses = { String.class, String.class, String.class, Long.class,
- Long.class, Boolean.class, Boolean.class };
+ private static final ListTableColumn COL_TEMPLATE = new ListTableColumn(Boolean.class, "Vorlage");
+ private static final ListTableColumn COL_USABLE = new ListTableColumn(Boolean.class, "Verwendbar");
+ private static final ListTableColumn COL_SIZE = new ListTableColumn(Long.class, "Größe");
+ private static final ListTableColumn COL_LASTCHANGE = new ListTableColumn(Long.class, "Geändert");
+ private static final ListTableColumn COL_OWNER = new ListTableColumn("Besitzer");
+ private static final ListTableColumn COL_OS = new ListTableColumn("OS");
+ private static final ListTableColumn COL_NAME = new ListTableColumn("Name");
public ImageTable() {
- super(columnNames, columnClasses, new Comparator<ImageSummaryRead>() {
+ super(new Comparator<ImageSummaryRead>() {
@Override
public int compare(ImageSummaryRead o1, ImageSummaryRead o2) {
if (o1 == null && o2 == null)
@@ -29,7 +31,7 @@ public class ImageTable extends ListTable<ImageSummaryRead> {
return -1;
return o1.imageBaseId.compareTo(o2.imageBaseId);
}
- });
+ }, COL_NAME, COL_OS, COL_OWNER, COL_LASTCHANGE, COL_SIZE, COL_USABLE, COL_TEMPLATE);
// first column doesn't have to be set, because standard comparator already compares strings
// second column, compares the OS
@@ -43,42 +45,37 @@ public class ImageTable extends ListTable<ImageSummaryRead> {
// return the right value of our image (row) depending on given column
@Override
- protected Object getValueAtInternal(ImageSummaryRead row, int columnIndex) {
- if (columnIndex == 0)
+ protected Object getValueAtInternal(ImageSummaryRead row, ListTableColumn column) {
+ if (column == COL_NAME)
return row.getImageName();
- if (columnIndex == 1)
+ if (column == COL_OS)
return row.getOsId();
- if (columnIndex == 2)
+ if (column == COL_OWNER)
return row.getOwnerId();
- if (columnIndex == 3)
+ if (column == COL_LASTCHANGE)
return row.getUpdateTime();
- if (columnIndex == 4)
+ if (column == COL_SIZE)
return row.getFileSize();
- if (columnIndex == 5)
+ if (column == COL_USABLE)
return row.isValid;
- if (columnIndex == 6)
+ if (column == COL_TEMPLATE)
return row.isTemplate;
throw new IndexOutOfBoundsException();
}
@Override
- public Object modelValueToDisplayFormat(Object value, int column) {
- switch (column) {
- case 0:
- case 5:
- case 6:
+ public Object modelValueToDisplayFormat(Object value, ListTableColumn column) {
+ if (column == COL_NAME || column == COL_USABLE || column == COL_TEMPLATE)
return value;
- case 1:
+ if (column == COL_OS)
return FormatHelper.osName(MetaDataCache.getOsById((int) value));
- case 2:
+ if (column == COL_OWNER)
return FormatHelper.userName(UserCache.find((String) value));
- case 3:
+ if (column == COL_LASTCHANGE)
return FormatHelper.shortDate((long) value);
- case 4:
+ if (column == COL_SIZE)
return FormatHelper.bytes((long) value, false);
- default:
- throw new IndexOutOfBoundsException();
- }
+ throw new IndexOutOfBoundsException();
}
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageVersionTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageVersionTable.java
index 2cc507c0..fdd2caeb 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageVersionTable.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageVersionTable.java
@@ -1,6 +1,5 @@
package org.openslx.dozmod.gui.control.table;
-import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.ImageVersionDetails;
import org.openslx.dozmod.thrift.cache.UserCache;
import org.openslx.dozmod.util.FormatHelper;
@@ -8,30 +7,42 @@ import org.openslx.dozmod.util.FormatHelper;
@SuppressWarnings("serial")
public class ImageVersionTable extends ListTable<ImageVersionDetails> {
- private final static Logger LOGGER = Logger.getLogger(ImageVersionTable.class);
-
- private static String[] columnNames = { "Datum", "Uploader", "Valid", "Größe", "Id" };
-
- private static Class<?>[] columnClasses = { String.class, String.class, Boolean.class, String.class,
- String.class };
+ private static final ListTableColumn COL_CREATED = new ListTableColumn(Long.class, "Erstellungszeitpunkt");
+ private static final ListTableColumn COL_UPLOADER = new ListTableColumn("Ersteller");
+ private static final ListTableColumn COL_VALID = new ListTableColumn(Boolean.class, "Verwendbar");
+ private static final ListTableColumn COL_SIZE = new ListTableColumn(Long.class, "Größe");
+ private static final ListTableColumn COL_ID = new ListTableColumn("Interne ID");
public ImageVersionTable() {
- super(columnNames, columnClasses);
+ super(COL_CREATED, COL_UPLOADER, COL_VALID, COL_SIZE, COL_ID);
}
@Override
- protected Object getValueAtInternal(ImageVersionDetails row, int columnIndex) {
- if (columnIndex == 0)
- return FormatHelper.longDate(row.getCreateTime());
- if (columnIndex == 1)
- return FormatHelper.userName(UserCache.find(row.getUploaderId()));
- ;
- if (columnIndex == 2)
+ protected Object getValueAtInternal(ImageVersionDetails row, ListTableColumn column) {
+ if (column == COL_CREATED)
+ return row.getCreateTime();
+ if (column == COL_UPLOADER)
+ return row.getUploaderId();
+ if (column == COL_VALID)
return row.isValid;
- if (columnIndex == 3)
- return FormatHelper.bytes(row.getFileSize(), false);
- if (columnIndex == 4)
+ if (column == COL_SIZE)
+ return row.getFileSize();
+ if (column == COL_ID)
return row.getVersionId();
throw new IndexOutOfBoundsException();
}
+
+ @Override
+ public Object modelValueToDisplayFormat(Object value, ListTableColumn column) {
+ if (column == COL_VALID || column == COL_ID)
+ return value;
+ if (column == COL_CREATED)
+ return FormatHelper.longDate((long) value);
+ if (column == COL_UPLOADER)
+ return FormatHelper.userName(UserCache.find((String) value));
+ if (column == COL_SIZE)
+ return FormatHelper.bytes((long) value, 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 fe3b800c..8279dba9 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
@@ -8,33 +8,36 @@ import org.openslx.dozmod.util.FormatHelper;
@SuppressWarnings("serial")
public class LecturePermissionTable extends ListTable<UserLecturePermissions> {
- private static String[] columnNames = { "Benutzer", "Bearbeiten", "Admin" };
-
- private static Class<?>[] columnClasses = { String.class, Boolean.class, Boolean.class};
+ private static final ListTableColumn COL_USER = new ListTableColumn("Benutzer");
+ private static final ListTableColumn COL_EDIT = new ListTableColumn(Boolean.class, "Edit");
+ private static final ListTableColumn COL_ADMIN = new ListTableColumn(Boolean.class, "Admin");
public LecturePermissionTable() {
- super(columnNames, columnClasses);
+ super(COL_USER, COL_EDIT, COL_ADMIN);
}
@Override
- protected Object getValueAtInternal(UserLecturePermissions row, int columnIndex) {
- if (columnIndex == 0)
+ protected Object getValueAtInternal(UserLecturePermissions row, ListTableColumn column) {
+ if (column == COL_USER)
return FormatHelper.userName(UserCache.find(row.userId));
- if (columnIndex == 1)
+ if (column == COL_EDIT)
return row.permissions.edit;
- if (columnIndex == 2)
+ if (column == COL_ADMIN)
return row.permissions.admin;
throw new IndexOutOfBoundsException();
}
+
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
// TODO actual permission checks
return columnIndex != 0;
}
+
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
// aValue must be boolean
- if (!(aValue instanceof Boolean)) return;
+ if (!(aValue instanceof Boolean))
+ return;
UserLecturePermissions row = getViewRow(rowIndex);
if (columnIndex == 1)
row.permissions.edit = (boolean) aValue;
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 22771307..4f849e86 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
@@ -16,16 +16,19 @@ import org.openslx.dozmod.util.FormatHelper;
@SuppressWarnings("serial")
public class LectureTable extends ListTable<LectureSummary> {
- private static String[] columnNames = { "Name", "Besitzer", "Startzeit", "Endzeit", "Aktiviert", "Gültig" };
- private static Class<?>[] columnClasses = { String.class, String.class, Long.class, Long.class,
- Boolean.class, Boolean.class };
+ private static final ListTableColumn COL_NAME = new ListTableColumn("Name");
+ private static final ListTableColumn COL_OWNER = new ListTableColumn("Besitzer");
+ private static final ListTableColumn COL_STARTTIME = new ListTableColumn(Long.class, "Startzeit");
+ private static final ListTableColumn COL_ENDTIME = new ListTableColumn(Long.class, "Ablaufzeitpunkt");
+ private static final ListTableColumn COL_ENABLED = new ListTableColumn(Boolean.class, "Aktiviert");
+ private static final ListTableColumn COL_VALID = new ListTableColumn(Boolean.class, "VM gültig");
private final Font boldFont;
private final Color invalidColor;
public LectureTable() {
- super(columnNames, columnClasses);
+ super(COL_NAME, COL_OWNER, COL_STARTTIME, COL_ENDTIME, COL_ENABLED, COL_VALID);
// first column doesn't have to be set, because standard comparator already compares strings
// second column compares the owner
getRowSorter().setComparator(1, Sorters.userNameById);
@@ -37,31 +40,32 @@ public class LectureTable extends ListTable<LectureSummary> {
}
@Override
- protected Object getValueAtInternal(LectureSummary row, int columnIndex) {
- if (columnIndex == 0)
+ protected Object getValueAtInternal(LectureSummary row, ListTableColumn columnIndex) {
+ if (columnIndex == COL_NAME)
return row.getLectureName();
- if (columnIndex == 1)
+ if (columnIndex == COL_OWNER)
return row.getOwnerId();
- if (columnIndex == 2)
+ if (columnIndex == COL_STARTTIME)
return row.getStartTime();
- if (columnIndex == 3)
+ if (columnIndex == COL_ENDTIME)
return row.getEndTime();
- if (columnIndex == 4)
+ if (columnIndex == COL_ENABLED)
return row.isIsEnabled();
- if (columnIndex == 5)
+ if (columnIndex == COL_VALID)
return row.isIsImageVersionUsable();
throw new IndexOutOfBoundsException();
}
@Override
- public void prepareRenderHook(Component component, LectureSummary row, int column, boolean isSelected) {
+ public void prepareRenderHook(Component component, LectureSummary row, ListTableColumn column,
+ boolean isSelected) {
Color fgOverride = null;
if (Session.getUserId().equals(row.ownerId)) {
component.setFont(boldFont);
}
long now = System.currentTimeMillis() / 1000;
- boolean dateInvalid = ((column == 2 && row.startTime > now) || (column == 3 && row.endTime < now));
- if (column == 2 || column == 3) {
+ boolean dateInvalid = ((column == COL_STARTTIME && row.startTime > now) || (column == COL_ENDTIME && row.endTime < now));
+ if (column == COL_STARTTIME || column == COL_ENDTIME) {
if (dateInvalid) {
fgOverride = Color.RED;
}
@@ -78,20 +82,14 @@ public class LectureTable extends ListTable<LectureSummary> {
}
@Override
- public Object modelValueToDisplayFormat(Object value, int column) {
- switch (column) {
- case 0: // Image name
- case 4: // isEnabled
- case 5: // hasValidImage
+ public Object modelValueToDisplayFormat(Object value, ListTableColumn column) {
+ if (column == COL_NAME || column == COL_ENABLED || column == COL_VALID)
return value;
- case 1: // Owner
+ if (column == COL_OWNER)
return FormatHelper.userName(UserCache.find((String) value));
- case 2: // Start time
- case 3: // End time
+ if (column == COL_STARTTIME || column == COL_ENDTIME)
return FormatHelper.shortDate((long) value);
- default:
- throw new IndexOutOfBoundsException();
- }
+ throw new IndexOutOfBoundsException();
}
}
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 36c6b18b..fe62b125 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
@@ -12,16 +12,15 @@ import javax.swing.SortOrder;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
import javax.swing.table.TableRowSorter;
-import org.apache.log4j.Logger;
import org.openslx.dozmod.gui.helper.TableColumnAdjuster;
@SuppressWarnings("serial")
public abstract class ListTable<T> extends JTable {
- private final static Logger LOGGER = Logger.getLogger(ListTable.class);
-
private final ListModel<T> model;
private final TableRowSorter<ListModel<T>> sorter;
@@ -32,21 +31,13 @@ public abstract class ListTable<T> extends JTable {
private final Comparator<T> itemComparator;
- public ListTable(String[] columnNames) {
- this(columnNames, null, null);
- }
-
- public ListTable(String[] columnNames, Comparator<T> itemComparator) {
- this(columnNames, null, itemComparator);
+ public ListTable(ListTableColumn... columns) {
+ this(null, columns);
}
- public ListTable(String[] columnNames, Class<?>[] columnClasses) {
- this(columnNames, columnClasses, null);
- }
-
- public ListTable(String[] columnNames, Class<?>[] columnClasses, Comparator<T> itemComparator) {
+ public ListTable(Comparator<T> itemComparator, ListTableColumn... columns) {
super();
- this.model = new ListModel<T>(this, columnNames, columnClasses);
+ this.model = new ListModel<T>(this, columns);
this.sorter = new TableRowSorter<ListModel<T>>(model);
this.adjuster = new TableColumnAdjuster(this, 5);
this.itemComparator = itemComparator;
@@ -62,10 +53,15 @@ public abstract class ListTable<T> extends JTable {
this.setDefaultEditor(Boolean.class, getDefaultEditor(Boolean.class));
this.setRowSelectionAllowed(true);
this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+ TableColumnModel cm = getColumnModel();
+ for (int i = 0; i < columns.length; ++i) {
+ columns[i].tableColumn = cm.getColumn(i);
+ columns[i].columnModel = cm;
+ }
}
- protected abstract Object getValueAtInternal(T item, int columnIndex);
+ protected abstract Object getValueAtInternal(T item, ListTableColumn column);
public T getModelRow(int rowIndex) {
if (rowIndex < 0 || rowIndex >= model.getRowCount())
@@ -141,10 +137,11 @@ public abstract class ListTable<T> extends JTable {
*
* @param component The component representing the cell being rendered
* @param row item of the row being rendered
- * @param column column index (model-based) of the cell being rendered
+ * @param listTableColumn column (model-based) of the cell being rendered
* @param isSelected whether the row is currently selected
*/
- public void prepareRenderHook(Component component, T row, int column, boolean isSelected) {
+ public void prepareRenderHook(Component component, T row, ListTableColumn listTableColumn,
+ boolean isSelected) {
// Nothing by default
}
@@ -157,7 +154,7 @@ public abstract class ListTable<T> extends JTable {
* @param column Column index (model-based) being rendered
* @return Rendered version of value. This should match the column class
*/
- public Object modelValueToDisplayFormat(Object value, int column) {
+ public Object modelValueToDisplayFormat(Object value, ListTableColumn column) {
return value;
}
@@ -165,7 +162,7 @@ public abstract class ListTable<T> extends JTable {
public final Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
T item = getViewRow(row);
- prepareRenderHook(c, item, convertColumnIndexToModel(column), isRowSelected(row));
+ prepareRenderHook(c, item, model.getColumn(convertColumnIndexToModel(column)), isRowSelected(row));
return c;
}
@@ -174,21 +171,15 @@ public abstract class ListTable<T> extends JTable {
*/
public static class ListModel<T> extends AbstractTableModel {
- private final String[] columnNames;
-
- private final Class<?>[] columnClasses;
+ private final ListTableColumn[] columns;
private ArrayList<T> data = null;
private final ListTable<T> table;
- public ListModel(ListTable<T> table, String[] columnNames, Class<?>[] columnClasses) {
-
- if (columnClasses != null && columnClasses.length != columnNames.length)
- throw new IllegalArgumentException();
+ public ListModel(ListTable<T> table, ListTableColumn... columns) {
this.table = table;
- this.columnNames = columnNames;
- this.columnClasses = columnClasses;
+ this.columns = columns;
}
public void setData(List<T> list) {
@@ -196,6 +187,10 @@ public abstract class ListTable<T> extends JTable {
fireTableDataChanged();
}
+ public ListTableColumn getColumn(int modelColumnIndex) {
+ return columns[modelColumnIndex];
+ }
+
@Override
public int getRowCount() {
return data == null ? 0 : data.size();
@@ -203,27 +198,24 @@ public abstract class ListTable<T> extends JTable {
@Override
public int getColumnCount() {
- return columnNames.length;
+ return columns.length;
}
@Override
public String getColumnName(int col) {
- return columnNames[col];
+ return columns[col].colName;
}
@Override
- public Class<?> getColumnClass(int c) {
- if (columnClasses != null && c < columnClasses.length) {
- return columnClasses[c];
- }
- return String.class;
+ public Class<?> getColumnClass(int col) {
+ return columns[col].colClass;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
T item = table.getModelRow(rowIndex);
int realColumn = table.convertColumnIndexToModel(columnIndex);
- return table.getValueAtInternal(item, realColumn);
+ return table.getValueAtInternal(item, columns[realColumn]);
}
}
@@ -238,11 +230,42 @@ public abstract class ListTable<T> extends JTable {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table,
- modelValueToDisplayFormat(value, convertColumnIndexToModel(column)), isSelected,
- hasFocus, row, column);
+ modelValueToDisplayFormat(value, model.getColumn(convertColumnIndexToModel(column))),
+ isSelected, hasFocus, row, column);
setBorder(null);
return this;
}
}
+ public static class ListTableColumn {
+ private boolean hidden = false;
+ private TableColumn tableColumn = null;
+ private TableColumnModel columnModel = null;
+ public final Class<?> colClass;
+ public final String colName;
+
+ public ListTableColumn(String colName) {
+ this(String.class, colName);
+ }
+
+ public ListTableColumn(Class<?> colClass, String colName) {
+ this.colClass = colClass;
+ this.colName = colName;
+ }
+
+ public void show() {
+ if (!hidden)
+ return;
+ columnModel.addColumn(tableColumn);
+ hidden = false;
+ }
+
+ public void hide() {
+ if (hidden)
+ return;
+ columnModel.removeColumn(tableColumn);
+ hidden = true;
+ }
+ }
+
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/UserTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/UserTable.java
index 447444c2..bfdf9b26 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/UserTable.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/UserTable.java
@@ -6,17 +6,18 @@ import org.openslx.dozmod.util.FormatHelper;
@SuppressWarnings("serial")
public class UserTable extends ListTable<UserInfo> {
- private static String[] columnNames = { "Name", "Mail" };
+ private static final ListTableColumn COL_NAME = new ListTableColumn("Name");
+ private static final ListTableColumn COL_MAIL = new ListTableColumn("Mail");
public UserTable() {
- super(columnNames);
+ super(COL_NAME, COL_MAIL);
}
@Override
- protected Object getValueAtInternal(UserInfo row, int columnIndex) {
- if (columnIndex == 0)
+ protected Object getValueAtInternal(UserInfo row, ListTableColumn columnIndex) {
+ if (columnIndex == COL_NAME)
return FormatHelper.userName(row);
- if (columnIndex == 1)
+ if (columnIndex == COL_MAIL)
return row.eMail;
throw new IndexOutOfBoundsException();
}