/** * 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.authorize.AuthorizeException; import org.dspace.content.*; import org.dspace.core.Context; import org.dspace.storage.bitstore.BitstreamStorageManager; import java.sql.SQLException; import java.util.Set; /** * * * @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 abstract class AbstractVersionProvider { private Set<String> ignoredMetadataFields; protected void copyMetadata(Item itemNew, Item nativeItem){ Metadatum[] md = nativeItem.getMetadata(Item.ANY, Item.ANY, Item.ANY, Item.ANY); for (Metadatum aMd : md) { String unqualifiedMetadataField = aMd.schema + "." + aMd.element; String qualifiedMetadataField = unqualifiedMetadataField + (aMd.qualifier == null ? "" : "." + aMd.qualifier); if(getIgnoredMetadataFields().contains(qualifiedMetadataField) || getIgnoredMetadataFields().contains(unqualifiedMetadataField + "." + Item.ANY)) { //Skip this metadata field continue; } itemNew.addMetadata(aMd.schema, aMd.element, aMd.qualifier, aMd.language, aMd.value, aMd.authority, aMd.confidence); } } protected void createBundlesAndAddBitstreams(Context c, Item itemNew, Item nativeItem) throws SQLException, AuthorizeException { for(Bundle nativeBundle : nativeItem.getBundles()) { Bundle bundleNew = itemNew.createBundle(nativeBundle.getName()); for(Bitstream nativeBitstream : nativeBundle.getBitstreams()) { Bitstream bitstreamNew = createBitstream(c, nativeBitstream); bundleNew.addBitstream(bitstreamNew); if(nativeBundle.getPrimaryBitstreamID() == nativeBitstream.getID()) { bundleNew.setPrimaryBitstreamID(bitstreamNew.getID()); } } } } protected Bitstream createBitstream(Context context, Bitstream nativeBitstream) throws AuthorizeException, SQLException { int idNew = BitstreamStorageManager.clone(context, nativeBitstream.getID()); Bitstream newBitstream = Bitstream.find(context, idNew); Metadatum[] bitstreamMeta = nativeBitstream.getMetadata(Item.ANY, Item.ANY, Item.ANY, Item.ANY); for (Metadatum value : bitstreamMeta) { newBitstream.addMetadata(value.schema, value.element, value.qualifier, value.language, value.value, value.authority, value.confidence); } newBitstream.updateMetadata(); return newBitstream; } public void setIgnoredMetadataFields(Set<String> ignoredMetadataFields) { this.ignoredMetadataFields = ignoredMetadataFields; } public Set getIgnoredMetadataFields() { return ignoredMetadataFields; } }