br.eti.danielcamargo.backend.common.rest.handlers.GlobalExceptionHandler.java Source code

Java tutorial

Introduction

Here is the source code for br.eti.danielcamargo.backend.common.rest.handlers.GlobalExceptionHandler.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.eti.danielcamargo.backend.common.rest.handlers;

import br.eti.danielcamargo.backend.common.exceptions.BusinessException;
import br.eti.danielcamargo.backend.common.exceptions.ValidationOccurrence;
import br.eti.danielcamargo.backend.common.rest.transfer.Mensagem;
import br.eti.danielcamargo.backend.common.utils.MessageUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;

/**
 *
 * @author Daniel
 */
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler({ BusinessException.class })
    public ResponseEntity<List<Mensagem>> handleBadRequest(final BusinessException ex, final WebRequest request) {
        List<ValidationOccurrence> ocorrencias = ex.getOccurrences();
        List<Mensagem> mensagens = new ArrayList<>();
        for (ValidationOccurrence validationOccurrence : ocorrencias) {
            if (validationOccurrence.isConstraintViolation()) {
                mensagens.add(MessageUtils.criarMensagemErroValidacao(ex.getModulo(), validationOccurrence));
            } else {
                mensagens.add(MessageUtils.criarMensagemErro(ex.getModulo(), validationOccurrence));
            }
        }

        ResponseEntity<List<Mensagem>> responseEntity = new ResponseEntity<>(mensagens, HttpStatus.BAD_REQUEST);
        return responseEntity;
    }

    @ExceptionHandler
    public ResponseEntity<List<Mensagem>> handleException(DataIntegrityViolationException ex) {

        String constraint = null;
        Mensagem mensagem = null;

        String msg = ex.getMessage();
        Pattern p = Pattern.compile("\\[(\\w+_ukey)\\]");
        Matcher m = p.matcher(msg);

        if (m.find()) {
            constraint = m.group(1);
            mensagem = MessageUtils.criarMensagemViolacaoUnicidade("common", constraint);
        }

        p = Pattern.compile("\\[(\\w+_pkey)\\]");
        m = p.matcher(msg);

        if (m.find()) {
            constraint = m.group(1);
            mensagem = MessageUtils.criarMensagemViolacaoChavePrimaria("common", constraint);
        }

        p = Pattern.compile("\\[(\\w+_fkey)\\]");
        m = p.matcher(msg);

        if (m.find()) {
            constraint = m.group(1);
            mensagem = MessageUtils.criarMensagemViolacaoChaveEstrangeira("common", constraint);
        }

        List<Mensagem> list = new ArrayList<>();
        list.add(mensagem);

        ResponseEntity<List<Mensagem>> responseEntity = new ResponseEntity<>(list, HttpStatus.BAD_REQUEST);
        return responseEntity;

    }
}