/** * 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.content.Item; import org.dspace.core.Context; import org.dspace.storage.rdbms.TableRow; import java.util.ArrayList; import java.util.List; /** * * * @author Fabio Bolognesi (fabio at atmire dot com) * @author Mark Diggory (markd at atmire dot com) * @author Ben Bosman (ben at atmire dot com) */ public class VersionHistoryImpl implements VersionHistory { private int versionHistoryId; private List<Version>versions; private Context myContext; private TableRow myRow; protected VersionHistoryImpl(VersionHistoryDAO vhDAO){ } protected VersionHistoryImpl(Context c, TableRow row) { myContext = c; myRow = row; c.cache(this, row.getIntColumn(VersionHistoryDAO.VERSION_HISTORY_ID)); } public int getVersionHistoryId() { return myRow.getIntColumn(VersionHistoryDAO.VERSION_HISTORY_ID); } // LIST order: descending public Version getPrevious(Version version) { int index = versions.indexOf(version); if( (index+1)==versions.size()) return null; return versions.get(index+1); } // LIST order: descending public Version getNext(Version version) { int index = versions.indexOf(version); if(index==0) { return null; } return versions.get(index-1); } public Version getVersion(Item item) { for(Version v : versions) { if(v.getItem().getID()==item.getID()) { return v; } } return null; } public boolean hasNext(Item item) { Version version = getVersion(item); return hasNext(version); } public boolean hasNext(Version version) { return getNext(version)!=null; } public List<Version> getVersions() { return versions; } public void setVersions(List<Version> versions) { this.versions = versions; } public void add(Version version) { if(versions==null) versions=new ArrayList<Version>(); versions.add(0, version); } public Version getLatestVersion() { if(versions==null || versions.size()==0) { return null; } return versions.get(0); } public Version getFirstVersion() { if(versions==null || versions.size()==0) { return null; } return versions.get(versions.size()-1); } public boolean isFirstVersion(Version version) { Version first = versions.get(versions.size()-1); return first.equals(version); } public boolean isLastVersion(Version version) { Version last = versions.get(0); return last.equals(version); } public void remove(Version version) { versions.remove(version); } public boolean isEmpty() { return versions.size()==0; } public int size() { return versions.size(); } protected TableRow getMyRow() { return myRow; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } VersionHistoryImpl that = (VersionHistoryImpl) o; return versionHistoryId == that.versionHistoryId; } @Override public int hashCode() { int hash=7; hash=79*hash+ (this.getVersionHistoryId() ^ (this.getVersionHistoryId() >>> 32)); return hash; } }