/**
* 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.identifier.doi;
import org.dspace.content.DSpaceObject;
import org.dspace.core.Context;
/**
* A DOIConnector handles all calls to the API of your DOI registry.
*
* A DOIConnector should care about rules of the registration agency. For
* example, if the registration agency wants us to reserve a DOI before we can
* register it, the DOIConnector should check if a DOI is reserved. Use a
* {@link org.dspace.identifier.doi.DOIIdentifierException#DOIIdentifierException DOIIdentifierException}.
* and set its error code in case of any errors.
* For the given example you should use
* {@code DOIIdentifierException.RESERVE_FIRST} as error code.
*
* @author Pascal-Nicolas Becker
*/
public interface DOIConnector {
public boolean isDOIReserved(Context context, String doi)
throws DOIIdentifierException;
public boolean isDOIRegistered(Context context, String doi)
throws DOIIdentifierException;
/**
* Sends the DELETE-Request to the DOI registry.
*
* <p>This method sends a request to "delete" a DOI. As DOIs are persistent
* identifiers they should never be deleted. For example, if you send a HTTP
* DELETE request to the DataCite Metadata API directly, it will set the DOI
* to inactive.</p>
*
* @param context
* The relevant DSpace Context.
* @param doi
* DOI string to "delete"
* @throws DOIIdentifierException if DOI error
*/
public void deleteDOI(Context context, String doi)
throws DOIIdentifierException;
/**
* Sends a request to the DOI registry to reserve a DOI.
*
* The DOIConnector should check weather this DOI is reserved for another
* object already. In this case it should throw an
* {@link org.dspace.identifier.doi.DOIIdentifierException#DOIIdentifierException DOIIdentifierException}.
* DOIIdentifierException} and set the error code to {@code
* DOIIdentifierException.DOI_ALREADY_EXISTS}.
*
* @param context
* The relevant DSpace Context.
* @param dso
* DSpace object to associate to the DOI
* @param doi
* DOI string to reserve
* @throws DOIIdentifierException if DOI error
*/
public void reserveDOI(Context context, DSpaceObject dso, String doi)
throws DOIIdentifierException;
/**
* Sends a request to the DOI registry to register a DOI.
*
* The DOIConnector ensures compliance with the workflow of the registration
* agency. For example, if a DOI has to be reserved before it can be
* registered the DOIConnector has to check if it is reserved. In this case
* you can throw an
* {@link org.dspace.identifier.doi.DOIIdentifierException#DOIIdentifierException DOIIdentifierException}.
* and set the error code to
* {@code DOIIdentifierException.RESERVE_FIRST}.
*
* @param context
* The relevant DSpace Context.
* @param dso
* DSpace object to associate to the DOI
* @param doi
* DOI string to register
* @throws DOIIdentifierException if DOI error
*/
public void registerDOI(Context context, DSpaceObject dso, String doi)
throws DOIIdentifierException;
/**
* Sends a request to the DOI registry to update metadata for a DOI.
*
* The DOIConnector should check weather the DOI is reserved or registered
* for the specified DSpace Object before it sends the metadata update.
*
* @param context
* The relevant DSpace Context.
* @param dso
* DSpace object associated to the DOI
* @param doi
* DOI string to update (metadata)
* @throws DOIIdentifierException if DOI error
*/
public void updateMetadata(Context context, DSpaceObject dso, String doi)
throws DOIIdentifierException;
}