/* * 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.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.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.JsonManagedReference; import com.fasterxml.jackson.annotation.JsonProperty; /** * LicenseType *

* Describes a license category within an application. Owns metadata entries. * * Mapping details: * - Table: license_type * - Many-to-one to Application (lazy). * - One-to-many metadata with cascade PERSIST/REMOVE/REFRESH. * - Named queries for listing and filtering by application(s). * * @author JRA * Last reviewed by JRA on Oct 5, 2025. */ @JsonAutoDetect @JsonInclude(Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) @Entity @Table(name = "license_type") @NamedQueries({ @NamedQuery(name = "list-license_types", query = "SELECT lt FROM LicenseType lt"), @NamedQuery(name = "list-license_types-by_apps-id", query = "SELECT lt FROM LicenseType lt where lt.application.id in :list_ids"), @NamedQuery(name = "list-application-license_types", query = "SELECT lt FROM LicenseType lt where lt.application.id = :appId") }) public class LicenseType implements Serializable { @SuppressWarnings("unused") private static final Logger LOG = LogManager.getLogger(LicenseType.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 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "application_id") private Application application; @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.REFRESH }, mappedBy = "licenseType") @JsonManagedReference private Set metadata; // ---------------- Getters & setters ---------------- /** * getMetadata

* Return associated metadata entries. * * @return metadata */ public Set getMetadata() { return metadata; } /** * setMetadata

* Set associated metadata entries. * * @param metadata */ public void setMetadata(Set metadata) { this.metadata = metadata; } /** * getId

* 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 description. * * @return description */ public String getDescription() { return description; } /** * setDescription

* Set 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; } /** * getApplication

* Return owning application (entity). * * @return application */ public Application getApplication() { return application; } /** * getApplicationName

* Expose app name for JSON. * * @return appName */ @JsonProperty("application_name") public String getApplicationName() { return application == null ? null : application.getName(); } /** * getApplicationId

* Expose app id for JSON. * * @return appId */ @JsonProperty("application_id") public Integer getApplicationId() { return application == null ? null : application.getId(); } /** * setApplicationId

* Setter by id for JSON binding (creates shallow Application). * * @param appId */ @JsonProperty("application_id") public void setApplicationId(Integer appId) { if (appId == null) { application = null; } else { application = new Application(); application.setId(appId); } } /** * setApplication

* Set owning application (entity). * * @param application */ public void setApplication(Application application) { this.application = application; } /** * 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; } // ---------------- Object methods ---------------- /** * equals

* Compare the current object with the given object * * @param object * @return isEquals */ @Override public boolean equals(Object obj) { if (!(obj instanceof LicenseType)) return false; LicenseType other = (LicenseType) obj; return id != null && id.equals(other.id); } /** * hashCode

* Get the object hashCode * * @return hashCode */ @Override public int hashCode() { return (id == null ? 0 : id.hashCode()); } /** * toString

* Get the string describing the current object * * @return object string */ @Override public String toString() { return String.format("LT: ID: %d, code: %s", id, code); } }