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 2015/07/02 16:49:14 UTC

[19/25] incubator-taverna-language git commit: recursive listResources

recursive listResources

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/20af4549
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/20af4549
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/20af4549

Branch: refs/heads/ucfpackage-robundle
Commit: 20af454996643bce53b6ce922033c5d487158ed4
Parents: da9dc92
Author: Stian Soiland-Reyes <so...@cs.manchester.ac.uk>
Authored: Thu Jun 19 16:07:36 2014 +0100
Committer: Stian Soiland-Reyes <so...@cs.manchester.ac.uk>
Committed: Thu Jul 2 15:15:26 2015 +0100

----------------------------------------------------------------------
 .../taverna/scufl2/ucfpackage/UCFPackage.java   | 65 ++++++++++++++++----
 1 file changed, 53 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/20af4549/taverna-scufl2-ucfpackage/src/main/java/org/apache/taverna/scufl2/ucfpackage/UCFPackage.java
----------------------------------------------------------------------
diff --git a/taverna-scufl2-ucfpackage/src/main/java/org/apache/taverna/scufl2/ucfpackage/UCFPackage.java b/taverna-scufl2-ucfpackage/src/main/java/org/apache/taverna/scufl2/ucfpackage/UCFPackage.java
index 9fed2d9..440d27e 100644
--- a/taverna-scufl2-ucfpackage/src/main/java/org/apache/taverna/scufl2/ucfpackage/UCFPackage.java
+++ b/taverna-scufl2-ucfpackage/src/main/java/org/apache/taverna/scufl2/ucfpackage/UCFPackage.java
@@ -34,8 +34,11 @@ import java.io.PipedOutputStream;
 import java.net.URI;
 import java.nio.charset.Charset;
 import java.nio.file.DirectoryStream;
+import java.nio.file.FileVisitResult;
+import java.nio.file.FileVisitor;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.nio.file.attribute.BasicFileAttributes;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -96,6 +99,8 @@ public class UCFPackage implements Cloneable {
 		try {
 		    bundle = Bundles.createBundle();
 			//odfPackage = OdfPackage.create();
+		    bundle.getManifest().populateFromBundle();
+		    bundle.getManifest().writeAsODFManifest();
 			parseContainerXML();
 		} catch (IOException e) {
 			throw e;
@@ -370,24 +375,60 @@ public class UCFPackage implements Cloneable {
 	}
 
 	protected Map<String, ResourceEntry> listResources(String folderPath,
-			boolean recursive) {
-	    Path bundlePath = bundle.getRoot().resolve(folderPath);
-	    List<Path> reserved = Arrays.asList(bundle.getRoot().resolve("META-INF/"),
+			final boolean recursive) {
+	    final Path bundlePath = bundle.getRoot().resolve(folderPath);
+	    final List<Path> reserved = Arrays.asList(bundle.getRoot().resolve("META-INF/"),
 	            bundle.getRoot().resolve(".ro/"),
 	            bundle.getRoot().resolve("mimetype")
 	            );
 
-	    HashMap<String, ResourceEntry> content = new HashMap<String, ResourceEntry>();
-	    try (DirectoryStream<Path> ds = Files.newDirectoryStream(bundlePath)) {
-	        for (Path path : ds) {
-	            if (reserved.contains(path)) {
-	                continue;
-	            }
-	            String pathStr = bundle.getRoot().relativize(path).toString();
+	    final HashMap<String, ResourceEntry> content = new HashMap<String, ResourceEntry>();
+	    FileVisitor<Path> visitor = new FileVisitor<Path>() {
+			@Override
+			public FileVisitResult preVisitDirectory(Path dir,
+					BasicFileAttributes attrs) throws IOException {
+				if (reserved.contains(dir)) {
+					return FileVisitResult.SKIP_SUBTREE;
+				}
+				if (! dir.equals(bundlePath)) {
+					storePath(dir);
+				}
+				return recursive ? FileVisitResult.CONTINUE : FileVisitResult.SKIP_SUBTREE;
+			}
+
+			private void storePath(Path path) {
+				String pathStr = bundlePath.relativize(path).toString();
 	            content.put(pathStr, new ResourceEntry(path));
-	        }
+			}
+
+			@Override
+			public FileVisitResult visitFile(Path file,
+					BasicFileAttributes attrs) throws IOException {
+				if (reserved.contains(file)) {
+					return FileVisitResult.CONTINUE;
+				}
+				storePath(file);
+				return FileVisitResult.CONTINUE;
+			}
+
+			@Override
+			public FileVisitResult visitFileFailed(Path file, IOException exc)
+					throws IOException {
+				logger.log(Level.WARNING, "Could not visit " + file, exc);
+				return FileVisitResult.CONTINUE;
+			}
+
+			@Override
+			public FileVisitResult postVisitDirectory(Path dir, IOException exc)
+					throws IOException {
+				return FileVisitResult.CONTINUE;
+			}
+		};
+
+		try {
+			Files.walkFileTree(bundlePath, visitor);
 	    } catch (IOException e) {
-            throw new RuntimeException("Can't list resources of "  +folderPath, e);
+            throw new RuntimeException("Can't list resources of " + folderPath, e);
         }
 		return content;
 	}