summaryrefslogblamecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureChangeImage.java
blob: a2654896682e29c998b7b63b6be4063bdea27c62 (plain) (tree)
1
2
3
4
5
6
7
8
9






                                      

                           

                                  
                                        





                                                      

                                                                 

                                                       
                                                
                                                                     
                                                 

   
                                                    

                           
                                                                                                                                
 
                                                                                        


                                       
                                               


                                                                        
                                                                
                                   

                   
                                                 



                                                             



                                                                              






                                                                
 



                                                                
 



                                                                 
 


                                                                                                    

                                                                                              

                                                              
                                                
                                                                     
                                                                                                                                                        

                                                                                      
                                                                                                                                                          

                                                                                                         





                                         


                                                                                                     

                                                                                             















                                                                       
                                          



                         

                                                                   
           

                                                     
                                                 
                                 






                                            
                             
                                                            
















                                                         




                                              
           
                                                               

                                                                                
           



                                                                                              
         









                                          
 
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<ImageSummaryRead> {

	private static final Logger LOGGER = Logger.getLogger(LectureChangeImage.class);

	private boolean okUsed = false;
	private ImageTable imageTable;
	private List<ChangeListener> 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();
	}
}