diff --git a/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml b/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml
index 850a1652..8fa37a1b 100644
--- a/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml
+++ b/productMods/WEB-INF/visualization/visualizations-beans-injection-fm.xml
@@ -63,6 +63,14 @@
+
+
+
+
+
+
+
+
+
+ ShortURLVisualizationController
+ /vis/*
+
AjaxVisualizationController
diff --git a/productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl b/productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl
index c0507fce..e2221f78 100644
--- a/productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl
+++ b/productMods/templates/freemarker/visualization/personlevel/coAuthorPersonLevel.ftl
@@ -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'>
diff --git a/productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl b/productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl
index e977f4ac..a69964eb 100644
--- a/productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl
+++ b/productMods/templates/freemarker/visualization/personlevel/coPIPersonLevel.ftl
@@ -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'>
diff --git a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/ShortURLVisualizationController.java b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/ShortURLVisualizationController.java
new file mode 100644
index 00000000..3b5b8b93
--- /dev/null
+++ b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/ShortURLVisualizationController.java
@@ -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 matchedPatternGroups = extractShortURLParameters(vitroRequest);
+
+
+ Map 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 getParamatersForVis(List matchedPatternGroups,
+ VitroRequest vitroRequest) {
+
+ Map parameters = new HashMap();
+
+ /*
+ * 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 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//"
+ * 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));
+ }
+
+ }
+
+ return matchedGroups;
+ }
+
+ private Dataset setupJENADataSource(VitroRequest vreq) {
+
+ log.debug("rdfResultFormat was: " + VisConstants.RDF_RESULT_FORMAT_PARAM);
+
+ return vreq.getDataset();
+ }
+
+}
+
diff --git a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/VisualizationFrameworkConstants.java b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/VisualizationFrameworkConstants.java
index 0910598a..f1f69366 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/VisualizationFrameworkConstants.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/controller/visualization/freemarker/VisualizationFrameworkConstants.java
@@ -2,6 +2,8 @@
package edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker;
+import java.util.regex.Pattern;
+
public class VisualizationFrameworkConstants {
/*
@@ -24,11 +26,20 @@ 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.
@@ -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";
diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipRequestHandler.java
index 60adfbe2..ddf1b389 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipRequestHandler.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coauthorship/CoAuthorshipRequestHandler.java
@@ -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 parameters, VitroRequest vitroRequest, Log log,
+ Dataset dataSource) throws MalformedQueryParametersException {
+ throw new UnsupportedOperationException("CoAuthorship does not provide Short URL Response.");
+ }
+
@Override
public Map generateDataVisualization(
VitroRequest vitroRequest, Log log, Dataset dataset)
@@ -288,4 +293,5 @@ public class CoAuthorshipRequestHandler implements VisualizationRequestHandler {
return fileData;
}
+
}
diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIGrantCountRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIGrantCountRequestHandler.java
index 79bac3f2..2ecb135e 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIGrantCountRequestHandler.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/coprincipalinvestigator/CoPIGrantCountRequestHandler.java
@@ -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 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 generateDataVisualization(
VitroRequest vitroRequest, Log log, Dataset dataset)
@@ -282,4 +287,5 @@ public class CoPIGrantCountRequestHandler implements VisualizationRequestHandler
return fileData;
}
+
}
\ No newline at end of file
diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitycomparison/EntityPublicationCountRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitycomparison/EntityPublicationCountRequestHandler.java
index e08d350d..059864b3 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitycomparison/EntityPublicationCountRequestHandler.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitycomparison/EntityPublicationCountRequestHandler.java
@@ -57,6 +57,14 @@ public class EntityPublicationCountRequestHandler implements
return prepareStandaloneMarkupResponse(vitroRequest, entityURI);
}
+ @Override
+ public ResponseValues generateVisualizationForShortURLRequests(
+ Map 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 getSubjectEntityAndGenerateDataResponse(
VitroRequest vitroRequest, Log log, Dataset dataset,
String subjectEntityURI)
@@ -327,4 +335,5 @@ public class EntityPublicationCountRequestHandler implements
}
return csvFileContent.toString();
}
+
}
\ No newline at end of file
diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitycomparison/cached/TemporalGrantVisualizationRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitycomparison/cached/TemporalGrantVisualizationRequestHandler.java
index baf2fce5..966d1087 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitycomparison/cached/TemporalGrantVisualizationRequestHandler.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitycomparison/cached/TemporalGrantVisualizationRequestHandler.java
@@ -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,13 +64,25 @@ 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 entry : ConstructedModelTracker.getAllModels().entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue().size());
}
-//
+*/
return prepareStandaloneMarkupResponse(vitroRequest, entityURI);
}
+
+
+ @Override
+ public ResponseValues generateVisualizationForShortURLRequests(
+ Map parameters, VitroRequest vitroRequest, Log log,
+ Dataset dataset) throws MalformedQueryParametersException {
+
+
+ return generateStandardVisualizationForGrantTemporalVis(
+ vitroRequest, log, dataset, parameters.get(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY));
+
+ }
@Override
public Map generateDataVisualization(
diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitycomparison/cached/TemporalPublicationVisualizationRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitycomparison/cached/TemporalPublicationVisualizationRequestHandler.java
index 9fd0f5e5..10f80ff2 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitycomparison/cached/TemporalPublicationVisualizationRequestHandler.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitycomparison/cached/TemporalPublicationVisualizationRequestHandler.java
@@ -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 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();
}
+
}
\ No newline at end of file
diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitygrantcount/EntityGrantCountRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitygrantcount/EntityGrantCountRequestHandler.java
index 0e1770be..5e602a1a 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitygrantcount/EntityGrantCountRequestHandler.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/entitygrantcount/EntityGrantCountRequestHandler.java
@@ -58,6 +58,14 @@ public class EntityGrantCountRequestHandler implements
return prepareStandaloneMarkupResponse(vitroRequest, entityURI);
}
+ @Override
+ public ResponseValues generateVisualizationForShortURLRequests(
+ Map 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 generateDataVisualization(
VitroRequest vitroRequest, Log log, Dataset dataset)
@@ -328,5 +336,6 @@ public class EntityGrantCountRequestHandler implements
}
return csvFileContent.toString();
- }
+ }
+
}
diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountRequestHandler.java
index 1165c52f..3ab4deee 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountRequestHandler.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/persongrantcount/PersonGrantCountRequestHandler.java
@@ -75,6 +75,13 @@ public class PersonGrantCountRequestHandler implements VisualizationRequestHandl
}
+ @Override
+ public ResponseValues generateVisualizationForShortURLRequests(
+ Map 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,
diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personlevel/PersonLevelRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personlevel/PersonLevelRequestHandler.java
index aea7938e..0649623c 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personlevel/PersonLevelRequestHandler.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personlevel/PersonLevelRequestHandler.java
@@ -71,15 +71,36 @@ public class PersonLevelRequestHandler implements VisualizationRequestHandler {
public ResponseValues generateStandardVisualization(
VitroRequest vitroRequest, Log log, Dataset dataset)
throws MalformedQueryParametersException {
-
+
String egoURI = vitroRequest.getParameter(
VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY);
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 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 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);
}
-
}
diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountRequestHandler.java
index 61b2d14b..d6182cb0 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountRequestHandler.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/personpubcount/PersonPublicationCountRequestHandler.java
@@ -94,6 +94,14 @@ VisualizationRequestHandler {
shouldVIVOrenderVis);
}
+
+ @Override
+ public ResponseValues generateVisualizationForShortURLRequests(
+ Map 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 generateDataVisualization(VitroRequest vitroRequest, Log log,
diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/utilities/UtilitiesRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/utilities/UtilitiesRequestHandler.java
index 2f37d877..16ed748d 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/utilities/UtilitiesRequestHandler.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/utilities/UtilitiesRequestHandler.java
@@ -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 parameters, VitroRequest vitroRequest, Log log,
+ Dataset dataSource) throws MalformedQueryParametersException {
+ throw new UnsupportedOperationException("Utilities Visualization does not provide "
+ + "Short URL Response.");
+ }
}
diff --git a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/VisualizationRequestHandler.java b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/VisualizationRequestHandler.java
index ffe92245..99dd685c 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/VisualizationRequestHandler.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/visualization/freemarker/visutils/VisualizationRequestHandler.java
@@ -27,6 +27,12 @@ public interface VisualizationRequestHandler {
Log log,
Dataset dataSource) throws MalformedQueryParametersException;
+ ResponseValues generateVisualizationForShortURLRequests(
+ Map parameters,
+ VitroRequest vitroRequest,
+ Log log,
+ Dataset dataSource) throws MalformedQueryParametersException;
+
Object generateAjaxVisualization(VitroRequest vitroRequest,
Log log,
Dataset dataSource) throws MalformedQueryParametersException;
diff --git a/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java b/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java
index da1c1561..0a21057f 100644
--- a/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java
+++ b/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java
@@ -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() {