[VIVO-1403] Improve update performance by ensuring the bulk updater can be exposed correctly

This commit is contained in:
Graham Triggs 2017-10-19 11:21:04 +01:00
parent 4da85f0d82
commit 0ef3018ae3
4 changed files with 71 additions and 26 deletions

View file

@ -26,24 +26,33 @@ public class BulkUpdatingModel extends AbstractModelDecorator {
protected BulkUpdatingModel(Model m) {
super(m);
Graph graph = m.getGraph();
if (graph instanceof RDFServiceGraph) {
updater = new RDFServiceBulkUpdater((RDFServiceGraph)graph);
} else if (graph instanceof SparqlGraph) {
updater = new SparqlBulkUpdater((SparqlGraph)graph);
if (m instanceof BulkUpdatingModel) {
this.updater = ((BulkUpdatingModel) m).updater;
} else {
updater = null;
Graph graph = GraphUtils.unwrapUnionGraphs(m.getGraph());
if (graph instanceof RDFServiceGraph) {
updater = new RDFServiceBulkUpdater((RDFServiceGraph) graph);
} else if (graph instanceof SparqlGraph) {
updater = new SparqlBulkUpdater((SparqlGraph) graph);
} else {
updater = null;
}
}
}
protected BulkUpdatingModel(Model m, Graph graph) {
protected BulkUpdatingModel(Model m, Model baseModel) {
super(m);
if (graph instanceof RDFServiceGraph) {
updater = new RDFServiceBulkUpdater((RDFServiceGraph)graph);
} else if (graph instanceof SparqlGraph) {
updater = new SparqlBulkUpdater((SparqlGraph)graph);
if (baseModel instanceof BulkUpdatingModel) {
this.updater = ((BulkUpdatingModel) baseModel).updater;
} else {
updater = null;
Graph graph = GraphUtils.unwrapUnionGraphs(baseModel.getGraph());
if (graph instanceof RDFServiceGraph) {
updater = new RDFServiceBulkUpdater((RDFServiceGraph) graph);
} else if (graph instanceof SparqlGraph) {
updater = new SparqlBulkUpdater((SparqlGraph) graph);
} else {
updater = null;
}
}
}

View file

@ -27,24 +27,33 @@ public class BulkUpdatingOntModel extends AbstractOntModelDecorator {
protected BulkUpdatingOntModel(OntModel m) {
super(m);
Graph graph = m.getGraph();
if (graph instanceof RDFServiceGraph) {
updater = new RDFServiceBulkUpdater((RDFServiceGraph)graph);
} else if (graph instanceof SparqlGraph) {
updater = new SparqlBulkUpdater((SparqlGraph)graph);
if (m instanceof BulkUpdatingOntModel) {
this.updater = ((BulkUpdatingOntModel) m).updater;
} else {
updater = null;
Graph graph = GraphUtils.unwrapUnionGraphs(m.getGraph());
if (graph instanceof RDFServiceGraph) {
updater = new RDFServiceBulkUpdater((RDFServiceGraph) graph);
} else if (graph instanceof SparqlGraph) {
updater = new SparqlBulkUpdater((SparqlGraph) graph);
} else {
updater = null;
}
}
}
protected BulkUpdatingOntModel(OntModel m, Graph graph) {
protected BulkUpdatingOntModel(OntModel m, OntModel baseModel) {
super(m);
if (graph instanceof RDFServiceGraph) {
updater = new RDFServiceBulkUpdater((RDFServiceGraph)graph);
} else if (graph instanceof SparqlGraph) {
updater = new SparqlBulkUpdater((SparqlGraph)graph);
if (baseModel instanceof BulkUpdatingOntModel) {
this.updater = ((BulkUpdatingOntModel) baseModel).updater;
} else {
updater = null;
Graph graph = GraphUtils.unwrapUnionGraphs(baseModel.getGraph());
if (graph instanceof RDFServiceGraph) {
updater = new RDFServiceBulkUpdater((RDFServiceGraph) graph);
} else if (graph instanceof SparqlGraph) {
updater = new SparqlBulkUpdater((SparqlGraph) graph);
} else {
updater = null;
}
}
}

View file

@ -0,0 +1,21 @@
/* $This file is distributed under the terms of the license in LICENSE$ */
package edu.cornell.mannlib.vitro.webapp.rdfservice.adapters;
import org.apache.jena.graph.Graph;
import org.apache.jena.graph.compose.MultiUnion;
import java.util.List;
final public class GraphUtils {
public static Graph unwrapUnionGraphs(Graph graph) {
if (graph != null && graph instanceof MultiUnion) {
List<Graph> subGraphs = ((MultiUnion)graph).getSubGraphs();
if (subGraphs == null || subGraphs.isEmpty()) {
return ((MultiUnion)graph).getBaseGraph();
}
}
return graph;
}
}

View file

@ -4,10 +4,13 @@ package edu.cornell.mannlib.vitro.webapp.rdfservice.adapters;
import static org.apache.jena.ontology.OntModelSpec.OWL_MEM;
import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceGraph;
import edu.cornell.mannlib.vitro.webapp.dao.jena.SparqlGraph;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.jena.graph.Graph;
import org.apache.jena.graph.compose.MultiUnion;
import org.apache.jena.graph.compose.Union;
import org.apache.jena.ontology.OntModel;
import org.apache.jena.ontology.impl.OntModelImpl;
@ -17,6 +20,8 @@ import org.apache.jena.rdf.model.impl.ModelCom;
import edu.cornell.mannlib.vitro.webapp.utils.logging.ToString;
import java.util.List;
/**
* Make models that will do proper bulk updates.
*/
@ -46,7 +51,7 @@ public class VitroModelFactory {
Model unionModel = ModelFactory.createModelForGraph(unionGraph);
return new BulkUpdatingModel(unionModel, baseGraph);
return new BulkUpdatingModel(unionModel, baseModel);
}
public static OntModel createUnion(OntModel baseModel, OntModel plusModel) {
@ -58,7 +63,8 @@ public class VitroModelFactory {
Model unionModel = ModelFactory.createModelForGraph(unionGraph);
OntModel unionOntModel = ModelFactory.createOntologyModel(OWL_MEM, unionModel);
return new BulkUpdatingOntModel(unionOntModel, baseGraph);
return new BulkUpdatingOntModel(unionOntModel, baseModel);
}
public static Model createModelForGraph(Graph g) {