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) {
