rewriting internal class data page data getter as data getter
This commit is contained in:
parent
e959ffb605
commit
2bd515d356
1 changed files with 146 additions and 0 deletions
|
@ -0,0 +1,146 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.webapp.utils.dataGetter;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import com.hp.hpl.jena.ontology.OntModel;
|
||||
import com.hp.hpl.jena.query.Query;
|
||||
import com.hp.hpl.jena.query.QueryExecution;
|
||||
import com.hp.hpl.jena.query.QueryExecutionFactory;
|
||||
import com.hp.hpl.jena.query.QueryFactory;
|
||||
import com.hp.hpl.jena.query.QuerySolution;
|
||||
import com.hp.hpl.jena.query.QuerySolutionMap;
|
||||
import com.hp.hpl.jena.query.ResultSet;
|
||||
import com.hp.hpl.jena.rdf.model.Model;
|
||||
import com.hp.hpl.jena.rdf.model.RDFNode;
|
||||
import com.hp.hpl.jena.rdf.model.ResourceFactory;
|
||||
import com.hp.hpl.jena.rdf.model.Statement;
|
||||
import com.hp.hpl.jena.rdf.model.StmtIterator;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.VClass;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.PageDao;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.VClassGroupCache;
|
||||
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.VClassGroupTemplateModel;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext;
|
||||
import edu.cornell.mannlib.vitro.webapp.utils.dataGetter.IndividualsForClassesDataGetter;
|
||||
|
||||
/**
|
||||
* This will pass these variables to the template:
|
||||
* classGroupUri: uri of the classgroup associated with this page.
|
||||
* vClassGroup: a data structure that is the classgroup associated with this page.
|
||||
*/
|
||||
public class InternalClassesDataGetter extends IndividualsForClassesDataGetter{
|
||||
private static final Log log = LogFactory.getLog(InternalClassesDataGetter.class);
|
||||
|
||||
/**
|
||||
* Constructor with display model and data getter URI that will be called by reflection.
|
||||
*/
|
||||
public InternalClassesDataGetter(Model displayModel, String dataGetterURI){
|
||||
super(displayModel, dataGetterURI);
|
||||
}
|
||||
|
||||
|
||||
//Use different template name for internal class template
|
||||
@Override
|
||||
protected void setTemplateName() {
|
||||
super.restrictClassesTemplateName = "internalClass";
|
||||
}
|
||||
|
||||
//Retrieve classes and check whether or not page to be filtered by internal class only
|
||||
@Override
|
||||
protected Map<String, Object> getClassIntersectionsMap(Model displayModel) {
|
||||
|
||||
Map<String, Object> classesAndRestrictions = new HashMap<String, Object>();
|
||||
QuerySolutionMap initialBindings = new QuerySolutionMap();
|
||||
initialBindings.add("dataGetterUri", ResourceFactory.createResource(this.dataGetterURI));
|
||||
List<String> classes = new ArrayList<String>();
|
||||
|
||||
displayModel.enterCriticalSection(false);
|
||||
try{
|
||||
Query individualsForClassesInternalQuery = QueryFactory.create(individualsForClassesInternalQueryString);
|
||||
QueryExecution qexec = QueryExecutionFactory.create( individualsForClassesInternalQuery, displayModel , initialBindings);
|
||||
try{
|
||||
ResultSet resultSet = qexec.execSelect();
|
||||
while(resultSet.hasNext()){
|
||||
QuerySolution soln = resultSet.next();
|
||||
String dg = DataGetterUtils.nodeToString(soln.get("dg"));
|
||||
classes.add(DataGetterUtils.nodeToString(soln.get("class")));
|
||||
//node to string will convert null to empty string
|
||||
String isInternal = DataGetterUtils.nodeToString(soln.get("isInternal"));
|
||||
if(!isInternal.isEmpty()) {
|
||||
log.debug("Internal value is "+ isInternal);
|
||||
//Retrieve and add internal class
|
||||
classesAndRestrictions.put("isInternal", isInternal);
|
||||
}
|
||||
}
|
||||
|
||||
if( classes.size() == 0 ){
|
||||
log.debug("No classes defined in display model for "+ this.dataGetterURI);
|
||||
return null;
|
||||
}
|
||||
classesAndRestrictions.put("classes", classes);
|
||||
return classesAndRestrictions;
|
||||
}finally{
|
||||
qexec.close();
|
||||
}
|
||||
}finally{
|
||||
displayModel.leaveCriticalSection();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Retrieve current internal class uri to restrict by
|
||||
@Override
|
||||
protected List<String> retrieveRestrictClasses(
|
||||
ServletContext context, Map<String, Object> classIntersectionsMap) {
|
||||
List<String> restrictClasses = new ArrayList<String>();
|
||||
String internalClass = (String) classIntersectionsMap.get("isInternal");
|
||||
//if internal class restriction specified and is true
|
||||
if(internalClass != null && internalClass.equals("true")) {
|
||||
//Get internal class
|
||||
Model mainModel = ModelContext.getBaseOntModelSelector(context).getTBoxModel();;
|
||||
StmtIterator internalIt = mainModel.listStatements(null, ResourceFactory.createProperty(VitroVocabulary.IS_INTERNAL_CLASSANNOT), (RDFNode) null);
|
||||
//Checks for just one statement
|
||||
if(internalIt.hasNext()){
|
||||
Statement s = internalIt.nextStatement();
|
||||
//The class IS an internal class so the subject is what we're looking for
|
||||
String internalClassUri = s.getSubject().getURI();
|
||||
log.debug("Found internal class uri " + internalClassUri);
|
||||
restrictClasses.add(internalClassUri);
|
||||
}
|
||||
}
|
||||
|
||||
return restrictClasses;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType(){
|
||||
return DataGetterUtils.generateDataGetterTypeURI(InternalClassesDataGetter.class.getName());
|
||||
}
|
||||
|
||||
static final protected String individualsForClassesInternalQueryString =
|
||||
DataGetterUtils.prefixes + "\n" +
|
||||
"SELECT?class ?isInternal WHERE {\n" +
|
||||
" ?dataGetterUri <" + DisplayVocabulary.GETINDIVIDUALS_FOR_CLASS + "> ?class . \n" +
|
||||
" OPTIONAL { ?dataGetterUri <"+ DisplayVocabulary.RESTRICT_RESULTS_BY_INTERNAL + "> ?isInternal } .\n" +
|
||||
"} \n" ;
|
||||
|
||||
}
|
Loading…
Add table
Reference in a new issue