TAVERNA-1044: Support rdf:value below dct:W3CDTF bnode

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

Branch: refs/heads/master
Commit: 1db178fa78a2ec7140dd6cf901d4738b4677aaa7
Parents: e33a636
Author: Stian Soiland-Reyes <[email protected]>
Authored: Thu May 10 11:25:38 2018 +0100
Committer: Stian Soiland-Reyes <[email protected]>
Committed: Thu May 10 11:25:38 2018 +0100

----------------------------------------------------------------------
 .../apache/taverna/robundle/utils/RDFUtils.java | 40 ++++++++++++++++----
 1 file changed, 33 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/1db178fa/taverna-robundle/src/main/java/org/apache/taverna/robundle/utils/RDFUtils.java
----------------------------------------------------------------------
diff --git 
a/taverna-robundle/src/main/java/org/apache/taverna/robundle/utils/RDFUtils.java
 
b/taverna-robundle/src/main/java/org/apache/taverna/robundle/utils/RDFUtils.java
index 716a723..2b13922 100644
--- 
a/taverna-robundle/src/main/java/org/apache/taverna/robundle/utils/RDFUtils.java
+++ 
b/taverna-robundle/src/main/java/org/apache/taverna/robundle/utils/RDFUtils.java
@@ -1,5 +1,7 @@
 package org.apache.taverna.robundle.utils;
 
+import static java.nio.file.attribute.FileTime.fromMillis;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -21,29 +23,53 @@ package org.apache.taverna.robundle.utils;
 
 
 import static org.apache.jena.datatypes.xsd.XSDDatatype.XSDdateTime;
-import static java.nio.file.attribute.FileTime.fromMillis;
 
 import java.nio.file.attribute.FileTime;
+import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import org.apache.jena.datatypes.DatatypeFormatException;
 import org.apache.jena.datatypes.xsd.XSDDateTime;
 import org.apache.jena.rdf.model.Literal;
 import org.apache.jena.rdf.model.RDFNode;
+import org.apache.jena.rdf.model.Statement;
+import org.apache.jena.vocabulary.RDF;
 
 public class RDFUtils {
        private static final Logger logger = Logger.getLogger(RDFUtils.class
                        .getCanonicalName());
 
        public static FileTime literalAsFileTime(RDFNode rdfNode) {
-               if (rdfNode == null)
-                       return null;
-               if (!rdfNode.isLiteral()) {
-                       new Exception().printStackTrace();
-                       logger.warning("Expected literal. not " + rdfNode);
+               if (rdfNode == null) {
                        return null;
                }
-               Literal literal = rdfNode.asLiteral();
+               final Literal literal;
+               if (rdfNode.isLiteral()) {
+                       literal = rdfNode.asLiteral();
+               } else { 
+                       // TAVERNA-1044: not a literal, so assume a resource.
+                       // Let's climb into rdf:value if it exists, in case 
we're in a
+                       // <dct:W3CDTF> typed bnode.
+                       Statement valueStmt = 
rdfNode.asResource().getProperty(RDF.value);
+                       if (valueStmt == null) {
+                               // Make our own exception so logger gets a 
stacktrace
+                               Exception ex = new Exception("Can't find 
timestamp as literal");
+                               logger.log(Level.WARNING, 
+                                          "Expected literal or resource with 
rdf:value. not " + rdfNode, 
+                                          ex);
+                               return null;
+                       }
+                       if (valueStmt.getObject().isLiteral()) {
+                               literal = valueStmt.getObject().asLiteral();
+                       } else {        
+                               Exception ex = new Exception("Invalid timestamp 
literal");
+                               logger.log(Level.WARNING, 
+                                          "Expected rdf:value statement with 
literal object, not" + valueStmt,
+                                          ex);
+                               return null;                            
+                       }
+               }
+
                Object value = literal.getValue();
                XSDDateTime dateTime;
                if (value instanceof XSDDateTime) {

Reply via email to