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 2018/05/10 12:33:24 UTC

[4/7] incubator-taverna-language git commit: TAVERNA-1044: Support rdf:value below dct:W3CDTF bnode

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 <st...@apache.org>
Authored: Thu May 10 11:25:38 2018 +0100
Committer: Stian Soiland-Reyes <st...@apache.org>
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) {