Fixing bug with dependent resource delete. NIHVIVO-304
This commit is contained in:
parent
e709dc4cb3
commit
96d902219d
2 changed files with 142 additions and 2 deletions
|
@ -21,6 +21,7 @@ import com.hp.hpl.jena.ontology.OntProperty;
|
|||
import com.hp.hpl.jena.ontology.Restriction;
|
||||
import com.hp.hpl.jena.rdf.model.Property;
|
||||
import com.hp.hpl.jena.rdf.model.Resource;
|
||||
import com.hp.hpl.jena.rdf.model.ResourceFactory;
|
||||
import com.hp.hpl.jena.rdf.model.Statement;
|
||||
import com.hp.hpl.jena.shared.Lock;
|
||||
import com.hp.hpl.jena.vocabulary.OWL;
|
||||
|
@ -60,13 +61,14 @@ public class PropertyInstanceDaoJena extends JenaBaseDao implements
|
|||
getOntModel().getBaseModel().notifyEvent(new IndividualUpdateEvent(getWebappDaoFactory().getUserURI(),true,subjectURI));
|
||||
try {
|
||||
ontModel.remove(subjRes,pred,objRes);
|
||||
|
||||
updatePropertyDateTimeValue(subjRes,MODTIME,Calendar.getInstance().getTime(),getOntModel());
|
||||
} finally {
|
||||
getOntModel().getBaseModel().notifyEvent(new IndividualUpdateEvent(getWebappDaoFactory().getUserURI(),false,subjectURI));
|
||||
}
|
||||
try{
|
||||
getOntModel().getBaseModel().notifyEvent(new IndividualDeletionEvent(getWebappDaoFactory().getUserURI(),true,objectURI));
|
||||
List<Statement> depResStmts = DependentResourceDeleteJena.getDependentResourceDeleteList(objRes,ontModel);
|
||||
List<Statement> depResStmts = DependentResourceDeleteJena.getDependentResourceDeleteList(ResourceFactory.createStatement(subjRes, pred, objRes),ontModel);
|
||||
getOntModel().remove(depResStmts);
|
||||
} finally {
|
||||
getOntModel().getBaseModel().notifyEvent(new IndividualDeletionEvent(getWebappDaoFactory().getUserURI(),false,objectURI));
|
||||
|
|
|
@ -0,0 +1,138 @@
|
|||
package edu.cornell.mannlib.vitro.webapp.dao.jena;
|
||||
|
||||
import java.io.StringReader;
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import com.hp.hpl.jena.ontology.OntModel;
|
||||
import com.hp.hpl.jena.rdf.model.Model;
|
||||
import com.hp.hpl.jena.rdf.model.ModelFactory;
|
||||
import com.hp.hpl.jena.rdf.model.Statement;
|
||||
import com.hp.hpl.jena.vocabulary.XSD;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||
|
||||
|
||||
public class PropertyInstanceDaoJenaTest {
|
||||
String isDependentRelation =
|
||||
" <"+VitroVocabulary.PROPERTY_STUBOBJECTPROPERTYANNOT+"> \"true\"^^xsd:boolean .\n" ;
|
||||
|
||||
String nosePropIsDependentRel =
|
||||
"<"+VitroVocabulary.PROPERTY_STUBOBJECTPROPERTYANNOT+"> rdf:type owl:AnnotationProperty .\n" +
|
||||
" ex:hasNose " + isDependentRelation;
|
||||
|
||||
String prefixesN3 =
|
||||
"@prefix vitro: <" + VitroVocabulary.vitroURI + "> . \n" +
|
||||
"@prefix xsd: <" + XSD.getURI() + "> . \n " +
|
||||
"@prefix ex: <http://example.com/> . \n" +
|
||||
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . \n"+
|
||||
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . \n"+
|
||||
"@prefix owl: <http://www.w3.org/2002/07/owl#> . \n";
|
||||
|
||||
|
||||
void printModels(Model expected, Model result){
|
||||
System.out.println("Expected:");
|
||||
expected.write(System.out);
|
||||
System.out.println("Result:");
|
||||
result.write(System.out);
|
||||
}
|
||||
|
||||
|
||||
@org.junit.Test
|
||||
public void testStmtNonForceDelete() {
|
||||
String n3 =
|
||||
prefixesN3 +
|
||||
" ex:bob ex:hasNose ex:nose1 . \n" +
|
||||
" ex:nose1 ex:hasHair ex:hair23. \n" +
|
||||
" ex:hair23 ex:hasHairCount \"23\". " ;
|
||||
|
||||
String expected =
|
||||
prefixesN3 +
|
||||
" ex:nose1 ex:hasHair ex:hair23. \n" +
|
||||
" ex:hair23 ex:hasHairCount \"23\". " ;
|
||||
|
||||
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
|
||||
OntModel ontModel = ModelFactory.createOntologyModel();
|
||||
ontModel.add(model.listStatements());
|
||||
WebappDaoFactory wdf = new WebappDaoFactoryJena(ontModel);
|
||||
wdf.getPropertyInstanceDao().deleteObjectPropertyStatement("http://example.com/bob", "http://example.com/hasNose", "http://example.com/nose1");
|
||||
|
||||
Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
|
||||
wipeOutModTime(ontModel);
|
||||
//Model resultModel = ModelFactory.createDefaultModel().add(ontModel.listStatements());
|
||||
|
||||
boolean same = expectedModel.isIsomorphicWith( ontModel.getBaseModel() );
|
||||
if( ! same ) printModels( expectedModel, ontModel.getBaseModel());
|
||||
Assert.assertTrue( same );
|
||||
}
|
||||
|
||||
|
||||
@org.junit.Test
|
||||
public void testStmtSimpleForceDelete() {
|
||||
String n3=
|
||||
prefixesN3 +
|
||||
nosePropIsDependentRel +
|
||||
"ex:hasHair " + isDependentRelation +
|
||||
" ex:bob ex:hasNose ex:nose1 . \n" +
|
||||
" ex:nose1 ex:hasHair ex:hair23. \n" +
|
||||
" ex:hair23 ex:hasHairCount \"23\". " ;
|
||||
String expected =
|
||||
prefixesN3 +
|
||||
nosePropIsDependentRel +
|
||||
"ex:hasHair " + isDependentRelation ;
|
||||
|
||||
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
|
||||
OntModel ontModel = ModelFactory.createOntologyModel();
|
||||
ontModel.add(model.listStatements());
|
||||
WebappDaoFactory wdf = new WebappDaoFactoryJena(ontModel);
|
||||
wdf.getPropertyInstanceDao().deleteObjectPropertyStatement("http://example.com/bob", "http://example.com/hasNose", "http://example.com/nose1");
|
||||
|
||||
Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
|
||||
wipeOutModTime(ontModel);
|
||||
//Model resultModel = ModelFactory.createDefaultModel().add(ontModel.listStatements());
|
||||
|
||||
boolean same = expectedModel.isIsomorphicWith( ontModel.getBaseModel() );
|
||||
if( ! same ) printModels( expectedModel, ontModel.getBaseModel());
|
||||
Assert.assertTrue( same );
|
||||
}
|
||||
|
||||
@org.junit.Test
|
||||
public void testStmtForceDeleteWithLiterals() {
|
||||
String n3 =
|
||||
prefixesN3 +
|
||||
nosePropIsDependentRel +
|
||||
"ex:hasHair " + isDependentRelation +
|
||||
" ex:bob ex:a \"Bob\". \n" +
|
||||
" ex:bob ex:hasNose ex:nose1 . \n" +
|
||||
" ex:nose1 ex:a \"this is a literal\". \n" +
|
||||
" ex:nose1 ex:b \"2343\" . \n" +
|
||||
" ex:nose1 ex:hasHair ex:hair23. \n" +
|
||||
" ex:hair23 ex:hasHairCount \"23\". " ;
|
||||
|
||||
String expected =
|
||||
prefixesN3 +
|
||||
nosePropIsDependentRel +
|
||||
"ex:hasHair " + isDependentRelation +
|
||||
" ex:bob ex:a \"Bob\". \n" ;
|
||||
|
||||
Model model = (ModelFactory.createDefaultModel()).read(new StringReader(n3), "", "N3");
|
||||
OntModel ontModel = ModelFactory.createOntologyModel();
|
||||
ontModel.add(model.listStatements());
|
||||
WebappDaoFactory wdf = new WebappDaoFactoryJena(ontModel);
|
||||
wdf.getPropertyInstanceDao().deleteObjectPropertyStatement("http://example.com/bob", "http://example.com/hasNose", "http://example.com/nose1");
|
||||
|
||||
Model expectedModel = (ModelFactory.createDefaultModel()).read(new StringReader(expected), "", "N3");
|
||||
wipeOutModTime(ontModel);
|
||||
//Model resultModel = ModelFactory.createDefaultModel().add(ontModel.listStatements());
|
||||
|
||||
boolean same = expectedModel.isIsomorphicWith( ontModel.getBaseModel() );
|
||||
if( ! same ) printModels( expectedModel, ontModel.getBaseModel());
|
||||
Assert.assertTrue( same );
|
||||
}
|
||||
|
||||
void wipeOutModTime(Model model){
|
||||
model.removeAll(null, model.createProperty(VitroVocabulary.MODTIME), null);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue