/**
* 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.identifier.IdentifierException;
/**
*
* @author Pascal-Nicolas Becker (p dot becker at tu hyphen berlin dot de)
*/
public class DOIIdentifierException extends IdentifierException {
/**
* Default.
*/
public static final int CODE_NOT_SET = 0;
/**
* A specified DOI does not exists.
*/
public static final int DOI_DOES_NOT_EXIST = 1;
/**
* A DOI cannot be created, registered, reserved, and so on because it is
* already used for another object.
*/
public static final int DOI_ALREADY_EXISTS = 2;
/**
* A DOI cannot be created, registered, reserved and so on because it uses a
* foreign prefix.
*/
public static final int FOREIGN_DOI = 3;
/**
* We got a answer from a registration agency that could not be parsed.
* Either they changed there API or the DOIConnector does not implement it
* properly.
*/
public static final int BAD_ANSWER = 4;
/**
* The registration agency was unable to parse our request. Either they
* changed there API or the DOIConnector does not implement it properly.
*/
public static final int BAD_REQUEST = 5;
/**
* Some registration agencies request that a DOI gets reserved before it can
* be registered. This error code signals that a unreserved DOI should be
* registered and that the registration agency denied it.
*/
public static final int RESERVE_FIRST = 6;
/**
* Error while authenticating against the registration agency.
*/
public static final int AUTHENTICATION_ERROR = 7;
/**
* A internal error occurred either in the registration agency or in the
* DOIConnector.
*/
public static final int INTERNAL_ERROR = 8;
/**
* An error arose while metadata conversion.
*/
public static final int CONVERSION_ERROR = 9;
/**
* A DOI and a provided object does not match. This error occurs if you try
* to connect an object with a DOI that is reserved or registered for
* another object.
*/
public static final int MISMATCH = 10;
/**
* An identifier supplied as DOI could not be recognized.
*/
public static final int UNRECOGNIZED = 11;
/**
* DSpace did not allowed to manipulate the metadata of an DSpaceObject.
*/
public static final int UNAUTHORIZED_METADATA_MANIPULATION = 12;
/**
* You tried to reserve or register a DOI that is marked as DELETED.
*/
public static final int DOI_IS_DELETED = 13;
private int code;
// FOR DEBUGGING
public static String codeToString(int code) {
switch (code) {
case CODE_NOT_SET:
return "CODE_NOT_SET";
case DOI_DOES_NOT_EXIST:
return "DOI_DOES_NOT_EXSIT";
case DOI_ALREADY_EXISTS:
return "DOI_ALREADY_EXISTS";
case FOREIGN_DOI:
return "FOREIGN_DOI";
case BAD_ANSWER:
return "BAD_ANSWER";
case RESERVE_FIRST:
return "REGISTER_FIRST";
case AUTHENTICATION_ERROR:
return "AUTHENTICATION_ERROR";
case INTERNAL_ERROR:
return "INTERNAL_ERROR";
case CONVERSION_ERROR:
return "CONVERSION_ERROR";
case MISMATCH:
return "MISMATCH";
case UNRECOGNIZED:
return "UNRECOGNIZED";
case UNAUTHORIZED_METADATA_MANIPULATION:
return "UNAUTHORIZED_METADATA_MANIPULATION";
case DOI_IS_DELETED:
return "DELETED";
default:
return "UNKOWN";
}
}
public DOIIdentifierException() {
super();
this.code = this.CODE_NOT_SET;
}
public DOIIdentifierException(int code) {
super();
this.code = code;
}
public DOIIdentifierException(String message) {
super(message);
this.code = this.CODE_NOT_SET;
}
public DOIIdentifierException(String message, int code) {
super(message);
this.code = code;
}
public DOIIdentifierException(String message, Throwable cause) {
super(message, cause);
this.code = this.CODE_NOT_SET;
}
public DOIIdentifierException(String message, Throwable cause, int code) {
super(message, cause);
this.code = code;
}
public DOIIdentifierException(Throwable cause) {
super(cause);
this.code = this.CODE_NOT_SET;
}
public DOIIdentifierException(Throwable cause, int code) {
super(cause);
this.code = code;
}
public int getCode()
{
return this.code;
}
@Override
public String getMessage()
{
String message = super.getMessage();
if ((message == null || message.isEmpty()) && code != CODE_NOT_SET)
{
return codeToString(code);
}
return message;
}
}