VIVO-140 Modify client code to get language-aware extract from VClassGroupCache

This commit is contained in:
j2blake 2013-06-21 14:51:33 -04:00
parent 24562b6746
commit ebcf6079a5
16 changed files with 85 additions and 77 deletions

View file

@ -17,6 +17,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues;
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache; import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel;
@ -46,7 +47,6 @@ public class BrowseController extends FreemarkerHttpServlet {
protected ResponseValues processRequest(VitroRequest vreq) { protected ResponseValues processRequest(VitroRequest vreq) {
Map<String, Object> body = new HashMap<String, Object>(); Map<String, Object> body = new HashMap<String, Object>();
String message = null;
String templateName = TEMPLATE_DEFAULT; String templateName = TEMPLATE_DEFAULT;
if ( vreq.getParameter("clearcache") != null ) { if ( vreq.getParameter("clearcache") != null ) {
@ -57,25 +57,13 @@ public class BrowseController extends FreemarkerHttpServlet {
} }
List<VClassGroup> groups = null; List<VClassGroup> groups = null;
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(getServletContext()); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
if ( vcgc == null ) {
log.error("Could not get VClassGroupCache");
message = "The system is not configured correctly. Please check your logs for error messages.";
} else {
groups =vcgc.getGroups(); groups =vcgc.getGroups();
List<VClassGroupTemplateModel> vcgroups = new ArrayList<VClassGroupTemplateModel>(groups.size()); List<VClassGroupTemplateModel> vcgroups = new ArrayList<VClassGroupTemplateModel>(groups.size());
for (VClassGroup group : groups) { for (VClassGroup group : groups) {
vcgroups.add(new VClassGroupTemplateModel(group)); vcgroups.add(new VClassGroupTemplateModel(group));
} }
body.put("classGroups", vcgroups); body.put("classGroups", vcgroups);
}
if (message != null) {
body.put("message", message);
templateName = Template.TITLED_MESSAGE.toString();
}
return new TemplateResponseValues(templateName, body); return new TemplateResponseValues(templateName, body);
} }

View file

@ -11,6 +11,7 @@ import org.json.JSONObject;
import edu.cornell.mannlib.vitro.webapp.beans.VClass; import edu.cornell.mannlib.vitro.webapp.beans.VClass;
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup; import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache; import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
/** /**
@ -32,7 +33,7 @@ public class GetVClassesForVClassGroup extends JsonObjectProducer {
throw new Exception("no URI passed for classgroupUri"); throw new Exception("no URI passed for classgroupUri");
} }
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(ctx); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
VClassGroup vcg = vcgc.getGroup(vcgUri); VClassGroup vcg = vcgc.getGroup(vcgUri);
if( vcg == null ){ if( vcg == null ){
throw new Exception("Could not find vclassgroup: " + vcgUri); throw new Exception("Could not find vclassgroup: " + vcgUri);

View file

@ -18,8 +18,6 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution; import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory; import com.hp.hpl.jena.query.QueryExecutionFactory;
@ -27,6 +25,8 @@ import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.QuerySolutionMap; import com.hp.hpl.jena.query.QuerySolutionMap;
import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.ResourceFactory; import com.hp.hpl.jena.rdf.model.ResourceFactory;
import com.hp.hpl.jena.vocabulary.XSD; import com.hp.hpl.jena.vocabulary.XSD;
@ -508,7 +508,7 @@ private String getExistingIsSelfContainedTemplateQuery() {
private void addRequiredPageData(VitroRequest vreq, Map<String, Object> data) { private void addRequiredPageData(VitroRequest vreq, Map<String, Object> data) {
MenuManagementDataUtils.includeRequiredSystemData(vreq.getSession().getServletContext(), data); MenuManagementDataUtils.includeRequiredSystemData(vreq.getSession().getServletContext(), data);
data.put("classGroup", new ArrayList<String>()); data.put("classGroup", new ArrayList<String>());
data.put("classGroups", DataGetterUtils.getClassGroups(vreq.getSession().getServletContext())); data.put("classGroups", DataGetterUtils.getClassGroups(vreq));
} }
private void addExistingPageData(VitroRequest vreq, Map<String, Object> data) { private void addExistingPageData(VitroRequest vreq, Map<String, Object> data) {

View file

@ -25,6 +25,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.controller.json.JsonServlet; import edu.cornell.mannlib.vitro.webapp.controller.json.JsonServlet;
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache; import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
import edu.cornell.mannlib.vitro.webapp.utils.JsonToFmModel; import edu.cornell.mannlib.vitro.webapp.utils.JsonToFmModel;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel;
@ -120,7 +121,7 @@ public class BrowseDataGetter extends DataGetterBase implements DataGetter {
private Map<String,Object> getCommonValues( ServletContext context, VitroRequest vreq){ private Map<String,Object> getCommonValues( ServletContext context, VitroRequest vreq){
Map<String,Object> values = new HashMap<String,Object>(); Map<String,Object> values = new HashMap<String,Object>();
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
List<VClassGroup> cgList = vcgc.getGroups(); List<VClassGroup> cgList = vcgc.getGroups();
LinkedList<VClassGroupTemplateModel> cgtmList = new LinkedList<VClassGroupTemplateModel>(); LinkedList<VClassGroupTemplateModel> cgtmList = new LinkedList<VClassGroupTemplateModel>();
for( VClassGroup classGroup : cgList){ for( VClassGroup classGroup : cgList){
@ -194,7 +195,7 @@ public class BrowseDataGetter extends DataGetterBase implements DataGetter {
String vcgUri = getParam(Mode.CLASS_GROUP, request, params); String vcgUri = getParam(Mode.CLASS_GROUP, request, params);
VitroRequest vreq = new VitroRequest(request); VitroRequest vreq = new VitroRequest(request);
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(request);
VClassGroup vcg = vcgc.getGroup(vcgUri); VClassGroup vcg = vcgc.getGroup(vcgUri);
ArrayList<VClassTemplateModel> classes = new ArrayList<VClassTemplateModel>(vcg.size()); ArrayList<VClassTemplateModel> classes = new ArrayList<VClassTemplateModel>(vcg.size());

View file

@ -19,6 +19,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache; import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel;
@ -65,7 +66,7 @@ public class ClassGroupPageData extends DataGetterBase implements DataGetter{
HashMap<String, Object> data = new HashMap<String,Object>(); HashMap<String, Object> data = new HashMap<String,Object>();
data.put("classGroupUri", this.classGroupUri); data.put("classGroupUri", this.classGroupUri);
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
List<VClassGroup> vcgList = vcgc.getGroups(); List<VClassGroup> vcgList = vcgc.getGroups();
VClassGroup group = null; VClassGroup group = null;
for( VClassGroup vcg : vcgList){ for( VClassGroup vcg : vcgList){
@ -119,7 +120,7 @@ public class ClassGroupPageData extends DataGetterBase implements DataGetter{
public static VClassGroupTemplateModel getClassGroup(String classGroupUri, ServletContext context, VitroRequest vreq){ public static VClassGroupTemplateModel getClassGroup(String classGroupUri, ServletContext context, VitroRequest vreq){
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
List<VClassGroup> vcgList = vcgc.getGroups(); List<VClassGroup> vcgList = vcgc.getGroups();
VClassGroup group = null; VClassGroup group = null;
for( VClassGroup vcg : vcgList){ for( VClassGroup vcg : vcgList){

View file

@ -12,6 +12,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
@ -45,6 +46,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListCont
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.controller.json.JsonServlet; import edu.cornell.mannlib.vitro.webapp.controller.json.JsonServlet;
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache; import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
@ -102,7 +104,7 @@ public class DataGetterUtils {
* May return an empty list, but will not return null. * May return an empty list, but will not return null.
*/ */
private static List<DataGetter> dataGettersForURIs(VitroRequest vreq, Model displayModel, List<String> dgUris) private static List<DataGetter> dataGettersForURIs(VitroRequest vreq, Model displayModel, List<String> dgUris)
throws InstantiationException, IllegalAccessException, ClassNotFoundException, InvocationTargetException, NoSuchMethodException { throws InstantiationException, IllegalAccessException, ClassNotFoundException, InvocationTargetException {
List<DataGetter> dgList = new ArrayList<DataGetter>(); List<DataGetter> dgList = new ArrayList<DataGetter>();
for( String dgURI: dgUris){ for( String dgURI: dgUris){
DataGetter dg =dataGetterForURI(vreq, displayModel, dgURI) ; DataGetter dg =dataGetterForURI(vreq, displayModel, dgURI) ;
@ -332,7 +334,7 @@ public class DataGetterUtils {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
Enumeration<String> e = vreq.getParameterNames(); Enumeration<String> e = vreq.getParameterNames();
while(e.hasMoreElements()){ while(e.hasMoreElements()){
String name = (String)e.nextElement(); String name = e.nextElement();
log.debug("parameter: " + name); log.debug("parameter: " + name);
for( String value : vreq.getParameterValues(name) ){ for( String value : vreq.getParameterValues(name) ){
log.debug("value for " + name + ": '" + value + "'"); log.debug("value for " + name + ": '" + value + "'");
@ -550,9 +552,9 @@ public class DataGetterUtils {
//Get All VClass Groups information //Get All VClass Groups information
//Used within menu management and processing //Used within menu management and processing
//TODO: Check if more appropriate location possible //TODO: Check if more appropriate location possible
public static List<HashMap<String, String>> getClassGroups(ServletContext context) { public static List<HashMap<String, String>> getClassGroups(HttpServletRequest req) {
//Wanted this to be //Wanted this to be
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(req);
List<VClassGroup> vcgList = vcgc.getGroups(); List<VClassGroup> vcgList = vcgc.getGroups();
//For now encoding as hashmap with label and URI as trying to retrieve class group //For now encoding as hashmap with label and URI as trying to retrieve class group
//results in errors for some reason //results in errors for some reason
@ -570,11 +572,11 @@ public class DataGetterUtils {
//TODO: Check whether this needs to be put here or elsewhere, as this is data getter specific //TODO: Check whether this needs to be put here or elsewhere, as this is data getter specific
//with respect to class groups //with respect to class groups
//Need to use VClassGroupCache to retrieve class group information - this is the information returned from "for class group" //Need to use VClassGroupCache to retrieve class group information - this is the information returned from "for class group"
public static void getClassGroupForDataGetter(ServletContext context, Map<String, Object> pageData, Map<String, Object> templateData) { public static void getClassGroupForDataGetter(HttpServletRequest req, Map<String, Object> pageData, Map<String, Object> templateData) {
//Get the class group from VClassGroup, this is the same as the class group for the class group page data getter //Get the class group from VClassGroup, this is the same as the class group for the class group page data getter
//and the associated class group (not custom) for individuals datagetter //and the associated class group (not custom) for individuals datagetter
String classGroupUri = (String) pageData.get("classGroupUri"); String classGroupUri = (String) pageData.get("classGroupUri");
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(req);
VClassGroup group = vcgc.getGroup(classGroupUri); VClassGroup group = vcgc.getGroup(classGroupUri);
templateData.put("classGroup", group); templateData.put("classGroup", group);

View file

@ -30,6 +30,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache; import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel;
@ -227,7 +228,7 @@ public class IndividualsForClassesDataGetter extends DataGetterBase implements D
log.debug("Processing classes that will be displayed"); log.debug("Processing classes that will be displayed");
List<VClass> vClasses = new ArrayList<VClass>(); List<VClass> vClasses = new ArrayList<VClass>();
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
for(String classUri: classes) { for(String classUri: classes) {
//Retrieve vclass from cache to get the count //Retrieve vclass from cache to get the count
VClass vclass = vcgc.getCachedVClass(classUri); VClass vclass = vcgc.getCachedVClass(classUri);
@ -262,7 +263,7 @@ public class IndividualsForClassesDataGetter extends DataGetterBase implements D
List<VClass> restrictVClasses = new ArrayList<VClass>(); List<VClass> restrictVClasses = new ArrayList<VClass>();
List<String> urlEncodedRestrictClasses = new ArrayList<String>(); List<String> urlEncodedRestrictClasses = new ArrayList<String>();
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
if(restrictClasses.size() > 0) { if(restrictClasses.size() > 0) {
//classes for restriction are not displayed so don't need to include their class individual counts //classes for restriction are not displayed so don't need to include their class individual counts
@ -306,7 +307,7 @@ public class IndividualsForClassesDataGetter extends DataGetterBase implements D
public static VClassGroupTemplateModel getClassGroup(String classGroupUri, ServletContext context, VitroRequest vreq){ public static VClassGroupTemplateModel getClassGroup(String classGroupUri, ServletContext context, VitroRequest vreq){
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
List<VClassGroup> vcgList = vcgc.getGroups(); List<VClassGroup> vcgList = vcgc.getGroups();
VClassGroup group = null; VClassGroup group = null;
for( VClassGroup vcg : vcgList){ for( VClassGroup vcg : vcgList){

View file

@ -4,7 +4,7 @@ package edu.cornell.mannlib.vitro.webapp.utils.menuManagement;
import java.util.Map; import java.util.Map;
import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@ -28,18 +28,20 @@ public class ProcessClassGroup implements ProcessDataGetter{
//template data represents what needs to be modified and returned to template //template data represents what needs to be modified and returned to template
//page data is data retrieved from data getter //page data is data retrieved from data getter
public void populateTemplate(ServletContext context, Map<String, Object> pageData, Map<String, Object> templateData) { @Override
public void populateTemplate(HttpServletRequest req, Map<String, Object> pageData, Map<String, Object> templateData) {
//This is a class group page so //This is a class group page so
templateData.put("isClassGroupPage", true); templateData.put("isClassGroupPage", true);
templateData.put("includeAllClasses", true); templateData.put("includeAllClasses", true);
//Get the class group from VClassGroup //Get the class group from VClassGroup
DataGetterUtils.getClassGroupForDataGetter(context, pageData, templateData); DataGetterUtils.getClassGroupForDataGetter(req, pageData, templateData);
} }
//Process submission //Process submission
@Override
public Model processSubmission(VitroRequest vreq, Resource dataGetterResource) { public Model processSubmission(VitroRequest vreq, Resource dataGetterResource) {
Model dgModel = ModelFactory.createDefaultModel(); Model dgModel = ModelFactory.createDefaultModel();
String dataGetterTypeUri = DataGetterUtils.generateDataGetterTypeURI(ClassGroupPageData.class.getName()); String dataGetterTypeUri = DataGetterUtils.generateDataGetterTypeURI(ClassGroupPageData.class.getName());

View file

@ -4,18 +4,15 @@ package edu.cornell.mannlib.vitro.webapp.utils.menuManagement;
import java.util.Map; import java.util.Map;
import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import org.json.JSONObject;
import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.rdf.model.Resource;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
public interface ProcessDataGetter{ public interface ProcessDataGetter{
public void populateTemplate(ServletContext context, Map<String, Object> pageData, Map<String, Object> templateData); public void populateTemplate(HttpServletRequest req, Map<String, Object> pageData, Map<String, Object> templateData);
public Model processSubmission(VitroRequest vreq, Resource dataGetterResource); public Model processSubmission(VitroRequest vreq, Resource dataGetterResource);

View file

@ -6,7 +6,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@ -34,12 +34,13 @@ public class ProcessIndividualsForClasses implements ProcessDataGetter {
/**Retrieve and populate**/ /**Retrieve and populate**/
//Based on institutional internal page and not general individualsForClasses //Based on institutional internal page and not general individualsForClasses
public void populateTemplate(ServletContext context, Map<String, Object> pageData, Map<String, Object> templateData) { @Override
public void populateTemplate(HttpServletRequest req, Map<String, Object> pageData, Map<String, Object> templateData) {
initTemplateData(templateData); initTemplateData(templateData);
populateIncludedClasses(pageData, templateData); populateIncludedClasses(pageData, templateData);
populateRestrictedClasses(pageData, templateData); populateRestrictedClasses(pageData, templateData);
//Also save the class group for display //Also save the class group for display
DataGetterUtils.getClassGroupForDataGetter(context, pageData, templateData); DataGetterUtils.getClassGroupForDataGetter(req, pageData, templateData);
} }
@ -76,6 +77,7 @@ public class ProcessIndividualsForClasses implements ProcessDataGetter {
public boolean useProcessor(VitroRequest vreq) { public boolean useProcessor(VitroRequest vreq) {
return(!allClassesSelected(vreq)); return(!allClassesSelected(vreq));
} }
@Override
public Model processSubmission(VitroRequest vreq, Resource dataGetterResource) { public Model processSubmission(VitroRequest vreq, Resource dataGetterResource) {
String[] selectedClasses = vreq.getParameterValues("classInClassGroup"); String[] selectedClasses = vreq.getParameterValues("classInClassGroup");
String dataGetterTypeUri = DataGetterUtils.generateDataGetterTypeURI(IndividualsForClassesDataGetter.class.getName()); String dataGetterTypeUri = DataGetterUtils.generateDataGetterTypeURI(IndividualsForClassesDataGetter.class.getName());

View file

@ -30,7 +30,7 @@ public class SelectDataGetterUtils {
public static void processAndRetrieveData(VitroRequest vreq, ServletContext context, Map<String, Object> pageData, String dataGetterClass, Map<String, Object> templateData) { public static void processAndRetrieveData(VitroRequest vreq, ServletContext context, Map<String, Object> pageData, String dataGetterClass, Map<String, Object> templateData) {
//The type of the data getter will show how to process the data from the data getter //The type of the data getter will show how to process the data from the data getter
ProcessDataGetter processor = selectProcessor(dataGetterClass); ProcessDataGetter processor = selectProcessor(dataGetterClass);
processor.populateTemplate(context, pageData, templateData); processor.populateTemplate(vreq, pageData, templateData);
} }
//This will be different in VIVO than in VITRO //This will be different in VIVO than in VITRO

View file

@ -23,6 +23,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.controller.json.JsonServlet; import edu.cornell.mannlib.vitro.webapp.controller.json.JsonServlet;
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache; import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
import edu.cornell.mannlib.vitro.webapp.utils.JsonToFmModel; import edu.cornell.mannlib.vitro.webapp.utils.JsonToFmModel;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel;
@ -63,6 +64,7 @@ public class BrowseDataGetter implements PageDataGetter {
} }
//Get data servuice //Get data servuice
@Override
public String getDataServiceUrl() { public String getDataServiceUrl() {
return UrlBuilder.getUrl("/dataservice?getSolrIndividualsByVClass=1&vclassId="); return UrlBuilder.getUrl("/dataservice?getSolrIndividualsByVClass=1&vclassId=");
} }
@ -94,7 +96,7 @@ public class BrowseDataGetter implements PageDataGetter {
private Map<String,Object> getCommonValues( ServletContext context, VitroRequest vreq){ private Map<String,Object> getCommonValues( ServletContext context, VitroRequest vreq){
Map<String,Object> values = new HashMap<String,Object>(); Map<String,Object> values = new HashMap<String,Object>();
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
List<VClassGroup> cgList = vcgc.getGroups(); List<VClassGroup> cgList = vcgc.getGroups();
LinkedList<VClassGroupTemplateModel> cgtmList = new LinkedList<VClassGroupTemplateModel>(); LinkedList<VClassGroupTemplateModel> cgtmList = new LinkedList<VClassGroupTemplateModel>();
for( VClassGroup classGroup : cgList){ for( VClassGroup classGroup : cgList){
@ -168,7 +170,7 @@ public class BrowseDataGetter implements PageDataGetter {
String vcgUri = getParam(Mode.CLASS_GROUP, request, params); String vcgUri = getParam(Mode.CLASS_GROUP, request, params);
VitroRequest vreq = new VitroRequest(request); VitroRequest vreq = new VitroRequest(request);
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(request);
VClassGroup vcg = vcgc.getGroup(vcgUri); VClassGroup vcg = vcgc.getGroup(vcgUri);
ArrayList<VClassTemplateModel> classes = new ArrayList<VClassTemplateModel>(vcg.size()); ArrayList<VClassTemplateModel> classes = new ArrayList<VClassTemplateModel>(vcg.size());

View file

@ -16,7 +16,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.VClass;
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup; import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache; import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel;
@ -28,12 +28,13 @@ import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateMo
public class ClassGroupPageData implements PageDataGetter{ public class ClassGroupPageData implements PageDataGetter{
private static final Log log = LogFactory.getLog(ClassGroupPageData.class); private static final Log log = LogFactory.getLog(ClassGroupPageData.class);
@Override
public Map<String,Object> getData(ServletContext context, VitroRequest vreq, String pageUri, Map<String, Object> page ){ public Map<String,Object> getData(ServletContext context, VitroRequest vreq, String pageUri, Map<String, Object> page ){
HashMap<String, Object> data = new HashMap<String,Object>(); HashMap<String, Object> data = new HashMap<String,Object>();
String classGroupUri = vreq.getWebappDaoFactory().getPageDao().getClassGroupPage(pageUri); String classGroupUri = vreq.getWebappDaoFactory().getPageDao().getClassGroupPage(pageUri);
data.put("classGroupUri", classGroupUri); data.put("classGroupUri", classGroupUri);
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
List<VClassGroup> vcgList = vcgc.getGroups(); List<VClassGroup> vcgList = vcgc.getGroups();
VClassGroup group = null; VClassGroup group = null;
for( VClassGroup vcg : vcgList){ for( VClassGroup vcg : vcgList){
@ -87,7 +88,7 @@ public class ClassGroupPageData implements PageDataGetter{
public static VClassGroupTemplateModel getClassGroup(String classGroupUri, ServletContext context, VitroRequest vreq){ public static VClassGroupTemplateModel getClassGroup(String classGroupUri, ServletContext context, VitroRequest vreq){
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
List<VClassGroup> vcgList = vcgc.getGroups(); List<VClassGroup> vcgList = vcgc.getGroups();
VClassGroup group = null; VClassGroup group = null;
for( VClassGroup vcg : vcgList){ for( VClassGroup vcg : vcgList){
@ -125,11 +126,13 @@ public class ClassGroupPageData implements PageDataGetter{
return new VClassGroupTemplateModel(group); return new VClassGroupTemplateModel(group);
} }
@Override
public String getType(){ public String getType(){
return PageDataGetterUtils.generateDataGetterTypeURI(ClassGroupPageData.class.getName()); return PageDataGetterUtils.generateDataGetterTypeURI(ClassGroupPageData.class.getName());
} }
//Get data servuice //Get data servuice
@Override
public String getDataServiceUrl() { public String getDataServiceUrl() {
return UrlBuilder.getUrl("/dataservice?getSolrIndividualsByVClass=1&vclassId="); return UrlBuilder.getUrl("/dataservice?getSolrIndividualsByVClass=1&vclassId=");
} }
@ -139,6 +142,7 @@ public class ClassGroupPageData implements PageDataGetter{
* For processing of JSONObject * For processing of JSONObject
*/ */
//Currently empty, TODO: Review requirements //Currently empty, TODO: Review requirements
@Override
public JSONObject convertToJSON(Map<String, Object> dataMap, VitroRequest vreq) { public JSONObject convertToJSON(Map<String, Object> dataMap, VitroRequest vreq) {
JSONObject rObj = null; JSONObject rObj = null;
return rObj; return rObj;

View file

@ -21,6 +21,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.dao.PageDao; import edu.cornell.mannlib.vitro.webapp.dao.PageDao;
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache; import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel;
@ -32,6 +33,7 @@ import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateMo
public class IndividualsForClassesDataGetter implements PageDataGetter{ public class IndividualsForClassesDataGetter implements PageDataGetter{
private static final Log log = LogFactory.getLog(IndividualsForClassesDataGetter.class); private static final Log log = LogFactory.getLog(IndividualsForClassesDataGetter.class);
protected static String restrictClassesTemplateName = null; protected static String restrictClassesTemplateName = null;
@Override
public Map<String,Object> getData(ServletContext context, VitroRequest vreq, String pageUri, Map<String, Object> page ){ public Map<String,Object> getData(ServletContext context, VitroRequest vreq, String pageUri, Map<String, Object> page ){
this.setTemplateName(); this.setTemplateName();
HashMap<String, Object> data = new HashMap<String,Object>(); HashMap<String, Object> data = new HashMap<String,Object>();
@ -146,7 +148,7 @@ public class IndividualsForClassesDataGetter implements PageDataGetter{
log.debug("Processing classes that will be displayed"); log.debug("Processing classes that will be displayed");
List<VClass> vClasses = new ArrayList<VClass>(); List<VClass> vClasses = new ArrayList<VClass>();
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
for(String classUri: classes) { for(String classUri: classes) {
//Retrieve vclass from cache to get the count //Retrieve vclass from cache to get the count
VClass vclass = vcgc.getCachedVClass(classUri); VClass vclass = vcgc.getCachedVClass(classUri);
@ -181,7 +183,7 @@ public class IndividualsForClassesDataGetter implements PageDataGetter{
List<VClass> restrictVClasses = new ArrayList<VClass>(); List<VClass> restrictVClasses = new ArrayList<VClass>();
List<String> urlEncodedRestrictClasses = new ArrayList<String>(); List<String> urlEncodedRestrictClasses = new ArrayList<String>();
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
if(restrictClasses.size() > 0) { if(restrictClasses.size() > 0) {
//classes for restriction are not displayed so don't need to include their class individual counts //classes for restriction are not displayed so don't need to include their class individual counts
@ -225,7 +227,7 @@ public class IndividualsForClassesDataGetter implements PageDataGetter{
public static VClassGroupTemplateModel getClassGroup(String classGroupUri, ServletContext context, VitroRequest vreq){ public static VClassGroupTemplateModel getClassGroup(String classGroupUri, ServletContext context, VitroRequest vreq){
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(vreq);
List<VClassGroup> vcgList = vcgc.getGroups(); List<VClassGroup> vcgList = vcgc.getGroups();
VClassGroup group = null; VClassGroup group = null;
for( VClassGroup vcg : vcgList){ for( VClassGroup vcg : vcgList){
@ -263,17 +265,20 @@ public class IndividualsForClassesDataGetter implements PageDataGetter{
return new VClassGroupTemplateModel(group); return new VClassGroupTemplateModel(group);
} }
@Override
public String getType(){ public String getType(){
return PageDataGetterUtils.generateDataGetterTypeURI(IndividualsForClassesDataGetter.class.getName()); return PageDataGetterUtils.generateDataGetterTypeURI(IndividualsForClassesDataGetter.class.getName());
} }
//Get data servuice //Get data servuice
@Override
public String getDataServiceUrl() { public String getDataServiceUrl() {
return UrlBuilder.getUrl("/dataservice?getSolrIndividualsByVClasses=1&vclassId="); return UrlBuilder.getUrl("/dataservice?getSolrIndividualsByVClasses=1&vclassId=");
} }
/** /**
* For processig of JSONObject * For processig of JSONObject
*/ */
@Override
public JSONObject convertToJSON(Map<String, Object> map, VitroRequest vreq) { public JSONObject convertToJSON(Map<String, Object> map, VitroRequest vreq) {
JSONObject rObj = PageDataGetterUtils.processVclassResultsJSON(map, vreq, true); JSONObject rObj = PageDataGetterUtils.processVclassResultsJSON(map, vreq, true);
return rObj; return rObj;

View file

@ -12,6 +12,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
@ -29,9 +30,9 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListCont
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.PageRecord; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualListController.PageRecord;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
import edu.cornell.mannlib.vitro.webapp.controller.json.JsonServlet; import edu.cornell.mannlib.vitro.webapp.controller.json.JsonServlet;
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache; import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
import edu.cornell.mannlib.vitro.webapp.utils.dataGetter.DataGetterUtils;
public class PageDataGetterUtils { public class PageDataGetterUtils {
protected static final String DATA_GETTER_MAP = "pageTypeToDataGetterMap"; protected static final String DATA_GETTER_MAP = "pageTypeToDataGetterMap";
@ -124,7 +125,7 @@ public class PageDataGetterUtils {
for(String dgClassName: dataGetterClassNames) { for(String dgClassName: dataGetterClassNames) {
String className = getClassNameFromUri(dgClassName); String className = getClassNameFromUri(dgClassName);
Class clz = Class.forName(className); Class<?> clz = Class.forName(className);
if( PageDataGetter.class.isAssignableFrom(clz)){ if( PageDataGetter.class.isAssignableFrom(clz)){
PageDataGetter pg = (PageDataGetter) clz.newInstance(); PageDataGetter pg = (PageDataGetter) clz.newInstance();
@ -175,7 +176,7 @@ public class PageDataGetterUtils {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
Enumeration<String> e = vreq.getParameterNames(); Enumeration<String> e = vreq.getParameterNames();
while(e.hasMoreElements()){ while(e.hasMoreElements()){
String name = (String)e.nextElement(); String name = e.nextElement();
log.debug("parameter: " + name); log.debug("parameter: " + name);
for( String value : vreq.getParameterValues(name) ){ for( String value : vreq.getParameterValues(name) ){
log.debug("value for " + name + ": '" + value + "'"); log.debug("value for " + name + ": '" + value + "'");
@ -299,9 +300,9 @@ public class PageDataGetterUtils {
//Get All VClass Groups information //Get All VClass Groups information
//Used within menu management and processing //Used within menu management and processing
//TODO: Check if more appropriate location possible //TODO: Check if more appropriate location possible
public static List<HashMap<String, String>> getClassGroups(ServletContext context) { public static List<HashMap<String, String>> getClassGroups(HttpServletRequest req) {
//Wanted this to be //Wanted this to be
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(req);
List<VClassGroup> vcgList = vcgc.getGroups(); List<VClassGroup> vcgList = vcgc.getGroups();
//For now encoding as hashmap with label and URI as trying to retrieve class group //For now encoding as hashmap with label and URI as trying to retrieve class group
//results in errors for some reason //results in errors for some reason
@ -323,11 +324,11 @@ public class PageDataGetterUtils {
//TODO: Check whether this needs to be put here or elsewhere, as this is data getter specific //TODO: Check whether this needs to be put here or elsewhere, as this is data getter specific
//with respect to class groups //with respect to class groups
//Need to use VClassGroupCache to retrieve class group information - this is the information returned from "for class group" //Need to use VClassGroupCache to retrieve class group information - this is the information returned from "for class group"
public static void getClassGroupForDataGetter(ServletContext context, Map<String, Object> pageData, Map<String, Object> templateData) { public static void getClassGroupForDataGetter(HttpServletRequest req, Map<String, Object> pageData, Map<String, Object> templateData) {
//Get the class group from VClassGroup, this is the same as the class group for the class group page data getter //Get the class group from VClassGroup, this is the same as the class group for the class group page data getter
//and the associated class group (not custom) for individuals datagetter //and the associated class group (not custom) for individuals datagetter
String classGroupUri = (String) pageData.get("classGroupUri"); String classGroupUri = (String) pageData.get("classGroupUri");
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(req);
VClassGroup group = vcgc.getGroup(classGroupUri); VClassGroup group = vcgc.getGroup(classGroupUri);
templateData.put("classGroup", group); templateData.put("classGroup", group);

View file

@ -21,6 +21,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.VClass;
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup; import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.json.JsonServlet; import edu.cornell.mannlib.vitro.webapp.controller.json.JsonServlet;
import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest;
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache; import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
import edu.cornell.mannlib.vitro.webapp.utils.JsonToFmModel; import edu.cornell.mannlib.vitro.webapp.utils.JsonToFmModel;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel; import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel;
@ -123,7 +124,7 @@ public class BrowseWidget extends Widget {
VitroRequest vreq = new VitroRequest(request); VitroRequest vreq = new VitroRequest(request);
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(request);
List<VClassGroup> cgList = vcgc.getGroups(); List<VClassGroup> cgList = vcgc.getGroups();
// List<VClassGroup> classGroups = // List<VClassGroup> classGroups =
@ -186,7 +187,7 @@ public class BrowseWidget extends Widget {
VitroRequest vreq = new VitroRequest(request); VitroRequest vreq = new VitroRequest(request);
//VClassGroup vcg = vreq.getWebappDaoFactory().getVClassGroupDao().getGroupByURI(vcgUri); //VClassGroup vcg = vreq.getWebappDaoFactory().getVClassGroupDao().getGroupByURI(vcgUri);
VClassGroupCache vcgc = VClassGroupCache.getVClassGroupCache(context); VClassGroupsForRequest vcgc = VClassGroupCache.getVClassGroups(request);
VClassGroup vcg = vcgc.getGroup(vcgUri); VClassGroup vcg = vcgc.getGroup(vcgUri);
//vreq.getWebappDaoFactory().getVClassDao().addVClassesToGroup(vcg, false, true); //vreq.getWebappDaoFactory().getVClassDao().addVClassesToGroup(vcg, false, true);