From 5ebff25e09415f632a129f5df5478064496dcc8e Mon Sep 17 00:00:00 2001 From: Stephan Schwaer Date: Tue, 25 Aug 2015 17:50:56 +0200 Subject: [client] Extracted ImageList from imageListWindow to ImageListViewer. --- .../dozmod/gui/control/ImageListViewer.java | 192 +++++++++++++++++++++ .../openslx/dozmod/gui/window/ImageListWindow.java | 131 ++------------ .../dozmod/gui/window/LectureDetailsWindow.java | 9 + .../gui/window/layout/ImageListWindowLayout.java | 62 ++----- 4 files changed, 226 insertions(+), 168 deletions(-) create mode 100644 dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java 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 new file mode 100644 index 00000000..f0b41693 --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java @@ -0,0 +1,192 @@ +package org.openslx.dozmod.gui.control; + +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.BoxLayout; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextField; +import javax.swing.RowFilter; +import javax.swing.UIManager; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; + +import org.openslx.bwlp.thrift.iface.ImageSummaryRead; +import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.control.table.ImageTable; +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.util.QuickTimer; +import org.openslx.util.QuickTimer.Task; + +@SuppressWarnings("serial") +public class ImageListViewer extends JLabel { + + protected JTextField searchTextField; + protected ImageTable imageTable; + protected JComboBox filterCbo; + + protected final static String[] filterLabels = {"Alle anzeigen", "Nur eigene Anzeigen", "Nur editierbare anzeigen", "Nur Vorlagen zeigen"}; + + 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){ + this.name = name; + } + + @Override + public String toString(){ + return name; + } + } + + public ImageListViewer(){ + super(); + GridManager grid = new GridManager(this, 1); + + // -------------------------------------- + // the panel for the table and search field + // the search field and filter combo box + JPanel filterPanel = new JPanel(); + filterPanel.setLayout(new BoxLayout(filterPanel, BoxLayout.LINE_AXIS)); + searchTextField = new JTextField(); + filterCbo = new JComboBox(); + 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.nextRow(); + grid.add(new JScrollPane(imageTable)).fill(true, true).expand(true,true); + grid.finish(false); + + /** + * ActionListeners + */ + // filter the objects in the table depending on the search field + searchTextField.getDocument().addDocumentListener(new DocumentListener() { + @Override + public void removeUpdate(DocumentEvent e) { + changedUpdate(e); + } + + @Override + public void insertUpdate(DocumentEvent e) { + changedUpdate(e); + } + + @Override + public void changedUpdate(DocumentEvent e) { + // stuff + applyFilterOnTable(); + } + }); + + filterCbo.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + applyFilterOnTable(); + } + }); + } + + /** + * Filters the image list according to the filter text entered by the user + */ + private void applyFilterOnTable() { + try { + // List for filters + List> filters = new ArrayList>(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 filter = new RowFilter() { + public boolean include(Entry entry) { + return ImagePerms.canEdit(imageTable.getModelRow((Integer) entry.getIdentifier())); + } + }; + filters.add(filter); + break; + case TEMPLATES: + // show only templates + RowFilter templateFilter = new RowFilter() { + public boolean include(Entry entry) { + return imageTable.getModelRow((Integer) entry.getIdentifier()).isTemplate; + } + }; + filters.add(templateFilter); + default: + break; + } + // for using multiple filters + RowFilter 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); + } + } + + /** + * Refreshes the image list in the table + * + * @param forceRefresh true to force a refresh, false to use the cached list + */ + public void refreshList(final boolean forceRefresh, int delay) { + QuickTimer.scheduleOnce(new Task() { + @Override + public void fire() { + final List imageList = ImageCache.get(forceRefresh); + Gui.asyncExec(new Runnable() { + @Override + public void run() { + imageTable.setData(imageList, true); + } + }); + } + }, delay); + } + + public ImageTable getImageTable(){ + return imageTable; + } + +} 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 121465bd..2f55cd78 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 @@ -1,23 +1,16 @@ package org.openslx.dozmod.gui.window; -import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.util.ArrayList; -import java.util.List; import javax.swing.JFrame; import javax.swing.JMenuItem; import javax.swing.JOptionPane; -import javax.swing.RowFilter; import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; @@ -25,6 +18,7 @@ import org.apache.log4j.Logger; import org.openslx.bwlp.thrift.iface.ImageSummaryRead; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.MainWindow; +import org.openslx.dozmod.gui.control.table.ImageTable; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.PopupMenu; import org.openslx.dozmod.gui.window.ImageDetailsWindow.ImageUpdatedCallback; @@ -32,17 +26,11 @@ import org.openslx.dozmod.gui.window.layout.ImageListWindowLayout; import org.openslx.dozmod.gui.wizard.ImageWizard; import org.openslx.dozmod.gui.wizard.LectureWizard; import org.openslx.dozmod.permissions.ImagePerms; -import org.openslx.dozmod.thrift.Session; import org.openslx.dozmod.thrift.ThriftActions; import org.openslx.dozmod.thrift.ThriftActions.DeleteCallback; import org.openslx.dozmod.thrift.ThriftActions.DownloadCallback; -import org.openslx.dozmod.thrift.cache.ImageCache; -import org.openslx.util.QuickTimer; -import org.openslx.util.QuickTimer.Task; /** - * - * @author Jonathan Bauer * */ @SuppressWarnings("serial") @@ -55,6 +43,11 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa */ public final ImageListWindow me = this; + /** + * + */ + public final ImageTable imageTable = imageListViewer.getImageTable(); + /** * Popup menu items */ @@ -68,34 +61,7 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa public ImageListWindow() { super(); - /** - * Filter field and combobox listeners - */ - // filter the objects in the table depending on the search field - searchTextField.getDocument().addDocumentListener(new DocumentListener() { - @Override - public void removeUpdate(DocumentEvent e) { - changedUpdate(e); - } - - @Override - public void insertUpdate(DocumentEvent e) { - changedUpdate(e); - } - - @Override - public void changedUpdate(DocumentEvent e) { - // stuff - applyFilterOnTable(); - } - }); - - filterCbo.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - applyFilterOnTable(); - } - }); + /** * Popup menu for the version table on the right side @@ -135,7 +101,7 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa @Override public void keyReleased(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_F5) { - refreshList(true, 1); + imageListViewer.refreshList(true, 1); } } }); @@ -150,7 +116,7 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa ImageDetailsWindow.open((JFrame) SwingUtilities.getWindowAncestor(me), image.getImageBaseId(), new ImageUpdatedCallback() { public void updated() { - refreshList(true, 100); + imageListViewer.refreshList(true, 100); } }); } @@ -188,7 +154,7 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa @Override public void actionPerformed(ActionEvent e) { new ImageWizard(SwingUtilities.getWindowAncestor(me)).setVisible(true); - refreshList(true, 100); + imageListViewer.refreshList(true, 100); } }); newLectureButton.addActionListener(new ActionListener() { @@ -225,25 +191,7 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa * ********************************************************************************/ - /** - * Refreshes the image list in the table - * - * @param forceRefresh true to force a refresh, false to use the cached list - */ - private void refreshList(final boolean forceRefresh, int delay) { - QuickTimer.scheduleOnce(new Task() { - @Override - public void fire() { - final List imageList = ImageCache.get(forceRefresh); - Gui.asyncExec(new Runnable() { - @Override - public void run() { - imageTable.setData(imageList, true); - } - }); - } - }, delay); - } + /** * Helper to return the selected image from the table or show an error to @@ -279,57 +227,6 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa return true; } - /** - * Filters the image list according to the filter text entered by the user - */ - private void applyFilterOnTable() { - try { - // List for filters - List> filters = new ArrayList>(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 = Session.getUserId(); - filters.add(RowFilter.regexFilter("(?i)" + userFilter, 2)); - break; - case 2: - // filter for editable - RowFilter filter = new RowFilter() { - public boolean include(Entry entry) { - return ImagePerms.canEdit(imageTable.getModelRow((Integer) entry.getIdentifier())); - } - }; - filters.add(filter); - break; - case 3: - // show only templates - RowFilter templateFilter = new RowFilter() { - public boolean include(Entry entry) { - return imageTable.getModelRow((Integer) entry.getIdentifier()).isTemplate; - } - }; - filters.add(templateFilter); - default: - break; - } - // for using multiple filters - RowFilter 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); - } - } /** * Updates the buttons/popup menu items according to the user's permissions @@ -386,7 +283,7 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa @Override public void downloadInitialized(boolean success) { if (!success) { - refreshList(true, 1000); + imageListViewer.refreshList(true, 1000); } } @@ -409,7 +306,7 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa */ @Override public void isDeleted(boolean success) { - refreshList(success, 1000); + imageListViewer.refreshList(success, 1000); } /******************************************************************************** @@ -424,6 +321,6 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa @Override public void requestShow() { - refreshList(false, 1); + imageListViewer.refreshList(false, 1); } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java index 33ac3627..3a7a63d8 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java @@ -109,6 +109,15 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements dateChecker.cancel(); } }); + + btnLinkImage.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + // TODO Auto-generated method stub + + } + }); /** * Button listeners */ 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 1343127d..6e071c2d 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,16 +7,12 @@ import java.awt.Font; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; -import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.JTextField; import org.apache.log4j.Logger; -import org.openslx.dozmod.gui.control.table.ImageTable; +import org.openslx.dozmod.gui.control.ImageListViewer; import org.openslx.dozmod.gui.helper.CompositePage; -import org.openslx.dozmod.gui.helper.GridPos; public abstract class ImageListWindowLayout extends CompositePage { @@ -31,20 +27,15 @@ public abstract class ImageListWindowLayout extends CompositePage { protected final static String downloadButtonLabel = "Download"; protected final static String deleteButtonLabel = "Löschen"; protected final static String backButtonLabel = "Zurück"; - protected final static String tableGroupLabel = "Images"; - protected final static String filterGroupLabel = "Filter"; - protected final static String[] filterLabels = {"Alle anzeigen", "Nur eigene Anzeigen", "Nur editierbare anzeigen", "Nur Vorlagen zeigen"}; // -------------------------------------- // search field, table and buttons - protected JTextField searchTextField; - protected ImageTable imageTable; - protected JButton newButton; - protected JButton newLectureButton; - protected JButton downloadButton; - protected JButton deleteButton; - protected JButton backButton; - protected JComboBox filterCbo; + protected final ImageListViewer imageListViewer; + protected final JButton newButton; + protected final JButton newLectureButton; + protected final JButton downloadButton; + protected final JButton deleteButton; + protected final JButton backButton; public ImageListWindowLayout() { @@ -59,25 +50,9 @@ public abstract class ImageListWindowLayout extends CompositePage { infoPanel.add(infoTitle, BorderLayout.NORTH); infoPanel.add(infoText, BorderLayout.CENTER); add(infoPanel, BorderLayout.NORTH); - - // -------------------------------------- - // the panel for the table and search field - JPanel listPanel = new JPanel(new BorderLayout()); - // the search field and filter combo box - JPanel filterPanel = new JPanel(); - filterPanel.setLayout(new BoxLayout(filterPanel, BoxLayout.LINE_AXIS)); - searchTextField = new JTextField(); - filterCbo = new JComboBox(); - for (String s: filterLabels){ - filterCbo.addItem(s); - } - filterPanel.add(searchTextField); - 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); + + imageListViewer = new ImageListViewer(); + add(imageListViewer, BorderLayout.CENTER); // -------------------------------------- // the buttons at the bottom @@ -95,22 +70,7 @@ public abstract class ImageListWindowLayout extends CompositePage { buttonPanel.add(deleteButton); buttonPanel.add(Box.createHorizontalGlue()); buttonPanel.add(backButton); - listPanel.add(buttonPanel, BorderLayout.PAGE_END); + add(buttonPanel, BorderLayout.PAGE_END); } - /** - * @param captionString - * @param group - * @param row - * @return - */ - public JTextField createCaptionAndTextfield(String captionString, JPanel group, int row) { - JLabel caption = new JLabel(captionString); - JTextField textField = new JTextField(); - textField.setEditable(false); - caption.setText(captionString); - group.add(caption, GridPos.get(0, row)); - group.add(textField, GridPos.get(1, row, true, false)); - return textField; - } } -- cgit v1.2.3-55-g7522 From 58ee30bf161b8112e3797e0b44656480f82918d3 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 25 Aug 2015 17:58:06 +0200 Subject: [server] Fix setLectureOwner call (swapped params) --- .../src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java index 994466dd..d2fe1b44 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java @@ -485,7 +485,7 @@ public class ServerHandler implements SatelliteServer.Iface { UserInfo user = SessionManager.getOrFail(userToken); User.canChangeLectureOwnerOrFail(user, lectureId); try { - DbLecture.setOwner(user, newOwnerId, lectureId); + DbLecture.setOwner(user, lectureId, newOwnerId); } catch (SQLException e) { throw new TInternalServerError(); } -- cgit v1.2.3-55-g7522