blob: ba8b4d7efd88107594b4b9f8c3a077b6d58fa6eb (
plain) (
tree)
|
|
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);
}
}
|