Move RDFToManifest.iteralAsFileTime to new RDFUtils
diff --git a/src/main/java/org/purl/wf4ever/robundle/manifest/RDFToManifest.java b/src/main/java/org/purl/wf4ever/robundle/manifest/RDFToManifest.java
index c793ed8..ec9ab1c 100644
--- a/src/main/java/org/purl/wf4ever/robundle/manifest/RDFToManifest.java
+++ b/src/main/java/org/purl/wf4ever/robundle/manifest/RDFToManifest.java
@@ -1,12 +1,12 @@
 package org.purl.wf4ever.robundle.manifest;
 
 import static org.purl.wf4ever.robundle.utils.PathHelper.relativizeFromBase;
+import static org.purl.wf4ever.robundle.utils.RDFUtils.literalAsFileTime;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.nio.file.attribute.FileTime;
 import java.util.ArrayList;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -14,19 +14,16 @@
 import java.util.UUID;
 import java.util.logging.Logger;
 
-import org.apache.http.client.HttpClient;
 import org.apache.jena.riot.RDFDataMgr;
 import org.apache.jena.riot.RiotException;
 
 import com.github.jsonldjava.jena.JenaJSONLD;
-import com.hp.hpl.jena.datatypes.xsd.XSDDateTime;
 import com.hp.hpl.jena.ontology.DatatypeProperty;
 import com.hp.hpl.jena.ontology.Individual;
 import com.hp.hpl.jena.ontology.ObjectProperty;
 import com.hp.hpl.jena.ontology.OntClass;
 import com.hp.hpl.jena.ontology.OntModel;
 import com.hp.hpl.jena.ontology.OntResource;
-import com.hp.hpl.jena.rdf.model.Literal;
 import com.hp.hpl.jena.rdf.model.Model;
 import com.hp.hpl.jena.rdf.model.ModelFactory;
 import com.hp.hpl.jena.rdf.model.RDFNode;
@@ -407,24 +404,7 @@
 
 	}
 
-	private FileTime literalAsFileTime(RDFNode rdfNode) {
-		if (rdfNode == null) {
-			return null;
-		}
-		if (!rdfNode.isLiteral()) {
-			logger.warning("Expected literal. not " + rdfNode);
-		}
-		Literal literal = rdfNode.asLiteral();
-		Object value = literal.getValue();
-		if (!(value instanceof XSDDateTime)) {
-			logger.warning("Literal not an XSDDateTime, but: "
-					+ value.getClass() + " " + value);
-			return null;
-		}
-		XSDDateTime dateTime = (XSDDateTime) value;
-		long millis = dateTime.asCalendar().getTimeInMillis();
-		return FileTime.fromMillis(millis);
-	}
+	
 
 	private List<Agent> getAgents(URI base, Individual in,
 			ObjectProperty property) {
diff --git a/src/main/java/org/purl/wf4ever/robundle/utils/RDFUtils.java b/src/main/java/org/purl/wf4ever/robundle/utils/RDFUtils.java
new file mode 100644
index 0000000..501661e
--- /dev/null
+++ b/src/main/java/org/purl/wf4ever/robundle/utils/RDFUtils.java
@@ -0,0 +1,47 @@
+package org.purl.wf4ever.robundle.utils;
+
+import java.nio.file.attribute.FileTime;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.hp.hpl.jena.datatypes.DatatypeFormatException;
+import com.hp.hpl.jena.datatypes.xsd.XSDDatatype;
+import com.hp.hpl.jena.datatypes.xsd.XSDDateTime;
+import com.hp.hpl.jena.datatypes.xsd.impl.XSDDateTimeType;
+import com.hp.hpl.jena.rdf.model.Literal;
+import com.hp.hpl.jena.rdf.model.RDFNode;
+
+public class RDFUtils {
+
+	private static Logger logger = Logger.getLogger(RDFUtils.class
+			.getCanonicalName());
+
+	public static FileTime literalAsFileTime(RDFNode rdfNode) {
+		if (rdfNode == null) {
+			return null;
+		}
+		if (!rdfNode.isLiteral()) {
+			logger.warning("Expected literal. not " + rdfNode);
+			return null;
+		}
+		Literal literal = rdfNode.asLiteral();
+		Object value = literal.getValue();
+		XSDDateTime dateTime;
+		if (value instanceof XSDDateTime) {
+			dateTime = (XSDDateTime) value;
+		} else { 
+			logger.info("Literal not an XSDDateTime, but: "
+					+ value.getClass() + " " + value);
+			
+			// Try to parse it anyway
+			try { 
+				dateTime = (XSDDateTime) XSDDatatype.XSDdateTime.parse(literal.getLexicalForm());			
+			} catch (DatatypeFormatException e) {
+				logger.warning("Invalid datetime: " + literal);
+				return null;
+			}
+		}
+		long millis = dateTime.asCalendar().getTimeInMillis();
+		return FileTime.fromMillis(millis);
+	}
+}