From e664b8bf62cd6e2054694075b43b9be107d737e9 Mon Sep 17 00:00:00 2001 From: ryounes Date: Wed, 20 Jul 2011 19:31:18 +0000 Subject: [PATCH] NIHVIVO-2974 Allow for vivo-specific extensions to SiteAdminController. Move vivo-specific links to this extension. --- .../freemarker/BaseSiteAdminController.java | 202 ++++++++++++++++++ .../freemarker/SiteAdminController.java | 199 +---------------- 2 files changed, 203 insertions(+), 198 deletions(-) create mode 100644 webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/BaseSiteAdminController.java diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/BaseSiteAdminController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/BaseSiteAdminController.java new file mode 100644 index 000000000..9a0698c93 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/BaseSiteAdminController.java @@ -0,0 +1,202 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.controller.freemarker; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import edu.cornell.mannlib.vedit.util.FormUtils; +import edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyHelper; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.EditIndividuals; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.EditOntology; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.EditSiteInformation; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.ManageMenus; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.ManageUserAccounts; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.RefreshVisualizationCacheAction; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.SeeSiteAdminPage; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.UseAdvancedDataToolsPages; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.UseMiscellaneousAdminPages; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.UseMiscellaneousCuratorPages; +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.ParamMap; +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.dao.WebappDaoFactory; +import edu.cornell.mannlib.vitro.webapp.dao.jena.pellet.PelletListener; +import edu.cornell.mannlib.vitro.webapp.search.controller.IndexController; + +public class BaseSiteAdminController extends FreemarkerHttpServlet { + + private static final long serialVersionUID = 1L; + private static final Log log = LogFactory.getLog(BaseSiteAdminController.class); + protected static final String TEMPLATE_DEFAULT = "siteAdmin-main.ftl"; + + public static final Actions REQUIRED_ACTIONS = new Actions(new SeeSiteAdminPage()); + + @Override + protected Actions requiredActions(VitroRequest vreq) { + return REQUIRED_ACTIONS; + } + + @Override + public String getTitle(String siteName, VitroRequest vreq) { + return siteName + " Site Administration"; + } + + @Override + protected ResponseValues processRequest(VitroRequest vreq) { + + Map body = new HashMap(); + + body.put("dataInput", getDataInputData(vreq)); + body.put("siteConfig", getSiteConfigUrls(vreq)); + body.put("indexCacheRebuild", getIndexCacheRebuildUrls(vreq)); + body.put("ontologyEditor", getOntologyEditorData(vreq)); + body.put("dataTools", getDataToolsUrls(vreq)); + + return new TemplateResponseValues(TEMPLATE_DEFAULT, body); + } + + protected Map getIndexCacheRebuildUrls(VitroRequest vreq) { + + Map urls = new HashMap(); + + if (PolicyHelper.isAuthorizedForActions(vreq, new UseMiscellaneousAdminPages())) { + + urls.put("recomputeInferences", UrlBuilder.getUrl("/RecomputeInferences")); + + urls.put("rebuildClassGroupCache", UrlBuilder.getUrl("/browse?clearcache=1")); + + if (PolicyHelper.isAuthorizedForActions(vreq, IndexController.REQUIRED_ACTIONS)) { + urls.put("rebuildSearchIndex", UrlBuilder.getUrl("/SearchIndex")); + } + } + return urls; + } + + protected Map getDataInputData(VitroRequest vreq) { + + Map map = new HashMap(); + + if (PolicyHelper.isAuthorizedForActions(vreq, new EditIndividuals())) { + + map.put("formAction", UrlBuilder.getUrl("/edit/editRequestDispatch.jsp")); + + WebappDaoFactory wadf = vreq.getFullWebappDaoFactory(); + + // Create map for data input entry form options list + List classGroups = wadf.getVClassGroupDao().getPublicGroupsWithVClasses(true,true,false); // order by displayRank, include uninstantiated classes, don't get the counts of individuals + + Set seenGroupNames = new HashSet(); + + Iterator classGroupIt = classGroups.iterator(); + LinkedHashMap orderedClassGroups = new LinkedHashMap(classGroups.size()); + while (classGroupIt.hasNext()) { + VClassGroup group = (VClassGroup)classGroupIt.next(); + List opts = FormUtils.makeOptionListFromBeans(group.getVitroClassList(),"URI","PickListName",null,null,false); + if( seenGroupNames.contains(group.getPublicName() )){ + //have a duplicate classgroup name, stick in the URI + orderedClassGroups.put(group.getPublicName() + " ("+group.getURI()+")", opts); + }else if( group.getPublicName() == null ){ + //have an unlabeled group, stick in the URI + orderedClassGroups.put("unnamed group ("+group.getURI()+")", opts); + }else{ + orderedClassGroups.put(group.getPublicName(),opts); + seenGroupNames.add(group.getPublicName()); + } + } + + map.put("groupedClassOptions", orderedClassGroups); + } + return map; + } + + protected Map getSiteConfigUrls(VitroRequest vreq) { + + Map urls = new HashMap(); + + if (PolicyHelper.isAuthorizedForActions(vreq, new ManageUserAccounts())) { + urls.put("userAccounts", UrlBuilder.getUrl("/accountsAdmin")); + } + + if (PolicyHelper.isAuthorizedForActions(vreq, new EditSiteInformation())) { + urls.put("siteInfo", UrlBuilder.getUrl("/editForm", "controller", "ApplicationBean")); + } + + if (PolicyHelper.isAuthorizedForActions(vreq, new ManageMenus())) { + urls.put("menuManagement", UrlBuilder.getUrl("/individual", + "uri", "http://vitro.mannlib.cornell.edu/ontologies/display/1.1#DefaultMenu", + "switchToDisplayModel", "true")); + } + + return urls; + } + + protected Map getOntologyEditorData(VitroRequest vreq) { + + Map map = new HashMap(); + + if (PolicyHelper.isAuthorizedForActions(vreq, new EditOntology())) { + + String pelletError = null; + String pelletExplanation = null; + Object plObj = getServletContext().getAttribute("pelletListener"); + if ( (plObj != null) && (plObj instanceof PelletListener) ) { + PelletListener pelletListener = (PelletListener) plObj; + if (!pelletListener.isConsistent()) { + pelletError = "INCONSISTENT ONTOLOGY: reasoning halted."; + pelletExplanation = pelletListener.getExplanation(); + } else if ( pelletListener.isInErrorState() ) { + pelletError = "An error occurred during reasoning. Reasoning has been halted. See error log for details."; + } + } + + if (pelletError != null) { + Map pellet = new HashMap(); + pellet.put("error", pelletError); + if (pelletExplanation != null) { + pellet.put("explanation", pelletExplanation); + } + map.put("pellet", pellet); + } + + Map urls = new HashMap(); + + urls.put("ontologies", UrlBuilder.getUrl("/listOntologies")); + urls.put("classHierarchy", UrlBuilder.getUrl("/showClassHierarchy")); + urls.put("classGroups", UrlBuilder.getUrl("/listGroups")); + urls.put("dataPropertyHierarchy", UrlBuilder.getUrl("/showDataPropertyHierarchy")); + urls.put("propertyGroups", UrlBuilder.getUrl("/listPropertyGroups")); + urls.put("objectPropertyHierarchy", UrlBuilder.getUrl("/showObjectPropertyHierarchy", new ParamMap("iffRoot", "true"))); + map.put("urls", urls); + } + + return map; + } + + protected Map getDataToolsUrls(VitroRequest vreq) { + + Map urls = new HashMap(); + + if (PolicyHelper.isAuthorizedForActions(vreq, new UseAdvancedDataToolsPages())) { + urls.put("ingest", UrlBuilder.getUrl("/ingest")); + urls.put("rdfData", UrlBuilder.getUrl("/uploadRDFForm")); + urls.put("rdfExport", UrlBuilder.getUrl("/export")); + urls.put("sparqlQuery", UrlBuilder.getUrl("/admin/sparqlquery")); + urls.put("sparqlQueryBuilder", UrlBuilder.getUrl("/admin/sparqlquerybuilder")); + } + + return urls; + } + +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java index 42a797ccf..99dcdd1c2 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/SiteAdminController.java @@ -2,209 +2,12 @@ package edu.cornell.mannlib.vitro.webapp.controller.freemarker; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import edu.cornell.mannlib.vedit.util.FormUtils; -import edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyHelper; -import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; -import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.EditIndividuals; -import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.EditOntology; -import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.EditSiteInformation; -import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.ManageMenus; -import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.ManageUserAccounts; -import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.RefreshVisualizationCacheAction; -import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.SeeSiteAdminPage; -import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.UseAdvancedDataToolsPages; -import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.UseMiscellaneousAdminPages; -import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.UseMiscellaneousCuratorPages; -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.ParamMap; -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.dao.WebappDaoFactory; -import edu.cornell.mannlib.vitro.webapp.dao.jena.pellet.PelletListener; -import edu.cornell.mannlib.vitro.webapp.search.controller.IndexController; - -public class SiteAdminController extends FreemarkerHttpServlet { +public class SiteAdminController extends BaseSiteAdminController { private static final long serialVersionUID = 1L; private static final Log log = LogFactory.getLog(SiteAdminController.class); - private static final String TEMPLATE_DEFAULT = "siteAdmin-main.ftl"; - - public static final Actions REQUIRED_ACTIONS = new Actions(new SeeSiteAdminPage()); - - @Override - protected Actions requiredActions(VitroRequest vreq) { - return REQUIRED_ACTIONS; - } - - @Override - public String getTitle(String siteName, VitroRequest vreq) { - return siteName + " Site Administration"; - } - - @Override - protected ResponseValues processRequest(VitroRequest vreq) { - - Map body = new HashMap(); - - body.put("dataInput", getDataInputData(vreq)); - body.put("siteConfig", getSiteConfigUrls(vreq)); - body.put("indexCacheRebuild", getIndexCacheRebuildUrls(vreq)); - body.put("ontologyEditor", getOntologyEditorData(vreq)); - body.put("dataTools", getDataToolsUrls(vreq)); - - return new TemplateResponseValues(TEMPLATE_DEFAULT, body); - } - - private Map getIndexCacheRebuildUrls(VitroRequest vreq) { - - Map urls = new HashMap(); - - if (PolicyHelper.isAuthorizedForActions(vreq, new UseMiscellaneousAdminPages())) { - - urls.put("recomputeInferences", UrlBuilder.getUrl("/RecomputeInferences")); - - urls.put("rebuildClassGroupCache", UrlBuilder.getUrl("/browse?clearcache=1")); - - if (PolicyHelper.isAuthorizedForActions(vreq, IndexController.REQUIRED_ACTIONS)) { - urls.put("rebuildSearchIndex", UrlBuilder.getUrl("/SearchIndex")); - } - - if (PolicyHelper.isAuthorizedForActions(vreq, new RefreshVisualizationCacheAction())) { - urls.put("rebuildVisCache", UrlBuilder.getUrl("/vis/tools")); - } - } - return urls; - } - - private Map getDataInputData(VitroRequest vreq) { - - Map map = new HashMap(); - - if (PolicyHelper.isAuthorizedForActions(vreq, new EditIndividuals())) { - - map.put("formAction", UrlBuilder.getUrl("/edit/editRequestDispatch.jsp")); - - WebappDaoFactory wadf = vreq.getFullWebappDaoFactory(); - - // Create map for data input entry form options list - List classGroups = wadf.getVClassGroupDao().getPublicGroupsWithVClasses(true,true,false); // order by displayRank, include uninstantiated classes, don't get the counts of individuals - - Set seenGroupNames = new HashSet(); - - Iterator classGroupIt = classGroups.iterator(); - LinkedHashMap orderedClassGroups = new LinkedHashMap(classGroups.size()); - while (classGroupIt.hasNext()) { - VClassGroup group = (VClassGroup)classGroupIt.next(); - List opts = FormUtils.makeOptionListFromBeans(group.getVitroClassList(),"URI","PickListName",null,null,false); - if( seenGroupNames.contains(group.getPublicName() )){ - //have a duplicate classgroup name, stick in the URI - orderedClassGroups.put(group.getPublicName() + " ("+group.getURI()+")", opts); - }else if( group.getPublicName() == null ){ - //have an unlabeled group, stick in the URI - orderedClassGroups.put("unnamed group ("+group.getURI()+")", opts); - }else{ - orderedClassGroups.put(group.getPublicName(),opts); - seenGroupNames.add(group.getPublicName()); - } - } - - map.put("groupedClassOptions", orderedClassGroups); - } - return map; - } - - private Map getSiteConfigUrls(VitroRequest vreq) { - - Map urls = new HashMap(); - - if (PolicyHelper.isAuthorizedForActions(vreq, new ManageUserAccounts())) { - urls.put("userAccounts", UrlBuilder.getUrl("/accountsAdmin")); - } - - if (PolicyHelper.isAuthorizedForActions(vreq, new EditSiteInformation())) { - urls.put("siteInfo", UrlBuilder.getUrl("/editForm", "controller", "ApplicationBean")); - } - - if (PolicyHelper.isAuthorizedForActions(vreq, new ManageMenus())) { - urls.put("menuManagement", UrlBuilder.getUrl("/individual", - "uri", "http://vitro.mannlib.cornell.edu/ontologies/display/1.1#DefaultMenu", - "switchToDisplayModel", "true")); - } - - if (PolicyHelper.isAuthorizedForActions(vreq, new UseMiscellaneousCuratorPages())) { - urls.put("internalClass", UrlBuilder.getUrl("/processInstitutionalInternalClass")); - } - - return urls; - } - - private Map getOntologyEditorData(VitroRequest vreq) { - - Map map = new HashMap(); - - if (PolicyHelper.isAuthorizedForActions(vreq, new EditOntology())) { - - String pelletError = null; - String pelletExplanation = null; - Object plObj = getServletContext().getAttribute("pelletListener"); - if ( (plObj != null) && (plObj instanceof PelletListener) ) { - PelletListener pelletListener = (PelletListener) plObj; - if (!pelletListener.isConsistent()) { - pelletError = "INCONSISTENT ONTOLOGY: reasoning halted."; - pelletExplanation = pelletListener.getExplanation(); - } else if ( pelletListener.isInErrorState() ) { - pelletError = "An error occurred during reasoning. Reasoning has been halted. See error log for details."; - } - } - - if (pelletError != null) { - Map pellet = new HashMap(); - pellet.put("error", pelletError); - if (pelletExplanation != null) { - pellet.put("explanation", pelletExplanation); - } - map.put("pellet", pellet); - } - - Map urls = new HashMap(); - - urls.put("ontologies", UrlBuilder.getUrl("/listOntologies")); - urls.put("classHierarchy", UrlBuilder.getUrl("/showClassHierarchy")); - urls.put("classGroups", UrlBuilder.getUrl("/listGroups")); - urls.put("dataPropertyHierarchy", UrlBuilder.getUrl("/showDataPropertyHierarchy")); - urls.put("propertyGroups", UrlBuilder.getUrl("/listPropertyGroups")); - urls.put("objectPropertyHierarchy", UrlBuilder.getUrl("/showObjectPropertyHierarchy", new ParamMap("iffRoot", "true"))); - map.put("urls", urls); - } - - return map; - } - - private Map getDataToolsUrls(VitroRequest vreq) { - - Map urls = new HashMap(); - - if (PolicyHelper.isAuthorizedForActions(vreq, new UseAdvancedDataToolsPages())) { - urls.put("ingest", UrlBuilder.getUrl("/ingest")); - urls.put("rdfData", UrlBuilder.getUrl("/uploadRDFForm")); - urls.put("rdfExport", UrlBuilder.getUrl("/export")); - urls.put("sparqlQuery", UrlBuilder.getUrl("/admin/sparqlquery")); - urls.put("sparqlQueryBuilder", UrlBuilder.getUrl("/admin/sparqlquerybuilder")); - } - - return urls; - } }