Move event listening to RDFServiceGraph level to avoid adding a new redundant listener each time a model is made for an existing RDFServiceGraph. Resolve https://jira.lyrasis.org/browse/VIVO-1976
This commit is contained in:
parent
48297bba56
commit
0df4231b41
2 changed files with 76 additions and 18 deletions
|
@ -12,10 +12,10 @@ import java.util.function.Supplier;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
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.Capabilities;
|
import org.apache.jena.graph.Capabilities;
|
||||||
import org.apache.jena.graph.Graph;
|
import org.apache.jena.graph.Graph;
|
||||||
import org.apache.jena.graph.GraphEventManager;
|
import org.apache.jena.graph.GraphEventManager;
|
||||||
|
import org.apache.jena.graph.GraphListener;
|
||||||
import org.apache.jena.graph.GraphStatisticsHandler;
|
import org.apache.jena.graph.GraphStatisticsHandler;
|
||||||
import org.apache.jena.graph.Node;
|
import org.apache.jena.graph.Node;
|
||||||
import org.apache.jena.graph.TransactionHandler;
|
import org.apache.jena.graph.TransactionHandler;
|
||||||
|
@ -23,7 +23,6 @@ import org.apache.jena.graph.Triple;
|
||||||
import org.apache.jena.graph.impl.GraphWithPerform;
|
import org.apache.jena.graph.impl.GraphWithPerform;
|
||||||
import org.apache.jena.graph.impl.SimpleEventManager;
|
import org.apache.jena.graph.impl.SimpleEventManager;
|
||||||
import org.apache.jena.query.QuerySolution;
|
import org.apache.jena.query.QuerySolution;
|
||||||
import org.apache.jena.rdf.listeners.StatementListener;
|
|
||||||
import org.apache.jena.rdf.model.Model;
|
import org.apache.jena.rdf.model.Model;
|
||||||
import org.apache.jena.rdf.model.ModelFactory;
|
import org.apache.jena.rdf.model.ModelFactory;
|
||||||
import org.apache.jena.rdf.model.StmtIterator;
|
import org.apache.jena.rdf.model.StmtIterator;
|
||||||
|
@ -404,7 +403,18 @@ public class RDFServiceGraph implements GraphWithPerform {
|
||||||
@Override
|
@Override
|
||||||
public GraphEventManager getEventManager() {
|
public GraphEventManager getEventManager() {
|
||||||
if (eventManager == null) {
|
if (eventManager == null) {
|
||||||
eventManager = new SimpleEventManager(this);
|
eventManager = new SimpleEventManager() {
|
||||||
|
@Override
|
||||||
|
public void notifyEvent(Graph g, Object event) {
|
||||||
|
ChangeSet changeSet = rdfService.manufactureChangeSet();
|
||||||
|
changeSet.addPreChangeEvent(event);
|
||||||
|
try {
|
||||||
|
rdfService.changeSetUpdate(changeSet);
|
||||||
|
} catch (RDFServiceException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
return eventManager;
|
return eventManager;
|
||||||
}
|
}
|
||||||
|
@ -590,21 +600,7 @@ public class RDFServiceGraph implements GraphWithPerform {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Model createRDFServiceModel(final RDFServiceGraph g) {
|
public static Model createRDFServiceModel(final RDFServiceGraph g) {
|
||||||
Model m = VitroModelFactory.createModelForGraph(g);
|
return VitroModelFactory.createModelForGraph(g);
|
||||||
m.register(new StatementListener() {
|
|
||||||
@Override
|
|
||||||
public void notifyEvent(Model m, Object event) {
|
|
||||||
ChangeSet changeSet = g.getRDFService().manufactureChangeSet();
|
|
||||||
changeSet.addPreChangeEvent(event);
|
|
||||||
try {
|
|
||||||
g.getRDFService().changeSetUpdate(changeSet);
|
|
||||||
} catch (RDFServiceException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
return m;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.dao.jena;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import org.apache.jena.rdf.model.Model;
|
||||||
|
import org.apache.jena.rdf.model.ModelFactory;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.rdfservice.ChangeListener;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.rdfservice.ModelChange;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.jena.model.RDFServiceModel;
|
||||||
|
|
||||||
|
|
||||||
|
public class RDFServiceGraphTest extends AbstractTestClass {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
/**
|
||||||
|
* Test that creating a new model with the same underlying RDFServiceGraph
|
||||||
|
* does not result in a new listener registered on that graph. No matter
|
||||||
|
* how many models have been created using a given RDFServiceGraph, an event
|
||||||
|
* sent to the last-created model should be heard only once by the
|
||||||
|
* RDFService.
|
||||||
|
* @throws RDFServiceException
|
||||||
|
*/
|
||||||
|
public void testEventListening() throws RDFServiceException {
|
||||||
|
Model m = ModelFactory.createDefaultModel();
|
||||||
|
RDFService rdfService = new RDFServiceModel(m);
|
||||||
|
EventsCounter counter = new EventsCounter();
|
||||||
|
rdfService.registerListener(counter);
|
||||||
|
RDFServiceGraph g = new RDFServiceGraph(rdfService);
|
||||||
|
Model model = null;
|
||||||
|
for (int i = 0; i < 100; i++) {
|
||||||
|
model = RDFServiceGraph.createRDFServiceModel(g);
|
||||||
|
}
|
||||||
|
model.notifyEvent("event");
|
||||||
|
assertEquals(1, counter.getCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
private class EventsCounter implements ChangeListener {
|
||||||
|
|
||||||
|
private int count = 0;
|
||||||
|
|
||||||
|
public int getCount() {
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void notifyModelChange(ModelChange modelChange) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void notifyEvent(String graphURI, Object event) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue