diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/JsonServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/JsonServlet.java index e96a779f8..daf601d51 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/JsonServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/JsonServlet.java @@ -201,11 +201,12 @@ public class JsonServlet extends VitroHttpServlet { try{ VitroRequest vreq = new VitroRequest(req); VClass vclass=null; - + log.info("Retrieving solr individuals by vclasses"); // Could have multiple vclass ids sent in String[] vitroClassIdStr = vreq.getParameterValues("vclassId"); if ( vitroClassIdStr != null && vitroClassIdStr.length > 0){ for(String vclassId: vitroClassIdStr) { + log.info("Using VClass " + vclassId); vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(vclassId); if (vclass == null) { log.debug("Couldn't retrieve vclass "); @@ -254,7 +255,8 @@ public class JsonServlet extends VitroHttpServlet { //Including version for Solr query for Vclass Intersections private static Map getSolrVClassIntersectionResults(List vclassURIs, VitroRequest vreq, ServletContext context){ - String alpha = IndividualListController.getAlphaParameter(vreq); + log.info("Retrieving Solr intersection results for " + vclassURIs.toString()); + String alpha = IndividualListController.getAlphaParameter(vreq); int page = IndividualListController.getPageParameter(vreq); Map map = null; try { diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/IndividualsForClassesDataGetter.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/IndividualsForClassesDataGetter.java index 8fe34bce4..7ce0ca4f3 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/IndividualsForClassesDataGetter.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/pageDataGetter/IndividualsForClassesDataGetter.java @@ -37,66 +37,11 @@ public class IndividualsForClassesDataGetter implements PageDataGetter{ //This is the old technique of getting class intersections Map> classIntersectionsMap = vreq.getWebappDaoFactory().getPageDao().getClassesAndRestrictionsForPage(pageUri); - - //Use Individual List Controller to get all the individuals and related data - List inds = new ArrayList(); try{ List classes = classIntersectionsMap.get("classes"); List restrictClasses = classIntersectionsMap.get("restrictClasses"); - //Get vclass group - //Anonymous vclass group - VClassGroup classesGroup = new VClassGroup(); - classesGroup.setURI("displayClasses"); - VClassGroup restrictClassesGroup = new VClassGroup(); - restrictClassesGroup.setURI("restrictClasses"); - List vClasses = new ArrayList(); - List restrictVClasses = new ArrayList(); - VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); - for(String classUri: classes) { - //VClass vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(classUri); - //Retrieve vclass from cache to get the count - VClass vclass = vcgc.getCachedVClass(classUri); - if(vclass != null) { - - log.debug("VClass does exist for " + classUri + " and entity count is " + vclass.getEntityCount()); - vClasses.add(vclass); - } else { - log.debug("Vclass " + classUri + " does not exist in the cache"); - log.error("Error occurred, vclass does not exist for this uri " + classUri); - //Throw exception here - } - } - classesGroup.setVitroClassList(vClasses); - //What is individual count? Total? - //classesGroup.setIndividualCount(vClasses.size()); - data.put("vClassGroup", classesGroup); - List urlEncodedRestrictClasses = new ArrayList(); - if(restrictClasses.size() > 0) { - //classes for restriction are not displayed so don't need to include their class individual counts - for(String restrictClassUri: restrictClasses) { - VClass vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(restrictClassUri); - if(vclass != null) { - restrictVClasses.add(vclass); - } else { - log.error("Error occurred, vclass does not exist for this uri " + restrictClassUri); - } - //Assuming utf-8? - urlEncodedRestrictClasses.add(URLEncoder.encode(restrictClassUri, "UTF-8")); - } - - restrictClassesGroup.setVitroClassList(restrictVClasses); - restrictClassesGroup.setIndividualCount(restrictVClasses.size()); - } else { - - } - String[] restrictClassesArray = new String[urlEncodedRestrictClasses.size()]; - restrictClassesArray = urlEncodedRestrictClasses.toArray(restrictClassesArray); - - //In case just want uris - data.put("restrictClasses", StringUtils.join(restrictClassesArray, ",")); - data.put("restrictVClasses", restrictVClasses); - //not sure if this is useful - data.put("restrictVClassGroup", restrictClassesGroup); + log.debug("Retrieving classes for " + classes.toString() + " and restricting by " + restrictClasses.toString()); + processClassesAndRestrictions(vreq, context, data, classes, restrictClasses); //Also add data service url //Hardcoding for now, need a more dynamic way of doing this data.put("dataServiceUrlIndividualsByVClass", this.getDataServiceUrl()); @@ -107,6 +52,79 @@ public class IndividualsForClassesDataGetter implements PageDataGetter{ return data; } + protected void processClassesAndRestrictions(VitroRequest vreq, ServletContext context, + HashMap data, List classes, List restrictClasses ) { + processClassesForDisplay(context, data, classes); + processRestrictionClasses(vreq, context, data, restrictClasses); + } + + private void processClassesForDisplay(ServletContext context, HashMap data, List classes) { + VClassGroup classesGroup = new VClassGroup(); + classesGroup.setURI("displayClasses"); + + List vClasses = new ArrayList(); + + VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); + for(String classUri: classes) { + //VClass vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(classUri); + //Retrieve vclass from cache to get the count + VClass vclass = vcgc.getCachedVClass(classUri); + if(vclass != null) { + + log.debug("VClass does exist for " + classUri + " and entity count is " + vclass.getEntityCount()); + vClasses.add(vclass); + } else { + log.debug("Vclass " + classUri + " does not exist in the cache"); + log.error("Error occurred, vclass does not exist for this uri " + classUri); + //Throw exception here + } + } + classesGroup.setVitroClassList(vClasses); + //Set vclass group + data.put("vClassGroup", classesGroup); + } + + private void processRestrictionClasses(VitroRequest vreq, ServletContext context, + HashMap data, List restrictClasses) { + try { + VClassGroup restrictClassesGroup = new VClassGroup(); + restrictClassesGroup.setURI("restrictClasses"); + + List restrictVClasses = new ArrayList(); + + List urlEncodedRestrictClasses = new ArrayList(); + if(restrictClasses.size() > 0) { + //classes for restriction are not displayed so don't need to include their class individual counts + for(String restrictClassUri: restrictClasses) { + VClass vclass = vreq.getWebappDaoFactory().getVClassDao().getVClassByURI(restrictClassUri); + if(vclass != null) { + log.debug("Found restrict class and adding to list " + restrictClassUri); + restrictVClasses.add(vclass); + } else { + log.error("Error occurred, vclass does not exist for this uri " + restrictClassUri); + } + //Assuming utf-8? + urlEncodedRestrictClasses.add(URLEncoder.encode(restrictClassUri, "UTF-8")); + } + + restrictClassesGroup.setVitroClassList(restrictVClasses); + restrictClassesGroup.setIndividualCount(restrictVClasses.size()); + } else { + + } + String[] restrictClassesArray = new String[urlEncodedRestrictClasses.size()]; + restrictClassesArray = urlEncodedRestrictClasses.toArray(restrictClassesArray); + + //In case just want uris + data.put("restrictClasses", StringUtils.join(restrictClassesArray, ",")); + data.put("restrictVClasses", restrictVClasses); + //not sure if this is useful + data.put("restrictVClassGroup", restrictClassesGroup); + } catch(Exception ex) { + log.error("An error occurred in processing restriction classes ", ex); + } + } + public static VClassGroupTemplateModel getClassGroup(String classGroupUri, ServletContext context, VitroRequest vreq){ VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context);