diff --git a/.travis.yml b/.travis.yml index 740b0f849..610b5a745 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ sudo: false jdk: - oraclejdk8 - oraclejdk7 + - openjdk8 - openjdk7 env: diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/virtuoso/RDFServiceVirtuoso.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/virtuoso/RDFServiceVirtuoso.java index 876069d07..248601fe5 100644 --- a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/virtuoso/RDFServiceVirtuoso.java +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/virtuoso/RDFServiceVirtuoso.java @@ -192,8 +192,7 @@ public class RDFServiceVirtuoso extends RDFServiceSparql { // If the object is a numeric literal if (object.isLiteral() && isNumeric(object.asLiteral().getDatatypeURI())) { // Find a matching statement in the triple store, based on normalized numeric values - double num = Double.parseDouble(object.asLiteral().getString()); - StmtIterator matching = fromTripleStoreModel.listStatements(subject.asResource(), predicate, fromTripleStoreModel.createTypedLiteral(num)); + StmtIterator matching = fromTripleStoreModel.listStatements(new VirtuosoDoubleSelector(subject.asResource(), predicate, object)); // For every matching statement // Rewrite the object as the one in the file model (they are the same, just differ in datatype) diff --git a/api/src/main/java/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/virtuoso/VirtuosoDoubleSelector.java b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/virtuoso/VirtuosoDoubleSelector.java new file mode 100644 index 000000000..3ad3d73d1 --- /dev/null +++ b/api/src/main/java/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/virtuoso/VirtuosoDoubleSelector.java @@ -0,0 +1,33 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.rdfservice.impl.virtuoso; + +import org.apache.jena.rdf.model.Property; +import org.apache.jena.rdf.model.RDFNode; +import org.apache.jena.rdf.model.Resource; +import org.apache.jena.rdf.model.SimpleSelector; +import org.apache.jena.rdf.model.Statement; + +public class VirtuosoDoubleSelector extends SimpleSelector { + public VirtuosoDoubleSelector() { + } + + public VirtuosoDoubleSelector(Resource subject, Property predicate, RDFNode object) { + super(subject, predicate, object); + } + + @Override + public boolean test(Statement statement) { + RDFNode objectToMatch = statement.getObject(); + + // Both values are numeric, so compare them as parsed doubles + if (objectToMatch.isLiteral()) { + String num1 = object.asLiteral().getString(); + String num2 = objectToMatch.asLiteral().getString(); + + return Double.parseDouble(num1) == Double.parseDouble(num2); + } + + return false; + } +}