/* * Copyright @ 2013 CurisTEC, S.A.S. All Rights Reserved. */ package net.curisit.securis.db; import java.io.Serializable; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.JoinTable; import jakarta.persistence.ManyToMany; import jakarta.persistence.ManyToOne; import jakarta.persistence.NamedQueries; import jakarta.persistence.NamedQuery; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; /** * Organization *
* Represents a customer/tenant organization. Manages parent/children hierarchy
* and user membership.
*
* Mapping details:
* - Table: organization
* - ManyToMany users via user_organization (ignored in default JSON).
* - Self-referencing parent/children relation.
* - Named queries for listing, filtering by ids, and children discovery.
*
* @author JRA
* Last reviewed by JRA on Oct 5, 2025.
*/
@JsonAutoDetect
@JsonInclude(Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@Entity
@Table(name = "organization")
@NamedQueries({
@NamedQuery(name = "list-organizations", query = "SELECT o FROM Organization o"),
@NamedQuery(name = "list-organizations-by-ids", query = "SELECT o FROM Organization o where id in :list_ids"),
@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 = LogManager.getLogger(Organization.class);
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Integer id;
private String code;
private String name;
private String description;
@Column(name = "creation_timestamp")
@JsonProperty("creation_timestamp")
private Date creationTimestamp;
@JsonIgnore
@ManyToMany(cascade = CascadeType.REMOVE)
@JoinTable(name = "user_organization",
joinColumns = { @JoinColumn(name = "organization_id", referencedColumnName = "id") },
inverseJoinColumns = { @JoinColumn(name = "username", referencedColumnName = "username") })
private Set
* Return primary key.
*
* @return id
*/
public Integer getId() { return id; }
/**
* setId
* Set primary key.
*
* @param id
*/
public void setId(Integer id) { this.id = id; }
/**
* getName
* Return display name.
*
* @return name
*/
public String getName() { return name; }
/**
* setName
* Set display name.
*
* @param name
*/
public void setName(String name) { this.name = name; }
/**
* getDescription
* Return optional description.
*
* @return description
*/
public String getDescription() { return description; }
/**
* setDescription
* Set optional description.
*
* @param description
*/
public void setDescription(String description) { this.description = description; }
/**
* getCode
* Return short code.
*
* @return code
*/
public String getCode() { return code; }
/**
* setCode
* Set short code.
*
* @param code
*/
public void setCode(String code) { this.code = code; }
/**
* getCreationTimestamp
* Return creation timestamp.
*
* @return creationTimeStamp
*/
public Date getCreationTimestamp() { return creationTimestamp; }
/**
* setCreationTimestamp
* Set creation timestamp.
*
* @param creationTimestamp
*/
public void setCreationTimestamp(Date creationTimestamp) { this.creationTimestamp = creationTimestamp; }
/**
* getUsers
* Return member users (entity set).
*
* @return users
*/
public Set
* Set member users.
*
* @param users
*/
public void setUsers(Set
* Return parent org (entity).
*
* @return parentOrganization
*/
public Organization getParentOrganization() { return parentOrganization; }
/**
* setParentOrganization
* Set parent org (entity).
*
* @param parentOrganization
*/
public void setParentOrganization(Organization parentOrganization) { this.parentOrganization = parentOrganization; }
// JSON helpers for parent organization
/**
* setParentOrgId
* Setter by id (creates shallow Organization).
*
* @param orgId
*/
@JsonProperty("org_parent_id")
public void setParentOrgId(Integer orgId) {
if (orgId != null) {
parentOrganization = new Organization();
parentOrganization.setId(orgId);
} else {
parentOrganization = null;
}
}
/**
* getParentOrgId
* Expose parent org id.
*
* @return parentOrgId
*/
@JsonProperty("org_parent_id")
public Integer getParentOrgId() { return parentOrganization == null ? null : parentOrganization.getId(); }
/**
* getParentOrgName
* Expose parent org name.
*
* @return parentOrgName
*/
@JsonProperty("org_parent_name")
public String getParentOrgName() { return parentOrganization == null ? null : parentOrganization.getName(); }
// JSON helpers for users
/**
* setUsersIds
* Replace users set from a list of usernames.
*
* @param userId list
*/
@JsonProperty("users_ids")
public void setUsersIds(List
* Expose member usernames.
*
* @return userId list
*/
@JsonProperty("users_ids")
public Set Return children (entity set). */
public Set Set children (entity set). */
public void setChildOrganizations(Set