new internal classes data getter
This commit is contained in:
parent
18416c5773
commit
2919efead0
1 changed files with 94 additions and 0 deletions
|
@ -0,0 +1,94 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.utils.pageDataGetter;
|
||||||
|
|
||||||
|
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.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.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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String,Object> getData(ServletContext context, VitroRequest vreq, String pageUri, Map<String, Object> page ){
|
||||||
|
HashMap<String, Object> data = new HashMap<String,Object>();
|
||||||
|
//This is the old technique of getting class intersections
|
||||||
|
Map<String, Object> classIntersectionsMap = vreq.getWebappDaoFactory().getPageDao().getClassesAndCheckInternal(pageUri);
|
||||||
|
|
||||||
|
|
||||||
|
//Use Individual List Controller to get all the individuals and related data
|
||||||
|
List<Individual> inds = new ArrayList<Individual>();
|
||||||
|
try{
|
||||||
|
List<String> classes = (List<String>)classIntersectionsMap.get("classes");
|
||||||
|
List<String> restrictClasses = retrieveRestrictClasses(context, classIntersectionsMap);
|
||||||
|
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());
|
||||||
|
} catch(Exception ex) {
|
||||||
|
log.error("An error occurred retrieving Vclass Intersection individuals", ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> retrieveRestrictClasses(
|
||||||
|
ServletContext context, Map<String, Object> classIntersectionsMap) {
|
||||||
|
List<String> restrictClasses = new ArrayList<String>();
|
||||||
|
String internalClass = (String) classIntersectionsMap.get("isInternal");
|
||||||
|
//how should this be stored? boolean or otherwise?
|
||||||
|
if(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 DisplayVocabulary.CLASSINDIVIDUALS_INTERNAL_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue