Fixing bug with dependent resource delete. NIHVIVO-304

This commit is contained in:
bdc34 2010-04-06 22:04:49 +00:00
parent e709dc4cb3
commit 96d902219d
2 changed files with 142 additions and 2 deletions

View file

@ -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);
getOntModel().getBaseModel().notifyEvent(new IndividualDeletionEvent(getWebappDaoFactory().getUserURI(),true,objectURI));
List<Statement> depResStmts = DependentResourceDeleteJena.getDependentResourceDeleteList(ResourceFactory.createStatement(subjRes, pred, objRes),ontModel);
getOntModel().remove(depResStmts);
} finally {
getOntModel().getBaseModel().notifyEvent(new IndividualDeletionEvent(getWebappDaoFactory().getUserURI(),false,objectURI));

View file

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