package org.ovirt.engine.core.common.businessentities; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Transient; import javax.validation.constraints.Size; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.ovirt.engine.core.common.businessentities.mapping.GuidType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.PropertyChangedEventArgs; import org.ovirt.engine.core.compat.StringHelper; @XmlAccessorType(XmlAccessType.NONE) @XmlType(name = "DbUser", namespace = "http://service.engine.ovirt.org") @Entity @Table(name = "users") @TypeDef(name = "guid", typeClass = GuidType.class) public class DbUser extends DbUserBase implements Serializable { private static final long serialVersionUID = 7052102138405696755L; @Id @GeneratedValue(generator = "system-uuid") @GenericGenerator(name = "system-uuid", strategy = "org.ovirt.engine.core.dao.GuidGenerator") @Column(name = "user_id") @Type(type = "guid") private Guid id = new Guid(); @Size(max = BusinessEntitiesDefinitions.USER_NAME_SIZE) @Column(name = "name") private String name = ""; @Size(max = BusinessEntitiesDefinitions.USER_SURENAME_SIZE) @Column(name = "surname") private String surname = ""; @Size(min = 1, max = BusinessEntitiesDefinitions.USER_DOMAIN_SIZE) @Column(name = "domain") private String domain; @Size(min = 1, max = BusinessEntitiesDefinitions.USER_USER_NAME_SIZE) @Column(name = "username") private String username = ""; @Size(min = 1, max = BusinessEntitiesDefinitions.GENERAL_MAX_SIZE) @Column(name = "groups", length = BusinessEntitiesDefinitions.GENERAL_MAX_SIZE) private String groups; @Size(max = BusinessEntitiesDefinitions.USER_DEPARTMENT_SIZE) @Column(name = "department") private String department = ""; @Size(max = BusinessEntitiesDefinitions.USER_ROLE_SIZE) @Column(name = "role") private String role = ""; @Size(max = BusinessEntitiesDefinitions.USER_ICON_PATH_SIZE) @Column(name = "user_icon_path") private String userIconPath = ""; @Size(max = BusinessEntitiesDefinitions.USER_DESKTOP_DEVICE_SIZE) @Column(name = "desktop_device") private String desktopDevice = ""; @Size(max = BusinessEntitiesDefinitions.USER_EMAIL_SIZE) @Column(name = "email") private String email; @Size(max = BusinessEntitiesDefinitions.USER_NOTE_SIZE) @Column(name = "note") private String note = ""; @Column(name = "status") private int status; @Column(name = "session_count") private int sessionCount; @Transient private boolean isLoggedIn; /** * 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 */ @XmlElement(name = "LastAdminCheckStatus") @Transient private boolean lastAdminCheckStatus; /** * comma delimited list of group guids */ @Size(max = BusinessEntitiesDefinitions.USER_GROUP_IDS_SIZE) @Column(name = "group_ids") private String groupIds; public DbUser() { } public DbUser(String department, String desktop_device, String domain, String email, String groups, String name, String note, String role, int status, String surname, String user_icon_path, Guid user_id, String username, int sessionCount, String groupIds) { this.department = department; this.desktopDevice = desktop_device; this.domain = domain; this.email = email; this.groups = groups; this.name = name; this.note = note; this.role = role; this.status = status; this.surname = surname; this.userIconPath = user_icon_path; this.id = user_id; this.username = username; this.sessionCount = sessionCount; this.setGroupIds(groupIds); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((department == null) ? 0 : department.hashCode()); result = prime * result + ((desktopDevice == null) ? 0 : desktopDevice .hashCode()); result = prime * result + ((domain == null) ? 0 : domain.hashCode()); result = prime * result + ((email == null) ? 0 : email.hashCode()); result = prime * result + ((groups == null) ? 0 : groups.hashCode()); result = prime * result + (isLoggedIn ? 1231 : 1237); result = prime * result + (lastAdminCheckStatus ? 1231 : 1237); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((note == null) ? 0 : note.hashCode()); result = prime * result + ((role == null) ? 0 : role.hashCode()); result = prime * result + sessionCount; result = prime * result + status; result = prime * result + ((surname == null) ? 0 : surname.hashCode()); result = prime * result + ((userIconPath == null) ? 0 : userIconPath .hashCode()); result = prime * result + ((id == null) ? 0 : id.hashCode()); result = prime * result + ((username == null) ? 0 : username.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; DbUser other = (DbUser) obj; if (department == null) { if (other.department != null) return false; } else if (!department.equals(other.department)) return false; if (desktopDevice == null) { if (other.desktopDevice != null) return false; } else if (!desktopDevice.equals(other.desktopDevice)) return false; if (domain == null) { if (other.domain != null) return false; } else if (!domain.equals(other.domain)) return false; if (email == null) { if (other.email != null) return false; } else if (!email.equals(other.email)) return false; if (groups == null) { if (other.groups != null) return false; } else if (!groups.equals(other.groups)) return false; if (isLoggedIn != other.isLoggedIn) return false; if (lastAdminCheckStatus != other.lastAdminCheckStatus) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (note == null) { if (other.note != null) return false; } else if (!note.equals(other.note)) return false; if (role == null) { if (other.role != null) return false; } else if (!role.equals(other.role)) return false; if (sessionCount != other.sessionCount) return false; if (status != other.status) return false; if (surname == null) { if (other.surname != null) return false; } else if (!surname.equals(other.surname)) return false; if (userIconPath == null) { if (other.userIconPath != null) return false; } else if (!userIconPath.equals(other.userIconPath)) return false; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; if (username == null) { if (other.username != null) return false; } else if (!username.equals(other.username)) return false; return true; } @XmlElement public String getdepartment() { return this.department; } public void setdepartment(String value) { this.department = value; } @XmlElement public String getdesktop_device() { return this.desktopDevice; } public void setdesktop_device(String value) { this.desktopDevice = value; } @XmlElement public String getdomain() { return this.domain; } public void setdomain(String value) { this.domain = value; } @XmlElement public String getemail() { return this.email; } public void setemail(String value) { this.email = value; } @XmlElement public String getgroups() { return this.groups; } public void setgroups(String value) { this.groups = value; OnPropertyChanged(new PropertyChangedEventArgs("groups")); } @XmlElement public String getname() { return this.name; } public void setname(String value) { if (!StringHelper.EqOp(this.name, value)) { this.name = value; OnPropertyChanged(new PropertyChangedEventArgs("name")); } } @XmlElement public String getnote() { return this.note; } public void setnote(String value) { this.note = value; } @XmlElement public String getrole() { return this.role; } public void setrole(String value) { this.role = value; } @XmlElement public int getstatus() { return this.status; } public void setstatus(int value) { this.status = value; } @XmlElement public String getsurname() { return this.surname; } public void setsurname(String value) { this.surname = value; OnPropertyChanged(new PropertyChangedEventArgs("surname")); } @XmlElement public String getuser_icon_path() { return this.userIconPath; } public void setuser_icon_path(String value) { this.userIconPath = value; } @XmlElement(name = "user_id") public Guid getuser_id() { return this.id; } public void setuser_id(Guid value) { this.id = value; } @XmlElement(name = "username") public String getusername() { return this.username; } public void setusername(String value) { this.username = value; OnPropertyChanged(new PropertyChangedEventArgs("username")); } @XmlElement public int getsession_count() { return sessionCount; } public void setsession_count(int value) { sessionCount = value; OnPropertyChanged(new PropertyChangedEventArgs("session_count")); setIsLogedin((sessionCount > 0)); } @XmlElement(name = "IsLogedin") public boolean getIsLogedin() { return isLoggedIn; } public void setIsLogedin(boolean value) { isLoggedIn = value; OnPropertyChanged(new PropertyChangedEventArgs("IsLogedin")); } public DbUser(AdUser adUser) { setuser_id(adUser.getUserId()); setusername(adUser.getUserName()); setname(adUser.getName()); setsurname(adUser.getSurName()); setdepartment(adUser.getDepartment()); setdomain(adUser.getDomainControler()); setemail(adUser.getEmail()); setgroups(adUser.getGroup()); setstatus(AdRefStatus.Active.getValue()); setGroupIds(adUser.getGroupIds()); } public AdRefStatus getAdStatus() { if (getstatus() == 0) { return AdRefStatus.Inactive; } else { return AdRefStatus.Active; } } public boolean getIsGroup() { return StringHelper.isNullOrEmpty(getusername()); } public void setIsGroup(boolean value) { // do nothing for nothing } @Override public Object getQueryableId() { return getuser_id(); } private static final java.util.ArrayList<String> _vmProperties = new java.util.ArrayList<String>(java.util.Arrays .asList(new String[] { "name", "surname", "username", "groups", "session_count", "IsLogedin", "LastAdminCheckStatus" })); @Override public java.util.ArrayList<String> getChangeablePropertiesList() { return _vmProperties; } public void setLastAdminCheckStatus(boolean val) { this.lastAdminCheckStatus = val; } public boolean getLastAdminCheckStatus() { return lastAdminCheckStatus; } /** * Returns the user's given and family name and username in a standard format. * * @return the coalesced name */ public String getCoalescedName() { return name + " " + surname + " (" + username + ")"; } /** * Returns the set of group names as an array. * * @return the group names */ public String[] getGroupsAsArray() { return groups.split(","); } public void setGroupIds(String groupIds) { this.groupIds = groupIds; } public String getGroupIds() { return groupIds; } }