summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx
diff options
context:
space:
mode:
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java155
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ListTable.java26
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);
}
}