/**
* 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.apache.commons.collections.CollectionUtils;
import org.dspace.authorize.AuthorizeException;
import org.dspace.content.Item;
import org.dspace.core.Context;
import org.dspace.versioning.dao.VersionHistoryDAO;
import org.dspace.versioning.service.VersionHistoryService;
import org.dspace.versioning.service.VersioningService;
import org.springframework.beans.factory.annotation.Autowired;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
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)
* @author Pascal-Nicolas Becker (dspace at pascal dash becker dot de)
*/
public class VersionHistoryServiceImpl implements VersionHistoryService
{
@Autowired(required = true)
protected VersionHistoryDAO versionHistoryDAO;
@Autowired(required = true)
private VersioningService versioningService;
protected VersionHistoryServiceImpl()
{
}
@Override
public VersionHistory create(Context context) throws SQLException {
return versionHistoryDAO.create(context, new VersionHistory());
}
@Override
public VersionHistory find(Context context, int id) throws SQLException {
return versionHistoryDAO.findByID(context, VersionHistory.class, id);
}
@Override
public void update(Context context, VersionHistory versionHistory) throws SQLException, AuthorizeException {
update(context, Collections.singletonList(versionHistory));
}
@Override
public void update(Context context, List<VersionHistory> versionHistories) throws SQLException, AuthorizeException {
if(CollectionUtils.isNotEmpty(versionHistories)) {
for (VersionHistory versionHistory : versionHistories) {
versionHistoryDAO.save(context, versionHistory);
}
}
}
@Override
public void delete(Context context, VersionHistory versionHistory) throws SQLException, AuthorizeException {
versionHistoryDAO.delete(context, new VersionHistory());
}
// LIST order: descending
@Override
public Version getPrevious(Context context, VersionHistory versionHistory, Version version)
throws SQLException
{
List<Version> versions = versioningService.getVersionsByHistory(context, versionHistory);
int index = versions.indexOf(version);
if (index + 1 < versions.size())
{
return versions.get(index+1);
}
return null;
}
// LIST order: descending
@Override
public Version getNext(Context c, VersionHistory versionHistory, Version version)
throws SQLException
{
List<Version> versions = versioningService.getVersionsByHistory(c, versionHistory);
int index = versions.indexOf(version);
if (index -1 >= 0)
{
return versions.get(index -1);
}
return null;
}
@Override
public Version getVersion(Context context, VersionHistory versionHistory, Item item)
throws SQLException
{
Version v = versioningService.getVersion(context, item);
if (v != null);
{
if (versionHistory.equals(v.getVersionHistory()))
{
return v;
}
}
return null;
}
@Override
public boolean hasNext(Context context, VersionHistory versionHistory, Item item)
throws SQLException
{
Version version = getVersion(context, versionHistory, item);
if (version == null)
{
return false;
}
return hasNext(context, versionHistory, version);
}
@Override
public boolean hasNext(Context context, VersionHistory versionHistory, Version version)
throws SQLException
{
return getNext(context, versionHistory, version)!=null;
}
@Override
public boolean hasVersionHistory(Context context, Item item)
throws SQLException
{
return findByItem(context, item) != null;
}
@Override
public void add(Context context, VersionHistory versionHistory, Version version)
throws SQLException
{
List<Version> versions = versionHistory.getVersions();
if(versions==null) versions=new ArrayList<Version>();
versions.add(0, version);
}
@Override
public Version getLatestVersion(Context context, VersionHistory versionHistory)
throws SQLException
{
List<Version> versions = versioningService.getVersionsByHistory(context, versionHistory);
if(versions != null && !versions.isEmpty())
{
return versions.get(0);
}
return null;
}
@Override
public Version getFirstVersion(Context context, VersionHistory versionHistory)
throws SQLException
{
List<Version> versions = versioningService.getVersionsByHistory(context, versionHistory);
if (versions == null)
{
return null;
}
if (versions.size()-1 >= 0)
{
return versions.get(versions.size()-1);
}
return null;
}
@Override
public boolean isFirstVersion(Context context, Item item) throws SQLException
{
VersionHistory vh = findByItem(context, item);
if (vh == null)
{
return true;
}
Version version = versioningService.getVersion(context, item);
return isFirstVersion(context, vh, version);
}
@Override
public boolean isFirstVersion(Context context, VersionHistory versionHistory, Version version)
throws SQLException
{
return getFirstVersion(context, versionHistory).equals(version);
}
@Override
public boolean isLastVersion(Context context, Item item) throws SQLException
{
VersionHistory vh = findByItem(context, item);
if (vh == null)
{
return true;
}
Version version = versioningService.getVersion(context, item);
return isLastVersion(context, vh, version);
}
@Override
public boolean isLastVersion(Context context, VersionHistory versionHistory, Version version)
throws SQLException
{
return getLatestVersion(context, versionHistory).equals(version);
}
@Override
public void remove(VersionHistory versionHistory, Version version)
{
List<Version> versions = versionHistory.getVersions();
versions.remove(version);
}
@Override
public VersionHistory findByItem(Context context, Item item) throws SQLException {
return versionHistoryDAO.findByItem(context, item);
}
}