1. Implemented the backend for accepting shorter urls for visualizations. This partially implements the feature described here http://issues.library.cornell.edu/browse/NIHVIVO-1097
2. Changed the IndividualTemplateModel to render shorter vis urls for temporal graph & ego-centric networks. 3. changed main toggle visualization links in ego-centric networks to use shorter vis urls.
This commit is contained in:
parent
4bd69801ce
commit
29ca04f648
18 changed files with 488 additions and 45 deletions
|
@ -64,6 +64,14 @@
|
|||
<ref bean="person_level"></ref>
|
||||
</entry>
|
||||
|
||||
<entry key="author-network">
|
||||
<ref bean="person_level"></ref>
|
||||
</entry>
|
||||
|
||||
<entry key="investigator-network">
|
||||
<ref bean="person_level"></ref>
|
||||
</entry>
|
||||
|
||||
<!--
|
||||
<entry key="entity_comparison">
|
||||
<ref bean="entity_comparison"></ref>
|
||||
|
@ -74,11 +82,14 @@
|
|||
<ref bean="entity_comparison"></ref>
|
||||
</entry>
|
||||
|
||||
|
||||
<entry key="pub_temporal">
|
||||
<ref bean="pub_temporal"></ref>
|
||||
</entry>
|
||||
|
||||
<entry key="publication-graph">
|
||||
<ref bean="entity_comparison"></ref>
|
||||
</entry>
|
||||
|
||||
<entry key="coprincipalinvestigator">
|
||||
<ref bean="coprincipalinvestigator"></ref>
|
||||
</entry>
|
||||
|
@ -91,6 +102,10 @@
|
|||
<ref bean="grant_temporal"></ref>
|
||||
</entry>
|
||||
|
||||
<entry key="grant-graph">
|
||||
<ref bean="entity_grant_count"></ref>
|
||||
</entry>
|
||||
|
||||
</map>
|
||||
</property>
|
||||
|
||||
|
|
|
@ -1310,6 +1310,11 @@
|
|||
<servlet>
|
||||
<servlet-name>StandardVisualizationController</servlet-name>
|
||||
<servlet-class>edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.StandardVisualizationController</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>ShortURLVisualizationController</servlet-name>
|
||||
<servlet-class>edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.ShortURLVisualizationController</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<servlet-mapping>
|
||||
|
@ -1322,6 +1327,14 @@
|
|||
<url-pattern>/visualization</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!--
|
||||
This mapping is done to facilitate shorter vis urls.
|
||||
-->
|
||||
<servlet-mapping>
|
||||
<servlet-name>ShortURLVisualizationController</servlet-name>
|
||||
<url-pattern>/vis/*</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet>
|
||||
<servlet-name>AjaxVisualizationController</servlet-name>
|
||||
<servlet-class>edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.AjaxVisualizationController</servlet-class>
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||
|
||||
<#assign standardVisualizationURLRoot ="/visualization">
|
||||
<#assign shortVisualizationURLRoot ="/vis">
|
||||
<#assign ajaxVisualizationURLRoot ="/visualizationAjax">
|
||||
<#assign dataVisualizationURLRoot ="/visualizationData">
|
||||
|
||||
<#assign egoURI ="${egoURIParam?url}">
|
||||
<#assign egoCoAuthorshipDataFeederURL = '${urls.base}${dataVisualizationURLRoot}?vis=coauthorship&uri=${egoURI}&vis_mode=coauthor_network_stream&labelField=label'>
|
||||
|
||||
<#assign coprincipalinvestigatorURL = '${urls.base}${standardVisualizationURLRoot}?vis=person_level&uri=${egoURI}&vis_mode=copi'>
|
||||
<#assign coprincipalinvestigatorURL = '${urls.base}${shortVisualizationURLRoot}/investigator-network/?uri=${egoURI}'>
|
||||
|
||||
<#assign egoCoAuthorsListDataFileURL = '${urls.base}${dataVisualizationURLRoot}?vis=coauthorship&uri=${egoURI}&vis_mode=coauthors'>
|
||||
<#assign egoCoAuthorshipNetworkDataFileURL = '${urls.base}${dataVisualizationURLRoot}?vis=coauthorship&uri=${egoURI}&vis_mode=coauthor_network_download'>
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
|
||||
|
||||
<#assign standardVisualizationURLRoot ="/visualization">
|
||||
<#assign shortVisualizationURLRoot ="/vis">
|
||||
<#assign ajaxVisualizationURLRoot ="/visualizationAjax">
|
||||
<#assign dataVisualizationURLRoot ="/visualizationData">
|
||||
|
||||
<#assign egoURI ="${egoURIParam?url}">
|
||||
<#assign egoCoInvestigationDataFeederURL = '${urls.base}${dataVisualizationURLRoot}?vis=coprincipalinvestigator&uri=${egoURI}&vis_mode=copi_network_stream&labelField=label'>
|
||||
|
||||
<#assign coauthorshipURL = '${urls.base}${standardVisualizationURLRoot}?vis=person_level&uri=${egoURI}&vis_mode=coauthor'>
|
||||
<#assign coauthorshipURL = '${urls.base}${shortVisualizationURLRoot}/author-network/?uri=${egoURI}'>
|
||||
|
||||
<#assign egoCoInvestigatorsListDataFileURL = '${urls.base}${dataVisualizationURLRoot}?vis=coprincipalinvestigator&uri=${egoURI}&vis_mode=copis'>
|
||||
<#assign egoCoInvestigationNetworkDataFileURL = '${urls.base}${dataVisualizationURLRoot}?vis=coprincipalinvestigator&uri=${egoURI}&vis_mode=copi_network_download'>
|
||||
|
|
|
@ -0,0 +1,256 @@
|
|||
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||
|
||||
package edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker;
|
||||
|
||||
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;
|
||||
|
||||
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.controller.VitroRequest;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.constants.VisConstants;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.UtilityFunctions;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.VisualizationRequestHandler;
|
||||
|
||||
/**
|
||||
* Services a standard visualization request, which involves templates. This will return a simple
|
||||
* error message and a 501 if there is no jena Model.
|
||||
*
|
||||
* @author cdtank
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public class ShortURLVisualizationController extends FreemarkerHttpServlet {
|
||||
|
||||
public static final String URL_ENCODING_SCHEME = "UTF-8";
|
||||
|
||||
private static final Log log = LogFactory.getLog(ShortURLVisualizationController.class.getName());
|
||||
|
||||
protected static final Syntax SYNTAX = Syntax.syntaxARQ;
|
||||
|
||||
public static ServletContext servletContext;
|
||||
|
||||
@Override
|
||||
protected ResponseValues processRequest(VitroRequest vreq) {
|
||||
|
||||
/*
|
||||
* Based on the query parameters passed via URI get the appropriate visualization
|
||||
* request handler.
|
||||
* */
|
||||
VisualizationRequestHandler visRequestHandler =
|
||||
getVisualizationRequestHandler(vreq);
|
||||
|
||||
servletContext = getServletContext();
|
||||
|
||||
if (visRequestHandler != null) {
|
||||
|
||||
/*
|
||||
* 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-
|
||||
* effecting this method.
|
||||
* */
|
||||
return renderVisualization(vreq, visRequestHandler);
|
||||
|
||||
} else {
|
||||
return UtilityFunctions.handleMalformedParameters(
|
||||
"Visualization Query Error",
|
||||
"Inappropriate query parameters were submitted.",
|
||||
vreq);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private ResponseValues renderVisualization(VitroRequest vitroRequest,
|
||||
VisualizationRequestHandler visRequestHandler) {
|
||||
|
||||
Model model = vitroRequest.getJenaOntModel(); // getModel()
|
||||
if (model == null) {
|
||||
|
||||
String errorMessage = "This service is not supporeted by the current "
|
||||
+ "webapp configuration. A jena model is required in the "
|
||||
+ "servlet context.";
|
||||
|
||||
log.error(errorMessage);
|
||||
|
||||
return UtilityFunctions.handleMalformedParameters("Visualization Query Error",
|
||||
errorMessage,
|
||||
vitroRequest);
|
||||
}
|
||||
|
||||
Dataset dataset = setupJENADataSource(vitroRequest);
|
||||
|
||||
if (dataset != null && visRequestHandler != null) {
|
||||
|
||||
try {
|
||||
|
||||
|
||||
List<String> matchedPatternGroups = extractShortURLParameters(vitroRequest);
|
||||
|
||||
|
||||
Map<String, String> parametersForVis = getParamatersForVis(matchedPatternGroups, vitroRequest);
|
||||
|
||||
|
||||
return visRequestHandler.generateVisualizationForShortURLRequests(
|
||||
parametersForVis,
|
||||
vitroRequest,
|
||||
log,
|
||||
dataset);
|
||||
|
||||
} catch (MalformedQueryParametersException e) {
|
||||
return UtilityFunctions.handleMalformedParameters(
|
||||
"Standard Visualization Query Error - Individual Publication Count",
|
||||
e.getMessage(),
|
||||
vitroRequest);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
String errorMessage = "Data Model Empty &/or Inappropriate "
|
||||
+ "query parameters were submitted. ";
|
||||
|
||||
log.error(errorMessage);
|
||||
|
||||
return UtilityFunctions.handleMalformedParameters("Visualization Query Error",
|
||||
errorMessage,
|
||||
vitroRequest);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private Map<String, String> getParamatersForVis(List<String> matchedPatternGroups,
|
||||
VitroRequest vitroRequest) {
|
||||
|
||||
Map<String, String> parameters = new HashMap<String, String>();
|
||||
|
||||
/*
|
||||
* We need to convert the short-form URI into a long form. So we use the
|
||||
* default namespace to construct one.
|
||||
* Since VIVO allows non-default namespaces, there are chances that short URLs
|
||||
* will have a "uri" parameter instead of individual uri being part of the formal
|
||||
* url.
|
||||
* */
|
||||
String subjectURI = null;
|
||||
if (StringUtils.isBlank(matchedPatternGroups.get(1))) {
|
||||
|
||||
subjectURI = vitroRequest.getParameter(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY);
|
||||
|
||||
} else {
|
||||
|
||||
subjectURI = vitroRequest.getWebappDaoFactory().getDefaultNamespace()
|
||||
+ matchedPatternGroups.get(1);
|
||||
}
|
||||
|
||||
parameters.put(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY, subjectURI);
|
||||
|
||||
if (VisualizationFrameworkConstants.COAUTHORSHIP_VIS_SHORT_URL
|
||||
.equalsIgnoreCase(matchedPatternGroups.get(0))) {
|
||||
|
||||
parameters.put(VisualizationFrameworkConstants.VIS_MODE_KEY,
|
||||
VisualizationFrameworkConstants.COAUTHOR_VIS_MODE);
|
||||
|
||||
} else if (VisualizationFrameworkConstants.COINVESTIGATOR_VIS_SHORT_URL
|
||||
.equalsIgnoreCase(matchedPatternGroups.get(0))) {
|
||||
|
||||
parameters.put(VisualizationFrameworkConstants.VIS_MODE_KEY,
|
||||
VisualizationFrameworkConstants.COPI_VIS_MODE);
|
||||
} else {
|
||||
|
||||
/*
|
||||
* Currently temporal vis for both grants & publications do not require use of
|
||||
* vis_modes in their request handlers, so no need to provide anything other than
|
||||
* the URI.
|
||||
* */
|
||||
|
||||
}
|
||||
|
||||
return parameters;
|
||||
}
|
||||
|
||||
|
||||
private VisualizationRequestHandler getVisualizationRequestHandler(
|
||||
VitroRequest vitroRequest) {
|
||||
|
||||
String visType = null;
|
||||
|
||||
VisualizationRequestHandler visRequestHandler = null;
|
||||
|
||||
List<String> matchedPatternGroups = extractShortURLParameters(vitroRequest);
|
||||
|
||||
if (matchedPatternGroups.size() > 0) {
|
||||
|
||||
// System.out.println(matchedPatternGroups.get(0) + " --> " + matchedPatternGroups.get(1));
|
||||
//
|
||||
// System.out.println(vitroRequest.getRequestURI()
|
||||
// + " -- " + vitroRequest.getContextPath()
|
||||
// + " -- " + vitroRequest.getContextPath().length()
|
||||
// + " -- " + vitroRequest.getRequestURI().substring(vitroRequest.getContextPath().length()));
|
||||
|
||||
visType = matchedPatternGroups.get(0);
|
||||
|
||||
try {
|
||||
visRequestHandler = VisualizationsDependencyInjector
|
||||
.getVisualizationIDsToClassMap(getServletContext())
|
||||
.get(visType);
|
||||
} catch (NullPointerException nullKeyException) {
|
||||
/*
|
||||
* Let the default flow take care of returning a null.
|
||||
* */
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return visRequestHandler;
|
||||
}
|
||||
|
||||
/**
|
||||
* An ideal short url request would mimic,
|
||||
* vivo.com/vis/author-network/shortURI
|
||||
* vivo.com/vis/grant-graph/shortURI
|
||||
* etc. So first we obtain the request url which can be used to extract the requested visualization
|
||||
* and the subject of the visualization. So the below pattern matcher will take "/vis/<vis-name>/<shortURI>"
|
||||
* 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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return matchedGroups;
|
||||
}
|
||||
|
||||
private Dataset setupJENADataSource(VitroRequest vreq) {
|
||||
|
||||
log.debug("rdfResultFormat was: " + VisConstants.RDF_RESULT_FORMAT_PARAM);
|
||||
|
||||
return vreq.getDataset();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
package edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class VisualizationFrameworkConstants {
|
||||
|
||||
/*
|
||||
|
@ -24,12 +26,21 @@ public class VisualizationFrameworkConstants {
|
|||
* Vis URL prefix that is seen by all the users
|
||||
*/
|
||||
public static final String VISUALIZATION_URL_PREFIX = "/visualization";
|
||||
public static final String SHORT_URL_VISUALIZATION_REQUEST_PREFIX = "/vis";
|
||||
|
||||
public static final String FREEMARKERIZED_VISUALIZATION_URL_PREFIX = "/visualization";
|
||||
public static final String AJAX_VISUALIZATION_SERVICE_URL_PREFIX = "/visualizationAjax";
|
||||
public static final String DATA_VISUALIZATION_SERVICE_URL_PREFIX = "/visualizationData";
|
||||
|
||||
public static final String INDIVIDUAL_URL_PREFIX = "/individual";
|
||||
|
||||
|
||||
public static final Pattern SHORT_URL_REQUEST_PATTERN = Pattern
|
||||
.compile("^"
|
||||
+ SHORT_URL_VISUALIZATION_REQUEST_PREFIX
|
||||
+ "/([\\w-]+)/([^/]*)$");
|
||||
|
||||
|
||||
/*
|
||||
* These represent possible query keys in a URI for visualization purposes.
|
||||
* Examples,
|
||||
|
@ -100,8 +111,12 @@ public class VisualizationFrameworkConstants {
|
|||
public static final String COLLEGE_PUBLICATION_COUNT_VIS = "college_pub_count";
|
||||
public static final String COAUTHORSHIP_VIS = "coauthorship";
|
||||
public static final String PERSON_LEVEL_VIS = "person_level";
|
||||
public static final String COAUTHORSHIP_VIS_SHORT_URL = "author-network";
|
||||
public static final String COINVESTIGATOR_VIS_SHORT_URL = "investigator-network";
|
||||
public static final String UTILITIES_VIS = "utilities";
|
||||
public static final String ENTITY_COMPARISON_VIS = "entity_comparison";
|
||||
public static final String PUBLICATION_TEMPORAL_VIS_SHORT_URL = "publication-graph";
|
||||
public static final String GRANT_TEMPORAL_VIS_SHORT_URL = "grant-graph";
|
||||
public static final String CO_PI_VIS = "coprincipalinvestigator";
|
||||
|
||||
|
||||
|
|
|
@ -4,9 +4,9 @@ package edu.cornell.mannlib.vitro.webapp.visualization.freemarker.coauthorship;
|
|||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.apache.commons.lang.StringEscapeUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
@ -14,10 +14,8 @@ import org.apache.commons.logging.Log;
|
|||
|
||||
import com.hp.hpl.jena.query.Dataset;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Portal;
|
||||
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.freemarker.DataVisualizationController;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException;
|
||||
|
@ -44,6 +42,13 @@ public class CoAuthorshipRequestHandler implements VisualizationRequestHandler {
|
|||
throw new UnsupportedOperationException("CoAuthorship does not provide Ajax Response.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseValues generateVisualizationForShortURLRequests(
|
||||
Map<String, String> parameters, VitroRequest vitroRequest, Log log,
|
||||
Dataset dataSource) throws MalformedQueryParametersException {
|
||||
throw new UnsupportedOperationException("CoAuthorship does not provide Short URL Response.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> generateDataVisualization(
|
||||
VitroRequest vitroRequest, Log log, Dataset dataset)
|
||||
|
@ -288,4 +293,5 @@ public class CoAuthorshipRequestHandler implements VisualizationRequestHandler {
|
|||
|
||||
return fileData;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,10 +24,7 @@ import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.ModelC
|
|||
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.QueryRunner;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.UtilityFunctions;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.VisualizationRequestHandler;
|
||||
/**
|
||||
* @author bkoniden
|
||||
* Deepak Konidena
|
||||
*/
|
||||
|
||||
public class CoPIGrantCountRequestHandler implements VisualizationRequestHandler {
|
||||
|
||||
|
||||
|
@ -38,6 +35,14 @@ public class CoPIGrantCountRequestHandler implements VisualizationRequestHandler
|
|||
+ " does not provide Ajax response.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseValues generateVisualizationForShortURLRequests(
|
||||
Map<String, String> parameters, VitroRequest vitroRequest, Log log,
|
||||
Dataset dataSource) throws MalformedQueryParametersException {
|
||||
throw new UnsupportedOperationException("Co-PI Grant Count"
|
||||
+ " does not provide Short URL response.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> generateDataVisualization(
|
||||
VitroRequest vitroRequest, Log log, Dataset dataset)
|
||||
|
@ -282,4 +287,5 @@ public class CoPIGrantCountRequestHandler implements VisualizationRequestHandler
|
|||
return fileData;
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -57,6 +57,14 @@ public class EntityPublicationCountRequestHandler implements
|
|||
return prepareStandaloneMarkupResponse(vitroRequest, entityURI);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseValues generateVisualizationForShortURLRequests(
|
||||
Map<String, String> parameters, VitroRequest vitroRequest, Log log,
|
||||
Dataset dataSource) throws MalformedQueryParametersException {
|
||||
throw new UnsupportedOperationException("Uncached implementation for Publication Temporal "
|
||||
+ "Visualization does not provide Short URL Response.");
|
||||
}
|
||||
|
||||
private Map<String, String> getSubjectEntityAndGenerateDataResponse(
|
||||
VitroRequest vitroRequest, Log log, Dataset dataset,
|
||||
String subjectEntityURI)
|
||||
|
@ -327,4 +335,5 @@ public class EntityPublicationCountRequestHandler implements
|
|||
}
|
||||
return csvFileContent.toString();
|
||||
}
|
||||
|
||||
}
|
|
@ -15,7 +15,6 @@ import org.apache.commons.logging.Log;
|
|||
|
||||
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.beans.Portal;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||
|
@ -27,7 +26,6 @@ import edu.cornell.mannlib.vitro.webapp.visualization.constants.VOConstants;
|
|||
import edu.cornell.mannlib.vitro.webapp.visualization.exceptions.MalformedQueryParametersException;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.entitycomparison.EntityComparisonUtilityFunctions;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Activity;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.ConstructedModelTracker;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Entity;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.JsonObject;
|
||||
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.SubEntity;
|
||||
|
@ -48,6 +46,14 @@ public class TemporalGrantVisualizationRequestHandler implements
|
|||
String entityURI = vitroRequest
|
||||
.getParameter(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY);
|
||||
|
||||
return generateStandardVisualizationForGrantTemporalVis(vitroRequest,
|
||||
log, dataset, entityURI);
|
||||
}
|
||||
|
||||
|
||||
private ResponseValues generateStandardVisualizationForGrantTemporalVis(
|
||||
VitroRequest vitroRequest, Log log, Dataset dataset,
|
||||
String entityURI) throws MalformedQueryParametersException {
|
||||
if (StringUtils.isBlank(entityURI)) {
|
||||
|
||||
entityURI = EntityComparisonUtilityFunctions
|
||||
|
@ -58,14 +64,26 @@ public class TemporalGrantVisualizationRequestHandler implements
|
|||
|
||||
}
|
||||
|
||||
System.out.println("current models in the system are");
|
||||
/* System.out.println("current models in the system are");
|
||||
for (Map.Entry<String, Model> entry : ConstructedModelTracker.getAllModels().entrySet()) {
|
||||
System.out.println(entry.getKey() + " -> " + entry.getValue().size());
|
||||
}
|
||||
//
|
||||
*/
|
||||
return prepareStandaloneMarkupResponse(vitroRequest, entityURI);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public ResponseValues generateVisualizationForShortURLRequests(
|
||||
Map<String, String> parameters, VitroRequest vitroRequest, Log log,
|
||||
Dataset dataset) throws MalformedQueryParametersException {
|
||||
|
||||
|
||||
return generateStandardVisualizationForGrantTemporalVis(
|
||||
vitroRequest, log, dataset, parameters.get(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> generateDataVisualization(
|
||||
VitroRequest vitroRequest, Log log, Dataset dataset)
|
||||
|
|
|
@ -46,6 +46,25 @@ public class TemporalPublicationVisualizationRequestHandler implements
|
|||
String entityURI = vitroRequest
|
||||
.getParameter(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY);
|
||||
|
||||
return generateStandardVisualizationForPublicationTemporalVis(
|
||||
vitroRequest, log, dataset, entityURI);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseValues generateVisualizationForShortURLRequests(
|
||||
Map<String, String> parameters, VitroRequest vitroRequest, Log log,
|
||||
Dataset dataset) throws MalformedQueryParametersException {
|
||||
|
||||
|
||||
return generateStandardVisualizationForPublicationTemporalVis(
|
||||
vitroRequest, log, dataset, parameters.get(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY));
|
||||
|
||||
}
|
||||
|
||||
private ResponseValues generateStandardVisualizationForPublicationTemporalVis(
|
||||
VitroRequest vitroRequest, Log log, Dataset dataset,
|
||||
String entityURI) throws MalformedQueryParametersException {
|
||||
|
||||
if (StringUtils.isBlank(entityURI)) {
|
||||
|
||||
entityURI = EntityComparisonUtilityFunctions
|
||||
|
@ -350,4 +369,5 @@ public class TemporalPublicationVisualizationRequestHandler implements
|
|||
}
|
||||
return csvFileContent.toString();
|
||||
}
|
||||
|
||||
}
|
|
@ -58,6 +58,14 @@ public class EntityGrantCountRequestHandler implements
|
|||
return prepareStandaloneMarkupResponse(vitroRequest, entityURI);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseValues generateVisualizationForShortURLRequests(
|
||||
Map<String, String> parameters, VitroRequest vitroRequest, Log log,
|
||||
Dataset dataSource) throws MalformedQueryParametersException {
|
||||
throw new UnsupportedOperationException("Uncached implementation for Grant Temporal "
|
||||
+ "Visualization does not provide Short URL Response.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> generateDataVisualization(
|
||||
VitroRequest vitroRequest, Log log, Dataset dataset)
|
||||
|
@ -329,4 +337,5 @@ public class EntityGrantCountRequestHandler implements
|
|||
|
||||
return csvFileContent.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -75,6 +75,13 @@ public class PersonGrantCountRequestHandler implements VisualizationRequestHandl
|
|||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseValues generateVisualizationForShortURLRequests(
|
||||
Map<String, String> parameters, VitroRequest vitroRequest, Log log,
|
||||
Dataset dataSource) throws MalformedQueryParametersException {
|
||||
throw new UnsupportedOperationException("Person Grant Count Visualization does not provide "
|
||||
+ "Short URL Response.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object generateAjaxVisualization(VitroRequest vitroRequest, Log log,
|
||||
|
|
|
@ -78,8 +78,29 @@ public class PersonLevelRequestHandler implements VisualizationRequestHandler {
|
|||
String visMode = vitroRequest.getParameter(
|
||||
VisualizationFrameworkConstants.VIS_MODE_KEY);
|
||||
|
||||
return generateStandardVisualizationForPersonLevelVis(vitroRequest,
|
||||
log, dataset, egoURI, visMode);
|
||||
|
||||
if (VisualizationFrameworkConstants.COPI_VIS_MODE.equalsIgnoreCase(visMode)) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseValues generateVisualizationForShortURLRequests(
|
||||
Map<String, String> parameters, VitroRequest vitroRequest, Log log,
|
||||
Dataset dataset) throws MalformedQueryParametersException {
|
||||
|
||||
return generateStandardVisualizationForPersonLevelVis(
|
||||
vitroRequest,
|
||||
log,
|
||||
dataset,
|
||||
parameters.get(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY),
|
||||
parameters.get(VisualizationFrameworkConstants.VIS_MODE_KEY));
|
||||
}
|
||||
|
||||
private ResponseValues generateStandardVisualizationForPersonLevelVis(
|
||||
VitroRequest vitroRequest, Log log, Dataset dataset, String egoURI,
|
||||
String visMode) throws MalformedQueryParametersException {
|
||||
|
||||
if (VisualizationFrameworkConstants.COPI_VIS_MODE.equalsIgnoreCase(visMode)) {
|
||||
|
||||
ModelConstructor constructQueryRunner =
|
||||
new CoPIGrantCountConstructQueryRunner(egoURI, dataset, log);
|
||||
|
@ -140,7 +161,6 @@ public class PersonLevelRequestHandler implements VisualizationRequestHandler {
|
|||
coPIData,
|
||||
vitroRequest);
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
QueryRunner<CollaborationData> coAuthorshipQueryManager =
|
||||
|
@ -198,7 +218,6 @@ public class PersonLevelRequestHandler implements VisualizationRequestHandler {
|
|||
vitroRequest);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private TemplateResponseValues prepareCoAuthorStandaloneResponse(
|
||||
|
@ -273,5 +292,4 @@ public class PersonLevelRequestHandler implements VisualizationRequestHandler {
|
|||
return new TemplateResponseValues(standaloneTemplate, body);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -95,6 +95,14 @@ VisualizationRequestHandler {
|
|||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseValues generateVisualizationForShortURLRequests(
|
||||
Map<String, String> parameters, VitroRequest vitroRequest, Log log,
|
||||
Dataset dataSource) throws MalformedQueryParametersException {
|
||||
throw new UnsupportedOperationException("Person Publication Count Visualization does not provide "
|
||||
+ "Short URL Response.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> generateDataVisualization(VitroRequest vitroRequest, Log log,
|
||||
Dataset dataset) throws MalformedQueryParametersException {
|
||||
|
|
|
@ -434,5 +434,13 @@ public class UtilitiesRequestHandler implements VisualizationRequestHandler {
|
|||
throws MalformedQueryParametersException {
|
||||
throw new UnsupportedOperationException("Utilities does not provide Standard Response.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResponseValues generateVisualizationForShortURLRequests(
|
||||
Map<String, String> parameters, VitroRequest vitroRequest, Log log,
|
||||
Dataset dataSource) throws MalformedQueryParametersException {
|
||||
throw new UnsupportedOperationException("Utilities Visualization does not provide "
|
||||
+ "Short URL Response.");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,12 @@ public interface VisualizationRequestHandler {
|
|||
Log log,
|
||||
Dataset dataSource) throws MalformedQueryParametersException;
|
||||
|
||||
ResponseValues generateVisualizationForShortURLRequests(
|
||||
Map<String, String> parameters,
|
||||
VitroRequest vitroRequest,
|
||||
Log log,
|
||||
Dataset dataSource) throws MalformedQueryParametersException;
|
||||
|
||||
Object generateAjaxVisualization(VitroRequest vitroRequest,
|
||||
Log log,
|
||||
Dataset dataSource) throws MalformedQueryParametersException;
|
||||
|
|
|
@ -9,6 +9,8 @@ import java.util.Map;
|
|||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.openrdf.model.URI;
|
||||
import org.openrdf.model.impl.URIImpl;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement;
|
||||
import edu.cornell.mannlib.vitro.webapp.beans.Individual;
|
||||
|
@ -17,6 +19,7 @@ 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.UrlBuilder.ParamMap;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Route;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants;
|
||||
import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
|
||||
|
||||
public class IndividualTemplateModel extends BaseIndividualTemplateModel {
|
||||
|
@ -29,28 +32,9 @@ public class IndividualTemplateModel extends BaseIndividualTemplateModel {
|
|||
}
|
||||
|
||||
private String getBaseVisUrl() {
|
||||
return getUrl(Route.VISUALIZATION.path(), "uri", getUri());
|
||||
return getUrl(Route.VISUALIZATION_SHORT.path());
|
||||
}
|
||||
|
||||
private String getVisUrl(ParamMap params) {
|
||||
String baseVisUrl = getBaseVisUrl();
|
||||
return UrlBuilder.addParams(baseVisUrl, params);
|
||||
}
|
||||
|
||||
private String getVisUrl(String...params) {
|
||||
return getVisUrl(new ParamMap(params));
|
||||
}
|
||||
|
||||
private String getPersonVisUrl(ParamMap params) {
|
||||
if (!isPerson()) {
|
||||
return null;
|
||||
}
|
||||
ParamMap paramMap = new ParamMap("vis", "person_level");
|
||||
paramMap.put(params);
|
||||
return getVisUrl(paramMap);
|
||||
}
|
||||
|
||||
|
||||
/* Access methods for templates */
|
||||
|
||||
public boolean isPerson() {
|
||||
|
@ -62,18 +46,61 @@ public class IndividualTemplateModel extends BaseIndividualTemplateModel {
|
|||
}
|
||||
|
||||
public String getCoAuthorVisUrl() {
|
||||
return getPersonVisUrl(new ParamMap("vis_mode", "coauthor"));
|
||||
|
||||
String coauthorVisURL = getBaseVisUrl() + "/" + VisualizationFrameworkConstants.COAUTHORSHIP_VIS_SHORT_URL + "/";
|
||||
|
||||
return getVisUrl(coauthorVisURL);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Remove this method once Rebecca creates one. Right now it is the exact copy of the method found in
|
||||
* BaseIndividualTemplateModel.getRdfUrl
|
||||
* @return
|
||||
*/
|
||||
private boolean isIndividualURIBasedOnDefaultNamespace() {
|
||||
URI uri = new URIImpl(getUri());
|
||||
String namespace = uri.getNamespace();
|
||||
|
||||
// Individuals in the default namespace
|
||||
// e.g., http://vivo.cornell.edu/individual/n2345/n2345.rdf
|
||||
// where default namespace = http://vivo.cornell.edu/individual/
|
||||
// Other individuals: http://some.other.namespace/n2345?format=rdfxml
|
||||
String defaultNamespace = vreq.getWebappDaoFactory().getDefaultNamespace();
|
||||
return (defaultNamespace.equals(namespace)) ? true : false;
|
||||
}
|
||||
|
||||
public String getCoInvestigatorVisUrl() {
|
||||
return getPersonVisUrl(new ParamMap("vis_mode", "copi"));
|
||||
|
||||
String coinvestigatorVisURL = getBaseVisUrl() + "/" + VisualizationFrameworkConstants.COINVESTIGATOR_VIS_SHORT_URL + "/";
|
||||
|
||||
return getVisUrl(coinvestigatorVisURL);
|
||||
}
|
||||
|
||||
private String getVisUrl(String coinvestigatorVisURL) {
|
||||
boolean isUsingDefaultNameSpace = isIndividualURIBasedOnDefaultNamespace();
|
||||
|
||||
if (isUsingDefaultNameSpace) {
|
||||
|
||||
return coinvestigatorVisURL + getLocalName();
|
||||
|
||||
} else {
|
||||
|
||||
return UrlBuilder.addParams(
|
||||
coinvestigatorVisURL,
|
||||
new ParamMap(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY, getUri()));
|
||||
}
|
||||
}
|
||||
|
||||
public String getTemporalGraphUrl() {
|
||||
if (!isOrganization()) {
|
||||
return null;
|
||||
}
|
||||
return getVisUrl("vis", "entity_comparison");
|
||||
|
||||
String temporalVisURL = getBaseVisUrl() + "/" + VisualizationFrameworkConstants.PUBLICATION_TEMPORAL_VIS_SHORT_URL + "/";
|
||||
|
||||
return getVisUrl(temporalVisURL);
|
||||
|
||||
}
|
||||
|
||||
public String getSelfEditingId() {
|
||||
|
|
Loading…
Add table
Reference in a new issue