diff --git a/src/main/java/it/inaf/oats/vospace/exception/ContainerNotFoundException.java b/src/main/java/it/inaf/oats/vospace/exception/ContainerNotFoundException.java index d2847872d3f53c01b999efa8b0989ec7a9bde243..402470515d4d63584a0cd09d98b42369685b91c8 100644 --- a/src/main/java/it/inaf/oats/vospace/exception/ContainerNotFoundException.java +++ b/src/main/java/it/inaf/oats/vospace/exception/ContainerNotFoundException.java @@ -1,6 +1,5 @@ package it.inaf.oats.vospace.exception; -import net.ivoa.xml.uws.v1.ErrorSummaryFactory; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @@ -8,7 +7,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; public class ContainerNotFoundException extends VoSpaceErrorSummarizableException { public ContainerNotFoundException(String path) { - super("Container Not Found at path: " + path, - ErrorSummaryFactory.VOSpaceFault.NODE_NOT_FOUND); + super("Path: " + path, + VOSpaceFaultEnum.NODE_NOT_FOUND); } } diff --git a/src/main/java/it/inaf/oats/vospace/exception/DuplicateNodeException.java b/src/main/java/it/inaf/oats/vospace/exception/DuplicateNodeException.java index 0b09d37b93a7f062ce87ccb81652018f23b637c7..e8f1c46051c5aa901a879b072c389170381ff816 100644 --- a/src/main/java/it/inaf/oats/vospace/exception/DuplicateNodeException.java +++ b/src/main/java/it/inaf/oats/vospace/exception/DuplicateNodeException.java @@ -1,6 +1,5 @@ package it.inaf.oats.vospace.exception; -import net.ivoa.xml.uws.v1.ErrorSummaryFactory; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @@ -8,7 +7,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; public class DuplicateNodeException extends VoSpaceErrorSummarizableException { public DuplicateNodeException(String path) { - super("Duplicate Node at path: " + path, - ErrorSummaryFactory.VOSpaceFault.DUPLICATE_NODE); + super("Path: " + path, + VOSpaceFaultEnum.DUPLICATE_NODE); } } diff --git a/src/main/java/it/inaf/oats/vospace/exception/ErrorSummaryFactory.java b/src/main/java/it/inaf/oats/vospace/exception/ErrorSummaryFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..f50eadeb28e4a348cdc4d23628011012350c02a2 --- /dev/null +++ b/src/main/java/it/inaf/oats/vospace/exception/ErrorSummaryFactory.java @@ -0,0 +1,32 @@ +package it.inaf.oats.vospace.exception; + +import net.ivoa.xml.uws.v1.ErrorSummary; + +public class ErrorSummaryFactory { + + public static ErrorSummary newErrorSummary(VOSpaceFaultEnum error, String detailMessage) { + ErrorSummary result = new ErrorSummary(); + result.setMessage(error.getFaultRepresentation()); + result.setType(error.getType()); + + if (detailMessage == null || detailMessage.isBlank()) { + result.setHasDetail(false); + } else { + result.setHasDetail(true); + result.setDetailMessage(error.getFaultCaptionForDetails() + + ". " + + detailMessage); + } + + return result; + } + + public static ErrorSummary newErrorSummary(VOSpaceFaultEnum error) { + return newErrorSummary(error, null); + } + + public static ErrorSummary newErrorSummary(VoSpaceErrorSummarizableException e) + { + return newErrorSummary(e.getFault(), e.getDetailMessage()); + } +} diff --git a/src/main/java/it/inaf/oats/vospace/exception/InternalFaultException.java b/src/main/java/it/inaf/oats/vospace/exception/InternalFaultException.java index 05d702e5f1fe8c0b51790c8007b3b72a9f572840..8ae2febe3559c2599d0486c2d0bbcc022fd1493a 100644 --- a/src/main/java/it/inaf/oats/vospace/exception/InternalFaultException.java +++ b/src/main/java/it/inaf/oats/vospace/exception/InternalFaultException.java @@ -1,6 +1,5 @@ package it.inaf.oats.vospace.exception; -import net.ivoa.xml.uws.v1.ErrorSummaryFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; @@ -12,13 +11,13 @@ public class InternalFaultException extends VoSpaceErrorSummarizableException { private static final Logger LOG = LoggerFactory.getLogger(InternalFaultException.class); public InternalFaultException(String msg) { - super("InternalFaultException: " + msg, - ErrorSummaryFactory.VOSpaceFault.INTERNAL_FAULT); + super("Description: " + msg, + VOSpaceFaultEnum.INTERNAL_FAULT); } public InternalFaultException(Throwable cause) { - super("InternalFaultException: " + getMessage(cause), - ErrorSummaryFactory.VOSpaceFault.INTERNAL_FAULT); + super("Description: " + getMessage(cause), + VOSpaceFaultEnum.INTERNAL_FAULT); } private static String getMessage(Throwable cause) { diff --git a/src/main/java/it/inaf/oats/vospace/exception/InvalidArgumentException.java b/src/main/java/it/inaf/oats/vospace/exception/InvalidArgumentException.java index d24af645b56c8f1fb4680a18eea85f20027d6d65..67fbab63ec5827f9aac94f7612846be94d6e1e09 100644 --- a/src/main/java/it/inaf/oats/vospace/exception/InvalidArgumentException.java +++ b/src/main/java/it/inaf/oats/vospace/exception/InvalidArgumentException.java @@ -1,6 +1,5 @@ package it.inaf.oats.vospace.exception; -import net.ivoa.xml.uws.v1.ErrorSummaryFactory; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @@ -8,6 +7,6 @@ import org.springframework.web.bind.annotation.ResponseStatus; public class InvalidArgumentException extends VoSpaceErrorSummarizableException { public InvalidArgumentException(String message) { - super(message, ErrorSummaryFactory.VOSpaceFault.NODE_NOT_FOUND); + super("Description: " + message, VOSpaceFaultEnum.NODE_NOT_FOUND); } } diff --git a/src/main/java/it/inaf/oats/vospace/exception/InvalidURIException.java b/src/main/java/it/inaf/oats/vospace/exception/InvalidURIException.java index e91e3f5432563c9c86cda2032a22fbba295aacea..74b155c9b1288b7f11caf43e31a14c4d2c9381d7 100644 --- a/src/main/java/it/inaf/oats/vospace/exception/InvalidURIException.java +++ b/src/main/java/it/inaf/oats/vospace/exception/InvalidURIException.java @@ -1,6 +1,5 @@ package it.inaf.oats.vospace.exception; -import net.ivoa.xml.uws.v1.ErrorSummaryFactory; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @@ -8,18 +7,18 @@ import org.springframework.web.bind.annotation.ResponseStatus; public class InvalidURIException extends VoSpaceErrorSummarizableException { public InvalidURIException(String URI, String path) { - super("InvalidURI. Payload node URI: " + URI + super("Payload node URI: " + URI + " is not consistent with request path: " + path, - ErrorSummaryFactory.VOSpaceFault.INVALID_URI); + VOSpaceFaultEnum.INVALID_URI); } public InvalidURIException(String URI) { - super("InvalidURI. URI: " + URI + " is not in a valid format", - ErrorSummaryFactory.VOSpaceFault.INVALID_URI); + super("URI: " + URI + " is not in a valid format", + VOSpaceFaultEnum.INVALID_URI); } public InvalidURIException(IllegalArgumentException ex) { - super("InvalidURI. " + ex.getMessage(), - ErrorSummaryFactory.VOSpaceFault.INVALID_URI); + super("Description: " + ex.getMessage(), + VOSpaceFaultEnum.INVALID_URI); } } diff --git a/src/main/java/it/inaf/oats/vospace/exception/LinkFoundException.java b/src/main/java/it/inaf/oats/vospace/exception/LinkFoundException.java index dc4946eb338907019670fb955a003ec82dfc3356..2eb01282e42f5fed742c7f79aac7eb4c27e93dd7 100644 --- a/src/main/java/it/inaf/oats/vospace/exception/LinkFoundException.java +++ b/src/main/java/it/inaf/oats/vospace/exception/LinkFoundException.java @@ -1,6 +1,5 @@ package it.inaf.oats.vospace.exception; -import net.ivoa.xml.uws.v1.ErrorSummaryFactory; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @@ -8,7 +7,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; public class LinkFoundException extends VoSpaceErrorSummarizableException { public LinkFoundException(String path) { - super("Link Found at path: " + path, - ErrorSummaryFactory.VOSpaceFault.INVALID_URI); + super("Link Node found at path: " + path, + VOSpaceFaultEnum.INVALID_URI); } } diff --git a/src/main/java/it/inaf/oats/vospace/exception/NodeBusyException.java b/src/main/java/it/inaf/oats/vospace/exception/NodeBusyException.java index 2586ac6c1afaed1688673ba2e8d0c19193c54e68..2ed84fa165a74cdcffd633c1d71757af3e512f4b 100644 --- a/src/main/java/it/inaf/oats/vospace/exception/NodeBusyException.java +++ b/src/main/java/it/inaf/oats/vospace/exception/NodeBusyException.java @@ -1,12 +1,10 @@ package it.inaf.oats.vospace.exception; -import net.ivoa.xml.uws.v1.ErrorSummaryFactory; - public class NodeBusyException extends VoSpaceErrorSummarizableException { public NodeBusyException(String path) { - super("Node Busy: at path " + path, - ErrorSummaryFactory.VOSpaceFault.NODE_BUSY); + super("Path: " + path, + VOSpaceFaultEnum.NODE_BUSY); } } diff --git a/src/main/java/it/inaf/oats/vospace/exception/NodeNotFoundException.java b/src/main/java/it/inaf/oats/vospace/exception/NodeNotFoundException.java index a7bb797373f1f53d06a61e4abc7e649c8977e265..d4066fe95787612ec3dbb34ebbdc496a00b0e15e 100644 --- a/src/main/java/it/inaf/oats/vospace/exception/NodeNotFoundException.java +++ b/src/main/java/it/inaf/oats/vospace/exception/NodeNotFoundException.java @@ -1,6 +1,5 @@ package it.inaf.oats.vospace.exception; -import net.ivoa.xml.uws.v1.ErrorSummaryFactory; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @@ -8,7 +7,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; public class NodeNotFoundException extends VoSpaceErrorSummarizableException { public NodeNotFoundException(String path) { - super("NodeNotFound: " + path, - ErrorSummaryFactory.VOSpaceFault.NODE_NOT_FOUND); + super("Path: " + path, + VOSpaceFaultEnum.NODE_NOT_FOUND); } } diff --git a/src/main/java/it/inaf/oats/vospace/exception/PermissionDeniedException.java b/src/main/java/it/inaf/oats/vospace/exception/PermissionDeniedException.java index 31194db844fdf21d97e203a9229b0a15a13928c4..6563a894bb20c30d77775d675b565b0f1e674a61 100644 --- a/src/main/java/it/inaf/oats/vospace/exception/PermissionDeniedException.java +++ b/src/main/java/it/inaf/oats/vospace/exception/PermissionDeniedException.java @@ -1,6 +1,5 @@ package it.inaf.oats.vospace.exception; -import net.ivoa.xml.uws.v1.ErrorSummaryFactory; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @@ -8,7 +7,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; public class PermissionDeniedException extends VoSpaceErrorSummarizableException { public PermissionDeniedException(String path) { - super("Permission Denied at path: " + path, - ErrorSummaryFactory.VOSpaceFault.PERMISSION_DENIED); + super("Path: " + path, + VOSpaceFaultEnum.PERMISSION_DENIED); } } diff --git a/src/main/java/it/inaf/oats/vospace/exception/ProtocolNotSupportedException.java b/src/main/java/it/inaf/oats/vospace/exception/ProtocolNotSupportedException.java index d13d941890927da670ea1e07f9fe69e8adbf6c78..205e0f8ebecc8806037fe44da88f9a6318937f75 100644 --- a/src/main/java/it/inaf/oats/vospace/exception/ProtocolNotSupportedException.java +++ b/src/main/java/it/inaf/oats/vospace/exception/ProtocolNotSupportedException.java @@ -1,12 +1,10 @@ package it.inaf.oats.vospace.exception; -import net.ivoa.xml.uws.v1.ErrorSummaryFactory; - public class ProtocolNotSupportedException extends VoSpaceErrorSummarizableException{ public ProtocolNotSupportedException(String protocol) { - super("Protocol Not Supported: " + protocol, - ErrorSummaryFactory.VOSpaceFault.PROTOCOL_NOT_SUPPORTED); + super("Protocol: " + protocol, + VOSpaceFaultEnum.PROTOCOL_NOT_SUPPORTED); } } diff --git a/src/main/java/it/inaf/oats/vospace/exception/VOSpaceFaultEnum.java b/src/main/java/it/inaf/oats/vospace/exception/VOSpaceFaultEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..6aeb655d9c6edf98b9c55055d55f3675c3893321 --- /dev/null +++ b/src/main/java/it/inaf/oats/vospace/exception/VOSpaceFaultEnum.java @@ -0,0 +1,50 @@ +package it.inaf.oats.vospace.exception; + +// NFC: ErrorType usage is not covered in documentation, as far as I can see +// these are tentative default values. +import net.ivoa.xml.uws.v1.ErrorType; + +public enum VOSpaceFaultEnum { + // pushto + OPERATION_NOT_SUPPORTED("Operation Not Supported", ErrorType.FATAL, "OperationNotSupported"), + INTERNAL_FAULT("Internal Fault", ErrorType.TRANSIENT, "InternalFault"), + PERMISSION_DENIED("Permission Denied", ErrorType.FATAL, "PermissionDenied"), + VIEW_NOT_SUPPORTED("View Not Supported", ErrorType.FATAL, "ViewNotSupported"), + PROTOCOL_NOT_SUPPORTED("Protocol Not Supported", ErrorType.FATAL, "ProtocolNotSupported"), + INVALID_ARGUMENT("Invalid Argument", ErrorType.FATAL, "InvalidArgument"), + NODE_BUSY("Node Busy", ErrorType.TRANSIENT, "NodeBusy"), + // additional for pullto + INVALID_URI("Invalid URI", ErrorType.FATAL, "InvalidURI"), + INVALID_DATA("Invalid Data", ErrorType.FATAL, "InvalidData"), + // additional for pullfrom + NODE_NOT_FOUND("Node Not Found", ErrorType.FATAL, "NodeNotFound"), + // additional for pushfrom + TRANSFER_FAILED("Transfer Failed", ErrorType.FATAL, "TransferFailed"), + // additional for movenode/copynode + DUPLICATE_NODE("Duplicate Node", ErrorType.FATAL, "DuplicateNode"); + + private final String faultRepresentation; + private final ErrorType type; + private final String faultCaptionForDetails; + + private VOSpaceFaultEnum(String faultRepresentation, + ErrorType type, + String faultCaptionForDetails) { + this.faultRepresentation = faultRepresentation; + this.type = type; + this.faultCaptionForDetails = faultCaptionForDetails; + } + + public String getFaultRepresentation() { + return this.faultRepresentation; + } + + public ErrorType getType() { + return this.type; + } + + public String getFaultCaptionForDetails() { + return faultCaptionForDetails; + } + +} diff --git a/src/main/java/it/inaf/oats/vospace/exception/VoSpaceErrorSummarizableException.java b/src/main/java/it/inaf/oats/vospace/exception/VoSpaceErrorSummarizableException.java index caed42e1deef61783d8242e57b3eed0d43ec3906..be0f0d17b40b3fef67407fbaf106ca15fde7166a 100644 --- a/src/main/java/it/inaf/oats/vospace/exception/VoSpaceErrorSummarizableException.java +++ b/src/main/java/it/inaf/oats/vospace/exception/VoSpaceErrorSummarizableException.java @@ -1,23 +1,26 @@ package it.inaf.oats.vospace.exception; -import net.ivoa.xml.uws.v1.ErrorSummaryFactory; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR) -public class VoSpaceErrorSummarizableException extends VoSpaceException { +public abstract class VoSpaceErrorSummarizableException extends VoSpaceException { - ErrorSummaryFactory.VOSpaceFault fault; + VOSpaceFaultEnum fault; - public VoSpaceErrorSummarizableException(String message, - ErrorSummaryFactory.VOSpaceFault fault) + public VoSpaceErrorSummarizableException(String message, VOSpaceFaultEnum fault) { super(message); this.fault = fault; } - - public ErrorSummaryFactory.VOSpaceFault getFault() + + public VOSpaceFaultEnum getFault() { return this.fault; } + + public String getDetailMessage() + { + return this.getMessage(); + } }