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



                                      
                               

                                                      


                                                           
                                       
                                             

                                         

                                               
                                     
                                    
                                                      
                                                      
                                              
                                  
                                         

                                                         
                                                 
                                                 
                                                                  
                                                 
                                            
                                         
                                           
                                            


                                              


                                                            

                                                                                     
 


                                                       











                                                                                     





                                               



                                                                                         


                                                                                                             
                                               

                                                     
                                                                                           
                                                
                                                                             
                                                                       
                                                                                       
                                                                                
                                                                                                      
                                                                   
                                                                                    
                                                  
                                                                              

                                                                                       
                                                                     
                                                                                   
                                                                                     

                                                        
                                                       




                                                                     







                                                                                 

                   













                                                                                                                       




                                                                                       
                                                                    







                                                                                       
                                                                    

                         
 
                                    


                                                                            









                                                                                                                     
                                                                           
 
                                                                    

                                                            
                                                                   
                                                     

                                                                                                                                    
                                                                       
                                                              
                                                 
                                                                       


                                                                                      
                                                                                          





                                                         







                                                                          
         
 
                                                              

                                 












                                                                                                      
                                                                     



                                         

         






                               
                                   

         

                                                                         

                                                                                                                    
                        


                                                                                                                
 



                                                                                                   
 
package org.openslx.dozmod.gui.window;

import java.util.List;

import org.apache.log4j.Logger;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.openslx.bwlp.thrift.iface.ImagePermissions;
import org.openslx.bwlp.thrift.iface.ImageSummaryRead;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.MainWindow;
import org.openslx.dozmod.gui.helper.ImageListComparator;
import org.openslx.dozmod.gui.helper.ImageListFilter;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.helper.TableHelper;
import org.openslx.dozmod.gui.window.layout.ImageListWindowLayout;
import org.openslx.dozmod.gui.wizard.ImageWizard;
import org.openslx.dozmod.thrift.ImageCache;
import org.openslx.dozmod.thrift.Session;
import org.openslx.dozmod.thrift.UserCache;
import org.openslx.dozmod.util.FormatHelper;
import org.openslx.thrifthelper.ThriftManager;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;

public class ImageListWindow extends ImageListWindowLayout {

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


	public ImageListWindow(final Shell mainShell) {
		super(mainShell);

		// Comparator for column sorting
		ImageListComparator comparator = new ImageListComparator();
		tableViewer.setComparator(comparator);
		// creating the columns with sorting functionality through comparator
		TableHelper.createImageTableColumns(tableViewer);

		// filter the objects in the table depending on the search field
		searchTextField.addKeyListener(new KeyAdapter() {
			public void keyReleased(KeyEvent ke) {
				filter.setSearchText(searchTextField.getText());
				tableViewer.refresh();
			}
		});

		// apply object filtering
		filter = new ImageListFilter();
		tableViewer.addFilter(filter);

		// the listeners to set the detailed info of the selected image
		tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
			@Override
			public void selectionChanged(SelectionChangedEvent event) {
				IStructuredSelection selection = (IStructuredSelection) event.getSelection();
				ImageSummaryRead image = (ImageSummaryRead) selection.getFirstElement();
				if (image == null)
					return;
				// -- Set details --
				// set the image name
				setFieldText(imageSelectedNameLabel, image.getImageName());
				// set the image
				setFieldText(idInfo, image.getImageBaseId());
				// set the current version of the image
				setFieldText(versionInfo, image.getCurrentVersionId());
				// set the time, the image has last been updated
				lastUpdateInfo.setText(FormatHelper.shortDate(image.getUpdateTime()));
				// info about the image permissions
				ImagePermissions perms = image.getUserPermissions();
				if (perms == null)
					perms = image.getDefaultPermissions();
				if (perms != null)
					setFieldText(permissionInfo, perms.toString());
				// the owner id of the selected image
				UserInfo user = UserCache.find(image.getOwnerId());
				setFieldText(ownerInfo, FormatHelper.userName(user));

				// set the template info
				if (image.isTemplate) {
					templateInfo.setText("ja");
				} else {
					templateInfo.setText("Nein");
				}
			}

			private void setFieldText(Text control, String content) {
				if (content == null) {
					control.setText("<null>");
				} else {
					control.setText(content);
				}
			}
		});

		// Double click entry -> open details window
		tableViewer.addDoubleClickListener(new IDoubleClickListener() {
			@Override
			public void doubleClick(DoubleClickEvent event) {
				IStructuredSelection selection = (IStructuredSelection) event.getSelection();
				ImageSummaryRead image = (ImageSummaryRead) selection.getFirstElement();
				if (image == null)
					return;
				ImageDetailsWindow popup = MainWindow.openPopup(ImageDetailsWindow.class, true, false);
				if (popup != null)
					popup.setImage(image.getImageBaseId());
			}
		});

		newButton.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				ImageWizard wizard = new ImageWizard(false);
				WizardDialog wd = new WizardDialog(getShell(), wizard);
				refreshList(wd.open() == Window.OK);
			}
		});

		editButton.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				ImageWizard wizard = new ImageWizard(true);
				WizardDialog wd = new WizardDialog(getShell(), wizard);
				refreshList(wd.open() == Window.OK);
			}
		});

		//deleteImageVersion
		deleteButton.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(final SelectionEvent e) {
				IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection();
				if (selection == null) {
					MainWindow.showMessageBox("SELECIT ONULL!", MessageType.ERROR, LOGGER, null);
					return;
				}
				final ImageSummaryRead image = (ImageSummaryRead) selection.getFirstElement();
				if (image == null) {
					MainWindow.showMessageBox("IMAGE ONULL!", MessageType.ERROR, LOGGER, null);
					return;
				}
				LOGGER.debug("Trying to delete: " + image);

				QuickTimer.scheduleOnce(new Task() {
					@Override
					public void fire() {
						Throwable t = null;
						try {
							ThriftManager.getSatClient().deleteImageVersion(Session.getSatelliteToken(),
									image.getCurrentVersionId());
						} catch (Exception e) {
							t = e;
						}
						final Throwable t2 = t;
						Gui.display.asyncExec(new Runnable() {
							@Override
							public void run() {
								deleteCallback(image, t2);
							}
						});
					}
				});
			}
		});

		// return to mainMenu
		backButton.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				MainWindow.showPage(MainMenuWindow.class);
			}
		});
	}

	private void refreshList(final boolean forceRefresh) {
		if (isDisposed())
			return;
		tableViewer.getTable().setEnabled(false);
		QuickTimer.scheduleOnce(new Task() {
			@Override
			public void fire() {
				final List<ImageSummaryRead> imageList = ImageCache.get(forceRefresh);
				Gui.asyncExec(new Runnable() {
					@Override
					public void run() {
						if (isDisposed())
							return;
						tableViewer.setInput(imageList);
						tableViewer.refresh();
						tableViewer.getTable().setEnabled(true);
						newButton.setFocus();
					}
				});
			}
		});
	}

	@Override
	public boolean hide() {
		return true;
	}

	@Override
	public void show() {
		refreshList(false);
	}

	public void deleteCallback(ImageSummaryRead image, Throwable t) {
		if (t == null) {
			Gui.showMessageBox(getShell(), "Deleted image with UUID '" + image + "'.", MessageType.INFO,
					LOGGER, t);
		} else {
			Gui.showMessageBox(getShell(), "Failed to delete image!", MessageType.ERROR, LOGGER, t);
		}
	}

	public ImageSummaryRead getCurrentImageSummaryRead() {
		IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection();
		return (ImageSummaryRead) selection.getFirstElement();
	}
}