/**
* 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.storage.rdbms.DatabaseManager;
import org.dspace.storage.rdbms.TableRow;
import java.sql.SQLException;
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 VersionHistoryDAO
{
protected final static String TABLE_NAME="versionhistory";
protected final static String VERSION_HISTORY_ID = "versionhistory_id";
public VersionHistoryImpl create(Context context)
{
try {
TableRow row = DatabaseManager.create(context, TABLE_NAME);
VersionHistoryImpl vh = new VersionHistoryImpl(context, row);
//TODO Do I have to manage the event?
//context.addEvent(new Event(Event.CREATE, Constants.EPERSON, e.getID(), null));
return vh;
} catch (SQLException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
public VersionHistoryImpl find(Context context, int itemID, VersionDAO versionDAO)
{
try {
Version version = versionDAO.findByItemId(context, itemID);
if(version==null)
{
return null;
}
VersionHistoryImpl fromCache = (VersionHistoryImpl) context.fromCache(VersionHistoryImpl.class, version.getVersionHistoryID());
if (fromCache != null)
{
return fromCache;
}
TableRow row = DatabaseManager.find(context, TABLE_NAME, version.getVersionHistoryID());
VersionHistoryImpl vh = new VersionHistoryImpl(context, row);
List<Version> versions= versionDAO.findByVersionHistory(context, vh.getVersionHistoryId());
vh.setVersions(versions);
return vh;
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
public VersionHistoryImpl findById(Context context, int id, VersionDAO versionDAO)
{
try {
TableRow row = DatabaseManager.find(context, TABLE_NAME, id);
if (row == null) return null;
VersionHistoryImpl fromCache = (VersionHistoryImpl) context.fromCache(VersionHistoryImpl.class, row.getIntColumn(VERSION_HISTORY_ID));
if (fromCache != null)
{
return fromCache;
}
VersionHistoryImpl versionHistoryImpl = new VersionHistoryImpl(context, row);
List<Version> versions= versionDAO.findByVersionHistory(context, versionHistoryImpl.getVersionHistoryId());
versionHistoryImpl.setVersions(versions);
return versionHistoryImpl;
} catch (SQLException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
public void delete(Context c, int versionHistoryID, VersionDAO versionDAO)
{
try {
VersionHistoryImpl history = findById(c, versionHistoryID, versionDAO);
DatabaseManager.delete(c, history.getMyRow());
} catch (SQLException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
}