package fr.openwide.maven.artifact.notifier.core.business.project.model; import java.util.Date; import javax.persistence.Cacheable; import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import org.bindgen.Bindable; import org.hibernate.search.annotations.DocumentId; import org.hibernate.search.annotations.Indexed; import com.fasterxml.jackson.annotation.JsonIgnore; import fr.openwide.core.commons.util.CloneUtils; import fr.openwide.core.jpa.business.generic.model.GenericEntity; import fr.openwide.maven.artifact.notifier.core.business.artifact.model.IComparableVersion; import fr.openwide.maven.artifact.notifier.core.business.artifact.util.MavenCentralVersionComparator; @Indexed @Bindable @Cacheable @Entity @Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "project_id", "version" }) }) public class ProjectVersion extends GenericEntity<Long, ProjectVersion> implements IComparableVersion { private static final long serialVersionUID = -2763422157287695696L; @Id @GeneratedValue @DocumentId private Long id; @ManyToOne(fetch = FetchType.LAZY) private Project project; @Column(nullable = false) private String version; @Embedded private VersionAdditionalInformation additionalInformation = new VersionAdditionalInformation(); @Column(nullable = false) @Enumerated(EnumType.STRING) private ProjectVersionStatus status = ProjectVersionStatus.IN_PROGRESS; @Column(nullable = false) private Date creationDate; @Column(nullable = false) private Date lastUpdateDate; protected ProjectVersion() { } public ProjectVersion(String version) { this.version = version; this.lastUpdateDate = new Date(); this.creationDate = new Date(); } @Override public Long getId() { return id; } @Override public void setId(Long id) { this.id = id; } public Project getProject() { return project; } public void setProject(Project project) { this.project = project; } @Override public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public VersionAdditionalInformation getAdditionalInformation() { if (additionalInformation == null) { additionalInformation = new VersionAdditionalInformation(); } return additionalInformation; } public void setAdditionalInformation(VersionAdditionalInformation additionalInformation) { this.additionalInformation = additionalInformation; } public ProjectVersionStatus getStatus() { return status; } public void setStatus(ProjectVersionStatus status) { this.status = status; } @Override public Date getLastUpdateDate() { return CloneUtils.clone(lastUpdateDate); } public void setLastUpdateDate(Date lastUpdateDate) { this.lastUpdateDate = CloneUtils.clone(lastUpdateDate); } public Date getCreationDate() { return CloneUtils.clone(creationDate); } public void setCreationDate(Date creationDate) { this.creationDate = CloneUtils.clone(creationDate); } @Override @JsonIgnore public String getNameForToString() { return version; } @Override @JsonIgnore public String getDisplayName() { return version; } @Override public int compareTo(ProjectVersion other) { if (this.equals(other)) { return 0; } return MavenCentralVersionComparator.reverse().compare(this, other); } }