/* * 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
* Return associated metadata entries.
*
* @return metadata
*/
public Set
* Set associated metadata entries.
*
* @param metadata
*/
public void setMetadata(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 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); }
}