/** * 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; } }