/** * 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.sword2; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Bitstream; import org.dspace.content.Bundle; import org.dspace.content.Item; import org.dspace.core.ConfigurationManager; import java.io.IOException; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.util.Date; public class VersionManager { public void emptyBundle(Item item, String name) throws SQLException, AuthorizeException, IOException { boolean keep = ConfigurationManager.getBooleanProperty("swordv2-server", "versions.keep"); Bundle[] bundles = item.getBundles(name); for (Bundle b : bundles) { this.emptyBundle(item, b, keep); } } public void emptyBundle(Item item, Bundle source) throws SQLException, AuthorizeException, IOException { boolean keep = ConfigurationManager.getBooleanProperty("swordv2-server", "versions.keep"); this.emptyBundle(item, source, keep); } public void emptyBundle(Item item, Bundle source, boolean archive) throws SQLException, AuthorizeException, IOException { if (archive) { this.archiveBundle(item, source); } for (Bitstream bitstream : source.getBitstreams()) { source.removeBitstream(bitstream); } } public void removeBitstream(Item item, Bitstream bitstream) throws SQLException, AuthorizeException, IOException { boolean keep = ConfigurationManager.getBooleanProperty("swordv2-server", "versions.keep"); this.removeBitstream(item, bitstream, keep); } public void removeBitstream(Item item, Bitstream bitstream, boolean keep) throws SQLException, AuthorizeException, IOException { Bundle exempt = null; if (keep) { exempt = this.archiveBitstream(item, bitstream); } Bundle[] bundles = bitstream.getBundles(); for (Bundle bundle : bundles) { if (exempt != null && bundle.getID() != exempt.getID()) { bundle.removeBitstream(bitstream); } } } public Bundle archiveBitstream(Item item, Bitstream bitstream) throws SQLException, AuthorizeException, IOException { String swordBundle = ConfigurationManager.getProperty("swordv2-server", "bundle.name"); if (swordBundle == null) { swordBundle = "SWORD"; } Bundle[] swords = item.getBundles(swordBundle); Bundle archive = null; if (swords.length == 0) { archive = item.createBundle(swordBundle); } else { archive = swords[0]; } this.archiveBitstream(archive, bitstream); return archive; } public void archiveBitstream(Bundle target, Bitstream bitstream) throws SQLException, AuthorizeException, IOException { target.addBitstream(bitstream); } public void archiveBundle(Item item, Bundle source) throws SQLException, AuthorizeException, IOException { // get the datestamped root bundle name SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String oldName = "V_" + sdf.format(new Date()); oldName = this.getNumberedName(item, oldName, 0); Bundle old = item.createBundle(oldName); for (Bitstream bitstream : source.getBitstreams()) { old.addBitstream(bitstream); } } private String getNumberedName(Item item, String name, int number) throws SQLException { String nName = name + "." + Integer.toString(number); if (item.getBundles(nName) == null || item.getBundles(nName).length == 0) { return nName; } else { return this.getNumberedName(item, name, number + 1); } } }