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.
This commit is contained in:
parent
5a64d388c8
commit
f2148a785c
33 changed files with 490 additions and 27 deletions
|
@ -43,6 +43,9 @@
|
|||
<bean id="map_of_science"
|
||||
class="edu.cornell.mannlib.vitro.webapp.visualization.mapofscience.MapOfScienceVisualizationRequestHandler" />
|
||||
|
||||
<bean id="regenerate_vis_models"
|
||||
class="edu.cornell.mannlib.vitro.webapp.visualization.modelconstructor.ModelConstructorRequestHandler" />
|
||||
|
||||
<bean id="visualizationInjector"
|
||||
class="edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationInjector">
|
||||
<property name="visualizations">
|
||||
|
@ -111,6 +114,10 @@
|
|||
|
||||
<entry key="map-of-science">
|
||||
<ref bean="map_of_science"></ref>
|
||||
</entry>
|
||||
|
||||
<entry key="refresh-cache">
|
||||
<ref bean="regenerate_vis_models"></ref>
|
||||
</entry>
|
||||
|
||||
</map>
|
||||
|
|
|
@ -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.<hr />
|
||||
|
||||
<ul>
|
||||
<#list currentModels as model>
|
||||
<li>
|
||||
|
||||
<#if model.uri == "">
|
||||
|
||||
URI Independent Model
|
||||
|
||||
<#else>
|
||||
|
||||
<a href="${urls.base}/individual?uri=${model.uri?url}">${model.individualLabel}</a>
|
||||
|
||||
</#if>
|
||||
<span class="display-title">${model.humanReadableType}</span>
|
||||
|
||||
</li>
|
||||
</#list>
|
||||
</ul>
|
||||
|
||||
<#else>
|
||||
|
||||
Currently there are no constructed models for use by visualization.
|
||||
|
||||
</#if>
|
||||
|
||||
${stylesheets.add('<link rel="stylesheet" href="${urls.base}/css/search.css" />')}
|
||||
|
||||
<#assign standardVisualizationURLRoot ="/visualization">
|
||||
<#assign ajaxVisualizationURLRoot ="/visualizationAjax">
|
||||
<#assign dataVisualizationURLRoot ="/visualizationData">
|
||||
<#assign shortVisualizationURLRoot ="/vis">
|
||||
|
||||
<#assign refreshCacheVisTypeParam = "refresh-cache">
|
||||
|
||||
<#assign regenerateCacheURL = "${urls.base}${ajaxVisualizationURLRoot}?vis=${refreshCacheVisTypeParam}">
|
||||
|
||||
<script language="JavaScript" type="text/javascript">
|
||||
|
||||
$(document).ready(function() {
|
||||
$.ajax({
|
||||
url: "${regenerateCacheURL}",
|
||||
dataType: "json",
|
||||
timeout: 5 * 60 * 1000
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
</script>
|
|
@ -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)
|
||||
|
|
|
@ -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-
|
||||
|
|
|
@ -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<String> extractShortURLParameters(VitroRequest vitroRequest) {
|
||||
|
||||
Matcher requestPatternMatcher = VisualizationFrameworkConstants
|
||||
.SHORT_URL_REQUEST_PATTERN
|
||||
.matcher(vitroRequest.getRequestURI()
|
||||
.substring(vitroRequest.getContextPath().length()));
|
||||
|
||||
List<String> matchedGroups = new ArrayList<String>();
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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 <TYPE>$<URI>. " + cause.getMessage();
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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<String, String> 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<ConstructedModel> currentConstructedModels = new ArrayList<ConstructedModel>();
|
||||
List<String> unidentifiedModels = new ArrayList<String>();
|
||||
|
||||
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<String, Object> body = new HashMap<String, Object>();
|
||||
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<String, String> regenerateConstructedModels(VitroRequest vitroRequest,
|
||||
Dataset dataSource) {
|
||||
|
||||
List<ConstructedModel> refreshedModels = new ArrayList<ConstructedModel>();
|
||||
|
||||
Set<String> currentModelIdentifiers = new HashSet<String>(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<String, String> fileData = new HashMap<String, String>();
|
||||
|
||||
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<String, String> parameters, VitroRequest vitroRequest, Log log,
|
||||
Dataset dataSource) throws MalformedQueryParametersException {
|
||||
|
||||
return renderRefreshCacheMarkup(vitroRequest, log, dataSource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Actions getRequiredPrivileges() {
|
||||
return REQUIRED_ACTIONS;
|
||||
}
|
||||
|
||||
}
|
|
@ -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<String, ModelFactoryInterface> modelTypeIdentifierToFactory = new HashMap<String, ModelFactoryInterface>() {{
|
||||
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<String, String> modelTypeToHumanReadableName = new HashMap<String, String>() {{
|
||||
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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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<String, Model> modelIdentifierToConstructedModel = new HashMap<String, Model>();
|
||||
|
||||
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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue