blob: 8e80fac212c1db97e3ee2ff7397e36a095ed12b8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.stanbol.entityhub.query.clerezza;
import java.util.Iterator;
import java.util.SortedMap;
import java.util.TreeMap;
import org.apache.clerezza.commons.rdf.Graph;
import org.apache.clerezza.commons.rdf.IRI;
import org.apache.clerezza.commons.rdf.impl.utils.simple.SimpleGraph;
import org.apache.clerezza.commons.rdf.impl.utils.TripleImpl;
import org.apache.stanbol.commons.indexedgraph.IndexedGraph;
import org.apache.stanbol.entityhub.core.query.FieldQueryImpl;
import org.apache.stanbol.entityhub.model.clerezza.RdfRepresentation;
import org.apache.stanbol.entityhub.model.clerezza.RdfValueFactory;
import org.apache.stanbol.entityhub.servicesapi.model.Representation;
import org.apache.stanbol.entityhub.servicesapi.model.rdf.RdfResourceEnum;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RdfResultListTest {
private final static Logger log = LoggerFactory.getLogger(RdfResultListTest.class);
/**
* Providing a sorted Iteration over query results stored in an RDF
* graph is not something trivial. Therefore this test
*/
@Test
public void testRdfResultSorting(){
SortedMap<Double,RdfRepresentation> sorted = new TreeMap<Double,RdfRepresentation>();
Graph resultGraph = new IndexedGraph();
RdfValueFactory vf = new RdfValueFactory(resultGraph);
IRI resultListNode = new IRI(RdfResourceEnum.QueryResultSet.getUri());
IRI resultProperty = new IRI(RdfResourceEnum.queryResult.getUri());
for(int i=0;i<100;i++){
Double rank;
do { //avoid duplicate keys
rank = Math.random();
} while (sorted.containsKey(rank));
RdfRepresentation r = vf.createRepresentation("urn:sortTest:rep."+i);
//link the representation with the query result set
resultGraph.add(new TripleImpl(resultListNode,resultProperty,r.getNode()));
r.set(RdfResourceEnum.resultScore.getUri(), rank);
sorted.put(rank, r);
}
RdfQueryResultList resultList = new RdfQueryResultList(new FieldQueryImpl(),
resultGraph);
if(log.isDebugEnabled()){
log.debug("---DEBUG Sorting ---");
for(Iterator<Representation> it = resultList.iterator();it.hasNext();){
Representation r = it.next();
log.debug("{}: {}",r.getFirst(RdfResourceEnum.resultScore.getUri()),r.getId());
}
}
log.debug("---ASSERT Sorting ---");
for(Iterator<Representation> it = resultList.iterator();it.hasNext();){
Representation r = it.next();
Double lastkey = sorted.lastKey();
Representation last = sorted.get(lastkey);
Assert.assertEquals("score: "+r.getFirst(RdfResourceEnum.resultScore.getUri())+
" of Representation "+r.getId()+" is not as expected "+
last.getFirst(RdfResourceEnum.resultScore.getUri())+" of Representation "+
last.getId()+"!",r, last);
sorted.remove(lastkey);
}
Assert.assertTrue(sorted.isEmpty());
}
}