1. Adding the tools menu for visualizations. This will provide detailed explanation on why we need the cache refreshing for visualizations and also the link to initiating the reconstruct. It is only accessible to the admins.
This commit is contained in:
parent
a83c1180f4
commit
51208948f2
3 changed files with 110 additions and 0 deletions
|
@ -46,6 +46,9 @@
|
|||
<bean id="regenerate_vis_models"
|
||||
class="edu.cornell.mannlib.vitro.webapp.visualization.modelconstructor.ModelConstructorRequestHandler" />
|
||||
|
||||
<bean id="tools"
|
||||
class="edu.cornell.mannlib.vitro.webapp.visualization.tools.ToolsRequestHandler" />
|
||||
|
||||
<bean id="visualizationInjector"
|
||||
class="edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationInjector">
|
||||
<property name="visualizations">
|
||||
|
@ -120,6 +123,10 @@
|
|||
<ref bean="regenerate_vis_models"></ref>
|
||||
</entry>
|
||||
|
||||
<entry key="tools">
|
||||
<ref bean="tools"></ref>
|
||||
</entry>
|
||||
|
||||
</map>
|
||||
</property>
|
||||
|
||||
|
|
31
productMods/templates/freemarker/visualization/tools.ftl
Normal file
31
productMods/templates/freemarker/visualization/tools.ftl
Normal file
|
@ -0,0 +1,31 @@
|
|||
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||
|
||||
<#assign shortVisualizationURLRoot ="/vis">
|
||||
<#assign refreshCacheURL = "${urls.base}${shortVisualizationURLRoot}/refresh-cache">
|
||||
|
||||
<h2>Visualization Tools</h2>
|
||||
|
||||
<a href="${refreshCacheURL}">Refresh Cached Models for Visualization</a>
|
||||
|
||||
<h5>Why</h5>
|
||||
Certain class of visualizations like Temporal graph and Map of Science that work on a large scale
|
||||
attempt to calculate counts of publications (or grants) for all the organizations within an organization.
|
||||
These queries tend to be both memory intensive and time consuming. In order to provide a good user experience when
|
||||
these visualizations are served we decided to save the results of these queries to be reused later.
|
||||
|
||||
<h5>What</h5>
|
||||
To this end we have devised a caching solution which will store information about the organization
|
||||
hierarchy, which publications were published from which organizations etc (among other things) in
|
||||
semantic way (i.e. we store the rdf model).<br/>
|
||||
|
||||
We're currently caching these models in-memory, which works nicely, for now. Currently the cache is only built
|
||||
once, on first user request after a server restart, so the visualization will essentially never be updated
|
||||
until the server is restarted again. It is not being updated real-time or periodically. This means that the data in these
|
||||
models might be stale depending upon when was it last created. In future releases we will come
|
||||
up with a solution that stores these models on disk and be updated periodically.<br />
|
||||
|
||||
<h5>How</h5>
|
||||
To refresh these models either restart the server or click on "refresh cache" link above. We realize that
|
||||
in production VIVO instances it is not feasible to restart the server to refresh these models. Hence we
|
||||
recommend the above link. Administrators can use this link to trigger regeneration of all the existing
|
||||
models.<br />
|
|
@ -0,0 +1,72 @@
|
|||
package edu.cornell.mannlib.vitro.webapp.visualization.tools;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
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.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.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 ToolsRequestHandler implements VisualizationRequestHandler {
|
||||
|
||||
public static final Actions REQUIRED_ACTIONS = new Actions(new RefreshVisualizationCacheAction());
|
||||
|
||||
@Override
|
||||
public Object generateAjaxVisualization(VitroRequest vitroRequest, Log log,
|
||||
Dataset dataSource) throws MalformedQueryParametersException {
|
||||
throw new UnsupportedOperationException("Visualization Tool does not provide Ajax Response.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> generateDataVisualization(
|
||||
VitroRequest vitroRequest, Log log, Dataset dataset)
|
||||
throws MalformedQueryParametersException {
|
||||
throw new UnsupportedOperationException("Visualization Tool does not provide Data Response.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseValues generateStandardVisualization(
|
||||
VitroRequest vitroRequest, Log log, Dataset dataSource)
|
||||
throws MalformedQueryParametersException {
|
||||
return renderToolsMenu(vitroRequest, log, dataSource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseValues generateVisualizationForShortURLRequests(
|
||||
Map<String, String> parameters, VitroRequest vitroRequest, Log log,
|
||||
Dataset dataSource) throws MalformedQueryParametersException {
|
||||
|
||||
return renderToolsMenu(vitroRequest, log, dataSource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Actions getRequiredPrivileges() {
|
||||
return REQUIRED_ACTIONS;
|
||||
}
|
||||
|
||||
private ResponseValues renderToolsMenu(VitroRequest vitroRequest,
|
||||
Log log, Dataset dataSource) {
|
||||
|
||||
String standaloneTemplate = "tools.ftl";
|
||||
|
||||
Map<String, Object> body = new HashMap<String, Object>();
|
||||
body.put("title", "Visualization Tools");
|
||||
|
||||
return new TemplateResponseValues(standaloneTemplate, body);
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Reference in a new issue