summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java
diff options
context:
space:
mode:
authorSimon Rettberg2015-08-26 17:04:11 +0200
committerSimon Rettberg2015-08-26 17:04:11 +0200
commitf1dcbcfed3176b08f15f462ffd40015ce0f3b404 (patch)
treeb1437bd2f58b873de44397f0335bb85433df11c4 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java
parent[client] LectureImageListPage user feedback based on his selection (diff)
downloadtutor-module-f1dcbcfed3176b08f15f462ffd40015ce0f3b404.tar.gz
tutor-module-f1dcbcfed3176b08f15f462ffd40015ce0f3b404.tar.xz
tutor-module-f1dcbcfed3176b08f15f462ffd40015ce0f3b404.zip
[client] Fix searching in ImageTable
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java155
1 files changed, 95 insertions, 60 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;
}