package net.curisit.securis.db; import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; import org.codehaus.jackson.annotate.JsonAutoDetect; import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonProperty; import org.codehaus.jackson.map.annotate.JsonSerialize; /** * Entity implementation class for Entity: Users * */ @JsonAutoDetect @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @Entity @Table(name = "user") @NamedQueries({ @NamedQuery(name = "list-users", query = "SELECT u FROM User u"), @NamedQuery(name = "get-user", query = "SELECT u FROM User u where u.username = :username"), @NamedQuery(name = "auth-user", query = "SELECT u FROM User u where u.username = :username and u.password = :password"), @NamedQuery(name = "delete-all-users", query = "delete FROM User u") }) public class User implements Serializable { private static final long serialVersionUID = 1L; @Id private String username; private String password; @JsonProperty(value = "first_name") @Column(name = "first_name") private String firstName; @JsonProperty(value = "last_name") @Column(name = "last_name") private String lastName; private int roles; @Column(name = "last_login") private Date lastLogin; @Column(name = "modification_timestamp") private Date modificationTimestamp; @Column(name = "creation_timestamp") @JsonProperty("creation_timestamp") private Date creationTimestamp; private String lang; @JsonIgnore @ManyToMany @JoinTable(name = "user_organization", // joinColumns = { @JoinColumn(name = "username", referencedColumnName = "username") }, // inverseJoinColumns = { @JoinColumn(name = "organization_id", referencedColumnName = "id") } // ) private Set organizations; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @JsonProperty("password") public String getDummyPassword() { return null; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public List getRoles() { if (roles == 0) { return null; } List aux = new ArrayList<>(); for (int rol : Rol.ALL) { if ((roles & rol) != 0) { // Each rol is a number with only 1 bit == // 1 in binary representation aux.add(rol); } } return aux; } public void setRoles(List roles) { this.roles = 0; if (roles != null) { for (Integer rol : roles) { this.roles |= rol; } } } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Date getLastLogin() { return lastLogin; } public void setLastLogin(Date lastLogin) { this.lastLogin = lastLogin; } public Date getModificationTimestamp() { return modificationTimestamp; } public void setModificationTimestamp(Date modificationTimestamp) { this.modificationTimestamp = modificationTimestamp; } public Date getCreationTimestamp() { return creationTimestamp; } public void setCreationTimestamp(Date creationTimestamp) { this.creationTimestamp = creationTimestamp; } @Override public String toString() { return "{User: " + username + " Name: " + firstName + " " + lastName + ", last login: " + lastLogin + "}"; } public String getLang() { return lang; } public void setLang(String lang) { this.lang = lang; } public Set getOrganizations() { return organizations; } public void setOrganizations(Set organizations) { this.organizations = organizations; } @JsonProperty("organizations_ids") public void setOrgsIds(List orgsIds) { organizations = new HashSet<>(); for (Integer orgid : orgsIds) { Organization o = new Organization(); o.setId(orgid); organizations.add(o); } } @JsonProperty("organizations_ids") public Set getOrgsIds() { if (organizations == null) { return null; } Set ids = new HashSet<>(); for (Organization org : organizations) { ids.add(org.getId()); } return ids; } @JsonIgnore public Set getAllOrgsIds() { if (organizations == null) { return null; } Set ids = new HashSet<>(); includeAllOrgs(this.organizations, ids); return ids; } private void includeAllOrgs(Set list, Set orgIds) { for (Organization org : list) { orgIds.add(org.getId()); includeAllOrgs(org.getChildOrganizations(), orgIds); } } public static class Rol { public static final int ADVANCE = 0x01; public static final int ADMIN = 0x02; public static final int[] ALL = new int[] { ADVANCE, ADMIN }; } }