package esl.cuenet.ranking;
import com.hp.hpl.jena.ontology.Individual;
import com.hp.hpl.jena.ontology.ObjectProperty;
import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import esl.cuenet.ranking.network.NeoOntologyImporter;
import esl.cuenet.ranking.network.OntProperties;
import esl.cuenet.ranking.network.PersistentEventEntityNetwork;
import esl.system.SysLoggerUtils;
import org.apache.commons.io.FileUtils;
import org.apache.log4j.Logger;
import org.junit.BeforeClass;
import org.junit.Test;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.index.Index;
import org.neo4j.graphdb.index.IndexHits;
import org.neo4j.kernel.EmbeddedGraphDatabase;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.HashSet;
import java.util.Random;
public class IndexLookupTests {
private static String directory = "/data/graph_db/tests";
private Logger logger = Logger.getLogger(IndexLookupTests.class);
private static OntModel model = null;
@BeforeClass
public static void setUp() {
SysLoggerUtils.initLogger();
model = ModelFactory.createOntologyModel();
try {
model.read(new FileReader("/home/arjun/Documents/Dropbox/Ontologies/cuenet-main/cuenet-main.owl"),
"http://www.semanticweb.org/arjun/cuenet-main.owl");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
OntClass person = model.getOntClass("http://www.semanticweb.org/arjun/cuenet-main.owl#person");
ObjectProperty knows = model.getObjectProperty("http://www.semanticweb.org/arjun/cuenet-main.owl#knows");
Individual i1 = person.createIndividual("Hercule Poirot");
Individual i2 = person.createIndividual("Ms. Marple");
i1.addProperty(knows, i2);
}
@Test
public void test() {
GraphDatabaseService graphDb = new EmbeddedGraphDatabase( directory );
Index<Node> ix = graphDb.index().forNodes(NeoOntologyImporter.nodeURIIndexName);
IndexHits<Node> hits = ix.get(OntProperties.ONT_URI, "http://www.w3.org/2000/01/rdf-schema#Datatype");
logger.info("hits size = " + hits.size());
logger.info(hits.getSingle().getProperty(OntProperties.ONT_URI));
graphDb.shutdown();
}
@Test
public void readIxTest() {
HashSet<String> uris = new HashSet<String>();
StmtIterator iter = model.listStatements();
while (iter.hasNext()) {
Statement statement = iter.nextStatement();
uris.add(statement.getSubject().getURI());
if (statement.getObject().isResource()) uris.add(statement.getObject().toString());
//if (statement.getSubject().toString().contains("#person") || statement.getObject().toString().contains("#person"))
//logger.info(statement.getSubject() + " <=> " + statement.getPredicate() + " <=> " + statement.getObject());
}
String[] URIs = new String[uris.size()];
uris.toArray(URIs);
GraphDatabaseService graphDb = new EmbeddedGraphDatabase( directory );
EventEntityNetwork network = new PersistentEventEntityNetwork( graphDb );
Random generator = new Random();
TextIndex index = network.textIndex(NeoOntologyImporter.nodeURIIndexName);
try {
logger.info("Looking up --> " + "http://www.w3.org/2000/01/rdf-schema#Datatype");
lookup(index, "http://www.w3.org/2000/01/rdf-schema#Datatype");
logger.info("Looking up --> " + "http://www.semanticweb.org/arjun/cuenet-main.owl#bn-10");
lookup(index, "http://www.semanticweb.org/arjun/cuenet-main.owl#bn-10");
for (int i=0; i < 100; i++) {
int u = generator.nextInt(URIs.length);
if ( URIs[u] == null || !URIs[u].contains("http://") ) { i--; continue; }
logger.info("Looking up --> " + URIs[u]);
lookup(index, URIs[u]);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
graphDb.shutdown();
}
}
private void lookup(TextIndex index, String uri) {
URINode n = index.lookup(OntProperties.ONT_URI, uri);
if (n == null) logger.info("No results found");
else logger.info("RESULT => " + n.getProperty(OntProperties.ONT_URI));
}
// @Test
public void write() {
GraphDatabaseService graphDb = new EmbeddedGraphDatabase( directory );
Transaction tx = graphDb.beginTx();
Node n1 = graphDb.createNode();
n1.setProperty("name", "Agatha");
logger.info("n1.id = " + n1.getId());
Node n2 = graphDb.createNode();
n2.setProperty("name", "Poirot");
Node n3 = graphDb.createNode();
n3.setProperty("name", "Marple");
n1.createRelationshipTo(n2, NeoGraphTest.MysteriousRelations.CREATED);
n1.createRelationshipTo(n3, NeoGraphTest.MysteriousRelations.CREATED);
n2.createRelationshipTo(n3, NeoGraphTest.MysteriousRelations.KNOWS);
n3.createRelationshipTo(n2, NeoGraphTest.MysteriousRelations.KNOWS);
Index<Node> nameIx = graphDb.index().forNodes("nameIx");
nameIx.add(n1, "name", n1.getProperty("name"));
nameIx.add(n2, "name", n2.getProperty("name"));
nameIx.add(n2, "fictional", "true");
nameIx.add(n3, "name", n3.getProperty("name"));
nameIx.add(n3, "fictional", "true");
tx.success();
tx.finish();
graphDb.shutdown();
}
}