resolves NIHVIVO-171 re: syntactically invalid restrictions

This commit is contained in:
bjl23 2010-04-05 15:59:31 +00:00
parent 9af96fd76d
commit 35452e8b36
3 changed files with 62 additions and 0 deletions

View file

@ -116,6 +116,7 @@ public class OperationController extends BaseEditController {
boolean status = performEdit(epo, newObj, action);
if (status == FAILURE) {
retry(request,response);
return;
}
/* put request parameters and attributes into epo where the listeners can see */
@ -165,6 +166,7 @@ public class OperationController extends BaseEditController {
try {
retry(request, response);
return;
} catch (IOException ioe) {
log.error(this.getClass().getName() + " IOError on redirect: ", ioe);
}

View file

@ -189,6 +189,23 @@ public class VClassDaoJena extends JenaBaseDao implements VClassDao {
try {
OntClass cls = getOntClass(ontModel,URI);
if (cls != null) {
//Remove restriction class.
Iterator<Resource> restIt = ontModel.listSubjectsWithProperty(OWL.allValuesFrom, cls);
while(restIt.hasNext()) {
Resource restRes = restIt.next();
if (restRes.canAs(OntResource.class)) {
OntResource restOntRes = (OntResource) restRes.as(OntResource.class);
smartRemove(restOntRes, ontModel);
}
}
restIt = ontModel.listSubjectsWithProperty(OWL.someValuesFrom, cls);
while(restIt.hasNext()) {
Resource restRes = restIt.next();
if (restRes.canAs(OntResource.class)) {
OntResource restOntRes = (OntResource) restRes.as(OntResource.class);
smartRemove(restOntRes, ontModel);
}
}
removeRulesMentioningResource(cls, ontModel);
smartRemove(cls, ontModel);
}

View file

@ -8,8 +8,11 @@ import junit.framework.Assert;
import org.junit.Test;
import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.ontology.OntProperty;
import com.hp.hpl.jena.ontology.Restriction;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.StmtIterator;
@ -436,4 +439,44 @@ public class JenaBaseDaoTest {
Assert.assertTrue(preModel.size() == postModel.size());
}
@Test
/**
* Test that removing classes or properties used in restrictions
* does not leave behind broken, syntactically-invalid restrictions.
* The restrictions should be deleted.
*/
public void testPreventInvalidRestrictionsOnDeletion() {
OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
WebappDaoFactoryJena wadf = new WebappDaoFactoryJena(m);
String ns = "http://example.org/ontology/";
String class1URI = ns + "Class1";
String class2URI = ns + "Class2";
String propURI = ns + "property";
OntClass class1 = m.createClass(class1URI);
OntClass class2 = m.createClass(class2URI);
OntProperty prop = m.createObjectProperty(propURI);
Restriction rest = m.createAllValuesFromRestriction(null, prop, class2);
class1.addSuperClass(rest);
ObjectProperty op = wadf.getObjectPropertyDao().getObjectPropertyByURI(propURI);
wadf.getObjectPropertyDao().deleteObjectProperty(op);
Assert.assertEquals(class1.listSuperClasses().toSet().size(), 0);
Assert.assertEquals(m.size(), 2); // just rdf:type owl:Class for Class1 and Class2
prop = m.createObjectProperty(propURI);
rest = m.createAllValuesFromRestriction(null, prop, class2);
class1.addSuperClass(rest);
VClass vclass = wadf.getVClassDao().getVClassByURI(class2URI);
wadf.getVClassDao().deleteVClass(vclass);
Assert.assertEquals(class1.listSuperClasses().toSet().size(), 0);
Assert.assertEquals(m.size(), 2); // just rdf:type for Class1 and Prop
}
}