package uws.job; /* * This file is part of UWSLibrary. * * UWSLibrary is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * UWSLibrary 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with UWSLibrary. If not, see <http://www.gnu.org/licenses/>. * * Copyright 2012,2014 - UDS/Centre de DonnĂ©es astronomiques de Strasbourg (CDS), * Astronomisches Rechen Institut (ARI) */ import uws.UWSException; import uws.job.serializer.UWSSerializer; import uws.job.user.JobOwner; /** * This class gives a short description of the occurred error (if any) during a job execution. * A fuller representation of the error may be retrieved from <i>{jobs}/(job-id)/error</i>. * * @author Grégory Mantelet (CDS;ARI) * @version 4.1 (08/2014) */ public class ErrorSummary extends SerializableUWSObject { private static final long serialVersionUID = 1L; /** <b>[Required]</b> A short description of the error. */ protected String message; /** <b>[Required]</b> The type of the error. */ protected ErrorType type; /** <i>[Optional]</i> The URI/URL toward the file which contains a more detailed description of the error (i.e. an Exception stack trace). */ protected String details = null; /* CONSTRUCTORS */ /** * <p>Builds an error summary from an Exception.</p> * * <p><b><u>WARNING:</u> No file is written: that is the responsibility of the creator of this error summary !</b></p> * * @param ex The Exception which describes the error. Only the message is used ({@link Exception#getMessage()}). * @param errorType The type of this error. (if <i>null</i> the error type is by default set to {@link ErrorType#FATAL} ) * @param detailedMsgURI <i>null</i> or the URI/URL at which a detailed error message is given (different from {jobs}/(job-id)/error).<br /> * * @see ErrorSummary#ErrorSummary(String, ErrorType, String) */ public ErrorSummary(Exception ex, ErrorType errorType, String detailedMsgURI){ this(((ex == null) ? null : ex.getMessage()), errorType, detailedMsgURI); } /** * Builds an error summary with the given short description. * * @param msg A short description of the error. * @param errorType The type of the error. (if <i>null</i> the error type is by default set to {@link ErrorType#FATAL} ) * * @see #ErrorSummary(String, ErrorType, String) */ public ErrorSummary(String msg, ErrorType errorType){ this(msg, errorType, (String)null); } /** * <p>Builds an error summary with the given short description and with the URL to access to a detailed description.</p> * <p><b><u>Warning:</u> No file is written: that is the responsibility of the creator of this error summary !</b></p> * * @param msg A short description of the error. * @param errorType The type of the error. (if <i>null</i> the error type is by default set to {@link ErrorType#FATAL} ) * @param detailedMsgURI <i>null</i> or the URI/URL at which a detailed error message is given (different from {jobs}/(job-id)/error). */ public ErrorSummary(String msg, ErrorType errorType, String detailedMsgURI){ message = (msg == null) ? "{No error message}" : msg; type = (errorType == null) ? ErrorType.FATAL : errorType; details = (detailedMsgURI == null || detailedMsgURI.trim().length() == 0) ? null : detailedMsgURI.trim(); } /* ******* */ /* GETTERS */ /* ******* */ /** * Gets a short description of the occurred error. * * @return A short error message. */ public final String getMessage(){ return message; } /** * Gets the type of the occurred error <i>({@link ErrorType#FATAL} by default)</i>. * * @return The error type. * * @see ErrorType */ public final ErrorType getType(){ return type; } /** * Indicates whether there are more details about the occurred error.<br /> * If <i>true</i> these details can be found at {jobs}/(job-id)/error. * * @return <i>true</i> if there are more details, <i>false</i> otherwise. */ public final boolean hasDetail(){ return details != null; } /** * Gets the URI/URL where the details about the occurred error can be found. * * @return The error details. */ public final String getDetails(){ return details; } /* ***************** */ /* INHERITED METHODS */ /* ***************** */ @Override public String serialize(UWSSerializer serializer, JobOwner owner) throws UWSException, Exception{ return serializer.getErrorSummary(this, true); } @Override public String toString(){ return "ERROR_SUMMARY {type: " + type.name() + "; message: \"" + message + "\"; details: " + (hasDetail() ? details : "none") + "}"; } }