org.bonitasoft.web.designer.controller.ResourceControllerAdvice.java Source code

Java tutorial

Introduction

Here is the source code for org.bonitasoft.web.designer.controller.ResourceControllerAdvice.java

Source

/**
 * Copyright (C) 2015 Bonitasoft S.A.
 * Bonitasoft, 32 rue Gustave Eiffel - 38000 Grenoble
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2.0 of the License, or
 * (at your option) any later version.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package org.bonitasoft.web.designer.controller;

import org.bonitasoft.web.designer.controller.asset.MalformedJsonException;
import org.bonitasoft.web.designer.controller.importer.ImportException;
import org.bonitasoft.web.designer.repository.exception.ConstraintValidationException;
import org.bonitasoft.web.designer.repository.exception.InUseException;
import org.bonitasoft.web.designer.repository.exception.NotAllowedException;
import org.bonitasoft.web.designer.repository.exception.NotFoundException;
import org.bonitasoft.web.designer.repository.exception.RepositoryException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;

import java.io.IOException;

/**
 * Definition of the exception handlers
 */
@ControllerAdvice
public class ResourceControllerAdvice {

    private static final Logger logger = LoggerFactory.getLogger(ResourceControllerAdvice.class);

    /**
     * Construct Header to specify content-type
     */
    public static HttpHeaders getHttpHeaders() {
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", MediaType.APPLICATION_JSON_VALUE);
        return headers;
    }

    @ExceptionHandler(IllegalArgumentException.class)
    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    public ResponseEntity<ErrorMessage> handleIllegalArgumentException(IllegalArgumentException exception) {
        logger.error("Illegal Argument Exception", exception);
        return new ResponseEntity<>(new ErrorMessage(exception), HttpStatus.BAD_REQUEST);
    }

    @ExceptionHandler(ConstraintValidationException.class)
    @ResponseStatus(value = HttpStatus.BAD_REQUEST)
    public ResponseEntity<ErrorMessage> handleConstraintValidationException(
            ConstraintValidationException exception) {
        logger.error("Constraint Validation Exception", exception);
        return new ResponseEntity<>(new ErrorMessage(exception), HttpStatus.BAD_REQUEST);
    }

    @ExceptionHandler(NotAllowedException.class)
    public ResponseEntity<ErrorMessage> handleNotAllowedException(NotAllowedException exception) {
        logger.error("Not Allowed Exception", exception);
        return new ResponseEntity<>(new ErrorMessage(exception), HttpStatus.FORBIDDEN);
    }

    @ExceptionHandler(NotFoundException.class)
    public ResponseEntity<ErrorMessage> handleNotFoundException(NotFoundException exception) {
        logger.error("Element Not Found Exception", exception);
        return new ResponseEntity<>(new ErrorMessage(exception), HttpStatus.NOT_FOUND);
    }

    @ExceptionHandler(IOException.class)
    public ResponseEntity<ErrorMessage> handleIOException(IOException exception) {
        logger.error("Internal Server Error Exception", exception);
        return new ResponseEntity<>(new ErrorMessage(exception), HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @ExceptionHandler(RepositoryException.class)
    public ResponseEntity<ErrorMessage> handleRepositoryException(RepositoryException exception) {
        logger.error("Internal Exception", exception);
        return new ResponseEntity<>(new ErrorMessage(exception), HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @ExceptionHandler(InUseException.class)
    public ResponseEntity<ErrorMessage> handleInUseException(InUseException exception) {
        logger.error("Element In Use Exception", exception);
        return new ResponseEntity<>(new ErrorMessage(exception), HttpStatus.CONFLICT);
    }

    @ExceptionHandler(RuntimeException.class)
    public ResponseEntity<ErrorMessage> handleRepositoryException(RuntimeException exception) {
        logger.error("Internal Exception", exception);
        return new ResponseEntity<>(new ErrorMessage(exception), HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @ExceptionHandler(ImportException.class)
    public ResponseEntity<ErrorMessage> handleImportException(ImportException exception) {
        logger.error("Technical error when importing a component", exception);
        // BS-14113: HttpStatus.ACCEPTED internet explorer don't recognize response if sent with http error code
        ErrorMessage errorMessage = new ErrorMessage(exception.getType().toString(), exception.getMessage());
        errorMessage.addInfos(exception.getInfos());
        return new ResponseEntity<>(errorMessage, HttpStatus.ACCEPTED);
    }

    @ExceptionHandler(MalformedJsonException.class)
    public ResponseEntity<ErrorMessage> handleJsonProcessingException(MalformedJsonException exception) {
        logger.error("Error while uploading a json file " + exception.getMessage());
        // BS-14113: HttpStatus.ACCEPTED internet explorer don't recognize response if sent with http error code
        ErrorMessage message = new ErrorMessage(exception);
        message.addInfo("location", exception.getLocationInfos());
        return new ResponseEntity<>(message, HttpStatus.ACCEPTED);
    }
}