From 659a26f05dea8fe7235937dfdffa7a28ecf54036 Mon Sep 17 00:00:00 2001
From: Nicola Fulvio Calabria <nicola.calabria@inaf.it>
Date: Thu, 9 Sep 2021 15:31:53 +0200
Subject: [PATCH] Correct DuplicateNodeException thrown when destination of
 move already exists

---
 src/main/java/it/inaf/oats/vospace/MoveService.java     | 4 ++++
 src/test/java/it/inaf/oats/vospace/CopyServiceTest.java | 2 --
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/main/java/it/inaf/oats/vospace/MoveService.java b/src/main/java/it/inaf/oats/vospace/MoveService.java
index 6210c24..1d22cf6 100644
--- a/src/main/java/it/inaf/oats/vospace/MoveService.java
+++ b/src/main/java/it/inaf/oats/vospace/MoveService.java
@@ -7,6 +7,7 @@ package it.inaf.oats.vospace;
 
 import it.inaf.ia2.aa.data.User;
 import it.inaf.oats.vospace.datamodel.NodeUtils;
+import it.inaf.oats.vospace.exception.DuplicateNodeException;
 import it.inaf.oats.vospace.exception.InternalFaultException;
 import it.inaf.oats.vospace.exception.NodeBusyException;
 import it.inaf.oats.vospace.exception.NodeNotFoundException;
@@ -15,6 +16,7 @@ import it.inaf.oats.vospace.persistence.NodeDAO.ShortNodeDescriptor;
 import java.util.Optional;
 import net.ivoa.xml.vospace.v2.Transfer;
 import org.springframework.dao.CannotSerializeTransactionException;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 import org.springframework.transaction.annotation.Isolation;
@@ -105,6 +107,8 @@ public class MoveService extends AbstractNodeService {
         } catch (CannotSerializeTransactionException ex) {
             // Concurrent transactions attempted to modify this set of nodes            
             throw new NodeBusyException(sourcePath);
+        } catch (DuplicateKeyException ex) {
+            throw new DuplicateNodeException(destinationPath);
         }
     }  
 
diff --git a/src/test/java/it/inaf/oats/vospace/CopyServiceTest.java b/src/test/java/it/inaf/oats/vospace/CopyServiceTest.java
index f28931e..15380d0 100644
--- a/src/test/java/it/inaf/oats/vospace/CopyServiceTest.java
+++ b/src/test/java/it/inaf/oats/vospace/CopyServiceTest.java
@@ -11,7 +11,6 @@ import it.inaf.oats.vospace.exception.NodeNotFoundException;
 import it.inaf.oats.vospace.exception.PermissionDeniedException;
 import it.inaf.oats.vospace.persistence.DataSourceConfigSingleton;
 import it.inaf.oats.vospace.persistence.NodeDAO;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
 import net.ivoa.xml.vospace.v2.Transfer;
@@ -28,7 +27,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.dao.DuplicateKeyException;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.context.ContextConfiguration;
-- 
GitLab