From 70ba4cedab891161d2e29db4699e81ac7f4cf5f4 Mon Sep 17 00:00:00 2001 From: Graham Triggs Date: Sun, 18 Sep 2016 21:03:24 +0100 Subject: [PATCH] Split out selector implementation to address java compilation issue --- .../impl/virtuoso/RDFServiceVirtuoso.java | 38 +------------------ .../impl/virtuoso/VirtuosoDoubleSelector.java | 33 ++++++++++++++++ 2 files changed, 35 insertions(+), 36 deletions(-) create mode 100644 api/src/main/java/edu/cornell/mannlib/vitro/webapp/rdfservice/impl/virtuoso/VirtuosoDoubleSelector.java 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 1c7ff10a0..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 @@ -16,6 +16,7 @@ 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.Selector; +import org.apache.jena.rdf.model.SimpleSelector; import org.apache.jena.rdf.model.Statement; import org.apache.jena.rdf.model.StmtIterator; import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceDataset; @@ -191,42 +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 - StmtIterator matching = fromTripleStoreModel.listStatements(new Selector() { - @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; - } - - @Override - public boolean isSimple() { - return false; - } - - @Override - public Resource getSubject() { - return subject.asResource(); - } - - @Override - public Property getPredicate() { - return predicate; - } - - @Override - public RDFNode getObject() { - return null; - } - }); + 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; + } +}