/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.vipr.client.impl.jersey;
import com.emc.vipr.client.ClientConfig;
import com.emc.vipr.client.catalog.impl.ApiListUtils;
import com.emc.vipr.model.catalog.ValidationError;
import com.emc.vipr.client.exceptions.ValidationException;
import com.sun.jersey.api.client.ClientHandlerException;
import com.sun.jersey.api.client.ClientRequest;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.GenericType;
import com.sun.jersey.api.client.filter.ClientFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* Error filter that handles portal validation errors (400).
*/
public class ValidationErrorFilter extends ClientFilter {
private static final Logger LOG = LoggerFactory.getLogger(ValidationErrorFilter.class);
private ClientConfig config;
public ValidationErrorFilter(ClientConfig config) {
this.config = config;
}
@Override
public ClientResponse handle(ClientRequest request) throws ClientHandlerException {
ClientResponse response = getNext().handle(request);
int status = response.getStatus();
if (supportsPortalValidation(request) && status == 400) {
List<ValidationError> errorsList = ApiListUtils.getEntityList(config, new GenericType<List<ValidationError>>() {
}, response);
ValidationException exception = new ValidationException(response.getStatus(), errorsList);
LOG.error(exception.getMessage());
throw exception;
}
return response;
}
private boolean supportsPortalValidation(ClientRequest request) {
String path = request.getURI().getPath();
return path.contains("api/services") || path.contains("api/catalog");
}
}