Package org.dspace.sword

Source Code of org.dspace.sword.BitstreamEntryGenerator

/* BitstreamEntryGenerator.java
*
* Copyright (c) 2007, Aberystwyth University
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
*  - Redistributions of source code must retain the above
*    copyright notice, this list of conditions and the
*    following disclaimer.
*
*  - Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in
*    the documentation and/or other materials provided with the
*    distribution.
*
*  - Neither the name of the Centre for Advanced Software and
*    Intelligent Systems (CASIS) nor the names of its
*    contributors may be used to endorse or promote products derived
*    from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
package org.dspace.sword;

import org.dspace.content.Bitstream;
import org.dspace.content.BitstreamFormat;
import org.dspace.content.Bundle;
import org.dspace.content.Item;
import org.dspace.core.ConfigurationManager;
import org.purl.sword.atom.Content;
import org.purl.sword.atom.ContentType;
import org.purl.sword.atom.InvalidMediaTypeException;
import org.purl.sword.atom.Link;
import org.purl.sword.atom.Rights;
import org.purl.sword.atom.Title;
import org.apache.log4j.Logger;

import java.sql.SQLException;

/**
* @author Richard Jones
*
* Class to generate ATOM Entry documents for DSpace Bitstreams
*/
public class BitstreamEntryGenerator extends DSpaceATOMEntry
{
  /** logger */
  private static Logger log = Logger.getLogger(BitstreamEntryGenerator.class);

  /**
   * Create a new ATOM Entry generator which can provide a SWORD Entry for
   * a bitstream
   *
   * @param service
   */
  protected BitstreamEntryGenerator(SWORDService service)
  {
    super(service);
    log.debug("Create new instance of BitstreamEntryGenerator");
  }

  /**
   * Add all the subject classifications from the bibliographic
   * metadata.
   *
   */
  protected void addCategories()
  {
    // do nothing
  }

  /**
   * Set the content type that DSpace received.
   *
   */
  protected void addContentElement()
      throws DSpaceSWORDException
  {
    try
    {
      // get the things we need out of the service
      SWORDUrlManager urlManager = swordService.getUrlManager();

      // if this is a deposit which is no op we can't do anything here
      if (this.deposit != null && this.deposit.isNoOp())
      {
        return;
      }

      String bsurl = urlManager.getBitstreamUrl(this.bitstream);
      BitstreamFormat bf = this.bitstream.getFormat();
      String format = "application/octet-stream";
      if (bf != null)
      {
        format = bf.getMIMEType();
      }

      Content con = new Content();
      con.setType(format);
      con.setSource(bsurl);
      entry.setContent(con);

      log.debug("Adding content element with url=" + bsurl);
    }
    catch (InvalidMediaTypeException e)
    {
      log.error("caught and swallowed exception: ", e);
      // do nothing; we'll live without the content type declaration!
    }
  }

  /**
   * Add the identifier for the item.  If the item object has
   * a handle already assigned, this is used, otherwise, the
   * passed handle is used.  It is set in the form that
   * they can be used to access the resource over http (i.e.
   * a real URL).
   */
  protected void addIdentifier()
      throws DSpaceSWORDException
  {
    // if this is a deposit which is no op we can't do anything here
    if (this.deposit != null && this.deposit.isNoOp())
    {
      // just use the dspace url as the
      // property
      String cfg = ConfigurationManager.getProperty("dspace.url");
      entry.setId(cfg);

      return;
    }


    SWORDUrlManager urlManager = swordService.getUrlManager();

    // for a bitstream, we just use the url for the bitstream
    // as the identifier
    String bsurl = urlManager.getBitstreamUrl(this.bitstream);
    entry.setId(bsurl);
    log.debug("Added identifier for bitstream with url=" + bsurl);
    return;

    // FIXME: later on we will maybe have a workflow page supplied
    // by the sword interface?
  }

  /**
   * Add links associated with this item.
   *
   */
  protected void addLinks()
    throws DSpaceSWORDException
  {
    // if this is a deposit which is no op we can't do anything here
    if (this.deposit != null && this.deposit.isNoOp())
    {
      return;
    }

    // get the things we need out of the service
    SWORDUrlManager urlManager = swordService.getUrlManager();

    String bsurl = urlManager.getBitstreamUrl(this.bitstream);
    BitstreamFormat bf = this.bitstream.getFormat();
    String format = "application/octet-stream";
    if (bf != null)
    {
      format = bf.getMIMEType();
    }

    Link link = new Link();
    link.setType(format);
    link.setHref(bsurl);
    link.setRel("alternate");
    entry.addLink(link);

    log.debug("Added link entity to entry for url " + bsurl);
  }

  /**
   * Add the date of publication from the bibliographic metadata
   *
   */
  protected void addPublishDate()
  {
    // do nothing
  }


  /**
   * Add rights information.  This attaches an href to the URL
   * of the item's licence file
   *
   */
  protected void addRights()
      throws DSpaceSWORDException
  {
    try
    {
      // work our way up to the item
      Bundle[] bundles = this.bitstream.getBundles();
      if (bundles.length == 0)
      {
        log.error("Found orphaned bitstream: " + bitstream.getID());
        throw new DSpaceSWORDException("Orphaned bitstream discovered");
      }
      Item[] items = bundles[0].getItems();
      if (items.length == 0)
      {
        log.error("Found orphaned bundle: " + bundles[0].getID());
        throw new DSpaceSWORDException("Orphaned bundle discovered");
      }
      Item item = items[0];

      // now get the licence out of the item
      SWORDUrlManager urlManager = swordService.getUrlManager();
      StringBuilder rightsString = new StringBuilder();
      Bundle[] lbundles = item.getBundles("LICENSE");
      for (int i = 0; i < lbundles.length; i++)
      {
        Bitstream[] bss = lbundles[i].getBitstreams();
        for (int j = 0; j < bss.length; j++)
        {
          String url = urlManager.getBitstreamUrl(bss[j]);
          rightsString.append(url + " ");
        }
      }

      Rights rights = new Rights();
      rights.setContent(rightsString.toString());
      rights.setType(ContentType.TEXT);
      entry.setRights(rights);
      log.debug("Added rights entry to entity");
    }
    catch (SQLException e)
    {
      log.error("caught exception: ", e);
      throw new DSpaceSWORDException(e);
    }
  }

  /**
   * Add the summary/abstract from the bibliographic metadata
   *
   */
  protected void addSummary()
  {
    // do nothing
  }

  /**
   * Add the title from the bibliographic metadata
   *
   */
  protected void addTitle()
  {
    Title title = new Title();
    title.setContent(this.bitstream.getName());
    title.setType(ContentType.TEXT);
    entry.setTitle(title);
    log.debug("Added title to entry");
  }

  /**
   * Add the date that this item was last updated
   *
   */
  protected void addLastUpdatedDate()
  {
    // do nothing
  }
}
TOP

Related Classes of org.dspace.sword.BitstreamEntryGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.