/** * 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.ctask.general; import org.apache.log4j.Logger; import org.dspace.authorize.AuthorizeException; import org.dspace.content.Bitstream; import org.dspace.content.Bundle; import org.dspace.content.DSpaceObject; import org.dspace.content.Item; import org.dspace.curate.AbstractCurationTask; import org.dspace.curate.Curator; import java.sql.SQLException; import java.util.List; /** * A curation job to take bitstream URLs and place them into metadata elements. * * @author Stuart Lewis */ public class BitstreamsIntoMetadata extends AbstractCurationTask { // The status of this item private int status = Curator.CURATE_UNSET; // The results of processing this private List<String> results = null; // The log4j logger for this class private static Logger log = Logger.getLogger(BitstreamsIntoMetadata.class); /** * Perform the bitstream metadata creation. * * @param dso The DSpaceObject to be checked * @return The curation task status of the checking */ @Override public int perform(DSpaceObject dso) { // The results that we'll return StringBuilder results = new StringBuilder(); // Unless this is an item, we'll skip this item status = Curator.CURATE_SKIP; boolean changed = false; logDebugMessage("The target dso is " + dso.getName()); if (dso instanceof Item) { try { Item item = (Item)dso; item.clearMetadata("dc", "format", Item.ANY, Item.ANY); for (Bundle bundle : item.getBundles()) { if ("ORIGINAL".equals(bundle.getName())) { for (Bitstream bitstream : bundle.getBitstreams()) { // Add the metadata and update the item addMetadata(item, bitstream, "original"); changed = true; } } else if ("THUMBNAIL".equals(bundle.getName())) { for (Bitstream bitstream : bundle.getBitstreams()) { // Add the metadata and update the item addMetadata(item, bitstream, "thumbnail"); changed = true; } } if (changed) { item.update(); status = Curator.CURATE_SUCCESS; } } } catch (AuthorizeException ae) { // Something went wrong logDebugMessage(ae.getMessage()); status = Curator.CURATE_ERROR; } catch (SQLException sqle) { // Something went wrong logDebugMessage(sqle.getMessage()); status = Curator.CURATE_ERROR; } } logDebugMessage("About to report: " + results.toString()); setResult(results.toString()); report(results.toString()); return status; } /** * Debugging logging if required * * @param message The message to log */ private void logDebugMessage(String message) { if (log.isDebugEnabled()) { log.debug(message); } } /** * Add the bitstream metadata to the item * * @param item The item * @param bitstream The bitstream * @param type The type of bitstream */ private void addMetadata(Item item, Bitstream bitstream, String type) { String value = bitstream.getFormat().getMIMEType() + "##"; value += bitstream.getName() + "##"; value += bitstream.getSize() + "##"; value += item.getHandle() + "##"; value += bitstream.getSequenceID() + "##"; value += bitstream.getChecksum() + "##"; if (bitstream.getDescription() != null) { value += bitstream.getDescription(); } item.addMetadata("dc", "format", type, "en", value); } }