package org.ovirt.engine.api.restapi.util; import java.util.LinkedList; import java.util.List; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.ovirt.engine.core.common.errors.EngineMessage; import org.ovirt.engine.core.common.errors.ErrorType; public class ErrorMessageHelper { public static Status getErrorStatus(String error) { try { ErrorType errorType = EngineMessage.getErrorType(error); return getStatus(errorType); } catch (Exception e) { return null; } } /** * Returns the most severe error status out of the given errors. This methos exists to handle cases where multiple * Validate messages were returned from Backend, which is quite rare. */ public static Response.Status getErrorStatus(List<String> errors) { Status status = Status.BAD_REQUEST; // default if (errors != null) { List<Status> statuses = getStatuses(errors); if (statuses.contains(Status.BAD_REQUEST)) { // stay with the default - BAD_REQUEST. } else if (statuses.contains(Status.CONFLICT)) { status = Status.CONFLICT; } else if (statuses.contains(Status.INTERNAL_SERVER_ERROR)) { status = Status.INTERNAL_SERVER_ERROR; } } return status; } private static List<Status> getStatuses(List<String> errors) { List<Status> statuses = new LinkedList<>(); for (String error : errors) { Status status = getErrorStatus(error); if (status != null) { statuses.add(status); } } return statuses; } private static Status getStatus(ErrorType errorType) { switch (errorType) { case BAD_PARAMETERS: return Status.BAD_REQUEST; case CONFLICT: return Status.CONFLICT; case CONSTRAINT_VIOLATION: return Status.BAD_REQUEST; case DATA_CORRUPTION: return Status.INTERNAL_SERVER_ERROR; case INTERNAL_ERROR: return Status.INTERNAL_SERVER_ERROR; case NO_AUTHENTICATION: return Status.UNAUTHORIZED; case NO_PERMISSION: return Status.FORBIDDEN; case NOT_SUPPORTED: return Status.BAD_REQUEST; case INCOMPATIBLE_VERSION: return Status.BAD_REQUEST; case ATTESTATION_SERVER_ERROR: return Status.BAD_REQUEST; default: return Status.BAD_REQUEST; } } }