From 34258ae94bfc4aacf0365736ed0f4fc2f0e957a2 Mon Sep 17 00:00:00 2001 From: bdc34 Date: Tue, 25 Jan 2011 21:20:27 +0000 Subject: [PATCH] Fixing bug with zero individual counts for class groups. NIHVIVO-1893 --- .../vitro/webapp/dao/jena/VClassDaoJena.java | 28 +++++++++ .../vitro/webapp/dao/jena/VClassDaoSDB.java | 45 +++++++------- .../webapp/dao/jena/VClassGroupDaoJena.java | 58 +------------------ 3 files changed, 50 insertions(+), 81 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoJena.java index a27b107c0..c6a7e6e6c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoJena.java @@ -780,6 +780,11 @@ public class VClassDaoJena extends JenaBaseDao implements VClassDao { @Deprecated public void addVClassesToGroup(VClassGroup group, boolean includeUninstantiatedClasses, boolean getIndividualCount) { getOntModel().enterCriticalSection(Lock.READ); + + if (getIndividualCount) { + group.setIndividualCount( getClassGroupInstanceCount(group)); + } + try { if ((group != null) && (group.getURI() != null)) { Resource groupRes = ResourceFactory.createResource(group.getURI()); @@ -847,6 +852,29 @@ public class VClassDaoJena extends JenaBaseDao implements VClassDao { } } + int getClassGroupInstanceCount(VClassGroup vcg){ + Model ontModel = getOntModel(); + ontModel.enterCriticalSection(Lock.READ); + int count = 0; + try { + String queryText = + "SELECT COUNT( DISTINCT ?instance ) WHERE { \n" + + " ?class <"+VitroVocabulary.IN_CLASSGROUP+"> <"+vcg.getURI() +"> .\n" + + " ?instance a ?class . \n" + + "}" ; + Query countQuery = QueryFactory.create(queryText, Syntax.syntaxARQ); + QueryExecution qe = QueryExecutionFactory.create(countQuery, ontModel); + ResultSet rs =qe.execSelect(); + count = Integer.parseInt(((Literal) rs.nextSolution().get(".1")).getLexicalForm()); + }catch(Exception ex){ + log.error(ex,ex); + } finally { + ontModel.leaveCriticalSection(); + } + return count; + } + + public void addVClassesToGroups(List groups) { getOntModel().enterCriticalSection(Lock.READ); try { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoSDB.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoSDB.java index 781a9d101..d945e32a6 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoSDB.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassDaoSDB.java @@ -68,31 +68,25 @@ public class VClassDaoSDB extends VClassDaoJena { VClass vcw = (VClass) getVClassByURI(cls.getURI()); if (vcw != null) { boolean classIsInstantiated = false; - if (getIndividualCount) { - Model aboxModel = getOntModelSelector().getABoxModel(); - aboxModel.enterCriticalSection(Lock.READ); - int count = 0; - try { - String[] graphVars = { "?g" }; - String countQueryStr = "SELECT COUNT(DISTINCT ?s) WHERE \n" + - "{ GRAPH ?g { ?s a <" + cls.getURI() + "> } \n" + - WebappDaoFactorySDB.getFilterBlock(graphVars, datasetMode) + - "} \n"; - Query countQuery = QueryFactory.create(countQueryStr, Syntax.syntaxARQ); - DatasetWrapper w = getDatasetWrapper(); - Dataset dataset = w.getDataset(); - dataset.getLock().enterCriticalSection(Lock.READ); - try { - QueryExecution qe = QueryExecutionFactory.create(countQuery, dataset); - ResultSet rs = qe.execSelect(); - count = Integer.parseInt(((Literal) rs.nextSolution().get(".1")).getLexicalForm()); - } finally { - dataset.getLock().leaveCriticalSection(); - w.close(); - } - } finally { - aboxModel.leaveCriticalSection(); - } + if (getIndividualCount) { + int count = 0; + String[] graphVars = { "?g" }; + String countQueryStr = "SELECT COUNT(DISTINCT ?s) WHERE \n" + + "{ GRAPH ?g { ?s a <" + cls.getURI() + "> } \n" + + WebappDaoFactorySDB.getFilterBlock(graphVars, datasetMode) + + "} \n"; + Query countQuery = QueryFactory.create(countQueryStr, Syntax.syntaxARQ); + DatasetWrapper w = getDatasetWrapper(); + Dataset dataset = w.getDataset(); + dataset.getLock().enterCriticalSection(Lock.READ); + try { + QueryExecution qe = QueryExecutionFactory.create(countQuery, dataset); + ResultSet rs = qe.execSelect(); + count = Integer.parseInt(((Literal) rs.nextSolution().get(".1")).getLexicalForm()); + } finally { + dataset.getLock().leaveCriticalSection(); + w.close(); + } vcw.setEntityCount(count); classIsInstantiated = (count > 0); } else if (includeUninstantiatedClasses == false) { @@ -137,6 +131,7 @@ public class VClassDaoSDB extends VClassDaoJena { // } // } + @Override int getClassGroupInstanceCount(VClassGroup vcg){ int count = 0; try { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassGroupDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassGroupDaoJena.java index 26a1b8be1..f58fa9362 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassGroupDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassGroupDaoJena.java @@ -157,9 +157,7 @@ public class VClassGroupDaoJena extends JenaBaseDao implements VClassGroupDao { groups.add(ungrouped); } */ - if (groups.size()>0) { -// if( getIndividualCount ) -// addIndividualCountToGroups(groups); + if (groups.size()>0) { return groups; } else { /* bdc34: the effect of the following code is that @@ -168,9 +166,7 @@ public class VClassGroupDaoJena extends JenaBaseDao implements VClassGroupDao { * the vclasses are empty. * This may not be the desired behavior. */ - classDao.addVClassesToGroups(groups); - if( getIndividualCount ) - addIndividualCountToGroups(groups); + classDao.addVClassesToGroups(groups); return groups; } } finally { @@ -179,56 +175,6 @@ public class VClassGroupDaoJena extends JenaBaseDao implements VClassGroupDao { } - protected void addIndividualCountToGroups( List cgList ){ - for( VClassGroup cg : cgList){ - int count = 0; - for( VClass vc : cg){ - count = count + vc.getEntityCount(); - } - cg.setIndividualCount(count); - } - } - -// private int individuialCountForGroup( VClassGroup vcg){ -// int count = 0; -// try{ -// Model aboxModel = getOntModelSelector().getABoxModel(); -// aboxModel.enterCriticalSection(Lock.READ); -// try { -// -// String[] graphVars = { "?g" }; -// String countQueryStr = "SELECT COUNT(DISTINCT ?s) WHERE \n" + -// "{ GRAPH ?g { ?s a <" + cls.getURI() + "> } \n" + -// WebappDaoFactorySDB.getFilterBlock(graphVars, datasetMode) + -// "} \n"; -// Query countQuery = QueryFactory.create(countQueryStr, Syntax.syntaxARQ); -// DatasetWrapper w = getDatasetWrapper(); -// Dataset dataset = w.getDataset(); -// dataset.getLock().enterCriticalSection(Lock.READ); -// try { -// QueryExecution qe = QueryExecutionFactory.create(countQuery, dataset); -// ResultSet rs = qe.execSelect(); -// count = Integer.parseInt(((Literal) rs.nextSolution().get(".1")).getLexicalForm()); -// } finally { -// dataset.getLock().leaveCriticalSection(); -// w.close(); -// } -// -// -//// String countQueryStr = "SELECT COUNT(*) WHERE \n" + -//// "{ ?s a <" + cls.getURI() + "> } "; -//// Query countQuery = QueryFactory.create(countQueryStr, Syntax.syntaxARQ); -//// QueryExecution qe = QueryExecutionFactory.create(countQuery, aboxModel); -//// ResultSet rs =qe.execSelect(); -//// count = Integer.parseInt(((Literal) rs.nextSolution().get(".1")).getLexicalForm()); -// } finally { -// aboxModel.leaveCriticalSection(); -// } -// }catch(Exception ex){ -// log.debug("error during individuialCountForGroup()", ex); -// } -// return count; -// } public VClassGroup groupFromGroupIndividual(Individual groupInd) { if (groupInd==null) {