/** * Copyright 2015-2017 Linagora, Université Joseph Fourier, Floralis * * The present code is developed in the scope of the joint LINAGORA - * Université Joseph Fourier - Floralis research program and is designated * as a "Result" pursuant to the terms and conditions of the LINAGORA * - Université Joseph Fourier - Floralis research program. Each copyright * holder of Results enumerated here above fully & independently holds complete * ownership of the complete Intellectual Property rights applicable to the whole * of said Results, and may freely exploit it in any manner which does not infringe * the moral rights of the other copyright holders. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.roboconf.dm.rest.services.internal.utils; import java.util.logging.Logger; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.core.Response.Status; import net.roboconf.core.utils.Utils; /** * @author Vincent Zurczak - Linagora */ public final class RestServicesUtils { /** * Private constructor. */ private RestServicesUtils() { // nothing } /** * Handles an exception. * @param logger the logger * @param status the response's status * @param msg the message (can be null) * @param e the exception (can be null) * @return a response builder */ public static ResponseBuilder handleException( Logger logger, int status, String msg, Exception e ) { StringBuilder sb = new StringBuilder(); if( msg != null ) sb.append( formatEnd( msg )); if( e != null && ! Utils.isEmptyOrWhitespaces( e.getMessage())) sb.append( e.getMessage()); logger.severe( sb.toString()); if( e != null ) Utils.logException( logger, e ); // Errors should return a JSon object. // Otherwise, Restangular cannot parse error messages. String details = msg == null ? "Not specified." : msg.replaceAll( "\"", "\\\"" ); return Response.status( status ).entity( "{\"reason\":\"" + details + "\"}" ); } /** * Handles an exception. * @param logger the logger * @param status the response's status * @param msg the message (can be null) * @param e the exception (can be null) * @return a response builder */ public static ResponseBuilder handleException( Logger logger, Status status, String msg, Exception e ) { return handleException( logger, status.getStatusCode(), msg, e ); } /** * Handles an exception. * @param logger the logger * @param status the response's status * @param msg the message (can be null) * @return a response builder */ public static ResponseBuilder handleException( Logger logger, Status status, String msg ) { return handleException( logger, status.getStatusCode(), msg, null ); } /** * Formats the end of a message for logging. * @param s a string (can be null) * @return a formatted string, or null if the input was null */ static String formatEnd( String s ) { return Utils.isEmptyOrWhitespaces( s ) ? null : s.replaceFirst( "\\s*$", " " ); } }