diff options
| author | Stephan Schwaer | 2015-08-12 14:42:18 +0200 |
|---|---|---|
| committer | Stephan Schwaer | 2015-08-12 14:42:18 +0200 |
| commit | c7db4a6d78d9e239a48a9eefc49dc23f0805d538 (patch) | |
| tree | ef3e3c02c7d841d608515b577ff292a874a46e96 /dozentenmodul/src/main/java | |
| parent | [client] Remove strange code (diff) | |
| download | tutor-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')
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) { |
