summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Bauer2015-08-25 18:12:35 +0200
committerJonathan Bauer2015-08-25 18:12:35 +0200
commitfc5ef41ec6b41b7d1f1416817c6035fa25341ba9 (patch)
treefb6c6568fa31e4704a56547dfb8548bcce45ba4a
parent[client] reworked image base deletion from ImageListWindow (diff)
parent[server] Fix setLectureOwner call (swapped params) (diff)
downloadtutor-module-fc5ef41ec6b41b7d1f1416817c6035fa25341ba9.tar.gz
tutor-module-fc5ef41ec6b41b7d1f1416817c6035fa25341ba9.tar.xz
tutor-module-fc5ef41ec6b41b7d1f1416817c6035fa25341ba9.zip
Merge branch 'v1.1' of git.openslx.org:openslx-ng/tutor-module into v1.1
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ImageListViewer.java192
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java131
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java9
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageListWindowLayout.java62
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java2
5 files changed, 227 insertions, 169 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
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<FilterType> 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<FilterType>();
+ 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<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);
+ }
+ }
+
+ /**
+ * 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<ImageSummaryRead> 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 9b910b22..402f1223 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,18 +26,12 @@ 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")
public class ImageListWindow extends ImageListWindowLayout implements DownloadCallback, DeleteCallback {
@@ -56,6 +44,11 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa
public final ImageListWindow me = this;
/**
+ *
+ */
+ public final ImageTable imageTable = imageListViewer.getImageTable();
+
+ /**
* Popup menu items
*/
private final JMenuItem popupItemNewLecture = new JMenuItem("Neue Veranstaltung");
@@ -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<ImageSummaryRead> 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<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 = Session.getUserId();
- filters.add(RowFilter.regexFilter("(?i)" + userFilter, 2));
- break;
- case 2:
- // 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 3:
- // 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);
- }
- }
/**
* 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);
}
}
@@ -406,7 +303,7 @@ public class ImageListWindow extends ImageListWindowLayout implements DownloadCa
*/
@Override
public void isDeleted(boolean success) {
- refreshList(success, 1000);
+ imageListViewer.refreshList(success, 1000);
}
/********************************************************************************
@@ -421,6 +318,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<String> 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<String>();
- 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;
- }
}
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();
}