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);
+ }
+}