Package org.dspace.sword2

Source Code of org.dspace.sword2.GenericStatementDisseminator

/**
* 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.content.Bitstream;
import org.dspace.content.Bundle;
import org.dspace.content.Item;
import org.dspace.core.ConfigurationManager;
import org.dspace.core.Context;
import org.swordapp.server.OriginalDeposit;
import org.swordapp.server.ResourcePart;
import org.swordapp.server.Statement;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public abstract class GenericStatementDisseminator implements SwordStatementDisseminator
{
  protected SwordUrlManager urlManager;

  protected void populateStatement(Context context, Item item, Statement statement)
      throws DSpaceSwordException
  {
    this.urlManager = new SwordUrlManager(new SwordConfigurationDSpace(), context);
        List<String> includeBundles = this.getIncludeBundles();
        String originalDepositBundle = this.getOriginalDepositsBundle();

        // we only list the original deposits in full if the sword bundle is in the includeBundles
        if (includeBundles.contains(originalDepositBundle))
        {
            List<OriginalDeposit> originalDeposits = this.getOriginalDeposits(context, item, originalDepositBundle);
            statement.setOriginalDeposits(originalDeposits);
        }

    Map<String, String> states = this.getStates(context, item);
        statement.setStates(states);

        // remove the original deposit bundle from the include bundles
        includeBundles.remove(originalDepositBundle);
    List<ResourcePart> resources = this.getResourceParts(context, item, includeBundles);
        statement.setResources(resources);

        Date lastModified = this.getLastModified(context, item);
        statement.setLastModified(lastModified);
  }

  protected List<OriginalDeposit> getOriginalDeposits(Context context, Item item, String swordBundle)
      throws DSpaceSwordException
  {
    try
    {
            // NOTE: DSpace does not store file metadata, so we can't access the information
            // about who deposited what, when, on behalf of whoever.

      List<OriginalDeposit> originalDeposits = new ArrayList<OriginalDeposit>();

            // an original deposit is everything in the SWORD bundle
      Bundle[] swords = item.getBundles(swordBundle);
      for (Bundle sword : swords)
      {
        for (Bitstream bitstream : sword.getBitstreams())
        {
          // note that original deposits don't have actionable urls
          OriginalDeposit deposit = new OriginalDeposit(this.urlManager.getBitstreamUrl(bitstream));
          deposit.setMediaType(bitstream.getFormat().getMIMEType());
          originalDeposits.add(deposit);
        }
      }
      return originalDeposits;
    }
    catch (SQLException e)
    {
      throw new DSpaceSwordException(e);
    }
  }

  protected Map<String, String> getStates(Context context, Item item)
      throws DSpaceSwordException
  {
    SwordConfigurationDSpace config = new SwordConfigurationDSpace();
    WorkflowTools wft = new WorkflowTools();
    Map<String, String> states = new HashMap<String, String>();
    if (item.isWithdrawn())
    {
      String uri = config.getStateUri("withdrawn");
      String desc = config.getStateDescription("withdrawn");
      states.put(uri, desc);
    }
    else if (item.isArchived())
    {
      String uri = config.getStateUri("archive");
      String desc = config.getStateDescription("archive");
      states.put(uri, desc);
    }
    else if (wft.isItemInWorkflow(context, item))
    {
      String uri = config.getStateUri("workflow");
      String desc = config.getStateDescription("workflow");
      states.put(uri, desc);
    }
    else if (wft.isItemInWorkspace(context, item))
    {
      String uri = config.getStateUri("workspace");
      String desc = config.getStateDescription("workspace");
      states.put(uri, desc);
    }
    return states;
  }

  protected List<ResourcePart> getResourceParts(Context context, Item item, List<String> includeBundles)
      throws DSpaceSwordException
  {
    try
    {
      // the list of resource parts is everything in the bundles to be included
      List<ResourcePart> resources = new ArrayList<ResourcePart>();

            for (String bundleName : includeBundles)
            {
                Bundle[] bundles = item.getBundles(bundleName);
                for (Bundle bundle : bundles)
                {
                    for (Bitstream bitstream : bundle.getBitstreams())
                    {
                        // note that individual bitstreams have actionable urls
                        ResourcePart part = new ResourcePart(this.urlManager.getActionableBitstreamUrl(bitstream));
                        part.setMediaType(bitstream.getFormat().getMIMEType());
                        resources.add(part);
                    }
                }
            }

      return resources;
    }
    catch (SQLException e)
    {
      throw new DSpaceSwordException(e);
    }
  }

    protected Date getLastModified(Context context, Item item)
    {
        return item.getLastModified();
    }

    private List<String> getIncludeBundles()
    {
        String cfg = ConfigurationManager.getProperty("swordv2-server", "statement.bundles");
        if (cfg == null || "".equals(cfg))
        {
            cfg = "ORIGINAL, SWORD";
        }
        String[] bits = cfg.split(",");
        List<String> include = new ArrayList<String>();
        for (String bit : bits)
        {
            String bundleName = bit.trim().toUpperCase();
            if (!include.contains(bundleName))
            {
                include.add(bundleName);
            }
        }
        return include;
    }

    private String getOriginalDepositsBundle()
    {
        String swordBundle = ConfigurationManager.getProperty("swordv2-server", "bundle.name");
        if (swordBundle == null)
        {
            swordBundle = "SWORD";
        }
        return swordBundle;
    }
}
TOP

Related Classes of org.dspace.sword2.GenericStatementDisseminator

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.