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:
Brian Lowe 2021-04-06 17:15:50 +03:00
parent 193b38159a
commit 93bd5183e2
2 changed files with 76 additions and 18 deletions

View file

@ -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++;
}
}
}