From f2148a785c49a15d7c2d68778098f6892be6b611 Mon Sep 17 00:00:00 2001 From: tankchintan Date: Tue, 12 Jul 2011 19:30:05 +0000 Subject: [PATCH] 1. Modified visualization request handlers so that they can handle privileges i.e. give access to users who have the right permissions to view that visualization related page. 2. Improved how short url parameters were extracted. 3. Added a new feature "Refresh Visualziation Cache" which reconstructs all the models that are currently saved. This so that the admin can rebuild the vis cache instead of having to restart the server to rebuilding the cache. --- .../visualizations-beans-injection-fm.xml | 7 + .../regenerateConstructedModels.ftl | 56 +++++++ .../AjaxVisualizationController.java | 22 +++ .../DataVisualizationController.java | 11 +- .../ShortURLVisualizationController.java | 46 ++++-- .../StandardVisualizationController.java | 22 ++- .../CoAuthorshipRequestHandler.java | 6 + .../CoPIGrantCountRequestHandler.java | 6 + .../EntityPublicationCountRequestHandler.java | 7 + ...poralGrantVisualizationRequestHandler.java | 7 + ...ublicationVisualizationRequestHandler.java | 7 + .../EntityGrantCountRequestHandler.java | 7 + ...alConstructedModelIdentifierException.java | 21 +++ ...pOfScienceVisualizationRequestHandler.java | 7 + .../ModelConstructorRequestHandler.java | 144 ++++++++++++++++++ .../ModelConstructorUtilities.java | 14 +- ...ciatedPeopleModelWithTypesConstructor.java | 3 +- ...OrganizationModelWithTypesConstructor.java | 3 +- ...tsForSubOrganizationsModelConstructor.java | 3 +- ...nsForSubOrganizationsModelConstructor.java | 1 + .../PeopleToGrantsModelConstructor.java | 1 + .../PeopleToPublicationsModelConstructor.java | 1 + .../PersonToGrantsModelConstructor.java | 1 + .../PersonToPublicationsModelConstructor.java | 3 +- ...SubOrganizationWithinModelConstructor.java | 1 + .../PersonGrantCountRequestHandler.java | 7 + .../PersonLevelRequestHandler.java | 8 +- .../PersonPublicationCountRequestHandler.java | 7 + .../utilities/UtilitiesRequestHandler.java | 7 + .../valueobjects/ConstructedModel.java | 39 +++++ .../valueobjects/ConstructedModelTracker.java | 23 ++- .../visutils/UtilityFunctions.java | 16 +- .../visutils/VisualizationRequestHandler.java | 3 + 33 files changed, 490 insertions(+), 27 deletions(-) create mode 100644 productMods/templates/freemarker/visualization/modelconstructor/regenerateConstructedModels.ftl create mode 100644 src/edu/cornell/mannlib/vitro/webapp/visualization/exceptions/IllegalConstructedModelIdentifierException.java create mode 100644 src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/ModelConstructorRequestHandler.java create mode 100644 src/edu/cornell/mannlib/vitro/webapp/visualization/valueobjects/ConstructedModel.java diff --git a/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml b/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml index 4f275f63..50831035 100644 --- a/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml +++ b/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml @@ -43,6 +43,9 @@ + + @@ -111,6 +114,10 @@ + + + + diff --git a/productMods/templates/freemarker/visualization/modelconstructor/regenerateConstructedModels.ftl b/productMods/templates/freemarker/visualization/modelconstructor/regenerateConstructedModels.ftl new file mode 100644 index 00000000..fda25f21 --- /dev/null +++ b/productMods/templates/freemarker/visualization/modelconstructor/regenerateConstructedModels.ftl @@ -0,0 +1,56 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + + +<#if (currentModels?size > 0)> + + + Below cached models will be regenerated.
+ +
    + <#list currentModels as model> +
  • + + <#if model.uri == ""> + + URI Independent Model + + <#else> + + ${model.individualLabel} + + + ${model.humanReadableType} + +
  • + +
+ +<#else> + + Currently there are no constructed models for use by visualization. + + + +${stylesheets.add('')} + +<#assign standardVisualizationURLRoot ="/visualization"> +<#assign ajaxVisualizationURLRoot ="/visualizationAjax"> +<#assign dataVisualizationURLRoot ="/visualizationData"> +<#assign shortVisualizationURLRoot ="/vis"> + +<#assign refreshCacheVisTypeParam = "refresh-cache"> + +<#assign regenerateCacheURL = "${urls.base}${ajaxVisualizationURLRoot}?vis=${refreshCacheVisTypeParam}"> + + \ No newline at end of file diff --git a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/AjaxVisualizationController.java b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/AjaxVisualizationController.java index cfc9e7c2..95231ee8 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/AjaxVisualizationController.java +++ b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/AjaxVisualizationController.java @@ -16,6 +16,7 @@ import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.query.Syntax; import com.hp.hpl.jena.rdf.model.Model; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.TemplateProcessingHelper.TemplateProcessingException; @@ -41,6 +42,27 @@ public class AjaxVisualizationController extends FreemarkerHttpServlet { protected static final Syntax SYNTAX = Syntax.syntaxARQ; public static ServletContext servletContext; + + @Override + protected Actions requiredActions(VitroRequest vreq) { + + /* + * Based on the query parameters passed via URI get the appropriate visualization + * request handler. + * */ + VisualizationRequestHandler visRequestHandler = + getVisualizationRequestHandler(vreq); + + if (visRequestHandler != null) { + + Actions requiredPrivileges = visRequestHandler.getRequiredPrivileges(); + if (requiredPrivileges != null) { + return requiredPrivileges; + } + } + + return super.requiredActions(vreq); + } @Override public void doGet(HttpServletRequest request, HttpServletResponse response) diff --git a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/DataVisualizationController.java b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/DataVisualizationController.java index b032528b..a41b3d65 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/DataVisualizationController.java +++ b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/DataVisualizationController.java @@ -45,7 +45,7 @@ public class DataVisualizationController extends VitroHttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - + VitroRequest vreq = new VitroRequest(request); /* @@ -55,8 +55,15 @@ public class DataVisualizationController extends VitroHttpServlet { VisualizationRequestHandler visRequestHandler = getVisualizationRequestHandler(vreq); - if (visRequestHandler != null) { + if (visRequestHandler != null) { + + if (visRequestHandler.getRequiredPrivileges() != null) { + if (!isAuthorizedToDisplayPage(request, response, visRequestHandler.getRequiredPrivileges())) { + return; + } + } + /* * Pass the query to the selected visualization request handler & render the vis. * Since the visualization content is directly added to the response object we are side- diff --git a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/ShortURLVisualizationController.java b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/ShortURLVisualizationController.java index 204c0b9d..305fcc98 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/ShortURLVisualizationController.java +++ b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/ShortURLVisualizationController.java @@ -6,11 +6,9 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.regex.Matcher; import javax.servlet.ServletContext; -import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -18,6 +16,7 @@ import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.query.Syntax; import com.hp.hpl.jena.rdf.model.Model; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; @@ -42,6 +41,25 @@ public class ShortURLVisualizationController extends FreemarkerHttpServlet { protected static final Syntax SYNTAX = Syntax.syntaxARQ; public static ServletContext servletContext; + + @Override + protected Actions requiredActions(VitroRequest vreq) { + /* + * Based on the query parameters passed via URI get the appropriate visualization + * request handler. + * */ + VisualizationRequestHandler visRequestHandler = + getVisualizationRequestHandler(vreq); + + if (visRequestHandler != null) { + + Actions requiredPrivileges = visRequestHandler.getRequiredPrivileges(); + if (requiredPrivileges != null) { + return requiredPrivileges; + } + } + return super.requiredActions(vreq); + } @Override protected ResponseValues processRequest(VitroRequest vreq) { @@ -145,7 +163,7 @@ public class ShortURLVisualizationController extends FreemarkerHttpServlet { * url. * */ String subjectURI = null; - if (StringUtils.isBlank(matchedPatternGroups.get(1))) { + if (matchedPatternGroups.size() <= 1) { subjectURI = vitroRequest.getParameter(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY); @@ -226,21 +244,17 @@ public class ShortURLVisualizationController extends FreemarkerHttpServlet { * as an input. */ private List extractShortURLParameters(VitroRequest vitroRequest) { - - Matcher requestPatternMatcher = VisualizationFrameworkConstants - .SHORT_URL_REQUEST_PATTERN - .matcher(vitroRequest.getRequestURI() - .substring(vitroRequest.getContextPath().length())); List matchedGroups = new ArrayList(); - - if(requestPatternMatcher.matches() && requestPatternMatcher.groupCount() >= 1) { - - for (int ii=1; ii<=requestPatternMatcher.groupCount(); ii++) { - matchedGroups.add(requestPatternMatcher.group(ii)); - } - - } + + String[] urlParams = vitroRequest.getRequestURI().substring(vitroRequest.getContextPath().length()+1).split("/"); + + if (urlParams.length > 1 + && urlParams[0].equalsIgnoreCase("vis")) { + for (int ii=1; ii < urlParams.length; ii++) { + matchedGroups.add(urlParams[ii]); + } + } return matchedGroups; } diff --git a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/StandardVisualizationController.java b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/StandardVisualizationController.java index d01a9e38..21a61b86 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/StandardVisualizationController.java +++ b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/StandardVisualizationController.java @@ -11,6 +11,7 @@ import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.query.Syntax; import com.hp.hpl.jena.rdf.model.Model; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; @@ -35,10 +36,28 @@ public class StandardVisualizationController extends FreemarkerHttpServlet { protected static final Syntax SYNTAX = Syntax.syntaxARQ; public static ServletContext servletContext; + + @Override + protected Actions requiredActions(VitroRequest vreq) { + /* + * Based on the query parameters passed via URI get the appropriate visualization + * request handler. + * */ + VisualizationRequestHandler visRequestHandler = + getVisualizationRequestHandler(vreq); + + if (visRequestHandler != null) { + + Actions requiredPrivileges = visRequestHandler.getRequiredPrivileges(); + if (requiredPrivileges != null) { + return requiredPrivileges; + } + } + return super.requiredActions(vreq); + } @Override protected ResponseValues processRequest(VitroRequest vreq) { - /* * Based on the query parameters passed via URI get the appropriate visualization * request handler. @@ -122,6 +141,7 @@ public class StandardVisualizationController extends FreemarkerHttpServlet { .VIS_TYPE_KEY); VisualizationRequestHandler visRequestHandler = null; + try { visRequestHandler = VisualizationsDependencyInjector .getVisualizationIDsToClassMap(getServletContext()) diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/CoAuthorshipRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/CoAuthorshipRequestHandler.java index 5030b1d8..46858c61 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/CoAuthorshipRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/coauthorship/CoAuthorshipRequestHandler.java @@ -14,6 +14,7 @@ import org.apache.commons.logging.Log; import com.hp.hpl.jena.query.Dataset; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.visualization.DataVisualizationController; @@ -294,4 +295,9 @@ public class CoAuthorshipRequestHandler implements VisualizationRequestHandler { return fileData; } + @Override + public Actions getRequiredPrivileges() { + return null; + } + } diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/coprincipalinvestigator/CoPIGrantCountRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/coprincipalinvestigator/CoPIGrantCountRequestHandler.java index dfa8f7d5..12315336 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/coprincipalinvestigator/CoPIGrantCountRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/coprincipalinvestigator/CoPIGrantCountRequestHandler.java @@ -13,6 +13,7 @@ import org.apache.commons.logging.Log; import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.rdf.model.Model; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.visualization.DataVisualizationController; @@ -288,4 +289,9 @@ public class CoPIGrantCountRequestHandler implements VisualizationRequestHandler } + @Override + public Actions getRequiredPrivileges() { + return null; + } + } \ No newline at end of file diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/entitycomparison/EntityPublicationCountRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/entitycomparison/EntityPublicationCountRequestHandler.java index 84777e1c..0a84b842 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/entitycomparison/EntityPublicationCountRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/entitycomparison/EntityPublicationCountRequestHandler.java @@ -17,6 +17,7 @@ import com.google.gson.Gson; import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.rdf.model.Model; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; @@ -346,4 +347,10 @@ public class EntityPublicationCountRequestHandler implements return csvFileContent.toString(); } + @Override + public Actions getRequiredPrivileges() { + // TODO Auto-generated method stub + return null; + } + } \ No newline at end of file diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/entitycomparison/cached/TemporalGrantVisualizationRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/entitycomparison/cached/TemporalGrantVisualizationRequestHandler.java index 0588aafd..a7455f60 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/entitycomparison/cached/TemporalGrantVisualizationRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/entitycomparison/cached/TemporalGrantVisualizationRequestHandler.java @@ -16,6 +16,7 @@ import org.apache.commons.logging.Log; import com.google.gson.Gson; import com.hp.hpl.jena.query.Dataset; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; @@ -378,5 +379,11 @@ public class TemporalGrantVisualizationRequestHandler implements } return csvFileContent.toString(); + } + + + @Override + public Actions getRequiredPrivileges() { + return null; } } diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/entitycomparison/cached/TemporalPublicationVisualizationRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/entitycomparison/cached/TemporalPublicationVisualizationRequestHandler.java index 02015daf..49a73356 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/entitycomparison/cached/TemporalPublicationVisualizationRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/entitycomparison/cached/TemporalPublicationVisualizationRequestHandler.java @@ -16,6 +16,7 @@ import org.apache.commons.logging.Log; import com.google.gson.Gson; import com.hp.hpl.jena.query.Dataset; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; @@ -370,4 +371,10 @@ public class TemporalPublicationVisualizationRequestHandler implements return csvFileContent.toString(); } + @Override + public Actions getRequiredPrivileges() { + // TODO Auto-generated method stub + return null; + } + } \ No newline at end of file diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/entitygrantcount/EntityGrantCountRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/entitygrantcount/EntityGrantCountRequestHandler.java index d69d36aa..0812070f 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/entitygrantcount/EntityGrantCountRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/entitygrantcount/EntityGrantCountRequestHandler.java @@ -17,6 +17,7 @@ import com.google.gson.Gson; import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.rdf.model.Model; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; @@ -345,5 +346,11 @@ public class EntityGrantCountRequestHandler implements return csvFileContent.toString(); } + + @Override + public Actions getRequiredPrivileges() { + // TODO Auto-generated method stub + return null; + } } diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/exceptions/IllegalConstructedModelIdentifierException.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/exceptions/IllegalConstructedModelIdentifierException.java new file mode 100644 index 00000000..0822717f --- /dev/null +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/exceptions/IllegalConstructedModelIdentifierException.java @@ -0,0 +1,21 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.visualization.exceptions; + +public class IllegalConstructedModelIdentifierException extends Exception { + + private static final long serialVersionUID = 1L; + + public IllegalConstructedModelIdentifierException(String message) { + super(message); + } + + public IllegalConstructedModelIdentifierException(Exception cause) { + super(createMessage(cause), cause); + } + + private static String createMessage(Exception cause) { + return "Illegal Constructed Model Identifier provided. It should be of the form $. " + cause.getMessage(); + } + +} diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/mapofscience/MapOfScienceVisualizationRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/mapofscience/MapOfScienceVisualizationRequestHandler.java index 2e68c671..8cb3b6e8 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/mapofscience/MapOfScienceVisualizationRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/mapofscience/MapOfScienceVisualizationRequestHandler.java @@ -19,6 +19,7 @@ import org.apache.commons.logging.Log; import com.google.gson.Gson; import com.hp.hpl.jena.query.Dataset; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; @@ -602,6 +603,12 @@ public class MapOfScienceVisualizationRequestHandler implements this.journalToPublicationCount = journalToPublicationCount; } + } + + @Override + public Actions getRequiredPrivileges() { + // TODO Auto-generated method stub + return null; } } \ No newline at end of file diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/ModelConstructorRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/ModelConstructorRequestHandler.java new file mode 100644 index 00000000..ba87189b --- /dev/null +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/ModelConstructorRequestHandler.java @@ -0,0 +1,144 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.visualization.modelconstructor; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.logging.Log; + +import com.google.gson.Gson; +import com.hp.hpl.jena.query.Dataset; + +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.usepages.RefreshVisualizationCacheAction; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +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.controller.visualization.DataVisualizationController; +import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.IllegalConstructedModelIdentifierException; +import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException; +import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.ConstructedModel; +import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.ConstructedModelTracker; +import edu.cornell.mannlib.vitro.webapp.visualization.visutils.UtilityFunctions; +import edu.cornell.mannlib.vitro.webapp.visualization.visutils.VisualizationRequestHandler; + +public class ModelConstructorRequestHandler implements + VisualizationRequestHandler { + + public static final Actions REQUIRED_ACTIONS = new Actions(new RefreshVisualizationCacheAction()); + + @Override + public Object generateAjaxVisualization(VitroRequest vitroRequest, Log log, + Dataset dataSource) throws MalformedQueryParametersException { + return regenerateConstructedModels(vitroRequest, dataSource); + } + + @Override + public Map generateDataVisualization( + VitroRequest vitroRequest, Log log, Dataset dataset) + throws MalformedQueryParametersException { + throw new UnsupportedOperationException( + "Cached Model does not provide Data Response."); + } + + private ResponseValues renderRefreshCacheMarkup(VitroRequest vitroRequest, + Log log, Dataset dataSource) { + + String standaloneTemplate = "regenerateConstructedModels.ftl"; + + List currentConstructedModels = new ArrayList(); + List unidentifiedModels = new ArrayList(); + + for (String currentIdentifier : ConstructedModelTracker.getAllModels() + .keySet()) { + try { + ConstructedModel parseModelIdentifier = ConstructedModelTracker + .parseModelIdentifier(currentIdentifier); + + parseModelIdentifier.setIndividualLabel(UtilityFunctions + .getIndividualLabelFromDAO(vitroRequest, + parseModelIdentifier.getUri())); + + currentConstructedModels.add(parseModelIdentifier); + } catch (IllegalConstructedModelIdentifierException e) { + unidentifiedModels.add(e.getMessage()); + } + } + + Map body = new HashMap(); + body.put("title", "Regenerate Constructed Models"); + body.put("vivoDefaultNamespace", vitroRequest.getWebappDaoFactory() + .getDefaultNamespace()); + body.put("currentModels", currentConstructedModels); + body.put("unidentifiedModels", unidentifiedModels); + + return new TemplateResponseValues(standaloneTemplate, body); + } + + private Map regenerateConstructedModels(VitroRequest vitroRequest, + Dataset dataSource) { + + List refreshedModels = new ArrayList(); + + Set currentModelIdentifiers = new HashSet(ConstructedModelTracker.getAllModels().keySet()); + + for (String currentIdentifier : currentModelIdentifiers) { + try { + + ConstructedModel parseModelIdentifier = ConstructedModelTracker + .parseModelIdentifier(currentIdentifier); + + ConstructedModelTracker.removeModel(parseModelIdentifier.getUri(), + parseModelIdentifier.getType()); + + ModelConstructorUtilities.getOrConstructModel(parseModelIdentifier.getUri(), + parseModelIdentifier.getType(), dataSource); + refreshedModels.add(parseModelIdentifier); + + } catch (IllegalConstructedModelIdentifierException e) { + e.printStackTrace(); + } catch (MalformedQueryParametersException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + Map fileData = new HashMap(); + + fileData.put(DataVisualizationController.FILE_CONTENT_TYPE_KEY, + "application/octet-stream"); + + Gson json = new Gson(); + + fileData.put(DataVisualizationController.FILE_CONTENT_KEY, + json.toJson(refreshedModels)); + return fileData; + } + + @Override + public ResponseValues generateStandardVisualization( + VitroRequest vitroRequest, Log log, Dataset dataSource) + throws MalformedQueryParametersException { + + return renderRefreshCacheMarkup(vitroRequest, log, dataSource); + } + + @Override + public ResponseValues generateVisualizationForShortURLRequests( + Map parameters, VitroRequest vitroRequest, Log log, + Dataset dataSource) throws MalformedQueryParametersException { + + return renderRefreshCacheMarkup(vitroRequest, log, dataSource); + } + + @Override + public Actions getRequiredPrivileges() { + return REQUIRED_ACTIONS; + } + +} diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/ModelConstructorUtilities.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/ModelConstructorUtilities.java index f4d857a7..e43ff0c1 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/ModelConstructorUtilities.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/ModelConstructorUtilities.java @@ -19,9 +19,9 @@ import edu.cornell.mannlib.vitro.webapp.visualization.modelconstructor.factory.P import edu.cornell.mannlib.vitro.webapp.visualization.modelconstructor.factory.PersonToPublicationsFactory; import edu.cornell.mannlib.vitro.webapp.visualization.modelconstructor.factory.SubOrganizationWithinModelFactory; +@SuppressWarnings("serial") public class ModelConstructorUtilities { - @SuppressWarnings("serial") private static final Map modelTypeIdentifierToFactory = new HashMap() {{ put(PersonToPublicationsModelConstructor.MODEL_TYPE, new PersonToPublicationsFactory()); put(PeopleToPublicationsModelConstructor.MODEL_TYPE, new PeopleToPublicationsFactory()); @@ -34,6 +34,18 @@ public class ModelConstructorUtilities { put(SubOrganizationWithinModelConstructor.MODEL_TYPE, new SubOrganizationWithinModelFactory()); }}; + public static final Map modelTypeToHumanReadableName = new HashMap() {{ + put(PersonToPublicationsModelConstructor.MODEL_TYPE, PersonToPublicationsModelConstructor.MODEL_TYPE_HUMAN_READABLE); + put(PeopleToPublicationsModelConstructor.MODEL_TYPE, PeopleToPublicationsModelConstructor.MODEL_TYPE_HUMAN_READABLE); + put(PersonToGrantsModelConstructor.MODEL_TYPE, PersonToGrantsModelConstructor.MODEL_TYPE_HUMAN_READABLE); + put(PeopleToGrantsModelConstructor.MODEL_TYPE, PeopleToGrantsModelConstructor.MODEL_TYPE_HUMAN_READABLE); + put(OrganizationToPublicationsForSubOrganizationsModelConstructor.MODEL_TYPE, OrganizationToPublicationsForSubOrganizationsModelConstructor.MODEL_TYPE_HUMAN_READABLE); + put(OrganizationToGrantsForSubOrganizationsModelConstructor.MODEL_TYPE, OrganizationToGrantsForSubOrganizationsModelConstructor.MODEL_TYPE_HUMAN_READABLE); + put(OrganizationAssociatedPeopleModelWithTypesConstructor.MODEL_TYPE, OrganizationAssociatedPeopleModelWithTypesConstructor.MODEL_TYPE_HUMAN_READABLE); + put(OrganizationModelWithTypesConstructor.MODEL_TYPE, OrganizationModelWithTypesConstructor.MODEL_TYPE_HUMAN_READABLE); + put(SubOrganizationWithinModelConstructor.MODEL_TYPE, SubOrganizationWithinModelConstructor.MODEL_TYPE_HUMAN_READABLE); + }}; + public static Model getOrConstructModel(String uri, String modelType, Dataset dataset) throws MalformedQueryParametersException { return modelTypeIdentifierToFactory.get(modelType).getOrCreateModel(uri, dataset); diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationAssociatedPeopleModelWithTypesConstructor.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationAssociatedPeopleModelWithTypesConstructor.java index 693ecd86..c0aa78e9 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationAssociatedPeopleModelWithTypesConstructor.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationAssociatedPeopleModelWithTypesConstructor.java @@ -21,7 +21,8 @@ public class OrganizationAssociatedPeopleModelWithTypesConstructor implements Mo protected static final Syntax SYNTAX = Syntax.syntaxARQ; - public static final String MODEL_TYPE = "ORGANIZATION_ASSOCIATED_MODEL_WITH_TYPES"; + public static final String MODEL_TYPE = "ORGANIZATION_ASSOCIATED_MODEL_WITH_TYPES"; + public static final String MODEL_TYPE_HUMAN_READABLE = "People for specific organization"; private Dataset dataset; diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationModelWithTypesConstructor.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationModelWithTypesConstructor.java index 57571e9f..90a76439 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationModelWithTypesConstructor.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationModelWithTypesConstructor.java @@ -21,7 +21,8 @@ public class OrganizationModelWithTypesConstructor implements ModelConstructor { protected static final Syntax SYNTAX = Syntax.syntaxARQ; - public static final String MODEL_TYPE = "ORGANIZATION_MODEL_WITH_TYPES"; + public static final String MODEL_TYPE = "ORGANIZATION_MODEL_WITH_TYPES"; + public static final String MODEL_TYPE_HUMAN_READABLE = "Organization hierarchy"; private Dataset dataset; diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationToGrantsForSubOrganizationsModelConstructor.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationToGrantsForSubOrganizationsModelConstructor.java index a8936ffb..549abec5 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationToGrantsForSubOrganizationsModelConstructor.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationToGrantsForSubOrganizationsModelConstructor.java @@ -26,7 +26,8 @@ public class OrganizationToGrantsForSubOrganizationsModelConstructor implements private Dataset dataset; - public static final String MODEL_TYPE = "ORGANIZATION_TO_GRANTS_FOR_SUBORGANIZATIONS"; + public static final String MODEL_TYPE = "ORGANIZATION_TO_GRANTS_FOR_SUBORGANIZATIONS"; + public static final String MODEL_TYPE_HUMAN_READABLE = "Grants for specific organization via all descendants"; private String organizationURI; diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationToPublicationsForSubOrganizationsModelConstructor.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationToPublicationsForSubOrganizationsModelConstructor.java index 81082cb1..2adb53b4 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationToPublicationsForSubOrganizationsModelConstructor.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/OrganizationToPublicationsForSubOrganizationsModelConstructor.java @@ -24,6 +24,7 @@ public class OrganizationToPublicationsForSubOrganizationsModelConstructor imple private Dataset dataset; public static final String MODEL_TYPE = "ORGANIZATION_TO_PUBLICATIONS_FOR_SUBORGANIZATIONS"; + public static final String MODEL_TYPE_HUMAN_READABLE = "Publications for specific organization via all descendants"; private String organizationURI; diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PeopleToGrantsModelConstructor.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PeopleToGrantsModelConstructor.java index 7a43b1a9..00dc054d 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PeopleToGrantsModelConstructor.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PeopleToGrantsModelConstructor.java @@ -27,6 +27,7 @@ public class PeopleToGrantsModelConstructor implements ModelConstructor { private Dataset dataset; public static final String MODEL_TYPE = "PEOPLE_TO_GRANTS"; + public static final String MODEL_TYPE_HUMAN_READABLE = "Grants for all people via all roles"; private Log log = LogFactory.getLog(PeopleToGrantsModelConstructor.class.getName()); diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PeopleToPublicationsModelConstructor.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PeopleToPublicationsModelConstructor.java index 36f3fe77..50ee11c3 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PeopleToPublicationsModelConstructor.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PeopleToPublicationsModelConstructor.java @@ -24,6 +24,7 @@ public class PeopleToPublicationsModelConstructor implements ModelConstructor { private Dataset dataset; public static final String MODEL_TYPE = "PEOPLE_TO_PUBLICATIONS"; + public static final String MODEL_TYPE_HUMAN_READABLE = "Publications for all people"; private Log log = LogFactory.getLog(PeopleToPublicationsModelConstructor.class.getName()); diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PersonToGrantsModelConstructor.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PersonToGrantsModelConstructor.java index cd3f0261..c63529ed 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PersonToGrantsModelConstructor.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PersonToGrantsModelConstructor.java @@ -27,6 +27,7 @@ public class PersonToGrantsModelConstructor implements ModelConstructor { private Dataset dataset; public static final String MODEL_TYPE = "PERSON_TO_GRANTS"; + public static final String MODEL_TYPE_HUMAN_READABLE = "Grants for specific person via all roles"; private String personURI; diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PersonToPublicationsModelConstructor.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PersonToPublicationsModelConstructor.java index 34571bae..d4206cbc 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PersonToPublicationsModelConstructor.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/PersonToPublicationsModelConstructor.java @@ -23,7 +23,8 @@ public class PersonToPublicationsModelConstructor implements ModelConstructor { private Dataset dataset; - public static final String MODEL_TYPE = "PERSON_TO_PUBLICATIONS"; + public static final String MODEL_TYPE = "PERSON_TO_PUBLICATIONS"; + public static final String MODEL_TYPE_HUMAN_READABLE = "Specific Person to Publications"; private String personURI; diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/SubOrganizationWithinModelConstructor.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/SubOrganizationWithinModelConstructor.java index f5e099c7..6bb4ead5 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/SubOrganizationWithinModelConstructor.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/modelconstructor/SubOrganizationWithinModelConstructor.java @@ -22,6 +22,7 @@ public class SubOrganizationWithinModelConstructor implements ModelConstructor { protected static final Syntax SYNTAX = Syntax.syntaxARQ; public static final String MODEL_TYPE = "SUBORGANIZATION_WITHIN_HIERARCHY_MODEL"; + public static final String MODEL_TYPE_HUMAN_READABLE = "Bottom-up Organization hierarchy"; private Dataset dataset; diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/persongrantcount/PersonGrantCountRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/persongrantcount/PersonGrantCountRequestHandler.java index b491ffff..871dc5be 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/persongrantcount/PersonGrantCountRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/persongrantcount/PersonGrantCountRequestHandler.java @@ -13,6 +13,7 @@ import org.apache.commons.logging.Log; import com.hp.hpl.jena.query.Dataset; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; @@ -277,4 +278,10 @@ public class PersonGrantCountRequestHandler implements VisualizationRequestHandl } + @Override + public Actions getRequiredPrivileges() { + // TODO Auto-generated method stub + return null; + } + } \ No newline at end of file diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/personlevel/PersonLevelRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/personlevel/PersonLevelRequestHandler.java index a81ae922..7bdccb89 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/personlevel/PersonLevelRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/personlevel/PersonLevelRequestHandler.java @@ -11,8 +11,8 @@ import org.apache.commons.logging.Log; import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.rdf.model.Model; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; -import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; 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.controller.visualization.VisualizationFrameworkConstants; @@ -291,4 +291,10 @@ public class PersonLevelRequestHandler implements VisualizationRequestHandler { return new TemplateResponseValues(standaloneTemplate, body); } + + @Override + public Actions getRequiredPrivileges() { + // TODO Auto-generated method stub + return null; + } } diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountRequestHandler.java index c6d3fc7f..5871d1df 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/personpubcount/PersonPublicationCountRequestHandler.java @@ -13,6 +13,7 @@ import org.apache.commons.logging.Log; import com.hp.hpl.jena.query.Dataset; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; @@ -283,4 +284,10 @@ VisualizationRequestHandler { return new TemplateResponseValues(dynamicTemplate, body); } + + @Override + public Actions getRequiredPrivileges() { + // TODO Auto-generated method stub + return null; + } } diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/utilities/UtilitiesRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/utilities/UtilitiesRequestHandler.java index 750a30ec..52714cdb 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/utilities/UtilitiesRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/utilities/UtilitiesRequestHandler.java @@ -17,6 +17,7 @@ import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.query.ResultSet; import com.hp.hpl.jena.rdf.model.RDFNode; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.config.ConfigurationProperties; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; @@ -479,5 +480,11 @@ public class UtilitiesRequestHandler implements VisualizationRequestHandler { throw new UnsupportedOperationException("Utilities Visualization does not provide " + "Short URL Response."); } + + @Override + public Actions getRequiredPrivileges() { + // TODO Auto-generated method stub + return null; + } } diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/valueobjects/ConstructedModel.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/valueobjects/ConstructedModel.java new file mode 100644 index 00000000..c9b25c3f --- /dev/null +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/valueobjects/ConstructedModel.java @@ -0,0 +1,39 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ +package edu.cornell.mannlib.vitro.webapp.visualization.valueobjects; + +import edu.cornell.mannlib.vitro.webapp.visualization.modelconstructor.ModelConstructorUtilities; + +public class ConstructedModel { + + private String uri; + private String individualLabel; + private String type; + private String humanReadableType; + + public ConstructedModel(String type, String uri) { + this.type = type; + this.humanReadableType = ModelConstructorUtilities.modelTypeToHumanReadableName.get(type); + this.uri = uri == null ? "" : uri; + } + + public String getUri() { + return uri; + } + + public String getType() { + return type; + } + + public String getHumanReadableType() { + return humanReadableType; + } + + public void setIndividualLabel(String indiviualLabel) { + this.individualLabel = indiviualLabel; + } + + public String getIndividualLabel() { + return individualLabel; + } + +} \ No newline at end of file diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/valueobjects/ConstructedModelTracker.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/valueobjects/ConstructedModelTracker.java index ca018ffe..34cf48e6 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/valueobjects/ConstructedModelTracker.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/valueobjects/ConstructedModelTracker.java @@ -4,10 +4,14 @@ package edu.cornell.mannlib.vitro.webapp.visualization.valueobjects; import java.util.HashMap; import java.util.Map; +import org.apache.commons.lang.StringUtils; + import com.hp.hpl.jena.rdf.model.Model; -public class ConstructedModelTracker { +import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.IllegalConstructedModelIdentifierException; +public class ConstructedModelTracker { + private static Map modelIdentifierToConstructedModel = new HashMap(); public static void trackModel(String identifier, Model model) { @@ -18,6 +22,10 @@ public class ConstructedModelTracker { return modelIdentifierToConstructedModel.get(identifier); } + public static Model removeModel(String uri, String modelType) { + return modelIdentifierToConstructedModel.remove(generateModelIdentifier(uri, modelType)); + } + public static String generateModelIdentifier(String uri, String modelType) { if (uri == null) { @@ -30,4 +38,17 @@ public class ConstructedModelTracker { return modelIdentifierToConstructedModel; } + public static ConstructedModel parseModelIdentifier(String modelIdentifier) + throws IllegalConstructedModelIdentifierException { + + String[] parts = StringUtils.split(modelIdentifier, '$'); + + if (parts.length == 0) { + throw new IllegalConstructedModelIdentifierException(modelIdentifier + " provided."); + } else if (parts.length == 1) { + return new ConstructedModel(parts[0], null); + } else { + return new ConstructedModel(parts[0], parts[1]); + } + } } diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/visutils/UtilityFunctions.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/visutils/UtilityFunctions.java index 8c18397d..07f87b51 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/visutils/UtilityFunctions.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/visutils/UtilityFunctions.java @@ -25,13 +25,13 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.ParamMa 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.controller.visualization.VisualizationFrameworkConstants; +import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao; import edu.cornell.mannlib.vitro.webapp.visualization.collaborationutils.CollaborationData; import edu.cornell.mannlib.vitro.webapp.visualization.constants.VOConstants; import edu.cornell.mannlib.vitro.webapp.visualization.constants.VisConstants; import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.Activity; import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.Collaborator; import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.GenericQueryMap; -import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.SubEntity; public class UtilityFunctions { @@ -285,4 +285,18 @@ public class UtilityFunctions { return ""; } + + public static String getIndividualLabelFromDAO(VitroRequest vitroRequest, + String entityURI) { + + IndividualDao iDao = vitroRequest.getWebappDaoFactory().getIndividualDao(); + Individual ind = iDao.getIndividualByURI(entityURI); + + String individualLabel = "Unknown Individual"; + + if (ind != null) { + individualLabel = ind.getName(); + } + return individualLabel; + } } \ No newline at end of file diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/visutils/VisualizationRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/visutils/VisualizationRequestHandler.java index c0f446d1..f9789f52 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/visualization/visutils/VisualizationRequestHandler.java +++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/visutils/VisualizationRequestHandler.java @@ -7,6 +7,7 @@ import org.apache.commons.logging.Log; import com.hp.hpl.jena.query.Dataset; +import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException; @@ -22,6 +23,8 @@ import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryP * @author cdtank */ public interface VisualizationRequestHandler { + + Actions getRequiredPrivileges(); ResponseValues generateStandardVisualization(VitroRequest vitroRequest, Log log,