package fr.openwide.maven.artifact.notifier.core.business.artifact.model; import java.util.Date; import javax.persistence.Cacheable; import javax.persistence.Column; import javax.persistence.Embedded; import javax.persistence.Entity; 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.util.MavenCentralVersionComparator; import fr.openwide.maven.artifact.notifier.core.business.project.model.ProjectVersion; import fr.openwide.maven.artifact.notifier.core.business.project.model.VersionAdditionalInformation; @Indexed @Bindable @Cacheable @Entity @Table(uniqueConstraints = { @UniqueConstraint(columnNames = { "artifact_id", "version" }) }) public class ArtifactVersion extends GenericEntity<Long, ArtifactVersion> implements IComparableVersion { private static final long serialVersionUID = -5029816694989808672L; @Id @GeneratedValue @DocumentId private Long id; @ManyToOne(fetch = FetchType.LAZY) private Artifact artifact; @Column(nullable = false) private String version; @Embedded private VersionAdditionalInformation additionalInformation = new VersionAdditionalInformation(); @ManyToOne(fetch = FetchType.LAZY) private ProjectVersion projectVersion; @Column(nullable = false) private Date lastUpdateDate; @Column private Date importDate; protected ArtifactVersion() { } public ArtifactVersion(String version, Date lastUpdateDate) { this.version = version; this.lastUpdateDate = CloneUtils.clone(lastUpdateDate); this.importDate = new Date(); } @Override public Long getId() { return id; } @Override public void setId(Long id) { this.id = id; } public Artifact getArtifact() { return artifact; } public void setArtifact(Artifact artifact) { this.artifact = artifact; } @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 ProjectVersion getProjectVersion() { return projectVersion; } public void setProjectVersion(ProjectVersion projectVersion) { this.projectVersion = projectVersion; } @Override public Date getLastUpdateDate() { return CloneUtils.clone(lastUpdateDate); } public void setLastUpdateDate(Date lastUpdateDate) { this.lastUpdateDate = CloneUtils.clone(lastUpdateDate); } public Date getImportDate() { return CloneUtils.clone(importDate); } public void setImportDate(Date importDate) { this.importDate = CloneUtils.clone(importDate); } @Override @JsonIgnore public String getNameForToString() { return version; } @Override @JsonIgnore public String getDisplayName() { return version; } @Override public int compareTo(ArtifactVersion other) { if (this.equals(other)) { return 0; } if (artifact != null) { int compareArtifact = artifact.compareTo(other.getArtifact()); if (compareArtifact != 0) { return compareArtifact; } } return MavenCentralVersionComparator.reverse().compare(this, other); } }