package org.zaproxy.zap.view.widgets;
import javax.swing.JComboBox;
import org.parosproxy.paros.control.Control;
import org.zaproxy.zap.extension.users.ExtensionUserManagement;
import org.zaproxy.zap.extension.users.UsersTableModel;
import org.zaproxy.zap.users.User;
import org.zaproxy.zap.view.renderer.UserListCellRenderer;
/**
* A ComboBox widget that displays the list of {@link User Users} based on the list of users that is
* currently being edited in Users Context Panel. This class should be used when displaying a
* combo-box for selecting a user in a Context Panel, as it uses the right list of Users: the latest
* list of Users as being defined in the Users Panel.
*/
public class ContextPanelUsersSelectComboBox extends JComboBox<User> {
private static final long serialVersionUID = 7254245073685076020L;
private static ExtensionUserManagement usersExtension;
private static void loadUsersManagementExtension() {
if (usersExtension == null) {
usersExtension = Control.getSingleton().getExtensionLoader()
.getExtension(ExtensionUserManagement.class);
if (usersExtension == null)
throw new IllegalStateException(
"Trying to create MultiUserSelectBox without the ExtensionUsersManagement"
+ " being enabled.");
}
}
/**
* Instantiates a new user select combo box.
*
* @param contextId the context id
*/
@SuppressWarnings("unchecked")
public ContextPanelUsersSelectComboBox(int contextId) {
super();
// Force loading the UserManagement extension to make sure it's enabled.
loadUsersManagementExtension();
UsersTableModel usersTableModel = usersExtension.getUIConfiguredUsersModel(contextId);
this.setModel(new UsersListModel(usersTableModel));
this.setRenderer(new UserListCellRenderer());
}
/**
* Performs the same as {@link #getSelectedItem()}, but adds a convenience cast.
* @return the selected user, or {@code null} if none
*/
public User getSelectedUser() {
return (User) getSelectedItem();
}
/**
* Allows adding 'custom' users besides the ones already loaded from the context. Can be used,
* for example, to add a 'Any User' entry or 'Unauthenticated' entry.
* @param customUsers the custom users, should not be {@code null}
*/
public void setCustomUsers(User[] customUsers) {
((UsersListModel) getModel()).setCustomUsers(customUsers);
}
/**
* Sets the selected item as the actual internal item with the same id as the provided user.
*
* @param user the new selected internal item
*/
public void setSelectedInternalItem(User user) {
((UsersListModel) getModel()).setSelectedInternalItem(user);
}
}