diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/VClass.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/VClass.java index 41d4b8799..849cd7f5e 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/VClass.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/VClass.java @@ -129,6 +129,29 @@ public class VClass extends BaseResourceBean implements Comparable localName = uri.getLocalName(); } + /** + * Constructs the VClass as a deep copy of an existing VClass. + */ + public VClass( VClass vc) { + this.URI = vc.URI; + this.namespace = vc.namespace; + this.localName = vc.localName; + this.myName = vc.myName; + this.myExample = vc.myExample; + this.myDescription = vc.myDescription; + this.myShortDefinition = vc.myShortDefinition; + this.myEntityCount = vc.myEntityCount; + this.displayLimit = vc.displayLimit; + this.displayRank = vc.displayRank; + this.quickEditJsp = vc.quickEditJsp; + this.groupURI = vc.groupURI; + this.group = (vc.group == null) ? null : new VClassGroup(vc.group); + this.customEntryForm = vc.customEntryForm; + this.customDisplayView = vc.customDisplayView; + this.customShortView = vc.customShortView; + this.customSearchView = vc.customSearchView; + } + /** * Sorts alphabetically by name */ diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/VClassGroup.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/VClassGroup.java index 734d02d42..8a975ff3f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/VClassGroup.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/VClassGroup.java @@ -62,6 +62,15 @@ public class VClassGroup extends LinkedList implements Comparable groupMap = new LinkedHashMap<>(); + private final Map classMap = new HashMap<>(); + + public VClassGroupsForRequest(HttpServletRequest req, VClassGroupCache cache) { + this.req = req; + + for (VClassGroup vcGroup : cache.getGroups()) { + loadGroup(vcGroup); + } + + if (log.isDebugEnabled()) { + log.debug("groups: " + groupMap); + log.debug("classes: " + classMap); + } + } + + private void loadGroup(VClassGroup vcg) { + VClassGroup newVcg = new VClassGroup(vcg); + newVcg.setPublicName(getNameForGroup(vcg)); + groupMap.put(newVcg.getURI(), newVcg); + + for (VClass vClass : vcg) { + loadClass(vClass, newVcg); + } + } + + private String getNameForGroup(VClassGroup vcGroup) { + VClassGroup g = ModelAccess.on(req).getWebappDaoFactory() + .getVClassGroupDao().getGroupByURI(vcGroup.getURI()); + return (g == null) ? vcGroup.getPublicName() : g.getPublicName(); + } + + private void loadClass(VClass vc, VClassGroup newVcg) { + VClass newVc = new VClass(vc); + newVc.setName(getNameForVClass(vc)); + newVc.setGroup(newVcg); + newVcg.add(newVc); + classMap.put(newVc.getURI(), newVc); + } + + private String getNameForVClass(VClass vClass) { + VClass vc = ModelAccess.on(req).getWebappDaoFactory().getVClassDao() + .getVClassByURI(vClass.getURI()); + return (vc == null) ? vClass.getName() : vc.getName(); + } + + public VClassGroup getGroup(String vClassGroupURI) { + VClassGroup vcg = groupMap.get(vClassGroupURI); + log.debug("getGroup(" + vClassGroupURI + ") = " + vcg); + return vcg; + } + + public List getGroups() { + ArrayList groups = new ArrayList<>(groupMap.values()); + log.debug("getGroups() returned " + groups.size() + " groups."); + return groups; + } + + public VClass getCachedVClass(String classUri) { + VClass vc = classMap.get(classUri); + log.debug("getCachedVClass(" + classUri + ") = " + vc); + return vc; + } + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassGroupCache.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassGroupCache.java index 55c2c127c..4be2ed142 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassGroupCache.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/VClassGroupCache.java @@ -10,6 +10,7 @@ import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; +import javax.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -33,6 +34,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.VClass; import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup; import edu.cornell.mannlib.vitro.webapp.dao.ModelAccess; import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupDao; +import edu.cornell.mannlib.vitro.webapp.dao.VClassGroupsForRequest; 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; @@ -227,6 +229,14 @@ public class VClassGroupCache implements IndexingEventListener { return (VClassGroupCache) sc.getAttribute(ATTRIBUTE_NAME); } + /** + * Use getVClassGroups(HttpServletRequest) to get a language-aware image of + * the cached groups and classes. + */ + public static VClassGroupsForRequest getVClassGroups(HttpServletRequest req) { + return new VClassGroupsForRequest(req, getVClassGroupCache(req.getSession().getServletContext())); + } + /** * Method that rebuilds the cache. This will use a WebappDaoFactory, * a SolrSever and maybe a ProhibitedFromSearch from the cache.context.