package net.curisit.securis.db; import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; 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; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Entity implementation class for Entity: organization * */ @JsonAutoDetect @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @Entity @Table(name = "organization") @NamedQueries( { @NamedQuery(name = "list-organizations", query = "SELECT o FROM Organization o"), @NamedQuery(name = "find-children-org", query = "SELECT o FROM Organization o where o.parentOrganization = :parentOrganization") }) public class Organization implements Serializable { @SuppressWarnings("unused") private static final Logger log = LoggerFactory.getLogger(Organization.class); private static final long serialVersionUID = 1L; @Id @GeneratedValue private int id; private String code; private String name; private String description; @Column(name = "creation_timestamp") private Date creationTimestamp; @JsonIgnore // We don't include the users to limit the size of each row a the listing @ManyToMany(cascade = CascadeType.REMOVE) @JoinTable(name = "user_organization", // joinColumns = { @JoinColumn(name = "organization_id", referencedColumnName = "id") }, // inverseJoinColumns = { @JoinColumn(name = "username", referencedColumnName = "username") }) private List users; @JsonIgnore // We don't include the users to limit the size of each row a the listing @ManyToOne @JoinColumn(name = "org_parent_id") private Organization parentOrganization; @JsonIgnore // We don't include the users to limit the size of each row a the listing @OneToMany(mappedBy = "parentOrganization") private Set childOrganizations; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public Date getCreationTimestamp() { return creationTimestamp; } public void setCreationTimestamp(Date creationTimestamp) { this.creationTimestamp = creationTimestamp; } public List getUsers() { return users; } public void setUsers(List users) { this.users = users; } public Organization getParentOrganization() { return parentOrganization; } public void setParentOrganization(Organization parentOrganization) { this.parentOrganization = parentOrganization; } // Roberto: Following methods are necessary to include in the REST list response // information about the referenced entities. @JsonProperty("org_parent_id") public void setParentOrgId(Integer orgId) { parentOrganization = new Organization(); parentOrganization.setId(orgId); } @JsonProperty("org_parent_id") public Integer getParentOrgId() { return parentOrganization == null ? null : parentOrganization.getId(); } @JsonProperty("org_parent_name") public String getParentOrgName() { return parentOrganization == null ? null : parentOrganization.getName(); } @JsonProperty("users_ids") public void setUsersIds(List usersIds) { users = new ArrayList<>(); for (String userid : usersIds) { User u = new User(); u.setUsername(userid); users.add(u); } } @JsonProperty("users_ids") public List getUsersIds() { if (users == null) return null; List ids = new ArrayList<>(); for (User user : users) { ids.add(user.getUsername()); } return ids; } public Set getChildOrganizations() { return childOrganizations; } public void setChildOrganizations(Set childOrganizations) { this.childOrganizations = childOrganizations; } }