From f17d8e36837cf82efc5d8364992718342085a17b Mon Sep 17 00:00:00 2001
From: Nicola Fulvio Calabria <nicola.calabria@inaf.it>
Date: Thu, 8 Apr 2021 10:27:55 +0200
Subject: [PATCH] Task #3637 - Added Fault management for transfer services up
 to 3/6 redmine subtasks

---
 .../exception/DuplicateNodeException.java     |  6 +++--
 .../exception/InternalFaultException.java     |  9 +++++---
 .../exception/InvalidURIException.java        | 12 ++++++----
 .../vospace/exception/NodeBusyException.java  | 12 ++++++++++
 .../exception/NodeNotFoundException.java      |  6 +++--
 .../exception/PermissionDeniedException.java  |  6 +++--
 .../ProtocolNotSupportedException.java        | 12 ++++++++++
 .../VoSpaceErrorSummarizableException.java    | 23 +++++++++++++++++++
 8 files changed, 73 insertions(+), 13 deletions(-)
 create mode 100644 src/main/java/it/inaf/oats/vospace/exception/NodeBusyException.java
 create mode 100644 src/main/java/it/inaf/oats/vospace/exception/ProtocolNotSupportedException.java
 create mode 100644 src/main/java/it/inaf/oats/vospace/exception/VoSpaceErrorSummarizableException.java

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 a64223e..0b09d37 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/DuplicateNodeException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/DuplicateNodeException.java
@@ -1,12 +1,14 @@
 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.CONFLICT)
-public class DuplicateNodeException extends VoSpaceException {
+public class DuplicateNodeException extends VoSpaceErrorSummarizableException {
 
     public DuplicateNodeException(String path) {
-        super("Duplicate Node at path: " + path);
+        super("Duplicate Node at path: " + path,
+                ErrorSummaryFactory.VOSpaceFault.DUPLICATE_NODE);
     }
 }
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 635bf57..05d702e 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/InternalFaultException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/InternalFaultException.java
@@ -1,21 +1,24 @@
 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;
 import org.springframework.web.bind.annotation.ResponseStatus;
 
 @ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)   // Status code 500
-public class InternalFaultException extends VoSpaceException {
+public class InternalFaultException extends VoSpaceErrorSummarizableException {
 
     private static final Logger LOG = LoggerFactory.getLogger(InternalFaultException.class);
 
     public InternalFaultException(String msg) {
-        super("InternalFaultException: " + msg);
+        super("InternalFaultException: " + msg,
+                ErrorSummaryFactory.VOSpaceFault.INTERNAL_FAULT);
     }
 
     public InternalFaultException(Throwable cause) {
-        super("InternalFaultException: " + getMessage(cause));
+        super("InternalFaultException: " + getMessage(cause),
+                ErrorSummaryFactory.VOSpaceFault.INTERNAL_FAULT);
     }
 
     private static String getMessage(Throwable cause) {
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 085d102..e91e3f5 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/InvalidURIException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/InvalidURIException.java
@@ -1,21 +1,25 @@
 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.BAD_REQUEST)
-public class InvalidURIException extends VoSpaceException {
+public class InvalidURIException extends VoSpaceErrorSummarizableException {
 
     public InvalidURIException(String URI, String path) {
         super("InvalidURI. Payload node URI: " + URI
-                + " is not consistent with request path: " + path);
+                + " is not consistent with request path: " + path,
+                ErrorSummaryFactory.VOSpaceFault.INVALID_URI);
     }
 
     public InvalidURIException(String URI) {
-        super("InvalidURI. URI: " + URI + " is not in a valid format");
+        super("InvalidURI. URI: " + URI + " is not in a valid format",
+                ErrorSummaryFactory.VOSpaceFault.INVALID_URI);
     }
 
     public InvalidURIException(IllegalArgumentException ex) {
-        super("InvalidURI. " + ex.getMessage());
+        super("InvalidURI. " + ex.getMessage(),
+                ErrorSummaryFactory.VOSpaceFault.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
new file mode 100644
index 0000000..2586ac6
--- /dev/null
+++ b/src/main/java/it/inaf/oats/vospace/exception/NodeBusyException.java
@@ -0,0 +1,12 @@
+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);
+    }
+
+}
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 b14f4c2..a7bb797 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/NodeNotFoundException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/NodeNotFoundException.java
@@ -1,12 +1,14 @@
 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.NOT_FOUND)
-public class NodeNotFoundException extends VoSpaceException {
+public class NodeNotFoundException extends VoSpaceErrorSummarizableException {
 
     public NodeNotFoundException(String path) {
-        super("NodeNotFound: " + path);
+        super("NodeNotFound: " + path,
+                ErrorSummaryFactory.VOSpaceFault.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 20a1991..31194db 100644
--- a/src/main/java/it/inaf/oats/vospace/exception/PermissionDeniedException.java
+++ b/src/main/java/it/inaf/oats/vospace/exception/PermissionDeniedException.java
@@ -1,12 +1,14 @@
 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.FORBIDDEN)
-public class PermissionDeniedException extends VoSpaceException {
+public class PermissionDeniedException extends VoSpaceErrorSummarizableException {
 
     public PermissionDeniedException(String path) {
-        super("Permission Denied at path: " + path);
+        super("Permission Denied at path: " + path,
+                ErrorSummaryFactory.VOSpaceFault.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
new file mode 100644
index 0000000..d13d941
--- /dev/null
+++ b/src/main/java/it/inaf/oats/vospace/exception/ProtocolNotSupportedException.java
@@ -0,0 +1,12 @@
+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);
+    }
+    
+}
diff --git a/src/main/java/it/inaf/oats/vospace/exception/VoSpaceErrorSummarizableException.java b/src/main/java/it/inaf/oats/vospace/exception/VoSpaceErrorSummarizableException.java
new file mode 100644
index 0000000..caed42e
--- /dev/null
+++ b/src/main/java/it/inaf/oats/vospace/exception/VoSpaceErrorSummarizableException.java
@@ -0,0 +1,23 @@
+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 {
+    
+    ErrorSummaryFactory.VOSpaceFault fault;
+    
+    public VoSpaceErrorSummarizableException(String message,
+            ErrorSummaryFactory.VOSpaceFault fault)
+    {
+        super(message);
+        this.fault = fault;        
+    }
+    
+    public ErrorSummaryFactory.VOSpaceFault getFault()
+    {
+        return this.fault;
+    }
+}
-- 
GitLab