I18n regression fix (#289)
* fix: get back language filtering for sparql construct query * feat: LanguageFilteringRDFService sparqlConstructQuery tests added
This commit is contained in:
parent
0d704f3eb8
commit
c41853440f
5 changed files with 70 additions and 8 deletions
|
@ -22,6 +22,7 @@ import org.apache.jena.query.ResultSetFormatter;
|
|||
import org.apache.jena.rdf.model.Literal;
|
||||
import org.apache.jena.rdf.model.Model;
|
||||
import org.apache.jena.rdf.model.ModelChangedListener;
|
||||
import org.apache.jena.rdf.model.ModelFactory;
|
||||
import org.apache.jena.rdf.model.RDFNode;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
|
@ -77,7 +78,15 @@ public class LanguageFilteringRDFService implements RDFService {
|
|||
@Override
|
||||
public void sparqlConstructQuery(String query, Model model)
|
||||
throws RDFServiceException {
|
||||
if (model.isEmpty()) {
|
||||
s.sparqlConstructQuery(query, model);
|
||||
filterModel.filterModel(model, langs);
|
||||
} else {
|
||||
Model constructedModel = ModelFactory.createDefaultModel();
|
||||
s.sparqlConstructQuery(query, constructedModel);
|
||||
filterModel.filterModel(constructedModel, langs);
|
||||
model.add(constructedModel);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -4,11 +4,12 @@ package edu.cornell.mannlib.vitro.webapp.rdfservice.filter;
|
|||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
@ -21,9 +22,15 @@ import org.junit.Test;
|
|||
|
||||
import stubs.org.apache.jena.rdf.model.LiteralStub;
|
||||
|
||||
import org.apache.jena.ontology.OntModel;
|
||||
import org.apache.jena.ontology.OntModelSpec;
|
||||
import org.apache.jena.rdf.model.Literal;
|
||||
import org.apache.jena.rdf.model.ModelFactory;
|
||||
|
||||
import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
|
||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
|
||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException;
|
||||
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.jena.model.RDFServiceModel;
|
||||
|
||||
/**
|
||||
* This is the matching order we expect to see:
|
||||
|
@ -36,12 +43,15 @@ import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
|
|||
* </pre>
|
||||
*/
|
||||
public class LanguageFilteringRDFServiceTest extends AbstractTestClass {
|
||||
|
||||
private static final Log log = LogFactory
|
||||
.getLog(LanguageFilteringRDFServiceTest.class);
|
||||
|
||||
private static final String COLLATOR_CLASSNAME = "edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringRDFService$RowIndexedLiteralSortByLang";
|
||||
private static final String RIL_CLASSNAME = "edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringRDFService$RowIndexedLiteral";
|
||||
|
||||
private static final String TEST_CONSTRUCT_QUERY = "CONSTRUCT { ?s ?o ?p . } WHERE { ?s ?o ?p . }";
|
||||
|
||||
private LanguageFilteringRDFService filteringRDFService;
|
||||
private List<Object> listOfRowIndexedLiterals;
|
||||
private int literalIndex;
|
||||
|
@ -158,6 +168,39 @@ public class LanguageFilteringRDFServiceTest extends AbstractTestClass {
|
|||
testBothWays();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sparqlConstructQueryTestGetPreferredExistingLang() throws RDFServiceException {
|
||||
preferredLanguages = list("en-US", "de-DE");
|
||||
OntModel model;
|
||||
createLanguageFilter("LangFilteringTestModelEn_De_NoTag.n3");
|
||||
model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
|
||||
filteringRDFService.sparqlConstructQuery(TEST_CONSTRUCT_QUERY, model);
|
||||
assertEquals(model.size(),1);
|
||||
assertEquals(model.listStatements().next().getObject().toString(), "US label@en-US");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sparqlConstructQueryTestGetSecodAvailPreferredLang() throws RDFServiceException {
|
||||
preferredLanguages = list("en-US", "de-DE");
|
||||
OntModel model;
|
||||
createLanguageFilter("LangFilteringTestModelDe_NoTag.n3");
|
||||
model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
|
||||
filteringRDFService.sparqlConstructQuery(TEST_CONSTRUCT_QUERY, model);
|
||||
assertEquals(model.size(),1);
|
||||
assertEquals(model.listStatements().next().getObject().toString(), "DE label@de-DE");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sparqlConstructQueryTestGetNoTagAsLangsNotAvailable() throws RDFServiceException {
|
||||
preferredLanguages = list("en-US", "de-DE");
|
||||
OntModel model;
|
||||
createLanguageFilter("LangFilteringTestModelNoTag.n3");
|
||||
model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
|
||||
filteringRDFService.sparqlConstructQuery(TEST_CONSTRUCT_QUERY, model);
|
||||
assertEquals(model.size(),1);
|
||||
assertEquals(model.listStatements().next().getObject().toString(), "no tag label");
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Helper methods
|
||||
// ----------------------------------------------------------------------
|
||||
|
@ -167,7 +210,7 @@ public class LanguageFilteringRDFServiceTest extends AbstractTestClass {
|
|||
* sort again.
|
||||
*/
|
||||
private void testBothWays() {
|
||||
createLanguageFilter();
|
||||
createLanguageFilter(null);
|
||||
|
||||
buildListOfLiterals();
|
||||
sortListOfLiterals();
|
||||
|
@ -184,7 +227,7 @@ public class LanguageFilteringRDFServiceTest extends AbstractTestClass {
|
|||
* thrown, and no languages are "lost in translation".
|
||||
*/
|
||||
private void testArbitraryOrder() {
|
||||
createLanguageFilter();
|
||||
createLanguageFilter(null);
|
||||
|
||||
buildListOfLiterals();
|
||||
sortListOfLiterals();
|
||||
|
@ -193,16 +236,20 @@ public class LanguageFilteringRDFServiceTest extends AbstractTestClass {
|
|||
buildReversedListOfLiterals();
|
||||
sortListOfLiterals();
|
||||
assertLanguages("sort reversed literals");
|
||||
|
||||
}
|
||||
|
||||
private List<String> list(String... strings) {
|
||||
return new ArrayList<String>(Arrays.asList(strings));
|
||||
}
|
||||
|
||||
private void createLanguageFilter() {
|
||||
filteringRDFService = new LanguageFilteringRDFService(null,
|
||||
preferredLanguages);
|
||||
private void createLanguageFilter(String fileName) {
|
||||
OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
|
||||
if (fileName != null) {
|
||||
Reader reader = new InputStreamReader(this.getClass().getResourceAsStream(fileName));
|
||||
model.read(reader, "http://test.edu/", "N3");
|
||||
}
|
||||
RDFService rdfService = new RDFServiceModel(model);
|
||||
filteringRDFService = new LanguageFilteringRDFService(rdfService, preferredLanguages);
|
||||
}
|
||||
|
||||
private void buildListOfLiterals() {
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
<http://test.edu/u> rdfs:label "DE label"@de-DE, "no tag label" .
|
|
@ -0,0 +1,2 @@
|
|||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
<http://test.edu/u> rdfs:label "US label"@en-US , "DE label"@de-DE, "no tag label" .
|
|
@ -0,0 +1,2 @@
|
|||
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
|
||||
<http://test.edu/u> rdfs:label "no tag label" .
|
Loading…
Add table
Reference in a new issue