diff options
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/control')
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java | 155 | ||||
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ListTable.java | 26 |
2 files changed, 109 insertions, 72 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java index bb8c9408..c50f15e5 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java @@ -5,6 +5,8 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; import javax.swing.BoxLayout; import javax.swing.JComboBox; @@ -19,12 +21,15 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.openslx.bwlp.thrift.iface.ImageSummaryRead; +import org.openslx.bwlp.thrift.iface.UserInfo; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.control.table.ImageTable; +import org.openslx.dozmod.gui.control.table.ListTable.ListModel; import org.openslx.dozmod.gui.helper.GridManager; import org.openslx.dozmod.permissions.ImagePerms; import org.openslx.dozmod.thrift.Session; import org.openslx.dozmod.thrift.cache.ImageCache; +import org.openslx.dozmod.thrift.cache.UserCache; import org.openslx.util.QuickTimer; import org.openslx.util.QuickTimer.Task; @@ -35,30 +40,67 @@ public class ImageListViewer extends JLabel { protected ImageTable imageTable; protected JComboBox<FilterType> filterCbo; - protected final static String[] filterLabels = {"Alle anzeigen", "Nur eigene Anzeigen", "Nur editierbare anzeigen", "Nur Vorlagen zeigen"}; + private final RowFilter<ListModel<ImageSummaryRead>, Integer> filterEditable = new RowFilter<ListModel<ImageSummaryRead>, Integer>() { + @Override + public boolean include(Entry<? extends ListModel<ImageSummaryRead>, ? extends Integer> entry) { + return ImagePerms.canEdit(imageTable.getModelRow(entry.getIdentifier())); + } + }; - protected static enum FilterType{ - ALL("Alle anzeigen"), + private final RowFilter<ListModel<ImageSummaryRead>, Integer> filterTemplate = new RowFilter<ListModel<ImageSummaryRead>, Integer>() { + public boolean include(Entry<? extends ListModel<ImageSummaryRead>, ? extends Integer> entry) { + return imageTable.getModelRow(entry.getIdentifier()).isTemplate; + } + }; + + private final RowFilter<ListModel<ImageSummaryRead>, Integer> filterOwn = new RowFilter<ListModel<ImageSummaryRead>, Integer>() { + public boolean include(Entry<? extends ListModel<ImageSummaryRead>, ? extends Integer> entry) { + return imageTable.getModelRow(entry.getIdentifier()).ownerId.equals(Session.getUserId()); + } + }; + + private Pattern searchFieldPattern = null; + + private final RowFilter<ListModel<ImageSummaryRead>, Integer> filterSearchTerm = new RowFilter<ListModel<ImageSummaryRead>, Integer>() { + public boolean include(Entry<? extends ListModel<ImageSummaryRead>, ? extends Integer> entry) { + ImageSummaryRead image = imageTable.getModelRow(entry.getIdentifier()); + if (searchFieldPattern.matcher(image.imageName).find()) + return true; + UserInfo user = UserCache.find(image.ownerId); + if (user == null) + return false; + if (searchFieldPattern.matcher(user.firstName).find()) + return true; + if (searchFieldPattern.matcher(user.lastName).find()) + return true; + if (searchFieldPattern.matcher(user.eMail).find()) + return true; + return false; + } + }; + + protected static enum FilterType { + ALL("Alle anzeigen"), OWN("Nur eigene Anzeigen"), EDITABLE("Nur editierbare anzeigen"), TEMPLATES("Nur Vorlagen zeigen"); private final String name; - private FilterType(String name){ + private FilterType(String name) { this.name = name; } @Override - public String toString(){ + public String toString() { return name; } } - public ImageListViewer(){ + public ImageListViewer() { super(); GridManager grid = new GridManager(this, 1); - + // -------------------------------------- // the panel for the table and search field // the search field and filter combo box @@ -67,19 +109,18 @@ public class ImageListViewer extends JLabel { filterPanel.setLayout(new BoxLayout(filterPanel, BoxLayout.LINE_AXIS)); searchTextField = new JTextField(); filterCbo = new JComboBox<FilterType>(); - for (FilterType s: FilterType.values()){ + for (FilterType s : FilterType.values()) { filterCbo.addItem(s); } filterPanel.add(searchTextField); filterPanel.add(filterCbo); - // the actual table imageTable = new ImageTable(); - grid.add(filterPanel).fill(true, false).expand(true,false); + grid.add(filterPanel).fill(true, false).expand(true, false); grid.nextRow(); - grid.add(new JScrollPane(imageTable)).fill(true, true).expand(true,true); + grid.add(new JScrollPane(imageTable)).fill(true, true).expand(true, true); grid.finish(false); /** @@ -99,7 +140,17 @@ public class ImageListViewer extends JLabel { @Override public void changedUpdate(DocumentEvent e) { - // stuff + String str = searchTextField.getText(); + if (str == null || str.isEmpty()) { + searchFieldPattern = null; + } else { + try { + searchFieldPattern = Pattern.compile(str, Pattern.CASE_INSENSITIVE); + searchTextField.setForeground(UIManager.getColor("TextField.foreground")); + } catch (PatternSyntaxException ex) { + searchTextField.setForeground(Color.RED); + } + } applyFilterOnTable(); } }); @@ -116,54 +167,38 @@ public class ImageListViewer extends JLabel { * Filters the image list according to the filter text entered by the user */ private void applyFilterOnTable() { - try { - // List for filters - List<RowFilter<Object, Object>> filters = new ArrayList<RowFilter<Object, Object>>(3); - - // string for text in filter text field - String filterField = searchTextField.getText(); - filters.add(RowFilter.regexFilter("(?i)" + filterField, 0, 1, 2)); - - FilterType filterType = (FilterType) filterCbo.getSelectedItem(); - // filter for user (only show own) - switch (filterType) { - case ALL: - // no additional filters - break; - case OWN: - // filter for owner - String userFilter = Session.getUserId(); - filters.add(RowFilter.regexFilter("(?i)" + userFilter, 2)); - break; - case EDITABLE: - // filter for editable - RowFilter<Object, Object> filter = new RowFilter<Object, Object>() { - public boolean include(Entry entry) { - return ImagePerms.canEdit(imageTable.getModelRow((Integer) entry.getIdentifier())); - } - }; - filters.add(filter); - break; - case TEMPLATES: - // show only templates - RowFilter<Object, Object> templateFilter = new RowFilter<Object, Object>() { - public boolean include(Entry entry) { - return imageTable.getModelRow((Integer) entry.getIdentifier()).isTemplate; - } - }; - filters.add(templateFilter); - default: - break; - } - // for using multiple filters - RowFilter<Object, Object> andFilters = RowFilter.andFilter(filters); - imageTable.getRowSorter().setRowFilter(andFilters); - - searchTextField.setForeground(UIManager.getColor("TextField.foreground")); - } catch (IllegalArgumentException ex) { - // TODO set background color of search field to something redish - searchTextField.setForeground(Color.RED); + // List for filters + List<RowFilter<ListModel<ImageSummaryRead>, Integer>> filters = new ArrayList<>(); + + // string for text in filter text field + if (searchFieldPattern != null) { + filters.add(filterSearchTerm); + } + + FilterType filterType = (FilterType) filterCbo.getSelectedItem(); + switch (filterType) { + case ALL: + // no additional filters + break; + case OWN: + // filter for owner + filters.add(filterOwn); + break; + case EDITABLE: + // filter for editable + filters.add(filterEditable); + break; + case TEMPLATES: + // show only templates + filters.add(filterTemplate); + default: + break; } + // for using multiple filters + RowFilter<ListModel<ImageSummaryRead>, Integer> andFilters = RowFilter.andFilter(filters); + imageTable.getRowSorter().setRowFilter(andFilters); + + searchTextField.setForeground(UIManager.getColor("TextField.foreground")); } /** @@ -186,7 +221,7 @@ public class ImageListViewer extends JLabel { }, delay); } - public ImageTable getImageTable(){ + public ImageTable getImageTable() { return imageTable; } 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 bfd8879e..36c6b18b 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 @@ -22,9 +22,9 @@ public abstract class ListTable<T> extends JTable { private final static Logger LOGGER = Logger.getLogger(ListTable.class); - private final ListModel model; + private final ListModel<T> model; - private final TableRowSorter<ListModel> sorter; + private final TableRowSorter<ListModel<T>> sorter; private List<RowSorter.SortKey> sortKeys = new ArrayList<>(); @@ -46,8 +46,8 @@ public abstract class ListTable<T> extends JTable { public ListTable(String[] columnNames, Class<?>[] columnClasses, Comparator<T> itemComparator) { super(); - this.model = new ListModel(columnNames, columnClasses); - this.sorter = new TableRowSorter<ListModel>(model); + this.model = new ListModel<T>(this, columnNames, columnClasses); + this.sorter = new TableRowSorter<ListModel<T>>(model); this.adjuster = new TableColumnAdjuster(this, 5); this.itemComparator = itemComparator; this.setModel(model); @@ -131,7 +131,7 @@ public abstract class ListTable<T> extends JTable { } @Override - public TableRowSorter<ListModel> getRowSorter() { + public TableRowSorter<ListModel<T>> getRowSorter() { return sorter; } @@ -172,19 +172,21 @@ public abstract class ListTable<T> extends JTable { /** * Model for our table */ - private class ListModel extends AbstractTableModel { + public static class ListModel<T> extends AbstractTableModel { private final String[] columnNames; private final Class<?>[] columnClasses; - protected ArrayList<T> data = null; + private ArrayList<T> data = null; - public ListModel(String[] columnNames, Class<?>[] columnClasses) { + private final ListTable<T> table; + + public ListModel(ListTable<T> table, String[] columnNames, Class<?>[] columnClasses) { if (columnClasses != null && columnClasses.length != columnNames.length) throw new IllegalArgumentException(); - + this.table = table; this.columnNames = columnNames; this.columnClasses = columnClasses; } @@ -219,9 +221,9 @@ public abstract class ListTable<T> extends JTable { @Override public Object getValueAt(int rowIndex, int columnIndex) { - T item = getModelRow(rowIndex); - int realColumn = convertColumnIndexToModel(columnIndex); - return getValueAtInternal(item, realColumn); + T item = table.getModelRow(rowIndex); + int realColumn = table.convertColumnIndexToModel(columnIndex); + return table.getValueAtInternal(item, realColumn); } } |