summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java
diff options
context:
space:
mode:
authorStephan Schwaer2015-08-12 14:42:18 +0200
committerStephan Schwaer2015-08-12 14:42:18 +0200
commitc7db4a6d78d9e239a48a9eefc49dc23f0805d538 (patch)
treeef3e3c02c7d841d608515b577ff292a874a46e96 /dozentenmodul/src/main/java
parent[client] Remove strange code (diff)
downloadtutor-module-c7db4a6d78d9e239a48a9eefc49dc23f0805d538.tar.gz
tutor-module-c7db4a6d78d9e239a48a9eefc49dc23f0805d538.tar.xz
tutor-module-c7db4a6d78d9e239a48a9eefc49dc23f0805d538.zip
[client] Added Combobox for filtering in lecture list, now also correctly sorting image and lecture list dates by date and not lexicographic.
Diffstat (limited to 'dozentenmodul/src/main/java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ImageTable.java3
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/LectureTable.java9
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/ListTable.java41
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java10
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureListWindow.java81
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java13
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureListWindowLayout.java32
7 files changed, 146 insertions, 43 deletions
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 de1c936d..08656cd5 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
@@ -16,6 +16,9 @@ public class ImageTable extends ListTable<ImageSummaryRead> {
public ImageTable() {
super(columnNames, columnClasses);
+
+ // sort with correct time and not lexicographic
+ getRowSorter().setComparator(3, timeComparator);
}
@Override
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 235f926d..9e8e9d42 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
@@ -6,12 +6,17 @@ import org.openslx.dozmod.util.FormatHelper;
@SuppressWarnings("serial")
public class LectureTable extends ListTable<LectureSummary> {
-
- private static String[] columnNames = { "Name", "Verantwortlicher", "Startzeit", "Endzeit" };
+
+ private static String[] columnNames = { "Name", "Besitzer", "Startzeit", "Endzeit" };
private static Class<?>[] columnClasses = { String.class, String.class, String.class, String.class };
+
public LectureTable() {
super(columnNames, columnClasses);
+
+ // sort with correct time and not lexicographic
+ getRowSorter().setComparator(2, timeComparator);
+ getRowSorter().setComparator(3, timeComparator);
}
@Override
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 d37d03d7..e6176a2c 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
@@ -1,7 +1,12 @@
package org.openslx.dozmod.gui.control.table;
import java.awt.Component;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Date;
import java.util.List;
import javax.swing.JTable;
@@ -10,10 +15,9 @@ import javax.swing.RowSorter;
import javax.swing.SortOrder;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
-import javax.swing.table.TableCellEditor;
-import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableRowSorter;
+import org.apache.log4j.Logger;
import org.openslx.dozmod.gui.helper.TableColumnAdjuster;
@SuppressWarnings("serial")
@@ -27,6 +31,10 @@ public abstract class ListTable<T> extends JTable {
private final TableColumnAdjuster adjuster;
+ protected final Comparator<Object> timeComparator;
+
+ private final static Logger LOGGER = Logger.getLogger(ListTable.class);
+
public ListTable(String[] columnNames, Class<?>[] columnClasses) {
super();
this.model = new ListModel(columnNames, columnClasses);
@@ -44,6 +52,22 @@ public abstract class ListTable<T> extends JTable {
this.setDefaultEditor(Boolean.class, getDefaultEditor(Boolean.class));
this.setRowSelectionAllowed(true);
this.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+
+ // for sorting time columns according to time and not lexicographic
+ timeComparator = new Comparator<Object>() {
+ @Override
+ public int compare(Object o1, Object o2) {
+ DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
+ try {
+ Date date1 = df.parse((String) o1);
+ Date date2 = df.parse((String) o2);
+ return date1.compareTo(date2);
+ } catch (ParseException e) {
+ LOGGER.error("Couldn't compare dates to sort table rows: ", e);
+ }
+ return 0;
+ }
+ };
}
protected abstract Object getValueAtInternal(int rowIndex, int columnIndex);
@@ -101,7 +125,6 @@ public abstract class ListTable<T> extends JTable {
this.columnNames = columnNames;
this.columnClasses = columnClasses;
-
}
public void setData(List<T> list) {
@@ -146,10 +169,10 @@ public abstract class ListTable<T> extends JTable {
*
*/
class TableRenderer extends DefaultTableCellRenderer {
- @Override
- public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
- super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
- setBorder(noFocusBorder);
- return this;
- }
+ @Override
+ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+ super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+ setBorder(noFocusBorder);
+ return this;
+ }
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java
index 1bdf5507..d11160dc 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java
@@ -73,7 +73,7 @@ public class ImageListWindow extends ImageListWindowLayout {
@Override
public void changedUpdate(DocumentEvent e) {
// stuff
- applyFilterTable();
+ applyFilterOnTable();
}
});
@@ -102,10 +102,10 @@ public class ImageListWindow extends ImageListWindowLayout {
pop.addSeparator();
pop.addMenuItem(popupItemDelete);
- showOwned.addActionListener(new ActionListener() {
+ filterCbo.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- applyFilterTable();
+ applyFilterOnTable();
}
});
@@ -291,7 +291,7 @@ public class ImageListWindow extends ImageListWindowLayout {
}
}
- private void applyFilterTable() {
+ private void applyFilterOnTable() {
try {
// List for filters
List<RowFilter<Object, Object>> filters = new ArrayList<RowFilter<Object, Object>>(3);
@@ -300,7 +300,7 @@ public class ImageListWindow extends ImageListWindowLayout {
String filterField = searchTextField.getText();
filters.add(RowFilter.regexFilter("(?i)" + filterField, 0, 1, 2));
// filter for user (only show own)
- switch (showOwned.getSelectedIndex()) {
+ switch (filterCbo.getSelectedIndex()) {
case 0:
// no additional filters
break;
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureListWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureListWindow.java
index 2512d3ea..cabcc4f1 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureListWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureListWindow.java
@@ -5,6 +5,9 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
import java.util.List;
import javax.swing.JFrame;
@@ -20,8 +23,10 @@ import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.MainWindow;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.window.layout.LectureListWindowLayout;
-import org.openslx.dozmod.gui.wizard.LectureWizard;
import org.openslx.dozmod.thrift.LectureCache;
+import org.openslx.dozmod.thrift.Session;
+import org.openslx.dozmod.thrift.UserCache;
+import org.openslx.dozmod.util.FormatHelper;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;
@@ -49,16 +54,18 @@ public class LectureListWindow extends LectureListWindowLayout {
@Override
public void changedUpdate(DocumentEvent e) {
// stuff
- try {
- lectureTable.getRowSorter().setRowFilter(RowFilter.regexFilter("(?i)"+searchTextField.getText(), 0, 1, 2));
- searchTextField.setForeground(UIManager.getColor("TextField.foreground"));
- } catch (IllegalArgumentException ex) {
- // TODO set background color of search field to something redish
- searchTextField.setForeground(Color.RED);
- }
+ applyFilterOnTable();
}
});
-
+
+ filterCbo.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ applyFilterOnTable();
+ }
+ });
+
+
lectureTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
@@ -83,7 +90,7 @@ public class LectureListWindow extends LectureListWindowLayout {
ImageDetailsWindow popup = new ImageDetailsWindow(SwingUtilities.windowForComponent(me));
if (popup != null)
popup.setImage(image.getImageBaseId());
- */
+ */
}
}
});
@@ -147,4 +154,58 @@ public class LectureListWindow extends LectureListWindowLayout {
refreshList();
}
+ 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));
+ // filter for user (only show own)
+ switch (filterCbo.getSelectedIndex()) {
+ case 0:
+ // no additional filters
+ break;
+ case 1:
+ // filter for owner
+ String userFilter = FormatHelper.userName(UserCache.find(Session.getUserId()));
+ filters.add(RowFilter.regexFilter("(?i)" + userFilter, 1));
+ break;
+ case 2:
+ // filter for editable
+ RowFilter<Object, Object> editFilter = new RowFilter<Object, Object>() {
+ public boolean include(Entry entry) {
+ return lectureTable.getModelRow((Integer) entry.getIdentifier()).getDefaultPermissions().edit;
+ }
+ };
+ filters.add(editFilter);
+ break;
+ case 3:
+ // filter for soon ending lectures
+ RowFilter<Object, Object> expireFilter = new RowFilter<Object, Object>() {
+ public boolean include(Entry entry) {
+ long endTime = lectureTable.getModelRow((Integer) entry.getIdentifier()).getEndTime() * 1000l;
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(new Date());
+ cal.add(Calendar.DATE, 7);
+ return cal.getTimeInMillis() > endTime ? true: false;
+ }
+ };
+ filters.add(expireFilter);
+ break;
+ default:
+ break;
+ }
+ // for using multiple filters
+ RowFilter<Object, Object> andFilters = RowFilter.andFilter(filters);
+ lectureTable.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);
+ }
+ }
+
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java
index 4138c0b8..ae64ee6f 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java
@@ -7,7 +7,6 @@ import java.awt.Font;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
-import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
@@ -45,7 +44,7 @@ public abstract class ImageListWindowLayout extends CompositePage {
protected JButton downloadButton;
protected JButton deleteButton;
protected JButton backButton;
- protected JComboBox<String> showOwned;
+ protected JComboBox<String> filterCbo;
public ImageListWindowLayout() {
@@ -64,22 +63,22 @@ public abstract class ImageListWindowLayout extends CompositePage {
// --------------------------------------
// the panel for the table and search field
JPanel listPanel = new JPanel(new BorderLayout());
- // the search field and show only owned images checkbox
+ // the search field and filter combo box
JPanel filterPanel = new JPanel();
filterPanel.setLayout(new BoxLayout(filterPanel, BoxLayout.LINE_AXIS));
searchTextField = new JTextField();
- showOwned = new JComboBox<String>();
+ filterCbo = new JComboBox<String>();
for (String s: showOwnedLabel){
- showOwned.addItem(s);
+ filterCbo.addItem(s);
}
filterPanel.add(searchTextField);
- filterPanel.add(showOwned);
+ filterPanel.add(filterCbo);
listPanel.add(filterPanel, BorderLayout.NORTH);
// the actual table
imageTable = new ImageTable();
listPanel.add(new JScrollPane(imageTable), BorderLayout.CENTER);
add(listPanel, BorderLayout.CENTER);
-
+
// --------------------------------------
// the buttons at the bottom
JPanel buttonPanel = new JPanel();
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureListWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureListWindowLayout.java
index 230d92c6..0a176e5d 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureListWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureListWindowLayout.java
@@ -5,6 +5,7 @@ import java.awt.GridBagLayout;
import javax.swing.BoxLayout;
import javax.swing.JButton;
+import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
@@ -23,14 +24,17 @@ public abstract class LectureListWindowLayout extends CompositePage {
private static final String deleteButtonLabel = "Löschen";
private static final String backButtonLabel = "Zurück";
private static final String tableGroupLabel = "Veranstaltungen";
- private static final String vmInfoGroupLabel = "Detailinformationen";
private static final String infoTextString = "Hier können Sie Veranstaltungen anlegen, bearbeiten und löschen.";
+ protected final static String[] showOwnedLabel = {"Alle anzeigen", "Nur eigene Anzeigen", "Nur editierbare anzeigen", "Bald auslaufend"};
+
// buttons
protected JButton newButton;
protected JButton deleteButton;
protected JButton editButton;
protected JButton backButton;
+ protected JComboBox<String> filterCbo;
+
// imageDetail texts
protected JTextField lectureName;
@@ -62,21 +66,29 @@ public abstract class LectureListWindowLayout extends CompositePage {
// -- end group of title --
// -- group for the table --
- JPanel tableGroup = new JPanel();
- tableGroup.setBorder(new TitledBorder(tableGroupLabel));
- tableGroup.setLayout(new GridBagLayout());
- tableGroup.setPreferredSize(tableGroup.getMinimumSize());
- // filter text field
+ JPanel tablePanel = new JPanel();
+ tablePanel.setBorder(new TitledBorder(tableGroupLabel));
+ tablePanel.setLayout(new GridBagLayout());
+ tablePanel.setPreferredSize(tablePanel.getMinimumSize());
+ // filterPanel with filter text field and filter combo
+ JPanel filterPanel = new JPanel();
+ filterPanel.setLayout(new BoxLayout(filterPanel, BoxLayout.LINE_AXIS));
searchTextField = new JTextField();
- tableGroup.add(searchTextField, GridPos.get(0, 0, true, false));
+ filterCbo = new JComboBox<String>();
+ for (String s: showOwnedLabel){
+ filterCbo.addItem(s);
+ }
+ filterPanel.add(searchTextField);
+ filterPanel.add(filterCbo);
+ tablePanel.add(filterPanel, GridPos.get(0, 0, true, false));
// table
lectureTable = new LectureTable();
- tableGroup.add(new JScrollPane(lectureTable), GridPos.get(0, 1, true, true));
+ tablePanel.add(new JScrollPane(lectureTable), GridPos.get(0, 1, true, true));
// create, modify and delete buttons
JPanel buttonComposite = new JPanel();
buttonComposite.setLayout(new BoxLayout(buttonComposite, BoxLayout.LINE_AXIS));
- tableGroup.add(buttonComposite, GridPos.get(0, 2, true, false));
+ tablePanel.add(buttonComposite, GridPos.get(0, 2, true, false));
newButton = new JButton(newButtonLabel);
buttonComposite.add(newButton);
@@ -89,7 +101,7 @@ public abstract class LectureListWindowLayout extends CompositePage {
// -- end group for table --
add(infoComposite, GridPos.get(0, 0, 2, 1, true, false));
- add(tableGroup, GridPos.get(0, 1, true, true));
+ add(tablePanel, GridPos.get(0, 1, true, true));
}
public JTextField createCaptionAndTextfield(String captionString, JPanel group, int row) {