From 21bfb04cb9aa3f5a120c8f170f8e84fcef8a0606 Mon Sep 17 00:00:00 2001 From: Stephan Schwaer Date: Mon, 17 Aug 2015 15:53:18 +0200 Subject: [client] Implemented ImageTableRenderer to be able to correctly sort image list. Also did the sorting. --- .../dozmod/gui/control/table/ImageTable.java | 84 ++++++++++++++++++++-- 1 file changed, 77 insertions(+), 7 deletions(-) (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java') 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 4fa33798..a7a32fc6 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 @@ -1,7 +1,10 @@ package org.openslx.dozmod.gui.control.table; +import java.awt.Component; import java.util.Comparator; +import javax.swing.JTable; + import org.openslx.bwlp.thrift.iface.ImageSummaryRead; import org.openslx.dozmod.thrift.MetaDataCache; import org.openslx.dozmod.thrift.UserCache; @@ -29,28 +32,95 @@ public class ImageTable extends ListTable { return o1.imageBaseId.compareTo(o2.imageBaseId); } }); + + this.setDefaultRenderer(Object.class, new ImageTableRenderer()); - // sort with correct time and not lexicographic - getRowSorter().setComparator(3, timeComparator); + // --------- set comparators for different columns ------------------------------ + // first column doesn't have to be set, because standart comparator already compares strings + // second column, compares the os + getRowSorter().setComparator(1, new Comparator() { + @Override + public int compare(Integer o1, Integer o2) { + String os1 = FormatHelper.osName(MetaDataCache.getOsById(o1)); + String os2 = FormatHelper.osName(MetaDataCache.getOsById(o2)); + return os1.compareTo(os2); + } + }); + // third column compares the owner + getRowSorter().setComparator(2, new Comparator() { + @Override + public int compare(String o1, String o2) { + String user1 = FormatHelper.userName(UserCache.find(o1)); + String user2 = FormatHelper.userName(UserCache.find(o2)); + return user1.compareTo(user2); + } + }); + + // fourth and fifth column are both longs (last update and size), so they can use same comparator + Comparator longCmparator = new Comparator() { + @Override + public int compare(Long o1, Long o2) { + return o1.compareTo(o2); + } + }; + getRowSorter().setComparator(3, longCmparator); + getRowSorter().setComparator(4, longCmparator); + // sixth column (version id) is string again, doesn't have to be set + // seventh column is template + getRowSorter().setComparator(6, new Comparator() { + @Override + public int compare(Boolean o1, Boolean o2) { + return o1.compareTo(o2); + } + }); + // --------- end of comparators ------------------------------------------------- } + // return the right value of our image (row) depending on given column @Override protected Object getValueAtInternal(int rowIndex, int columnIndex) { ImageSummaryRead row = getModelRow(rowIndex); if (columnIndex == 0) return row.getImageName(); if (columnIndex == 1) - return FormatHelper.osName(MetaDataCache.getOsById(row.getOsId())); + return row.getOsId(); if (columnIndex == 2) - return FormatHelper.userName(UserCache.find(row.getOwnerId())); + return row.getOwnerId(); if (columnIndex == 3) - return FormatHelper.longDate(row.getUpdateTime()); + return row.getUpdateTime(); if (columnIndex == 4) - return row.getLatestVersionId() == null ? "-" : FormatHelper.bytes(row.getFileSize(), false); + return row.getFileSize(); if (columnIndex == 5) - return row.getLatestVersionId() == null ? "-" : row.getLatestVersionId(); + return row.getLatestVersionId(); if (columnIndex == 6) return row.isTemplate; throw new IndexOutOfBoundsException(); } } + +/** + * This renderer formats the given value to a readable string for the table cell, depending on the column + */ +@SuppressWarnings("serial") +class ImageTableRenderer extends TableRenderer { + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, + boolean hasFocus, int row, int column) { + // column 0 and 6 don't have to be changed ( already string/ checkbox) + if (column == 1) + value = FormatHelper.osName(MetaDataCache.getOsById((int)value)); + if (column == 2) + value = FormatHelper.userName(UserCache.find((String) value)); + if (column == 3) + value = FormatHelper.longDate((long) value); + if (column == 4) + value = value == null ? "-" : FormatHelper.bytes((long) value, false); + if (column == 5) + value = value == null ? "-" : value; + if( column > 6 || column < 0) + throw new IndexOutOfBoundsException(); + + super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); + return this; + } +} \ No newline at end of file -- cgit v1.2.3-55-g7522