package esl.cuenet.algorithms.firstk.impl;
import com.hp.hpl.jena.ontology.Individual;
import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.rdf.model.Property;
import com.mongodb.BasicDBObject;
import esl.cuenet.algorithms.firstk.Vote;
import esl.cuenet.algorithms.firstk.exceptions.EventGraphException;
import esl.cuenet.algorithms.firstk.structs.eventgraph.Entity;
import esl.cuenet.algorithms.firstk.structs.eventgraph.Event;
import esl.cuenet.algorithms.firstk.structs.eventgraph.EventGraph;
import esl.cuenet.algorithms.firstk.structs.eventgraph.EventGraphNode;
import esl.cuenet.mapper.parser.ParseException;
import esl.cuenet.model.Constants;
import esl.cuenet.query.QueryEngine;
import esl.cuenet.query.drivers.mongodb.MongoDB;
import esl.system.SysLoggerUtils;
import org.apache.log4j.Logger;
import org.junit.Test;
import test.TestBase;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class HashIndexedEntityVoterTest extends MongoDB {
private Logger logger = Logger.getLogger(HashIndexedEntityVoterTest.class);
private TestBase.TestAlgorithm testAlgorithm = null;
public HashIndexedEntityVoterTest() throws IOException, ParseException {
super("test");
SysLoggerUtils.initLogger();
testAlgorithm = new TestBase.TestAlgorithm();
}
@Test
public void run1() throws IOException, ParseException, EventGraphException {
OntModel model = testAlgorithm.getModel();
List<Individual> eventAttendees = new ArrayList<Individual>(500);
OntClass personClass = model.getOntClass(Constants.CuenetNamespace + "person");
Property nameProperty = model.getProperty(Constants.CuenetNamespace + "name");
Property emailProperty = model.getProperty(Constants.CuenetNamespace + "email");
MongoDB.DBReader cursor = startReader("conf_attendees");
BasicDBObject queryObject = new BasicDBObject("url", "http://vldb2009.org/");
cursor.query(queryObject);
while(cursor.hasNext()) {
BasicDBObject obj = (BasicDBObject) cursor.next();
String name = obj.getString("name");
Individual attendee = personClass.createIndividual(Constants.CuenetNamespace + "person_"+name.replaceAll(" ", "_"));
attendee.addLiteral(nameProperty, name);
eventAttendees.add(attendee);
}
logger.info("Event Attendees: " + eventAttendees.size());
HashIndexedEntityVoter indexedVoter = new HashIndexedEntityVoter(new QueryEngine(testAlgorithm.getModel(),
testAlgorithm.getSourceMapper()), testAlgorithm.getModel());
EventGraph graph = new EventGraph(model);
Event conference = graph.createEvent("conference");
for (Individual ind: eventAttendees) {
EventGraphNode node = graph.addIndividual(ind, EventGraph.NodeType.ENTITY);
graph.addParticipant(conference, (Entity) node);
}
Entity entity = graph.createPerson();
entity.getIndividual().addProperty(nameProperty, "Arjun Satish");
entity.getIndividual().addProperty(emailProperty, "arjun.satish@gmail.com");
indexedVoter.addToVerifiedList(entity);
List<Entity> discoverableEntity = new ArrayList<Entity>();
discoverableEntity.add(entity);
long start = System.currentTimeMillis();
logger.info("Starting First Test: " + start);
Vote[] votes = indexedVoter.vote(graph, discoverableEntity);
for (Vote vote : votes) logger.info(vote.entityID + " " + vote.score);
if (votes.length == 0) logger.info("voter returned 0 possible entities!");
long end = System.currentTimeMillis();
logger.info("Terminated in " + (end-start) + " ms.");
Entity e1 = graph.createPerson();
e1.getIndividual().addProperty(nameProperty, "Atish Das Sarma");
e1.getIndividual().addProperty(emailProperty, "atish.dassarma@gmail.com");
indexedVoter.addToVerifiedList(e1);
discoverableEntity.add(e1);
e1 = graph.createPerson();
e1.getIndividual().addProperty(nameProperty, "Danupon Nanongkai");
e1.getIndividual().addProperty(emailProperty, "danupon@gmail.com");
indexedVoter.addToVerifiedList(e1);
discoverableEntity.add(e1);
e1 = new Entity(personClass.createIndividual());
e1.getIndividual().addProperty(nameProperty, "Chen Li");
indexedVoter.addToVerifiedList(e1);
e1 = graph.createPerson();
e1.getIndividual().addProperty(nameProperty, "Ramesh Jain");
indexedVoter.addToVerifiedList(e1);
e1 = graph.createPerson();
e1.getIndividual().addProperty(nameProperty, "Galen Reeves");
indexedVoter.addToVerifiedList(e1);
e1 = new Entity(personClass.createIndividual());
e1.getIndividual().addProperty(nameProperty, "Nicola Onose");
indexedVoter.addToVerifiedList(e1);
start = System.currentTimeMillis();
logger.info("Starting Second Pass: " + start);
votes = indexedVoter.vote(graph, discoverableEntity);
for (Vote vote : votes) logger.info(vote.entityID + " " + vote.score);
end = System.currentTimeMillis();
logger.info("Terminated in " + (end-start) + " ms.");
}
}