You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2018/05/08 13:48:10 UTC

incubator-taverna-language git commit: TAVERNA-1043: Path never ends "/" (except root)

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 <st...@apache.org>
Authored: Thu Apr 26 09:30:43 2018 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
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) {