package org.ovirt.engine.core.common.businessentities.aaa;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Objects;
import javax.validation.constraints.Size;
import org.ovirt.engine.core.aaa.DirectoryGroup;
import org.ovirt.engine.core.aaa.DirectoryUser;
import org.ovirt.engine.core.common.businessentities.BusinessEntitiesDefinitions;
import org.ovirt.engine.core.common.businessentities.IVdcQueryable;
import org.ovirt.engine.core.compat.Guid;
public class DbUser implements IVdcQueryable {
private static final long serialVersionUID = 7052102138405696755L;
/**
* This is the identifier assigned by the engine to this user for internal
* use only.
*/
private Guid id;
/**
* This is the identifier assigned by the external directory to this user.
*/
private String externalId;
@Size(min = 1, max = BusinessEntitiesDefinitions.USER_DOMAIN_SIZE)
private String domain;
@Size(min = 1, max = BusinessEntitiesDefinitions.USER_NAMESPACE_SIZE)
private String namespace;
@Size(min = 1, max = BusinessEntitiesDefinitions.USER_LOGIN_NAME_SIZE)
private String loginName;
@Size(max = BusinessEntitiesDefinitions.USER_FIRST_NAME_SIZE)
private String firstName;
@Size(max = BusinessEntitiesDefinitions.USER_LAST_NAME_SIZE)
private String lastName;
@Size(max = BusinessEntitiesDefinitions.USER_DEPARTMENT_SIZE)
private String department;
@Size(max = BusinessEntitiesDefinitions.USER_EMAIL_SIZE)
private String email;
@Size(max = BusinessEntitiesDefinitions.USER_NOTE_SIZE)
private String note;
/**
* GUI flag only. Do not use for internal logic. The sole purpose of
* calculating this field is for the GUI user to understand who is admin in
* a snap on the user grid.
*/
private boolean isAdmin;
private Collection<String> groupNames;
/**
* Comma delimited list of group identifiers.
*/
private Collection<Guid> groupIds;
public DbUser() {
this((DbUser)null);
}
public DbUser(DirectoryUser directoryUser) {
externalId = directoryUser.getId();
domain = directoryUser.getDirectoryName();
namespace = directoryUser.getNamespace();
loginName = directoryUser.getPrincipal() != null ? directoryUser.getPrincipal() : directoryUser.getName();
firstName = directoryUser.getFirstName();
lastName = directoryUser.getLastName();
department = directoryUser.getDepartment();
email = directoryUser.getEmail();
note = "";
groupNames = new HashSet<>();
for (DirectoryGroup directoryGroup : directoryUser.getGroups()) {
groupNames.add(directoryGroup.getName());
}
}
public DbUser(DbUser dbUser) {
if (dbUser == null) {
loginName = "";
firstName = "";
lastName = "";
department = "";
groupNames = Collections.emptyList();
groupIds = Collections.emptyList();
note = "";
} else {
id = dbUser.getId();
externalId = dbUser.getExternalId();
domain = dbUser.getDomain();
namespace = dbUser.getNamespace();
loginName = dbUser.getLoginName();
firstName = dbUser.getFirstName();
lastName = dbUser.getLastName();
department = dbUser.getDepartment();
email = dbUser.getEmail();
note = dbUser.getNote();
groupIds = new ArrayList<>(dbUser.getGroupIds());
groupNames = new ArrayList<>(dbUser.getGroupNames());
isAdmin = dbUser.isAdmin();
}
}
public Guid getId() {
return id;
}
public void setId(Guid id) {
this.id = id;
}
public String getExternalId() {
return externalId;
}
public void setExternalId(String externalId) {
this.externalId = externalId;
}
public String getNamespace() {
return namespace;
}
public void setNamespace(String value) {
namespace = value;
}
public String getDomain() {
return domain;
}
public void setDomain(String value) {
domain = value;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String value) {
loginName = value;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String value) {
firstName = value;
}
public String getLastName() {
return lastName;
}
public void setLastName(String value) {
lastName = value;
}
public String getDepartment() {
return department;
}
public void setDepartment(String value) {
department = value;
}
public String getEmail() {
return email;
}
public void setEmail(String value) {
email = value;
}
public Collection<String> getGroupNames() {
return new ArrayList<>(groupNames);
}
public void setGroupNames(Collection<String> value) {
groupNames = new HashSet<>(value);
}
public String getNote() {
return note;
}
public void setNote(String value) {
note = value;
}
public boolean isGroup() {
return loginName == null || loginName.trim().isEmpty();
}
@Override
public Object getQueryableId() {
return getId();
}
public void setAdmin(boolean value) {
isAdmin = value;
}
public boolean isAdmin() {
return isAdmin;
}
public void setGroupIds(Collection<Guid> groupIds) {
this.groupIds = new HashSet<>(groupIds);
}
public Collection<Guid> getGroupIds() {
if (groupIds == null) {
groupIds = Collections.emptyList();
}
return new ArrayList<>(groupIds);
}
@Override
public int hashCode() {
return Objects.hash(
externalId,
department,
domain,
namespace,
email,
isAdmin,
firstName,
note,
lastName,
loginName
);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof DbUser)) {
return false;
}
DbUser other = (DbUser) obj;
return Objects.equals(externalId, other.externalId)
&& Objects.equals(department, other.department)
&& Objects.equals(domain, other.domain)
&& Objects.equals(namespace, other.namespace)
&& Objects.equals(email, other.email)
&& Objects.equals(firstName, other.firstName)
&& Objects.equals(note, other.note)
&& Objects.equals(lastName, other.lastName)
&& Objects.equals(loginName, other.loginName)
&& Objects.equals(isAdmin, other.isAdmin);
}
}