From 4764751905ab0edf9934e802a43760b1db52dc8e Mon Sep 17 00:00:00 2001 From: j2blake Date: Thu, 16 May 2013 18:05:50 -0400 Subject: [PATCH] VIVO-82 Use ModelAccess to get or set the Display Model --- .../vitro/webapp/controller/VitroRequest.java | 10 +- .../vitro/webapp/dao/DisplayVocabulary.java | 3 - .../mannlib/vitro/webapp/dao/ModelAccess.java | 315 ++++++++++++++++++ .../vitro/webapp/dao/jena/ModelContext.java | 6 - .../webapp/dao/jena/VitroModelSource.java | 3 +- .../DefaultObjectPropertyFormGenerator.java | 16 +- .../webapp/filters/VitroRequestPrep.java | 29 +- .../vitro/webapp/search/solr/SolrSetup.java | 10 +- .../servlet/setup/ApplicationModelSetup.java | 7 +- .../servlet/setup/ContentModelSetup.java | 4 +- .../servlet/setup/UpdateKnowledgeBase.java | 3 +- ...ApplicationConfigurationOntologyUtils.java | 8 +- .../utils/dataGetter/DataGetterBase.java | 8 +- 13 files changed, 351 insertions(+), 71 deletions(-) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ModelAccess.java diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroRequest.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroRequest.java index 53587eae2..5085e2a68 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroRequest.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroRequest.java @@ -2,7 +2,6 @@ package edu.cornell.mannlib.vitro.webapp.controller; -import static edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary.DISPLAY_ONT_MODEL; import java.util.Map; @@ -17,6 +16,7 @@ import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.query.Dataset; import edu.cornell.mannlib.vitro.webapp.beans.ApplicationBean; +import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.jena.JenaBaseDao; import edu.cornell.mannlib.vitro.webapp.dao.jena.OntModelSelector; @@ -215,13 +215,7 @@ public class VitroRequest extends HttpServletRequestWrapper { //Get the display and editing configuration model public OntModel getDisplayModel(){ - Object value = _req.getAttribute(DISPLAY_ONT_MODEL); - if (value instanceof OntModel) { - return (OntModel) value; - } else { - log.error("No display model on the VitroRequest. Expecting an OntModel but found " + value); - return null; - } + return ModelAccess.on(_req).getDisplayModel(); } /** diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/DisplayVocabulary.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/DisplayVocabulary.java index 5d5defc36..fc89134e7 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/DisplayVocabulary.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/DisplayVocabulary.java @@ -119,9 +119,6 @@ public class DisplayVocabulary { public static final String CONTEXT_DISPLAY_TBOX = "displayOntModelTBOX"; public static final String CONTEXT_DISPLAY_DISPLAY = "displayOntModelDisplayModel"; - /** Key for display model in request, session or context attributes */ - public static final String DISPLAY_ONT_MODEL = "displayOntModel"; - //URL for menu management public static final String PROCESS_MENU_MANAGEMENT_URL = "/menuManagementEdit"; public static final String REORDER_MENU_URL = PROCESS_MENU_MANAGEMENT_URL + "?cmd=Reorder&" + SWITCH_TO_DISPLAY_MODEL + "=true"; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ModelAccess.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ModelAccess.java new file mode 100644 index 000000000..4537db358 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/ModelAccess.java @@ -0,0 +1,315 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.dao; + +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import com.hp.hpl.jena.ontology.OntModel; + +/** + * Hierarchical storage for models. TODO + */ +public class ModelAccess { + /** These attributes should only be accessed through this class. */ + private static final String ATTRIBUTE_NAME = ModelAccess.class.getName(); + + public enum ModelID { + APPLICATION_METADATA, + + USER_ACCOUNTS, + + DISPLAY, DISPLAY_DISPLAY, DISPLAY_TBOX, + + BASE_ABOX, BASE_TBOX, BASE_FULL, + + INFERRED_ABOX, INFERRED_TBOX, INFERRED_FULL, + + UNION_ABOX, UNION_TBOX, UNION_FULL + } + + // ---------------------------------------------------------------------- + // Factory methods + // ---------------------------------------------------------------------- + + public static ModelAccess on(HttpServletRequest req) { + Object o = req.getAttribute(ATTRIBUTE_NAME); + if (o instanceof ModelAccess) { + return (ModelAccess) o; + } else { + ModelAccess parent = on(req.getSession()); + ModelAccess ma = new ModelAccess(parent); + req.setAttribute(ATTRIBUTE_NAME, ma); + return ma; + } + } + + public static ModelAccess on(HttpSession session) { + Object o = session.getAttribute(ATTRIBUTE_NAME); + if (o instanceof ModelAccess) { + return (ModelAccess) o; + } else { + ModelAccess parent = on(session.getServletContext()); + ModelAccess ma = new ModelAccess(parent); + session.setAttribute(ATTRIBUTE_NAME, ma); + return ma; + } + } + + public static ModelAccess on(ServletContext ctx) { + Object o = ctx.getAttribute(ATTRIBUTE_NAME); + if (o instanceof ModelAccess) { + return (ModelAccess) o; + } else { + ModelAccess ma = new ModelAccess(null); + ctx.setAttribute(ATTRIBUTE_NAME, ma); + return ma; + } + } + + // ---------------------------------------------------------------------- + // Instance methods + // ---------------------------------------------------------------------- + + private final ModelAccess parent; + private final Map modelMap = new HashMap<>(); + + public ModelAccess(ModelAccess parent) { + this.parent = parent; + } + + public void setDisplayModel(OntModel m) { + setOntModel(ModelID.DISPLAY, m); + } + + public OntModel getDisplayModel() { + return getOntModel(ModelID.DISPLAY); + } + + // /** Is this the same as Assertions model? */ + // // public OntModel getBaseOntModel() { + // // throw new RuntimeException( + // // "ModelAccess.getBaseOntModel not implemented."); + // // } + // + // public OntModel getAssertionsOntModel() { + // throw new RuntimeException( + // "ModelAccess.getAssertionsOntModel not implemented."); + // } + // + // public void setUserAccountsModel(OntModel m) { + // setOntModel(ModelID.USER_ACCOUNTS, m); + // } + // + // public OntModel getUserAccountsModel() { + // return getOntModel(ModelID.USER_ACCOUNTS); + // } + // + // public OntModel getDisplayTboxOntModel() { + // throw new RuntimeException( + // "ModelAccess.getDisplayTboxOntModel not implemented."); + // } + // + // public OntModel getDisplayModelDisplayOntModel() { + // throw new RuntimeException( + // "ModelAccess.getDisplayModelDisplayOntModel not implemented."); + // } + // + // public OntModelSelector getOntModelSelector() { + // return getUnionOntModelSelector(); + // } + // + // public OntModelSelector getBaseOntModelSelector() { + // return new FacadeOntModelSelector(this, ModelID.BASE_ABOX, + // ModelID.BASE_TBOX, ModelID.BASE_FULL); + // } + // + // public OntModelSelector getInferenceOntModelSelector() { + // return new FacadeOntModelSelector(this, ModelID.INFERRED_ABOX, + // ModelID.INFERRED_TBOX, ModelID.INFERRED_FULL); + // } + // + // public OntModelSelector getUnionOntModelSelector() { + // return new FacadeOntModelSelector(this, ModelID.UNION_ABOX, + // ModelID.UNION_TBOX, ModelID.UNION_FULL); + // } + // + // private static class FacadeOntModelSelector implements OntModelSelector { + // private final ModelAccess parent; + // private final ModelID aboxID; + // private final ModelID tboxID; + // private final ModelID fullID; + // + // public FacadeOntModelSelector(ModelAccess parent, ModelID aboxID, + // ModelID tboxID, ModelID fullID) { + // this.parent = parent; + // this.aboxID = aboxID; + // this.tboxID = tboxID; + // this.fullID = fullID; + // } + // + // @Override + // public OntModel getABoxModel() { + // return parent.getOntModel(aboxID); + // } + // + // @Override + // public OntModel getTBoxModel() { + // return parent.getOntModel(tboxID); + // } + // + // @Override + // public OntModel getTBoxModel(String ontologyURI) { + // return parent.getOntModel(tboxID); + // } + // + // @Override + // public OntModel getFullModel() { + // return parent.getOntModel(fullID); + // } + // + // @Override + // public OntModel getApplicationMetadataModel() { + // return parent.getOntModel(ModelID.APPLICATION_METADATA); + // } + // + // @Override + // public OntModel getUserAccountsModel() { + // return parent.getOntModel(ModelID.USER_ACCOUNTS); + // } + // + // @Override + // public OntModel getDisplayModel() { + // return parent.getOntModel(ModelID.DISPLAY); + // } + // } + + /** + *
+	 * From ModelContext
+	 * 
+	 * 	public static OntModelSelector getOntModelSelector(ServletContext ctx) {
+	 * 		return (OntModelSelector) ctx.getAttribute(ONT_MODEL_SELECTOR);
+	 * 	}
+	 * 	
+	 * 	public static void setOntModelSelector(OntModelSelector oms, ServletContext ctx) {
+	 * 		ctx.setAttribute(ONT_MODEL_SELECTOR, oms); 
+	 * 	}
+	 * 	
+	 * 	public static OntModelSelector getUnionOntModelSelector(ServletContext ctx) {
+	 * 		return (OntModelSelector) ctx.getAttribute(UNION_ONT_MODEL_SELECTOR);
+	 * 	}
+	 * 	
+	 * 	public static void setUnionOntModelSelector(OntModelSelector oms, ServletContext ctx) {
+	 * 		ctx.setAttribute(UNION_ONT_MODEL_SELECTOR, oms); 
+	 * 	}
+	 *  	
+	 * 	public static OntModelSelector getBaseOntModelSelector(ServletContext ctx) {
+	 * 		return (OntModelSelector) ctx.getAttribute(BASE_ONT_MODEL_SELECTOR);
+	 * 	}
+	 * 	
+	 * 	public static void setBaseOntModelSelector(OntModelSelector oms, ServletContext ctx) {
+	 * 		ctx.setAttribute(BASE_ONT_MODEL_SELECTOR, oms); 
+	 * 	}
+	 * 	
+	 * 	public static OntModelSelector getInferenceOntModelSelector(ServletContext ctx) {
+	 * 		return (OntModelSelector) ctx.getAttribute(INFERENCE_ONT_MODEL_SELECTOR);
+	 * 	}
+	 * 	
+	 * 	public static void setInferenceOntModelSelector(OntModelSelector oms, ServletContext ctx) {
+	 * 		ctx.setAttribute(INFERENCE_ONT_MODEL_SELECTOR, oms); 
+	 * 	}
+	 * 	
+	 * 	public static OntModel getJenaOntModel(ServletContext ctx) {
+	 * 		return (OntModel) ctx.getAttribute(JENA_ONT_MODEL);
+	 * 	}
+	 * 	
+	 * 	public static void setJenaOntModel(OntModel ontModel, ServletContext ctx) {
+	 * 		ctx.setAttribute(JENA_ONT_MODEL, ontModel);
+	 * 	}
+	 * 	
+	 * 	public static OntModel getBaseOntModel(ServletContext ctx) {
+	 * 		return (OntModel) ctx.getAttribute(BASE_ONT_MODEL);
+	 * 	}
+	 * 	
+	 * 	public static void setBaseOntModel(OntModel ontModel, ServletContext ctx) {
+	 * 		ctx.setAttribute(BASE_ONT_MODEL, ontModel);
+	 * 	}
+	 * 	
+	 * 	public static OntModel getInferenceOntModel(ServletContext ctx) {
+	 * 		return (OntModel) ctx.getAttribute(INFERENCE_ONT_MODEL);
+	 * 	}
+	 * 	
+	 * 	public static void setInferenceOntModel(OntModel ontModel, ServletContext ctx) {
+	 * 		ctx.setAttribute(INFERENCE_ONT_MODEL, ontModel);
+	 * 	}
+	 * 
+	 * 
+ */ + /** + *
+	 * VitroRequest.getAssertionsWebappDaoFactory()
+	 * VitroRequest.getDeductionsWebappDaoFactory()
+	 * VitroRequest.getFullWebappDaoFactory()
+	 * VitroRequest.getJenaOntModel()
+	 * VitroRequest.getRDFService()
+	 * VitroRequest.getUnfilteredRDFService()
+	 * VitroRequest.getWebappDaoFactory()
+	 * VitroRequest.getWriteModel()
+	 * ModelContext.getBaseOntModelSelector()
+	 * ModelContext.getInferenceOntModel()
+	 * ModelContext.getInferenceOntModelSelector()
+	 * ModelContext.getJenaOntModel()
+	 * ModelContext.getOntModelSelector()
+	 * ModelContext.getUnionOntModelSelector()
+	 * OntModelSelector.getAboxModel
+	 * OntModelSelector.getApplicationMetadataModel()
+	 * OntModelSelector.getFullModel()
+	 * OntModelSelector.getTBoxModel()
+	 * OntModelSelector.getTBoxModel(ontologyURI)
+	 * OntModelSelector.getUserAccountsModel()
+	 * VitroModelSource.getModel(URL)
+	 * VitroModelSource.getModel(URL, loadIfAbsent)
+	 * VitroModelSource.openModel(name)
+	 * VitroModelSource.openModelIfPresent(string)
+	 * ServletContext.getAttribute("assertionsWebappDaoFactory")
+	 * ServletContext.getAttribute("baseOntModelSelector")
+	 * ServletContext.getAttribute("jenaOntModel")
+	 * ServletContext.getAttribute("jenaPersistentOntModel")
+	 * ServletContext.getAttribute("pelletOntModel")
+	 * ServletContext.getAttribute("webappDaoFactory")
+	 * VitroJenaModelMaker
+	 * VitroJenaSpecialModelMaker
+	 * JenaDataSourceSetupBase.getApplicationDataSource(ctx)
+	 * JenaDataSourceSetupBase.getStartupDataset()
+	 * HttpSession.getAttribute("jenaAuditModel")
+	 * HttpSession.getAttribute("jenaOntModel")
+	 * ServletRequest.getAttribute("jenaOntModel")
+	 * 
+ */ + + public void setOntModel(ModelID id, OntModel ontModel) { + String key = id.toString(); + if (ontModel == null) { + modelMap.remove(key); + } else { + modelMap.put(key, ontModel); + } + } + + public OntModel getOntModel(ModelID id) { + String key = id.toString(); + if (modelMap.containsKey(key)) { + return modelMap.get(key); + } else if (parent != null) { + return parent.getOntModel(id); + } else { + return null; + } + } + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ModelContext.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ModelContext.java index 57d835a4c..4b9036a1f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ModelContext.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/ModelContext.java @@ -113,10 +113,4 @@ public class ModelContext { } - public static OntModel getDisplayModel(ServletContext ctx){ - return(OntModel) ctx.getAttribute( DisplayVocabulary.DISPLAY_ONT_MODEL ); - } - public static void setDisplayModel(OntModel ontModel, ServletContext ctx){ - ctx.setAttribute(DisplayVocabulary.DISPLAY_ONT_MODEL,ontModel); - } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VitroModelSource.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VitroModelSource.java index 2366777cb..183b8860c 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VitroModelSource.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VitroModelSource.java @@ -10,6 +10,7 @@ import com.hp.hpl.jena.rdf.model.ModelReader; import com.hp.hpl.jena.rdf.model.ModelSource; import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; +import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; /** * ModelSource that will handle specially named Vitro models such @@ -110,7 +111,7 @@ public class VitroModelSource implements ModelSource { case TBOX: return (Model) context.getAttribute("tboxmodel???"); case DISPLAY: - return (Model) context.getAttribute(DisplayVocabulary.DISPLAY_ONT_MODEL ); + return ModelAccess.on(context).getDisplayModel(); case DISPLAY_TBOX: return (Model) context.getAttribute(DisplayVocabulary.CONTEXT_DISPLAY_TBOX); case DISPLAY_DISPLAY: diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java index a6ea9e704..e253cd13f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultObjectPropertyFormGenerator.java @@ -31,6 +31,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty; import edu.cornell.mannlib.vitro.webapp.beans.VClass; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; +import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils; @@ -408,16 +409,11 @@ public class DefaultObjectPropertyFormGenerator implements EditConfigurationGene if(isSelectFromExisting(vreq)) { // set ProhibitedFromSearch object so picklist doesn't show // individuals from classes that should be hidden from list views - //TODO: Check how model is retrieved - OntModel displayOntModel = - (OntModel) session.getServletContext() - .getAttribute(DISPLAY_ONT_MODEL); - if (displayOntModel != null) { - ProhibitedFromSearch pfs = new ProhibitedFromSearch( - DisplayVocabulary.SEARCH_INDEX_URI, displayOntModel); - if( editConfig != null ) - editConfig.setProhibitedFromSearch(pfs); - } + OntModel displayOntModel = ModelAccess.on(session).getDisplayModel(); + ProhibitedFromSearch pfs = new ProhibitedFromSearch( + DisplayVocabulary.SEARCH_INDEX_URI, displayOntModel); + if( editConfig != null ) + editConfig.setProhibitedFromSearch(pfs); } } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/VitroRequestPrep.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/VitroRequestPrep.java index 3f58cd191..b1217ab08 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/VitroRequestPrep.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filters/VitroRequestPrep.java @@ -4,14 +4,12 @@ package edu.cornell.mannlib.vitro.webapp.filters; import static edu.cornell.mannlib.vitro.webapp.controller.VitroRequest.SPECIAL_WRITE_MODEL; import static edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary.CONTEXT_DISPLAY_TBOX; -import static edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary.DISPLAY_ONT_MODEL; import static edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary.SWITCH_TO_DISPLAY_MODEL; import static edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary.USE_DISPLAY_MODEL_PARAM; import static edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary.USE_MODEL_PARAM; import static edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary.USE_TBOX_MODEL_PARAM; import java.io.IOException; -import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -42,20 +40,18 @@ import edu.cornell.mannlib.vitro.webapp.auth.policy.ServletPolicyList; import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties; import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.filtering.WebappDaoFactoryFiltering; import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.FilterFactory; import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.HideFromDisplayByPolicyFilter; import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.VitroFilters; import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext; -import edu.cornell.mannlib.vitro.webapp.dao.jena.RDFServiceGraph; import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroModelSource; import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactoryJena; import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactorySDB; -import edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringRDFService; import edu.cornell.mannlib.vitro.webapp.rdfservice.filter.LanguageFilteringUtils; import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.RDFServiceUtils; -import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.jena.model.RDFServiceModel; import edu.cornell.mannlib.vitro.webapp.servlet.setup.JenaDataSourceSetupBase; /** @@ -138,21 +134,14 @@ public class VitroRequestPrep implements Filter { log.debug("Found a WebappDaoFactory in the session and using it for this request"); } - // Set up the DisplayModel, with language filtering if appropriate. - OntModel displayModel; - Object displayModelObject = req.getSession().getAttribute(DISPLAY_ONT_MODEL); - if (displayModelObject instanceof OntModel) { - displayModel = (OntModel) displayModelObject; - } else { - displayModel = (OntModel) _context.getAttribute(DISPLAY_ONT_MODEL); - } - - if (Boolean.valueOf(ConfigurationProperties.getBean(vreq).getProperty( - "RDFService.languageFilter", "true"))) { - displayModel = LanguageFilteringUtils.wrapOntModelInALanguageFilter(displayModel, req); + // Set up the DisplayModel with language filtering, if appropriate. + ConfigurationProperties props = ConfigurationProperties.getBean(req); + Boolean languageFilteringEnabled = Boolean.valueOf(props.getProperty("RDFService.languageFilter", "true")); + if (languageFilteringEnabled) { + OntModel displayModel = ModelAccess.on(req.getSession()).getDisplayModel(); + OntModel filteredDisplayModel = LanguageFilteringUtils.wrapOntModelInALanguageFilter(displayModel, req); + ModelAccess.on(req).setDisplayModel(filteredDisplayModel); } - vreq.setAttribute(DISPLAY_ONT_MODEL, displayModel); - //Do model switching and replace the WebappDaoFactory with //a different version if requested by parameters @@ -245,7 +234,7 @@ public class VitroRequestPrep implements Filter { // If they asked for the display model, give it to them. if (isParameterPresent(vreq, SWITCH_TO_DISPLAY_MODEL)) { - OntModel mainOntModel = (OntModel)_context.getAttribute( DISPLAY_ONT_MODEL); + OntModel mainOntModel = ModelAccess.on(_context).getDisplayModel(); OntModel tboxOntModel = (OntModel) _context.getAttribute(CONTEXT_DISPLAY_TBOX); setSpecialWriteModel(vreq, mainOntModel); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/SolrSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/SolrSetup.java index 568f3713e..bbdb2d02e 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/SolrSetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/SolrSetup.java @@ -2,7 +2,6 @@ package edu.cornell.mannlib.vitro.webapp.search.solr; -import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; @@ -11,19 +10,16 @@ import java.util.List; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; import org.apache.solr.client.solrj.impl.XMLResponseParser; import com.hp.hpl.jena.ontology.OntModel; -import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.vocabulary.OWL; import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties; -import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao; +import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.filtering.WebappDaoFactoryFiltering; @@ -31,8 +27,6 @@ import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.VitroFilterUtils; import edu.cornell.mannlib.vitro.webapp.dao.filtering.filters.VitroFilters; import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext; import edu.cornell.mannlib.vitro.webapp.rdfservice.impl.RDFServiceUtils; -import edu.cornell.mannlib.vitro.webapp.search.beans.FileBasedProhibitedFromSearch; -import edu.cornell.mannlib.vitro.webapp.search.beans.ProhibitedFromSearch; import edu.cornell.mannlib.vitro.webapp.search.beans.StatementToURIsToUpdate; import edu.cornell.mannlib.vitro.webapp.search.indexing.AdditionalURIsForContextNodes; import edu.cornell.mannlib.vitro.webapp.search.indexing.AdditionalURIsForDataProperties; @@ -120,7 +114,7 @@ public class SolrSetup implements javax.servlet.ServletContextListener{ /* set up the individual to solr doc translation */ OntModel jenaOntModel = ModelContext.getJenaOntModel(context); - Model displayModel = ModelContext.getDisplayModel(context); + OntModel displayModel = ModelAccess.on(context).getDisplayModel(); /* try to get context attribute DocumentModifiers * and use that as the start of the list of DocumentModifier diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ApplicationModelSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ApplicationModelSetup.java index 15fc6a49f..6e7269907 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ApplicationModelSetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ApplicationModelSetup.java @@ -9,7 +9,6 @@ import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.sql.DataSource; -import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.joda.time.DateTime; @@ -23,7 +22,7 @@ import com.hp.hpl.jena.query.QueryFactory; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; -import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext; +import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelSynchronizer; import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus; @@ -63,8 +62,8 @@ implements ServletContextListener { } OntModel displayModel = ModelFactory.createOntologyModel(MEM_ONT_MODEL_SPEC); displayModel.add(displayDbModel); - displayModel.getBaseModel().register(new ModelSynchronizer(displayDbModel)); - ModelContext.setDisplayModel(displayModel, ctx); + displayModel.getBaseModel().register(new ModelSynchronizer(displayDbModel)); + ModelAccess.on(ctx).setDisplayModel(displayModel); //at each startup load all RDF files from directory to sub-models of display model initializeDisplayLoadedAtStartup(ctx, displayModel); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ContentModelSetup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ContentModelSetup.java index 4917db06f..7fce186ef 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ContentModelSetup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/ContentModelSetup.java @@ -2,7 +2,6 @@ package edu.cornell.mannlib.vitro.webapp.servlet.setup; -import static edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary.DISPLAY_ONT_MODEL; import static edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactorySDB.SDBDatasetMode.ASSERTIONS_ONLY; import static edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactorySDB.SDBDatasetMode.INFERENCES_ONLY; @@ -28,6 +27,7 @@ import com.hp.hpl.jena.shared.Lock; import com.hp.hpl.jena.util.ResourceUtils; import com.hp.hpl.jena.vocabulary.RDF; +import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactoryConfig; import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext; @@ -72,7 +72,7 @@ public class ContentModelSetup extends JenaDataSourceSetupBase } OntModel userAccountsModel = ontModelFromContextAttribute(ctx, "userAccountsOntModel"); - OntModel displayModel = ontModelFromContextAttribute(ctx,DISPLAY_ONT_MODEL); + OntModel displayModel = ModelAccess.on(ctx).getDisplayModel(); OntModel baseABoxModel = createNamedModelFromDataset(dataset, JENA_DB_MODEL); OntModel inferenceABoxModel = createNamedModelFromDataset(dataset, JENA_INF_MODEL); OntModel baseTBoxModel = createdMemoryMappedModel(dataset, JENA_TBOX_ASSERTIONS_MODEL, "tbox assertions"); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java index dcfc12e3e..704931866 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/servlet/setup/UpdateKnowledgeBase.java @@ -32,6 +32,7 @@ import com.hp.hpl.jena.vocabulary.RDF; import com.hp.hpl.jena.vocabulary.RDFS; import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; +import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext; import edu.cornell.mannlib.vitro.webapp.ontology.update.KnowledgeBaseUpdater; @@ -106,7 +107,7 @@ public class UpdateKnowledgeBase implements ServletContextListener { settings.setUnionOntModelSelector(ModelContext.getUnionOntModelSelector(ctx)); boolean tryMigrateDisplay = true; try { - settings.setDisplayModel(ModelContext.getDisplayModel(ctx)); + settings.setDisplayModel(ModelAccess.on(ctx).getDisplayModel()); OntModel oldTBoxModel = loadModelFromDirectory(ctx.getRealPath(OLD_TBOX_MODEL_DIR)); settings.setOldTBoxModel(oldTBoxModel); OntModel newTBoxModel = loadModelFromDirectory(ctx.getRealPath(NEW_TBOX_MODEL_DIR)); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/ApplicationConfigurationOntologyUtils.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/ApplicationConfigurationOntologyUtils.java index 5a64e2190..bf353c5b1 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/ApplicationConfigurationOntologyUtils.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/ApplicationConfigurationOntologyUtils.java @@ -5,6 +5,8 @@ package edu.cornell.mannlib.vitro.webapp.utils; import java.util.ArrayList; import java.util.List; +import javax.servlet.ServletContext; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -21,6 +23,7 @@ import com.hp.hpl.jena.rdf.model.Resource; import edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; import edu.cornell.mannlib.vitro.webapp.dao.jena.ModelContext; public class ApplicationConfigurationOntologyUtils { @@ -28,8 +31,9 @@ public class ApplicationConfigurationOntologyUtils { private static final Log log = LogFactory.getLog(ApplicationConfigurationOntologyUtils.class); public static List getAdditionalFauxSubpropertiesForList(List propList, VitroRequest vreq) { - Model displayModel = ModelContext.getDisplayModel(vreq.getSession().getServletContext()); - Model tboxModel = ModelContext.getUnionOntModelSelector(vreq.getSession().getServletContext()).getTBoxModel(); + ServletContext ctx = vreq.getSession().getServletContext(); + Model displayModel = ModelAccess.on(ctx).getDisplayModel(); + Model tboxModel = ModelContext.getUnionOntModelSelector(ctx).getTBoxModel(); return getAdditionalFauxSubpropertiesForList(propList, displayModel, tboxModel); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/DataGetterBase.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/DataGetterBase.java index 51d5b9644..a57025796 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/DataGetterBase.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/dataGetter/DataGetterBase.java @@ -1,8 +1,6 @@ /* $This file is distributed under the terms of the license in /doc/license.txt$ */ package edu.cornell.mannlib.vitro.webapp.utils.dataGetter; -import java.util.Map; - import javax.servlet.ServletContext; import org.apache.commons.lang.StringUtils; @@ -11,9 +9,7 @@ import com.hp.hpl.jena.rdf.model.Model; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.jena.JenaIngestController; -import edu.cornell.mannlib.vitro.webapp.dao.DisplayVocabulary; -import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaModelMaker; -import edu.cornell.mannlib.vitro.webapp.dao.jena.VitroJenaSDBModelMaker; +import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; public abstract class DataGetterBase implements DataGetter { @@ -29,7 +25,7 @@ public abstract class DataGetterBase implements DataGetter { }else if( REQUEST_JENA_ONT_MODEL.equals(modelName)){ return vreq.getJenaOntModel(); }else if( CONTEXT_DISPLAY_MODEL.equals(modelName)){ - return (Model)context.getAttribute( DisplayVocabulary.DISPLAY_ONT_MODEL); + return ModelAccess.on(context).getDisplayModel(); }else if( ! StringUtils.isEmpty( modelName)){ Model model = JenaIngestController.getModel( modelName, vreq, context); if( model == null )