package org.openslx.dozmod.gui.window; import java.awt.Window; 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.List; import javax.swing.SwingUtilities; import javax.swing.event.ChangeListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import org.apache.log4j.Logger; import org.openslx.bwlp.thrift.iface.ImageSummaryRead; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor; import org.openslx.dozmod.gui.changemonitor.GenericControlWindow; import org.openslx.dozmod.gui.control.table.ImageTable; import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.helper.UiFeedback; import org.openslx.dozmod.gui.window.layout.LectureChangeImageLayout; import org.openslx.dozmod.permissions.ImagePerms; /** * Window for changing the linked image of a lecture */ @SuppressWarnings("serial") public class LectureChangeImage extends LectureChangeImageLayout implements UiFeedback, GenericControlWindow { private static final Logger LOGGER = Logger.getLogger(LectureChangeImage.class); private boolean okUsed = false; private ImageTable imageTable; private List listeners; /** * Don't use this constructor, use static function open instead. */ protected LectureChangeImage(final Window modalParent) { super(modalParent); /** * initialise the ImageListViewer */ imageListViewer.refreshList(false, 1); imageTable = imageListViewer.getImageTable(); imageTable.setColumnVisible(ImageTable.COL_LASTCHANGE, false); imageTable.setColumnVisible(ImageTable.COL_OS, false); imageTable.setColumnVisible(ImageTable.COL_SIZE, false); imageTable.setColumnVisible(ImageTable.COL_TEMPLATE, false); // finally the table listeners imageTable.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { processClick(e); } @Override public void mouseReleased(MouseEvent e) { processClick(e); } private void processClick(MouseEvent e) { // left double click => open details if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) { ImageSummaryRead image = imageTable.getSelectedItem(); if (image.isValid && ImagePerms.canLink(image)) { okUsed = true; dispose(); } else { if (!image.isValid) { Gui.showMessageBox(LectureChangeImage.this, "Ausgewählte VM ist ungültig!", MessageType.ERROR, LOGGER, null); } else { Gui.showMessageBox(LectureChangeImage.this, "Keine Rechte zum Verlinken auf die ausgewählte VM.", MessageType.ERROR, LOGGER, null); } } } } }); imageTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { ImageSummaryRead image = imageTable.getSelectedItem(); btnOk.setEnabled(image.isValid && ImagePerms.canLink(image)); } }); /** * ActionListeners for the buttons. */ btnOk.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { okUsed = true; dispose(); } }); btnClose.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { dispose(); } }); } /** * Set window visible and return resulting ImageSummaryRead * * @return ImageSummaryRead of selected Image */ private ImageSummaryRead runAndReturn() { setVisible(true); if (okUsed) fireChangeEvent(); return getState(); } @Override public ImageSummaryRead getState() { if (okUsed) { return imageTable.getSelectedItem(); } return null; } @Override public void addChangeListener(ChangeListener l) { if (listeners == null) { listeners = new ArrayList<>(); } listeners.add(l); } private void fireChangeEvent() { if (listeners == null) return; for (ChangeListener cl : listeners) { cl.stateChanged(null); } } /** * Create new LectureChangeLinkedImage * * @param modalParent parent window of the popup window * @return ImageSummaryRead of selected image or null, if abort has been * used */ public static ImageSummaryRead open(Window modalParent, DialogChangeMonitor monitor) { LectureChangeImage lci = new LectureChangeImage(modalParent); monitor.add(lci); return lci.runAndReturn(); } @Override public boolean wantConfirmQuit() { return false; } @Override public void escapePressed() { dispose(); } }