/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.core.exception;
import static org.mule.runtime.api.util.Preconditions.checkState;
import org.mule.runtime.api.message.ErrorType;
/**
* Mapping between a {@link Exception} type and an {@link ErrorType}.
*
* @since 4.0
*/
public class ExceptionMapping implements Comparable<ExceptionMapping> {
private Class<? extends Throwable> exceptionType;
private ErrorType errorType;
/**
* Creates a new {@link ExceptionMapper} instance.
*
* @param exceptionType exception type to related to the error type.
* @param errorType error type associated with the exception type.
*/
ExceptionMapping(Class<? extends Throwable> exceptionType, ErrorType errorType) {
checkState(exceptionType != null, "exceptionType type cannot be null");
checkState(errorType != null, "error type cannot be null");
this.exceptionType = exceptionType;
this.errorType = errorType;
}
/**
* @param exception exception to check if it matches with this mapping.
* @return true if the exception type is associated with this mapping.
*/
public boolean matches(Class<? extends Throwable> exception) {
return this.exceptionType.isAssignableFrom(exception);
}
/**
* @return the error type of this mapping.
*/
public ErrorType getErrorType() {
return errorType;
}
@Override
public int compareTo(ExceptionMapping exceptionMapping) {
if (exceptionType.equals(exceptionMapping.exceptionType)) {
return 0;
}
if (this.exceptionType.isAssignableFrom(exceptionMapping.exceptionType)) {
return 1;
}
if (exceptionMapping.exceptionType.isAssignableFrom(this.exceptionType)) {
return -1;
}
return 1;
}
}