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

                                      











                                               
 
                               
                                       
                                             

                                         

                                               
                                     
                                    
                                                      
                                                      
                                              
                                  
                                         
                                                     
                                                 
                                                         
                                                                  
                                                 
                                            
                                           
                                            


                                                            

                                                                                     
                                                                                       
 

                                                       










                                                                                          

                                                                                                                 

                                                                                        
                                                                                       




                                                                                                                                  



                                                                              
                                                                                        




                                                                            

                                                                             
                                                                      
                                                                                               





                                                                                                                                          




                                                                                                                                                               
                                                                                                                       




                                                                 

                         

                                                                                
                                 
                                                              


                                                                              


                                                                                                 
                                                                                                           




                                                                                                


                         




                                                                                       
                                                                    


                         







                                                                                       
 


                                                                        
                                 





                                                                          
                
 
         
 
                                                              

                                 
                                                           
                                 

















                                                                                                             

                         

         






                               
                                   

         
                                                                          
                                

                                                                                                                    
                        


                                                                                                                
 
                                                               
























                                                                                      
        





                                                                 
         
 
package org.openslx.dozmod.gui.window;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;

import javax.swing.RowFilter;
import javax.swing.RowSorter;
import javax.swing.RowSorter.SortKey;
import javax.swing.SortOrder;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableRowSorter;

import org.apache.log4j.Logger;
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.ImageTableModel;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.helper.TableColumnAdjuster;
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.UserCache;
import org.openslx.dozmod.util.FormatHelper;

public class ImageListWindow extends ImageListWindowLayout {

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

	TableRowSorter<ImageTableModel> sorter = new TableRowSorter<ImageTableModel>();

	public ImageListWindow(final Shell mainShell) {
		super(mainShell);
      
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				ImageTableModel itm = new ImageTableModel();
				sorter.setSortsOnUpdates(true);
				sorter.setModel(itm);
				ArrayList<SortKey> list = new ArrayList<SortKey>();
				list.add( new RowSorter.SortKey(0, SortOrder.ASCENDING) );
				sorter.setSortKeys(list);
				jtable.setRowSorter(sorter);
				jtable.setModel(itm);
				// SWING TABLE STUFF
				jtable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
					@Override
					public void valueChanged(ListSelectionEvent e) {
						int rowIndex = jtable.getSelectedRow();
						if (rowIndex == -1)
							return;
						ImageTableModel model = (ImageTableModel) jtable.getModel();
						final ImageSummaryRead image = model.get(jtable.convertRowIndexToModel(rowIndex));
						LOGGER.debug(image);
						if (image == null)
							return;
						Gui.asyncExec(new Runnable() {
							public void run() {
								updateDetailPane(image);
							}
						});
					}
				});
				jtable.addMouseListener(new MouseAdapter() {
					@Override
				    public void mouseClicked(MouseEvent me) {
				        if (me.getClickCount() == 2) {
							int rowIndex = jtable.getSelectedRow();
							if (rowIndex == -1)
								return;
							ImageTableModel model = (ImageTableModel) jtable.getModel();
							final ImageSummaryRead image = model.get(jtable.convertRowIndexToModel(rowIndex));
							LOGGER.debug(image);
							if (image == null)
								return;
							Gui.asyncExec(new Runnable() {
								public void run() {
									ImageDetailsWindow popup = MainWindow.openPopup(ImageDetailsWindow.class, true, false);
									if (popup != null)
										popup.setImage(image.getImageBaseId());
								}
							});
				        }
				    }
				});
			}
		});
		// filter the objects in the table depending on the search field
		searchTextField.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent ke) {
				final String term = searchTextField.getText();
				SwingUtilities.invokeLater(new Runnable() {
					@Override
					public void run() {
						RowFilter<ImageTableModel, Object> filter = null;
						try {
							filter = RowFilter.regexFilter(".*" + term + ".*");
					    } catch (java.util.regex.PatternSyntaxException e) {
					        return;
					    }
						sorter.setRowFilter(filter);
					}});
			}
		});

		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);
//			}
//		});


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

	}

	private void refreshList(final boolean forceRefresh) {
		if (isDisposed())
			return;
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				ImageTableModel itm = (ImageTableModel) jtable.getModel();
				itm.setItems(ImageCache.get(forceRefresh));
				itm.fireTableDataChanged();
			
				if (sorter.getSortKeys().isEmpty()) {
					ArrayList<SortKey> list = new ArrayList<SortKey>();
					list.add( new RowSorter.SortKey(0, SortOrder.ASCENDING) );
					sorter.setSortKeys(list);
					LOGGER.debug("Sortkeys: " + sorter.getSortKeys().get(0).getColumn());
				} else {
					LOGGER.debug("Existing: " + sorter.getSortKeys().get(0).getColumn());
				}

				sorter.sort();
				TableColumnAdjuster tca = new TableColumnAdjuster(jtable);
				tca.adjustColumns();

			}
		});
	}

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

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

	private 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);
		}
	}

	private void updateDetailPane(ImageSummaryRead image) {
		// -- 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);
		}
	}
}