Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added ART API for stored model #365

Merged
merged 4 commits into from
Jan 8, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -551,9 +551,12 @@ public void loadModel(IRI modelId, boolean isOverride) throws OWLOntologyCreatio
}
}


@Override
public OWLOntology loadModelABox(IRI modelId) throws OWLOntologyCreationException {
return loadModelABox(modelId, null);
}
@Override
public OWLOntology loadModelABox(IRI modelId, OWLOntologyManager manager) throws OWLOntologyCreationException {
LOG.info("Load model abox: " + modelId + " from database");
try {
BigdataSailRepositoryConnection connection = repo.getReadOnlyConnection();
Expand All @@ -568,7 +571,13 @@ public OWLOntology loadModelABox(IRI modelId) throws OWLOntologyCreationExceptio
connection.getStatements(null, null, null, false, new URIImpl(modelId.toString()));
//setting minimal to true will give an OWL abox with triples that won't be connected to the tbox, hence e.g. object properties might not be recognized.
boolean minimal = true;
OWLOntology abox = loadOntologyDocumentSource(new RioMemoryTripleSource(statements), minimal);
OWLOntology abox;
if(manager ==null) {
abox = loadOntologyDocumentSource(new RioMemoryTripleSource(statements), minimal);
} else {
abox = loadOntologyDocumentSource(new RioMemoryTripleSource(statements), minimal, manager);
}

statements.close();
abox = postLoadFileFilter(abox);
return abox;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -840,6 +840,14 @@ public boolean isModelModified(IRI modelId) {
* @throws OWLOntologyCreationException
*/
protected abstract OWLOntology loadModelABox(IRI modelId) throws OWLOntologyCreationException;

/**
* @param modelId
* @param manager
* @return ontology
* @throws OWLOntologyCreationException
*/
protected abstract OWLOntology loadModelABox(IRI modelId, OWLOntologyManager manager) throws OWLOntologyCreationException;

/**
* @param id
Expand Down
1 change: 1 addition & 0 deletions minerva-server/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
target/
.temp*
Original file line number Diff line number Diff line change
Expand Up @@ -451,12 +451,14 @@ public static Server startUp(UndoAwareMolecularModelManager models, MinervaStart
// JsonOrJsonpSeedHandler seedHandler = new JsonOrJsonpSeedHandler(models, conf.defaultModelState, conf.golrSeedUrl, ecoMapper );
// SPARQLHandler sparqlHandler = new SPARQLHandler(models, conf.sparqlEndpointTimeout);
ModelSearchHandler searchHandler = new ModelSearchHandler(models);
ModelARTHandler artHandler = new ModelARTHandler(models, ipc);

LocalDate d = LocalDate.now();
LocalTime t = LocalTime.now();
String startup = d.toString()+" "+t.toString();
StatusHandler statusHandler = new StatusHandler(conf, ont_annos, startup);
TaxonHandler taxonHandler = new TaxonHandler(models);
resourceConfig = resourceConfig.registerInstances(batchHandler, searchHandler, statusHandler, taxonHandler);
resourceConfig = resourceConfig.registerInstances(batchHandler, searchHandler,artHandler, statusHandler, taxonHandler);

// setup jetty server port, buffers and context path
Server server = new Server();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
/**
*
*/
package org.geneontology.minerva.server.handler;

import static org.geneontology.minerva.server.handler.OperationsTools.createModelRenderer;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import org.apache.commons.io.IOUtils;
import org.geneontology.minerva.BlazegraphMolecularModelManager;
import org.geneontology.minerva.BlazegraphOntologyManager;
import org.geneontology.minerva.ModelContainer;
import org.geneontology.minerva.MolecularModelManager.UnknownIdentifierException;
import org.geneontology.minerva.curie.CurieHandler;
import org.geneontology.minerva.json.InferenceProvider;
import org.geneontology.minerva.json.JsonModel;
import org.geneontology.minerva.json.MolecularModelJsonRenderer;
import org.geneontology.minerva.server.handler.M3BatchHandler.M3BatchResponse;
import org.geneontology.minerva.server.handler.M3BatchHandler.M3BatchResponse.ResponseData;
import org.geneontology.minerva.server.inferences.InferenceProviderCreator;
import org.openrdf.query.Binding;
import org.openrdf.query.BindingSet;
import org.openrdf.query.MalformedQueryException;
import org.openrdf.query.QueryEvaluationException;
import org.openrdf.query.QueryResult;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.RepositoryException;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLAxiom;
import org.semanticweb.owlapi.model.OWLNamedIndividual;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OWLOntologyCreationException;
import org.semanticweb.owlapi.model.OWLOntologyManager;
import org.semanticweb.owlapi.model.parameters.OntologyCopy;

import com.google.gson.annotations.SerializedName;

/**
* Gets Model readonly data for Annotation Review Tool
* Uses Jersey + JSONP
*
*
*/
@Path("/search/stored") //using store endpoint temporarily because thats what barista allows
public class ModelARTHandler {

private final BlazegraphMolecularModelManager<?> m3;
private final BlazegraphOntologyManager go_lego;
private final CurieHandler curieHandler;
private final InferenceProviderCreator ipc;
/**
*
*/
public ModelARTHandler(BlazegraphMolecularModelManager<?> m3, InferenceProviderCreator ipc) {
this.m3 = m3;
this.go_lego = m3.getGolego_repo();
this.curieHandler = m3.getCuriHandler();
this.ipc = ipc;
}

public class ModelARTResult {
private String id;
private JsonModel storedModel;
private JsonModel activeModel;
private JsonModel diffModel;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public void setStoredModel(JsonModel storedModel) {
this.storedModel = storedModel;
}

public JsonModel getStoredModel() {
return this.storedModel;
}

public void setActiveModel(JsonModel activeModel) {
this.activeModel = activeModel;
}

public JsonModel getActiveModel() {
return this.activeModel;
}
}


@GET
@Produces(MediaType.APPLICATION_JSON)
public ModelARTResult storedGet(
@QueryParam("id") Set<String> id
) throws Exception{
ModelARTResult result = new ModelARTResult();
result = stored(id);
return result;
}

public ModelARTResult stored(Set<String> ids) throws Exception {
ModelARTResult result = new ModelARTResult();

for(String mid : ids) {
addToModel(mid, result);
}

return result;
}

private void addToModel(String modelId, ModelARTResult result) throws Exception {

IRI modelIri = curieHandler.getIRI(modelId);
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
OWLOntology currentOntology = m3.getModelAbox(modelIri);
OWLOntology storedOntology = m3.loadModelABox(modelIri, manager);

//OWLOntology stored_ontology = man1.copyOntology(storedOntology, OntologyCopy.DEEP);
ModelContainer storedMC = new ModelContainer(modelIri, null, storedOntology);
final MolecularModelJsonRenderer storedRenderer = createModelRenderer(storedMC, go_lego, null, curieHandler);
JsonModel jsonStoredModel = storedRenderer.renderModel();

ModelContainer activeMC = new ModelContainer(modelIri, null, currentOntology);
InferenceProvider inferenceProvider = ipc.create(activeMC);
final MolecularModelJsonRenderer renderer = createModelRenderer(activeMC, go_lego, inferenceProvider, curieHandler);
JsonModel jsonActiveModel = renderer.renderModel();

result.storedModel = jsonStoredModel;
result.activeModel = jsonActiveModel;
result.diffModel = getDiff(jsonStoredModel, jsonActiveModel);

}

private JsonModel getDiff(JsonModel storedOntology, JsonModel activeOntology) {
return new JsonModel();
}

}
Loading