From f083a0aabf99821ae12fd1e0602da11e9fbd4fc5 Mon Sep 17 00:00:00 2001 From: Sonia Zorba <sonia.zorba@inaf.it> Date: Fri, 12 Nov 2021 10:32:19 +0100 Subject: [PATCH] Modified getVosPath method to correctly parsing encoded chars (e.g. %20) --- .../it/inaf/oats/vospace/datamodel/NodeUtils.java | 14 +++++++++++--- .../inaf/oats/vospace/datamodel/NodeUtilsTest.java | 9 +++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/it/inaf/oats/vospace/datamodel/NodeUtils.java b/src/main/java/it/inaf/oats/vospace/datamodel/NodeUtils.java index 0bcf0f1..88deaa2 100644 --- a/src/main/java/it/inaf/oats/vospace/datamodel/NodeUtils.java +++ b/src/main/java/it/inaf/oats/vospace/datamodel/NodeUtils.java @@ -5,6 +5,8 @@ */ package it.inaf.oats.vospace.datamodel; +import java.net.URI; +import java.net.URISyntaxException; import net.ivoa.xml.vospace.v2.Node; import java.net.URLDecoder; import java.net.URLEncoder; @@ -245,10 +247,16 @@ public class NodeUtils { } public static String getVosPath(Node myNode) { + return getVosPath(myNode.getUri()); + } - String nodeUri = myNode.getUri(); - - return nodeUri.replaceAll("vos://[^/]+", ""); + public static String getVosPath(String nodeUri) { + try { + URI uri = new URI(nodeUri); + return uri.getPath(); + } catch (URISyntaxException ex) { + throw new RuntimeException(ex); + } } } diff --git a/src/test/java/it/inaf/oats/vospace/datamodel/NodeUtilsTest.java b/src/test/java/it/inaf/oats/vospace/datamodel/NodeUtilsTest.java index d68b991..5031c05 100644 --- a/src/test/java/it/inaf/oats/vospace/datamodel/NodeUtilsTest.java +++ b/src/test/java/it/inaf/oats/vospace/datamodel/NodeUtilsTest.java @@ -271,6 +271,15 @@ public class NodeUtilsTest { assertEquals("/mynode/child1/child2", NodeUtils.getVosPath(node)); } + @Test + public void testGetVosPathSpecialChars() { + + Node node = new DataNode(); + node.setUri("vos://example.com!vospace/mynode/(%20+%20)/child2"); + + assertEquals("/mynode/( + )/child2", NodeUtils.getVosPath(node)); + } + @Test public void testGetParentPath() { assertEquals("/node1/node2", NodeUtils.getParentPath("/node1/node2/node2")); -- GitLab