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

                                      
                      






                                     
                           

                      




                                          



                                                                 
                                         
                                                 







                                                                                    







                                                                                                                
 






                                                                    






                                                                                                                      







                                                                                                  
 

                         
 














                                                                                          

                                                                                                                   

                                                                                                                  




                                                                                 
                                                                  

                                                                    










                                                                                  
                         

                   
                                                          
 
                                                               






                                                                
                                                        

         

                                                                                                      

         
package org.openslx.dozmod.gui.window;

import java.awt.Color;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.RowFilter;
import javax.swing.UIManager;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.window.layout.UserListWindowLayout;
import org.openslx.dozmod.thrift.Session;
import org.openslx.dozmod.thrift.cache.UserCache;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;

@SuppressWarnings("serial")
public class UserListWindow extends UserListWindowLayout {

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

	private final UserListWindow me = this;

	public interface UserAddedCallback {
		public void userAdded(UserInfo user, UserListWindow window);
	}

	public UserListWindow(final Frame modalParent, final UserAddedCallback callback, String actionCaption) {
		super(modalParent, actionCaption);

		addWindowListener(new WindowAdapter() {
			@Override
			public void windowOpened(WindowEvent e) {
				// load the user cache async
				QuickTimer.scheduleOnce(new Task() {
					@Override
					public void fire() {
						final List<UserInfo> cacheList = UserCache.getAll();
						final List<UserInfo> userList = new ArrayList<>(cacheList.size() - 1);
						for (UserInfo user : cacheList) {
							if (user.getUserId().equals(Session.getUserId()))
								continue;
							userList.add(user);
						}
						Gui.asyncExec(new Runnable() {
							@Override
							public void run() {
								userTable.setData(userList, true);
							}
						});
					}
				});

			}
		});

		// filter the objects in the table depending on the search field
		searchUserField.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) {
				try {
					userTable.getRowSorter().setRowFilter(
							RowFilter.regexFilter("(?i)" + searchUserField.getText()));
					searchUserField.setForeground(UIManager.getColor("TextField.foreground"));
				} catch (IllegalArgumentException ex) {
					searchUserField.setForeground(Color.RED);
				}
			}
		});

		setButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				final UserInfo user = userTable.getSelectedItem();
				if (user == null)
					return;
				callback.userAdded(user, me);
			}
		});

		cancelButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				dispose();
			}
		});

		getRootPane().setDefaultButton(setButton);

		userTable.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				if (e.getClickCount() == 2) {
					setButton.doClick();
				}
			}
		});
		this.setLocationRelativeTo(modalParent);
	}

	public static void open(Frame modalParent, UserAddedCallback callback, String actionCaption) {
		new UserListWindow(modalParent, callback, actionCaption).setVisible(true);
	}
}