From bbaf083c6b64143057963aceca163ebe9a6ccc61 Mon Sep 17 00:00:00 2001 From: Nicola Fulvio Calabria <nicola.calabria@inaf.it> Date: Thu, 17 Jun 2021 17:51:24 +0200 Subject: [PATCH] Extended percent encoding management to UriService and added job phase update when COMPLETED --- .../java/it/inaf/oats/vospace/JobService.java | 10 +++-- .../java/it/inaf/oats/vospace/URIUtils.java | 38 ++++++++++++------- .../java/it/inaf/oats/vospace/UriService.java | 6 +-- .../oats/vospace/persistence/NodeDAO.java | 12 +----- 4 files changed, 34 insertions(+), 32 deletions(-) diff --git a/src/main/java/it/inaf/oats/vospace/JobService.java b/src/main/java/it/inaf/oats/vospace/JobService.java index 63290fe..b7e3837 100644 --- a/src/main/java/it/inaf/oats/vospace/JobService.java +++ b/src/main/java/it/inaf/oats/vospace/JobService.java @@ -111,15 +111,17 @@ public class JobService { default: throw new UnsupportedOperationException("Not implemented yet"); } - + + job.setPhase(ExecutionPhase.COMPLETED); + } catch (VoSpaceErrorSummarizableException e) { job.setPhase(ExecutionPhase.ERROR); - job.setErrorSummary(ErrorSummaryFactory.newErrorSummary(e)); - jobDAO.updateJob(job); + job.setErrorSummary(ErrorSummaryFactory.newErrorSummary(e)); } catch (Exception e) { job.setPhase(ExecutionPhase.ERROR); job.setErrorSummary(ErrorSummaryFactory.newErrorSummary( - new InternalFaultException(e))); + new InternalFaultException(e))); + } finally { jobDAO.updateJob(job); } } diff --git a/src/main/java/it/inaf/oats/vospace/URIUtils.java b/src/main/java/it/inaf/oats/vospace/URIUtils.java index b30df8d..dbfedf2 100644 --- a/src/main/java/it/inaf/oats/vospace/URIUtils.java +++ b/src/main/java/it/inaf/oats/vospace/URIUtils.java @@ -5,6 +5,7 @@ */ package it.inaf.oats.vospace; +import it.inaf.oats.vospace.exception.InternalFaultException; import it.inaf.oats.vospace.exception.InvalidURIException; import java.net.URI; import java.net.URISyntaxException; @@ -18,23 +19,32 @@ public class URIUtils { private static final Pattern FORBIDDEN_CHARS = Pattern.compile("[\\x00\\x08\\x0B\\x0C\\x0E-\\x1F" + Pattern.quote("<>?\":\\|'`*") + "]"); private static final String SCHEME = "vos"; - public static String returnURIFromVosPath(String vosPath, String authority) - throws URISyntaxException { - URI uri = new URI( - SCHEME, - authority, - vosPath, - null, - null - ); - - return uri.toASCIIString(); - } - + public static String returnURIFromVosPath(String vosPath, String authority) { + String result = null; + + try { + URI uri = new URI( + SCHEME, + authority, + vosPath, + null, + null + ); + + result = uri.toASCIIString(); + + } catch (URISyntaxException e) { + throw new InternalFaultException("unable to percent encode URI from authority and path: " + + authority + " , " + vosPath); + } + + return result; + } + public static String returnVosPathFromNodeURI(Node myNode, String authority) { return returnVosPathFromNodeURI(myNode.getUri(), authority); } - + // This method validates the URI too public static String returnVosPathFromNodeURI(String nodeURI, String authority) { diff --git a/src/main/java/it/inaf/oats/vospace/UriService.java b/src/main/java/it/inaf/oats/vospace/UriService.java index 0bdd359..5f94fb6 100644 --- a/src/main/java/it/inaf/oats/vospace/UriService.java +++ b/src/main/java/it/inaf/oats/vospace/UriService.java @@ -134,7 +134,7 @@ public class UriService { case pushToVoSpace: case pullToVoSpace: DataNode newNode = new DataNode(); - newNode.setUri("vos://"+ authority +relativePath); + newNode.setUri(URIUtils.returnURIFromVosPath(relativePath, authority)); return createNodeService.createNode(newNode, relativePath, user); default: throw new InternalFaultException("No supported job direction specified"); @@ -148,7 +148,7 @@ public class UriService { throw new InvalidArgumentException("Invalid target size: " + transfer.getTarget().size()); } - String relativePath = transfer.getTarget().get(0).substring("vos://".length() + authority.length()); + String relativePath = URIUtils.returnVosPathFromNodeURI(transfer.getTarget().get(0), authority); User user = (User) servletRequest.getUserPrincipal(); String creator = user.getName(); @@ -233,7 +233,7 @@ public class UriService { Location location = locationDAO.findPortalLocation(url.getHost()).orElseThrow(() -> new InternalFaultException("No registered location found for host " + url.getHost())); - String vosPath = nodeUri.replaceAll("vos://[^/]+", ""); + String vosPath = URIUtils.returnVosPathFromNodeURI(nodeUri, authority); String fileName = url.getPath().substring(url.getPath().lastIndexOf("/") + 1); diff --git a/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java b/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java index c6cd9eb..e17f55f 100644 --- a/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java +++ b/src/main/java/it/inaf/oats/vospace/persistence/NodeDAO.java @@ -455,17 +455,7 @@ public class NodeDAO { } private String getUri(String path) { - // Percent encode path - String result = null; - - try { - result = URIUtils.returnURIFromVosPath(path, authority); - } catch (URISyntaxException e) { - throw new InternalFaultException("unable to percent encode URI from authority and path: " - + authority + " , " + path); - } - - return result; + return URIUtils.returnURIFromVosPath(path, authority); } private NodePaths getPathsFromResultSet(ResultSet rs) throws SQLException { -- GitLab