[VIVO-1403] Improve update performance by ensuring the bulk updater can be exposed correctly
This commit is contained in:
parent
4da85f0d82
commit
0ef3018ae3
4 changed files with 71 additions and 26 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Reference in a new issue