package net.curisit.securis.db; import java.io.Serializable; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.Table; import net.curisit.integrity.commons.Utils; import org.codehaus.jackson.annotate.JsonAutoDetect; import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonIgnoreProperties; import org.codehaus.jackson.annotate.JsonProperty; import org.codehaus.jackson.map.annotate.JsonSerialize; /** * Entity implementation class for Entity: license * */ @JsonAutoDetect @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @Entity @Table(name = "license") @JsonIgnoreProperties(ignoreUnknown = true) @NamedQueries({ @NamedQuery(name = "list-licenses-by-pack", query = "SELECT l FROM License l where l.pack.id = :packId") }) public class License implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private int id; private String code; @JsonIgnore @ManyToOne @JoinColumn(name = "pack_id") private Pack pack; @JsonIgnore @ManyToOne @JoinColumn(name = "created_by") private User createdBy; @JsonIgnore @ManyToOne @JoinColumn(name = "canceled_by") private User canceledBy; private int status; @Column(name = "full_name") @JsonProperty("full_name") private String fullName; private String email; @Column(name = "request_data") @JsonProperty("request_data") private String requestData; @Column(name = "license_data") @JsonProperty("license_data") private String licenseData; @Column(name = "creation_timestamp") private Date creationTimestamp; @Column(name = "modification_timestamp") private Date modificationTimestamp; @Column(name = "last_access_timestamp") private Date lastAccessTimestamp; @Column(name = "expiration_date") private Date expirationDate; private String comments; @OneToMany(fetch = FetchType.LAZY, mappedBy = "license") private List history; public int getId() { return id; } 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 User getCreatedBy() { return createdBy; } public void setCreatedBy(User createdBy) { this.createdBy = createdBy; } public Pack getPack() { return pack; } public void setPack(Pack pack) { this.pack = pack; } @JsonProperty("created_by_id") public String getCreatedById() { return createdBy == null ? null : createdBy.getUsername(); } @JsonProperty("created_by_id") public void setCreatedById(String username) { if (username == null) { createdBy = null; } else { createdBy = new User(); createdBy.setUsername(username); } } @JsonProperty("canceled_by_id") public String getCanceledById() { return canceledBy == null ? null : canceledBy.getUsername(); } @JsonProperty("canceled_by_id") public void setCanceledById(String username) { if (username == null) { canceledBy = null; } else { canceledBy = new User(); canceledBy.setUsername(username); } } @JsonProperty("pack_code") public String getPackCode() { return pack == null ? null : pack.getCode(); } @JsonProperty("pack_id") public Integer getPackId() { return pack == null ? null : pack.getId(); } @JsonProperty("pack_id") public void setPackId(Integer idPack) { if (idPack == null) { pack = null; } else { pack = new Pack(); pack.setId(idPack); } } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public Date getModificationTimestamp() { return modificationTimestamp; } public void setModificationTimestamp(Date modificationTimestamp) { this.modificationTimestamp = modificationTimestamp; } public String getFullName() { return fullName; } public void setFullName(String fullName) { this.fullName = fullName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public void setId(int id) { this.id = id; } public User getCanceledBy() { return canceledBy; } public void setCanceledBy(User canceledBy) { this.canceledBy = canceledBy; } public Date getLastAccessTimestamp() { return lastAccessTimestamp; } public void setLastAccessTimestamp(Date lastAccessTimestamp) { this.lastAccessTimestamp = lastAccessTimestamp; } public String getRequestData() { return requestData; } public void setRequestData(String requestData) { this.requestData = requestData; } public String getLicenseData() { return licenseData; } public void setLicenseData(String licenseData) { this.licenseData = licenseData; } public String getComments() { return comments; } public void setComments(String comments) { this.comments = comments; } public List getHistory() { return history; } public void setHistory(List history) { this.history = history; } public Date getExpirationDate() { return expirationDate; } public void setExpirationDate(Date expirationDate) { this.expirationDate = expirationDate; } public static class Action { public static final int CREATE = 1; public static final int REQUEST = 2; public static final int ACTIVATION = 3; public static final int SEND = 4; public static final int DOWNLOAD = 5; public static final int CANCEL = 6; public static final int DELETE = 7; } public static class Status { public static final int CREATED = 1; public static final int REQUESTED = 2; public static final int PREACTIVE = 3; public static final int ACTIVE = 4; public static final int EXPIRED = 5; public static final int CANCELED = 6; public static final int DELETED = 7; private static final Map> transitions = Utils.createMap( // Action.REQUEST, Arrays.asList(CREATED, REQUESTED), // Action.ACTIVATION, Arrays.asList(REQUESTED, PREACTIVE, EXPIRED), // Action.SEND, Arrays.asList(ACTIVE, PREACTIVE), // Action.DOWNLOAD, Arrays.asList(ACTIVE, PREACTIVE), // Action.CANCEL, Arrays.asList(ACTIVE, PREACTIVE, REQUESTED, EXPIRED), // Action.DELETE, Arrays.asList(CANCELED, CREATED) // ); /** * It checks if a given action is valid for the License, passing the * action and the current license status * * @param oldStatus * @param newStatus * @return */ public static boolean isActionValid(Integer action, Integer currentStatus) { List validStatuses = transitions.get(currentStatus); return validStatuses != null && validStatuses.contains(currentStatus); } } }