Repository: incubator-taverna-language
Updated Branches:
  refs/heads/master 89407f060 -> 71b91b216


TAVERNA-1043: Path never ends "/" (except root)

.. for JDK8 and JDK9 compatibility


Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/commit/71b91b21
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/71b91b21
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/71b91b21

Branch: refs/heads/master
Commit: 71b91b2165c10e27ce66442ea20aff2ec387466f
Parents: 89407f0
Author: Stian Soiland-Reyes <[email protected]>
Authored: Thu Apr 26 09:30:43 2018 +0100
Committer: Stian Soiland-Reyes <[email protected]>
Committed: Tue May 8 14:39:18 2018 +0100

----------------------------------------------------------------------
 .../taverna/databundle/TestDataBundles.java     |  2 +-
 .../taverna/robundle/fs/BundleFileSystem.java   | 16 +++++++-
 .../apache/taverna/robundle/fs/BundlePath.java  | 10 ++++-
 .../taverna/robundle/manifest/Manifest.java     | 42 +++++++-------------
 .../apache/taverna/robundle/manifest/Proxy.java | 14 ++++++-
 .../taverna/robundle/manifest/TestManifest.java | 28 ++++++-------
 6 files changed, 65 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/71b91b21/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestDataBundles.java
----------------------------------------------------------------------
diff --git 
a/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestDataBundles.java
 
b/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestDataBundles.java
index 0a67b95..f378bee 100644
--- 
a/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestDataBundles.java
+++ 
b/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestDataBundles.java
@@ -436,7 +436,7 @@ public class TestDataBundles {
                Path sublist1 = DataBundles.newListItem(list);
                DataBundles.createList(sublist1);
                
-               assertEquals(Arrays.asList("0/", "1/"), ls(list));
+               assertEquals(Arrays.asList("0", "1"), ls(list));
                
                DataBundles.setStringValue(DataBundles.newListItem(sublist1), 
                                "Hello");

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/71b91b21/taverna-robundle/src/main/java/org/apache/taverna/robundle/fs/BundleFileSystem.java
----------------------------------------------------------------------
diff --git 
a/taverna-robundle/src/main/java/org/apache/taverna/robundle/fs/BundleFileSystem.java
 
b/taverna-robundle/src/main/java/org/apache/taverna/robundle/fs/BundleFileSystem.java
index 363b8cf..9d2cbae 100644
--- 
a/taverna-robundle/src/main/java/org/apache/taverna/robundle/fs/BundleFileSystem.java
+++ 
b/taverna-robundle/src/main/java/org/apache/taverna/robundle/fs/BundleFileSystem.java
@@ -189,6 +189,19 @@ public class BundleFileSystem extends FileSystem {
                }
                return ((BundlePath) bundlePath).getZipPath();
        }
+       
+       protected static Path withoutSlash(Path dir) {
+               if (dir == null) {
+                       return null;
+               }
+               Path fname = dir.getFileName();
+               if (fname == null) // Root directory?
+                       return dir;
+               String fnameStr = fname.toString();
+               if (! fnameStr.endsWith("/") && ! fnameStr.equals("/"))
+                       return dir;
+               return dir.resolveSibling(fnameStr.replace("/", ""));
+       }
 
        protected BundlePath wrap(Path zipPath) {
                if (zipPath == null) {
@@ -198,7 +211,8 @@ public class BundleFileSystem extends FileSystem {
                        throw new IllegalArgumentException("Did not expect 
BundlePath: "
                                        + zipPath);
                }
-               return new BundlePath(this, zipPath);
+               
+               return new BundlePath(this, withoutSlash(zipPath));
        }
 
        protected Iterator<Path> wrapIterator(final Iterator<Path> iterator) {

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/71b91b21/taverna-robundle/src/main/java/org/apache/taverna/robundle/fs/BundlePath.java
----------------------------------------------------------------------
diff --git 
a/taverna-robundle/src/main/java/org/apache/taverna/robundle/fs/BundlePath.java 
b/taverna-robundle/src/main/java/org/apache/taverna/robundle/fs/BundlePath.java
index 93da6c0..a908f67 100644
--- 
a/taverna-robundle/src/main/java/org/apache/taverna/robundle/fs/BundlePath.java
+++ 
b/taverna-robundle/src/main/java/org/apache/taverna/robundle/fs/BundlePath.java
@@ -24,6 +24,7 @@ import java.io.File;
 import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.nio.file.Files;
 import java.nio.file.LinkOption;
 import java.nio.file.Path;
 import java.nio.file.WatchEvent.Kind;
@@ -41,7 +42,7 @@ public class BundlePath implements Path {
        protected BundlePath(BundleFileSystem fs, Path zipPath) {
                if (fs == null || zipPath == null) {
                        throw new NullPointerException();
-               }
+               }               
                this.fs = fs;
                this.zipPath = zipPath;
        }
@@ -208,9 +209,14 @@ public class BundlePath implements Path {
        @Override
        public URI toUri() {
                Path abs = zipPath.toAbsolutePath();
+               String absStr = abs.toString();
+               if (Files.isDirectory(abs) && ! absStr.endsWith("/")) {
+                       absStr += "/";
+               }
+               
                URI pathRel;
                try {
-                       pathRel = new URI(null, null, abs.toString(), null);
+                       pathRel = new URI(null, null, absStr, null);
                } catch (URISyntaxException e) {
                        throw new IllegalStateException("Can't create URL for " 
+ zipPath,
                                        e);

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/71b91b21/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/Manifest.java
----------------------------------------------------------------------
diff --git 
a/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/Manifest.java
 
b/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/Manifest.java
index ba23bf1..ad073a9 100644
--- 
a/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/Manifest.java
+++ 
b/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/Manifest.java
@@ -99,20 +99,6 @@ public class Manifest {
                return fromMillis(new GregorianCalendar().getTimeInMillis());
        }
 
-       protected static Path withSlash(Path dir) {
-               if (dir == null)
-                       return null;
-               if (isDirectory(dir)) {
-                       Path fname = dir.getFileName();
-                       if (fname == null)
-                               return dir;
-                       String fnameStr = fname.toString();
-                       if (fnameStr.endsWith("/"))
-                               return dir;
-                       return dir.resolveSibling(fnameStr + "/");
-               }
-               return dir;
-       }
 
        private Map<URI, PathMetadata> aggregates = new LinkedHashMap<>();
        private List<PathAnnotation> annotations = new ArrayList<>();
@@ -288,11 +274,11 @@ public class Manifest {
                                                metadata = new PathMetadata();
                                                aggregates.put(uri, metadata);
                                        }
-                                       metadata.setFile(withSlash(dir));
-                                       
metadata.setFolder(withSlash(dir.getParent()));
+                                       metadata.setFile(dir);
+                                       metadata.setFolder(dir.getParent());
                                        metadata.setProxy();
                                        
metadata.setCreatedOn(getLastModifiedTime(dir));
-                                       
potentiallyEmptyFolders.remove(withSlash(dir.getParent()));
+                                       
potentiallyEmptyFolders.remove(dir.getParent());
                                        return CONTINUE;
                                }
                                return CONTINUE;
@@ -303,8 +289,8 @@ public class Manifest {
                                        BasicFileAttributes attrs) throws 
IOException {
                                if (dir.startsWith(RO) || 
dir.startsWith(META_INF))
                                        return SKIP_SUBTREE;
-                               potentiallyEmptyFolders.add(withSlash(dir));
-                               
potentiallyEmptyFolders.remove(withSlash(dir.getParent()));
+                               potentiallyEmptyFolders.add(dir);
+                               potentiallyEmptyFolders.remove(dir.getParent());
                                return CONTINUE;
                        }
 
@@ -312,7 +298,7 @@ public class Manifest {
                        @Override
                        public FileVisitResult visitFile(Path file,
                                        BasicFileAttributes attrs) throws 
IOException {
-                               
potentiallyEmptyFolders.remove(withSlash(file.getParent()));
+                               
potentiallyEmptyFolders.remove(file.getParent());
                                if (file.startsWith(MIMETYPE))
                                        return CONTINUE;
                                if (manifest.contains(file))
@@ -331,7 +317,7 @@ public class Manifest {
                                if (metadata.getMediatype() == null)
                                        // Don't override if already set
                                        
metadata.setMediatype(guessMediaType(file));
-                               metadata.setFolder(withSlash(file.getParent()));
+                               metadata.setFolder(file.getParent());
                                metadata.setProxy();
                                
metadata.setCreatedOn(getLastModifiedTime(file));
                                
potentiallyEmptyFolders.remove(file.getParent());
@@ -447,13 +433,13 @@ public class Manifest {
                // Files.createFile(jsonld);
                if (!getManifest().contains(jsonld))
                        getManifest().add(0, jsonld);
-               ObjectMapper om = new ObjectMapper();
-               om.addMixInAnnotations(Path.class, PathMixin.class);
-               om.addMixInAnnotations(FileTime.class, FileTimeMixin.class);
-               om.enable(INDENT_OUTPUT);
-               om.disable(WRITE_EMPTY_JSON_ARRAYS);
-               om.disable(FAIL_ON_EMPTY_BEANS);
-               om.disable(WRITE_NULL_MAP_VALUES);
+               ObjectMapper om = new ObjectMapper()
+                       .addMixIn(Path.class, PathMixin.class)
+                       .addMixIn(FileTime.class, FileTimeMixin.class)
+                       .enable(INDENT_OUTPUT)
+                       .disable(WRITE_EMPTY_JSON_ARRAYS)
+                       .disable(FAIL_ON_EMPTY_BEANS)
+                       .disable(WRITE_NULL_MAP_VALUES);
 
                om.setSerializationInclusion(Include.NON_NULL);
                try (Writer w = newBufferedWriter(jsonld, 
Charset.forName("UTF-8"),

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/71b91b21/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/Proxy.java
----------------------------------------------------------------------
diff --git 
a/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/Proxy.java
 
b/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/Proxy.java
index b303bc8..2749e97 100644
--- 
a/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/Proxy.java
+++ 
b/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/Proxy.java
@@ -25,6 +25,8 @@ import java.nio.file.Path;
 import java.nio.file.attribute.FileTime;
 import java.util.UUID;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 
 @JsonPropertyOrder(value = { "uri", "folder", "filename", "aggregatedBy",
@@ -49,10 +51,20 @@ public class Proxy {
                return filename;
        }
 
+       @JsonIgnore
        public Path getFolder() {
                return folder;
        }
-
+       
+       @JsonProperty("folder")
+       public String getFolderName() {
+               String folderName = getFolder().toString();
+               if (! folderName.endsWith("/")) {
+                       return folderName + "/";
+               }
+               return folderName;
+       }
+       
        public URI getURI() {
                return uri;
        }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/71b91b21/taverna-robundle/src/test/java/org/apache/taverna/robundle/manifest/TestManifest.java
----------------------------------------------------------------------
diff --git 
a/taverna-robundle/src/test/java/org/apache/taverna/robundle/manifest/TestManifest.java
 
b/taverna-robundle/src/test/java/org/apache/taverna/robundle/manifest/TestManifest.java
index 2c1221c..53c871c 100644
--- 
a/taverna-robundle/src/test/java/org/apache/taverna/robundle/manifest/TestManifest.java
+++ 
b/taverna-robundle/src/test/java/org/apache/taverna/robundle/manifest/TestManifest.java
@@ -72,7 +72,7 @@ public class TestManifest {
                        uris.add(s.getFile().toString());
                        Path path = s.getFile();
                        assertNotNull(path.getParent());
-                       assertEquals(Manifest.withSlash(path.getParent()), 
s.getFolder());
+                       assertEquals(path.getParent(), 
s.getBundledAs().getFolder());
                        if (s.getFile().equals(URI.create("/f/nested/empty/"))) 
{
                                continue;
                                // Folder's don't need proxy and createdOn
@@ -90,7 +90,7 @@ public class TestManifest {
                assertTrue(uris.remove("/f/file2.txt"));
                assertTrue(uris.remove("/f/file3.txt"));
                assertTrue(uris.remove("/f/nested/file1.txt"));
-               assertTrue(uris.remove("/f/nested/empty/"));
+               assertTrue(uris.remove("/f/nested/empty"));
                assertTrue(uris.isEmpty());
        }
 
@@ -104,12 +104,12 @@ public class TestManifest {
                // Second populate should not add additional entries
                manifest.populateFromBundle();
 
-               List<String> uris = new ArrayList<>();
+               List<String> paths = new ArrayList<>();
                for (PathMetadata s : manifest.getAggregates()) {
-                       uris.add(s.getFile().toString());
                        Path path = s.getFile();
+                       paths.add(s.toString());
                        assertNotNull(path.getParent());
-                       assertEquals(Manifest.withSlash(path.getParent()), 
s.getFolder());
+                       assertEquals(path.getParent(), 
s.getBundledAs().getFolder());
                        if (s.getFile().equals(URI.create("/f/nested/empty/"))) 
{
                                continue;
                                // Folder's don't need proxy and createdOn
@@ -120,15 +120,15 @@ public class TestManifest {
                        assertEquals(s.getCreatedOn(), 
Files.getLastModifiedTime(path));
                }
                //System.out.println(uris);
-               assertFalse(uris.contains("/mimetype"));
-               assertFalse(uris.contains("/META-INF"));
-               assertTrue(uris.remove("/hello.txt"));
-               assertTrue(uris.remove("/f/file1.txt"));
-               assertTrue(uris.remove("/f/file2.txt"));
-               assertTrue(uris.remove("/f/file3.txt"));
-               assertTrue(uris.remove("/f/nested/file1.txt"));
-               assertTrue(uris.remove("/f/nested/empty/"));
-               assertTrue("Unexpected uri: " + uris, uris.isEmpty());
+               assertFalse(paths.contains("/mimetype"));
+               assertFalse(paths.contains("/META-INF"));
+               assertTrue(paths.remove("/hello.txt"));
+               assertTrue(paths.remove("/f/file1.txt"));
+               assertTrue(paths.remove("/f/file2.txt"));
+               assertTrue(paths.remove("/f/file3.txt"));
+               assertTrue(paths.remove("/f/nested/file1.txt"));
+               assertTrue(paths.remove("/f/nested/empty/"));
+               assertTrue("Unexpected path: " + paths, paths.isEmpty());
        }
 
        private Path uri2path(URI base, URI uri) {

Reply via email to