NIHVIVO-3029 fixes deletion of class groups and property groups, and fixes excessive locking during VClassGroupCache rebuild

This commit is contained in:
brianjlowe 2011-07-22 18:05:43 +00:00
parent e4233c003b
commit 1713933e93
2 changed files with 38 additions and 37 deletions

View file

@ -19,6 +19,7 @@ import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Resource; 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.rdf.model.Statement;
import com.hp.hpl.jena.shared.Lock; import com.hp.hpl.jena.shared.Lock;
import com.hp.hpl.jena.util.iterator.ClosableIterator; import com.hp.hpl.jena.util.iterator.ClosableIterator;
@ -56,6 +57,15 @@ public class PropertyGroupDaoJena extends JenaBaseDao implements PropertyGroupDa
} finally { } finally {
getOntModel().leaveCriticalSection(); getOntModel().leaveCriticalSection();
} }
OntModel tboxModel = getOntModelSelector().getTBoxModel();
tboxModel.enterCriticalSection(Lock.WRITE);
try {
Resource groupRes = ResourceFactory.createResource(group.getURI());
tboxModel.removeAll(groupRes, null, null);
tboxModel.removeAll(null, null, groupRes);
} finally {
tboxModel.leaveCriticalSection();
}
} }
public PropertyGroup getGroupByURI(String uri) { public PropertyGroup getGroupByURI(String uri) {

View file

@ -20,6 +20,8 @@ import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntModelSpec; import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.ResourceFactory;
import com.hp.hpl.jena.shared.Lock; import com.hp.hpl.jena.shared.Lock;
import com.hp.hpl.jena.util.iterator.ClosableIterator; import com.hp.hpl.jena.util.iterator.ClosableIterator;
@ -61,6 +63,15 @@ public class VClassGroupDaoJena extends JenaBaseDao implements VClassGroupDao {
} finally { } finally {
ontModel.leaveCriticalSection(); ontModel.leaveCriticalSection();
} }
OntModel tboxModel = getOntModelSelector().getTBoxModel();
tboxModel.enterCriticalSection(Lock.WRITE);
try {
Resource groupRes = ResourceFactory.createResource(vcg.getURI());
tboxModel.removeAll(groupRes, null, null);
tboxModel.removeAll(null, null, groupRes);
} finally {
tboxModel.leaveCriticalSection();
}
} }
public LinkedHashMap<String, VClassGroup> getClassGroupMap() { public LinkedHashMap<String, VClassGroup> getClassGroupMap() {
@ -123,16 +134,15 @@ public class VClassGroupDaoJena extends JenaBaseDao implements VClassGroupDao {
public List<VClassGroup> getPublicGroupsWithVClasses(boolean displayOrder, boolean includeUninstantiatedClasses, public List<VClassGroup> getPublicGroupsWithVClasses(boolean displayOrder, boolean includeUninstantiatedClasses,
boolean getIndividualCount) { boolean getIndividualCount) {
VClassDao classDao = getWebappDaoFactory().getVClassDao(); VClassDao classDao = getWebappDaoFactory().getVClassDao();
List<VClassGroup> groups = new ArrayList<VClassGroup>();
getOntModel().enterCriticalSection(Lock.READ); getOntModel().enterCriticalSection(Lock.READ);
try { try {
List<VClassGroup> groups = new ArrayList<VClassGroup>();
ClosableIterator<Individual> groupIt = getOntModel().listIndividuals(CLASSGROUP); ClosableIterator<Individual> groupIt = getOntModel().listIndividuals(CLASSGROUP);
try { try {
while (groupIt.hasNext()) { while (groupIt.hasNext()) {
Individual grp = (Individual) groupIt.next(); Individual grp = (Individual) groupIt.next();
VClassGroup vgrp = groupFromGroupIndividual(grp); VClassGroup vgrp = groupFromGroupIndividual(grp);
if (vgrp != null) { if (vgrp != null) {
classDao.addVClassesToGroup(vgrp, includeUninstantiatedClasses, getIndividualCount);
groups.add(vgrp); groups.add(vgrp);
} }
} }
@ -140,27 +150,12 @@ public class VClassGroupDaoJena extends JenaBaseDao implements VClassGroupDao {
} finally { } finally {
groupIt.close(); groupIt.close();
} }
// BJL23 2008-12-18 } finally {
// It's often problematic that classes don't show up in editing picklists until they're in a classgroup. getOntModel().leaveCriticalSection();
// I'm going to try adding all other classes to a classgroup called "ungrouped"
// We really need to rework these methods and move the filtering behavior into the nice filtering framework
/* commenting this out until I rework the filtering DAO to use this method */
/*
List<VClass> ungroupedClasses = new ArrayList<VClass>();
List<VClass> allClassList = getWebappDaoFactory().getVClassDao().getAllVclasses();
Iterator<VClass> allClassIt = allClassList.iterator();
while (allClassIt.hasNext()) {
VClass cls = allClassIt.next();
if (cls.getGroupURI()==null) {
ungroupedClasses.add(cls);
} }
for (VClassGroup vgrp : groups) {
classDao.addVClassesToGroup(vgrp, includeUninstantiatedClasses, getIndividualCount);
} }
if (ungroupedClasses.size()>0) {
VClassGroup ungrouped = new VClassGroup();
ungrouped.setPublicName("ungrouped");
groups.add(ungrouped);
}
*/
if (groups.size()>0) { if (groups.size()>0) {
return groups; return groups;
} else { } else {
@ -173,10 +168,6 @@ public class VClassGroupDaoJena extends JenaBaseDao implements VClassGroupDao {
classDao.addVClassesToGroups(groups); classDao.addVClassesToGroups(groups);
return groups; return groups;
} }
} finally {
getOntModel().leaveCriticalSection();
}
} }