Merge branch 'combine-dates' into TAVERNA-1044
diff --git a/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/combine/CombineManifest.java b/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/combine/CombineManifest.java
index 2057253..854667a 100644
--- a/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/combine/CombineManifest.java
+++ b/taverna-robundle/src/main/java/org/apache/taverna/robundle/manifest/combine/CombineManifest.java
@@ -65,6 +65,7 @@
 import org.apache.taverna.robundle.xml.combine.OmexManifest;
 import org.xml.sax.InputSource;
 
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.jena.query.QueryExecution;
 import org.apache.jena.query.QueryExecutionFactory;
 import org.apache.jena.query.QueryFactory;
@@ -352,20 +353,26 @@
 			return;
 		}
 
-		for (URI about : bundleSubjects()) {
-			Resource resource = metadata.getResource(fakeFileURI(about));
+		Set<Pair<URI,URI>> foundAnnotations = new HashSet<>();
+		for (URI subject : bundleSubjects()) {
+			Resource resource = metadata.getResource(fakeFileURI(subject));
 			if (!metadata.containsResource(resource)) {
 				System.out.println("Nothing known about " + resource);
 				continue;
 			}
 
-			PathAnnotation ann = new PathAnnotation();
-			ann.setAbout(manifest.relativeToBundleRoot(about));
-			ann.setContent(manifest.relativeToBundleRoot(metadataRdf.toUri()));
-			manifest.getAnnotations().add(ann);
+			URI about = manifest.relativeToBundleRoot(subject);
+			URI content = manifest.relativeToBundleRoot(metadataRdf.toUri());
+			if (! foundAnnotations.add(Pair.of(about, content))) {
+				// Avoid duplication
+				PathAnnotation ann = new PathAnnotation();
+				ann.setAbout(subject);
+				ann.setContent(content);
+				manifest.getAnnotations().add(ann);
+			}
 
 			// Extract information that could be in our manifest
-			PathMetadata pathMetadata = manifest.getAggregation(about);
+			PathMetadata pathMetadata = manifest.getAggregation(subject);
 
 			// Created date. We'll prefer dcModified.
 			Property dcCreated = metadata
@@ -383,8 +390,9 @@
 							.getProperty("http://purl.org/dc/terms/W3CDTF");
 					Statement w3cSt = createdSt.getResource().getProperty(
 							dcW3CDTF);
-					if (w3cSt != null)
+					if (w3cSt != null) {
 						fileTime = literalAsFileTime(w3cSt.getObject());
+					}
 				}
 				if (fileTime != null) {
 					pathMetadata.setCreatedOn(fileTime);
diff --git a/taverna-robundle/src/test/java/org/apache/taverna/robundle/fs/MemoryEfficiencyIT.java b/taverna-robundle/src/test/java/org/apache/taverna/robundle/fs/MemoryEfficiencyIT.java
index a0d7ed3..355f258 100644
--- a/taverna-robundle/src/test/java/org/apache/taverna/robundle/fs/MemoryEfficiencyIT.java
+++ b/taverna-robundle/src/test/java/org/apache/taverna/robundle/fs/MemoryEfficiencyIT.java
@@ -74,7 +74,7 @@
 		try {
 			int numFiles = MANY_FILS;
 			System.out.println("Writing " + numFiles
-					+ " files in parallell over max " + MAX_WORKERS
+					+ " files in parallel over max " + MAX_WORKERS
 					+ " threads");
 			for (int i = 0; i < numFiles; i++) {
 				int folderNo = i % 100;