package org.ovirt.engine.core.common.errors; import java.util.ArrayList; import org.ovirt.engine.core.common.businessentities.IVdcQueryable; public class EngineFault implements IVdcQueryable { private static final long serialVersionUID = -8004317251171749327L; private String privateSessionID; public String getSessionID() { return privateSessionID; } public void setSessionID(String value) { privateSessionID = value; } private ArrayList<String> privateDetails; public ArrayList<String> getDetails() { return privateDetails; } public void setDetails(ArrayList<String> value) { privateDetails = value; } private EngineError error; public EngineError getError() { return error; } public void setError(EngineError value) { error = value; } public int getErrorCode() { return error.getValue(); } public void setError(int value) { error = EngineError.forValue(value); } public EngineFault(RuntimeException ex, EngineError error) { this(ex); setMessage(error.toString()); setError(error); } public EngineFault(RuntimeException ex) { error = EngineError.unexpected; setMessage(ex.getMessage()); // Pass over the inner exceptions and accumulate them within an array. setDetails(getInnerException(ex)); } public EngineFault() { error = EngineError.unexpected; } private String privateMessage; public String getMessage() { return privateMessage; } public void setMessage(String value) { privateMessage = value; } private static ArrayList<String> getInnerException(Throwable ex) { ArrayList<String> result = new ArrayList<>(); while (ex.getCause() != null) { result.add(ex.getCause().getMessage()); ex = ex.getCause(); } return result; } @Override public Object getQueryableId() { return getMessage(); } }