org.gridgain.client.GridClientException Maven / Gradle / Ivy
/*
Copyright (C) GridGain Systems. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/* _________ _____ __________________ _____
* __ ____/___________(_)______ /__ ____/______ ____(_)_______
* _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
* / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
* \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
*/
package org.gridgain.client;
import org.gridgain.grid.*;
import org.gridgain.grid.util.typedef.*;
import org.jetbrains.annotations.*;
/**
* Client exception is a common super class of all client exceptions.
*/
public class GridClientException extends Exception {
/**
* Constructs client exception.
*
* @param msg Message.
*/
public GridClientException(String msg) {
super(msg);
}
/**
* Constructs client exception.
*
* @param msg Message.
* @param cause Cause.
*/
public GridClientException(String msg, Throwable cause) {
super(msg, cause);
}
/**
* Constructs client exception.
*
* @param cause Cause.
*/
public GridClientException(Throwable cause) {
super(cause);
}
/**
* Checks if passed in {@code 'Throwable'} has given class in {@code 'cause'} hierarchy
* including that throwable itself.
*
* Note that this method follows includes {@link GridMultiException#nestedCauses()}
* into check.
*
* @param cls Cause classes to check (if {@code null} or empty, {@code false} is returned).
* @return {@code True} if one of the causing exception is an instance of passed in classes,
* {@code false} otherwise.
*/
public boolean hasCause(@Nullable Class extends Throwable>... cls) {
return hasCause(this, cls);
}
/**
* Checks if passed in {@code 'Throwable'} has given class in {@code 'cause'} hierarchy
* including that throwable itself.
*
* Note that this method follows includes {@link GridMultiException#nestedCauses()}
* into check.
*
* @param t Throwable to check (if {@code null}, {@code false} is returned).
* @param cls Cause classes to check (if {@code null} or empty, {@code false} is returned).
* @return {@code True} if one of the causing exception is an instance of passed in classes,
* {@code false} otherwise.
*/
private boolean hasCause(@Nullable Throwable t, @Nullable Class extends Throwable>... cls) {
if (t == null || F.isEmpty(cls))
return false;
assert cls != null;
for (Throwable th = t; th != null; th = th.getCause()) {
for (Class extends Throwable> c : cls)
if (c.isAssignableFrom(th.getClass()))
return true;
if (th instanceof GridMultiException) {
for (Throwable n : ((GridMultiException)th).nestedCauses())
if (hasCause(n, cls))
return true;
}
if (th.getCause() == th)
break;
}
return false;
}
/** {@inheritDoc} */
@Override public String toString() {
return getClass() + ": " + getMessage();
}
}