[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) {
|
protected BulkUpdatingModel(Model m) {
|
||||||
super(m);
|
super(m);
|
||||||
Graph graph = m.getGraph();
|
if (m instanceof BulkUpdatingModel) {
|
||||||
if (graph instanceof RDFServiceGraph) {
|
this.updater = ((BulkUpdatingModel) m).updater;
|
||||||
updater = new RDFServiceBulkUpdater((RDFServiceGraph)graph);
|
|
||||||
} else if (graph instanceof SparqlGraph) {
|
|
||||||
updater = new SparqlBulkUpdater((SparqlGraph)graph);
|
|
||||||
} else {
|
} 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);
|
super(m);
|
||||||
if (graph instanceof RDFServiceGraph) {
|
if (baseModel instanceof BulkUpdatingModel) {
|
||||||
updater = new RDFServiceBulkUpdater((RDFServiceGraph)graph);
|
this.updater = ((BulkUpdatingModel) baseModel).updater;
|
||||||
} else if (graph instanceof SparqlGraph) {
|
|
||||||
updater = new SparqlBulkUpdater((SparqlGraph)graph);
|
|
||||||
} else {
|
} 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) {
|
protected BulkUpdatingOntModel(OntModel m) {
|
||||||
super(m);
|
super(m);
|
||||||
Graph graph = m.getGraph();
|
if (m instanceof BulkUpdatingOntModel) {
|
||||||
if (graph instanceof RDFServiceGraph) {
|
this.updater = ((BulkUpdatingOntModel) m).updater;
|
||||||
updater = new RDFServiceBulkUpdater((RDFServiceGraph)graph);
|
|
||||||
} else if (graph instanceof SparqlGraph) {
|
|
||||||
updater = new SparqlBulkUpdater((SparqlGraph)graph);
|
|
||||||
} else {
|
} 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);
|
super(m);
|
||||||
if (graph instanceof RDFServiceGraph) {
|
if (baseModel instanceof BulkUpdatingOntModel) {
|
||||||
updater = new RDFServiceBulkUpdater((RDFServiceGraph)graph);
|
this.updater = ((BulkUpdatingOntModel) baseModel).updater;
|
||||||
} else if (graph instanceof SparqlGraph) {
|
|
||||||
updater = new SparqlBulkUpdater((SparqlGraph)graph);
|
|
||||||
} else {
|
} 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 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.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import org.apache.jena.graph.Graph;
|
import org.apache.jena.graph.Graph;
|
||||||
|
import org.apache.jena.graph.compose.MultiUnion;
|
||||||
import org.apache.jena.graph.compose.Union;
|
import org.apache.jena.graph.compose.Union;
|
||||||
import org.apache.jena.ontology.OntModel;
|
import org.apache.jena.ontology.OntModel;
|
||||||
import org.apache.jena.ontology.impl.OntModelImpl;
|
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 edu.cornell.mannlib.vitro.webapp.utils.logging.ToString;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make models that will do proper bulk updates.
|
* Make models that will do proper bulk updates.
|
||||||
*/
|
*/
|
||||||
|
@ -46,7 +51,7 @@ public class VitroModelFactory {
|
||||||
|
|
||||||
Model unionModel = ModelFactory.createModelForGraph(unionGraph);
|
Model unionModel = ModelFactory.createModelForGraph(unionGraph);
|
||||||
|
|
||||||
return new BulkUpdatingModel(unionModel, baseGraph);
|
return new BulkUpdatingModel(unionModel, baseModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static OntModel createUnion(OntModel baseModel, OntModel plusModel) {
|
public static OntModel createUnion(OntModel baseModel, OntModel plusModel) {
|
||||||
|
@ -58,7 +63,8 @@ public class VitroModelFactory {
|
||||||
Model unionModel = ModelFactory.createModelForGraph(unionGraph);
|
Model unionModel = ModelFactory.createModelForGraph(unionGraph);
|
||||||
OntModel unionOntModel = ModelFactory.createOntologyModel(OWL_MEM, unionModel);
|
OntModel unionOntModel = ModelFactory.createOntologyModel(OWL_MEM, unionModel);
|
||||||
|
|
||||||
return new BulkUpdatingOntModel(unionOntModel, baseGraph);
|
|
||||||
|
return new BulkUpdatingOntModel(unionOntModel, baseModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Model createModelForGraph(Graph g) {
|
public static Model createModelForGraph(Graph g) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue