Package org.dspace.sword2

Source Code of org.dspace.sword2.StatementManagerDSpace

/**
* 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.apache.log4j.Logger;
import org.dspace.authorize.AuthorizeException;
import org.dspace.authorize.AuthorizeManager;
import org.dspace.content.Item;
import org.dspace.core.Constants;
import org.dspace.core.Context;
import org.dspace.core.LogManager;
import org.swordapp.server.AuthCredentials;
import org.swordapp.server.Statement;
import org.swordapp.server.StatementManager;
import org.swordapp.server.SwordAuthException;
import org.swordapp.server.SwordConfiguration;
import org.swordapp.server.SwordError;
import org.swordapp.server.SwordServerException;
import org.swordapp.server.UriRegistry;

import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class StatementManagerDSpace extends DSpaceSwordAPI implements StatementManager
{
  private static Logger log = Logger.getLogger(StatementManagerDSpace.class);

  public Statement getStatement(String stateIRI, Map<String, String> accept, AuthCredentials authCredentials, SwordConfiguration swordConfig)
      throws SwordServerException, SwordError, SwordAuthException
  {
        SwordContext sc = null;
    try
        {
            SwordConfigurationDSpace config = (SwordConfigurationDSpace) swordConfig;

            SwordAuthenticator auth = new SwordAuthenticator();
            sc = auth.authenticate(authCredentials);
            Context context = sc.getContext();

            if (log.isDebugEnabled())
            {
                log.debug(LogManager.getHeader(context, "sword_get_statement", ""));
            }

            // log the request
            String un = authCredentials.getUsername() != null ? authCredentials.getUsername() : "NONE";
            String obo = authCredentials.getOnBehalfOf() != null ? authCredentials.getOnBehalfOf() : "NONE";
            log.info(LogManager.getHeader(context, "sword_get_statement", "username=" + un + ",on_behalf_of=" + obo));

            // first thing is to figure out what we're being asked to work on
            SwordUrlManager urlManager = config.getUrlManager(context, config);
            Item item = urlManager.getItem(context, stateIRI);
            if (item == null)
            {
                throw new SwordError(404);
            }

            // find out if we are allowed to read the item's statement
            AuthorizeManager.authorizeAction(context, item, Constants.READ);

      // find out, now we know what we're being asked for, whether this is allowed
      WorkflowManagerFactory.getInstance().retrieveStatement(context, item);

      String suffix = urlManager.getTypeSuffix(context, stateIRI);
      SwordStatementDisseminator disseminator = null;

      if (suffix != null)
      {
                Map<Float, List<String>> analysed = new HashMap<Float, List<String>>();
                List<String> list = new ArrayList<String>();
                list.add(suffix);
                analysed.put((float) 1.0, list);
                disseminator = SwordDisseminatorFactory.getStatementInstance(analysed);
      }
      else
      {
        // we rely on the content negotiation to do the work
        String acceptContentType = this.getHeader(accept, "Accept", null);

                // we extract from the Accept header the ordered list of content types
                TreeMap<Float, List<String>> analysed = this.analyseAccept(acceptContentType);

                // the meat of this is done by the package disseminator
                disseminator = SwordDisseminatorFactory.getStatementInstance(analysed);
      }

      Statement statement = disseminator.disseminate(context, item);
            return statement;
        }
        catch (AuthorizeException e)
        {
            throw new SwordAuthException();
        }
        catch (SQLException e)
        {
            throw new SwordServerException(e);
        }
        catch (DSpaceSwordException e)
        {
            throw new SwordServerException(e);
        }
        finally
        {
            if (sc != null)
            {
                sc.abort();
            }
        }
  }
}
TOP

Related Classes of org.dspace.sword2.StatementManagerDSpace

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.