/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.versioning;
import org.dspace.core.Context;
import org.dspace.core.ReloadableEntity;
import org.hibernate.proxy.HibernateProxyHelper;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
/**
*
*
* @author Fabio Bolognesi (fabio at atmire dot com)
* @author Mark Diggory (markd at atmire dot com)
* @author Ben Bosman (ben at atmire dot com)
* @author Pascal-Nicolas Becker (dspace at pascal dash becker dot de)
*/
@Entity
@Table(name="versionhistory")
public class VersionHistory implements ReloadableEntity<Integer> {
private static final Logger log = Logger.getLogger(VersionHistory.class);
@Id
@Column(name="versionhistory_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="versionhistory_seq")
@SequenceGenerator(name="versionhistory_seq", sequenceName="versionhistory_seq", allocationSize = 1)
private Integer id;
//We use fetchtype eager for versions since we always require our versions when loading the history
@OneToMany(fetch = FetchType.EAGER, mappedBy = "versionHistory")
@OrderBy(value = "versionNumber desc")
private List<Version> versions = new ArrayList<Version>();
/**
* Protected constructor, create object using:
* {@link org.dspace.versioning.service.VersionHistoryService#create(Context)}
*
*/
protected VersionHistory()
{
}
public Integer getID() {
return id;
}
/**
* Please use {@link org.dspace.versioning.service.VersioningService#getVersionsByHistory(Context, VersionHistory)} instead.
*
* To keep version number stables we keep information about deleted Versions.
* {@code org.dspace.versioning.service.VersioningService#getVersionsByHistory(Context, VersionHistory) VersioningService#getVersionsByHistory} filters
* such versions and returns only active versions.
*
* @return list of versions
*/
protected List<Version> getVersions() {
return versions;
}
void setVersions(List<Version> versions) {
this.versions = versions;
}
void addVersionAtStart(Version version)
{
this.versions.add(0, version);
}
void removeVersion(Version version) {
this.versions.remove(version);
}
@Override
public boolean equals(Object o)
{
if (this == o)
{
return true;
}
Class<?> objClass = HibernateProxyHelper.getClassWithoutInitializingProxy(o);
if (getClass() != objClass)
{
return false;
}
final VersionHistory that = (VersionHistory)o;
if (this.getID() != that.getID())
{
return false;
}
return true;
}
@Override
public int hashCode()
{
int hash = 7;
hash = 79*hash + this.getID();
return hash;
}
}