package org.gbif.ipt.model;
import org.gbif.api.model.common.DOI;
import org.gbif.ipt.model.voc.IdentifierStatus;
import org.gbif.ipt.model.voc.PublicationStatus;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
import javax.annotation.Nullable;
import javax.validation.constraints.NotNull;
import com.google.common.collect.Maps;
/**
* Class representing all the essential information about a historical version of a resource.
*/
public class VersionHistory {
private DOI doi;
private String version;
private Date released;
private IdentifierStatus status;
private PublicationStatus publicationStatus;
private User modifiedBy;
private String changeSummary;
private int recordsPublished;
// record counts by extension: Map<rowType, count>
private Map<String, Integer> recordsByExtension = Maps.newHashMap();
public VersionHistory(BigDecimal version, Date released, PublicationStatus publicationStatus) {
this.version = version.toPlainString();
this.released = released;
this.publicationStatus = publicationStatus;
}
public VersionHistory(BigDecimal version, PublicationStatus publicationStatus) {
this.version = version.toPlainString();
this.publicationStatus = publicationStatus;
}
/**
* @return the doi of this version, always in prefix/suffix format excluding "doi:", e.g. 10.1234/qu83ng
*/
@Nullable
public DOI getDoi() {
return doi;
}
public void setDoi(DOI doi) {
this.doi = doi;
}
/**
* @return the version number
*/
@NotNull
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
/**
* @return the date this version was released
*/
public Date getReleased() {
return released;
}
public void setReleased(Date released) {
this.released = released;
}
/**
* @return the doi status
*/
@Nullable
public IdentifierStatus getStatus() {
return status;
}
public void setStatus(IdentifierStatus status) {
this.status = status;
}
/**
* @return the user that last modified the history (the change summary is editable after publication)
*/
@Nullable
public User getModifiedBy() {
return modifiedBy;
}
public void setModifiedBy(User modifiedBy) {
this.modifiedBy = modifiedBy;
}
/**
* @return the change summary for this version
*/
@Nullable
public String getChangeSummary() {
return changeSummary;
}
public void setChangeSummary(String changeSummary) {
this.changeSummary = changeSummary;
}
/**
* @return the number of records published in this version
*/
public int getRecordsPublished() {
return recordsPublished;
}
public void setRecordsPublished(int recordsPublished) {
this.recordsPublished = recordsPublished;
}
/**
* @return the visibility of the resource, e.g. was it private, public, registered, deleted?
*/
@NotNull
public PublicationStatus getPublicationStatus() {
return publicationStatus;
}
public void setPublicationStatus(PublicationStatus publicationStatus) {
this.publicationStatus = publicationStatus;
}
/**
* @return map containing record counts (map value) by extension (map key)
*/
public Map<String, Integer> getRecordsByExtension() {
return recordsByExtension;
}
/**
* @param recordsByExtension map of record counts (map value) by extension (map key)
*/
public void setRecordsByExtension(Map<String, Integer> recordsByExtension) {
this.recordsByExtension = recordsByExtension;
}
}