1. refactored code in preparation for adding code structure for map of science vis

This commit is contained in:
cdtank 2011-05-11 20:51:54 +00:00
parent 1e0c2195e1
commit 1e82115d64
10 changed files with 481 additions and 49 deletions

View file

@ -0,0 +1,26 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#assign standardVisualizationURLRoot ="/visualization">
<#assign ajaxVisualizationURLRoot ="/visualizationAjax">
<#assign dataVisualizationURLRoot ="/visualizationData">
<#assign shortVisualizationURLRoot ="/vis">
<#assign organizationURI ="${organizationURI?url}">
<#assign organizationVivoProfileURL = "${urls.base}/individual?uri=${organizationURI}">
<#assign subOrganizationVivoProfileURL = "${urls.base}/individual?">
<#assign subOrganizationMapOfScienceCommonURL = "${urls.base}${shortVisualizationURLRoot}/map-of-science/">
<#if organizationLocalName?has_content >
<#assign organizationMapOfScienceURL = "${urls.base}${shortVisualizationURLRoot}/map-of-science/${organizationLocalName}">
<#else>
<#assign organizationMapOfScienceURL = '${urls.base}${shortVisualizationURLRoot}/map-of-science/?uri=${organizationURI}'>
</#if>
<#assign organizationMapOfScienceDataURL = "${urls.base}${dataVisualizationURLRoot}?vis=map-of-science&uri=${organizationURI}&vis_mode=json">

View file

@ -0,0 +1,38 @@
<#-- $This file is distributed under the terms of the license in /doc/license.txt$ -->
<#-- The Order of each element in this file is very important. Do not make any changes to it unless making
corresponding changes in the included Templates. -->
<#include "scienceMapSetup.ftl">
<script language="JavaScript" type="text/javascript">
$(document).ready(function() {
var scienceMapDataURL = "${organizationMapOfScienceDataURL}";
$.ajax({
url: scienceMapDataURL
dataType: "json",
timeout: 5 * 60 * 1000,
success: function (data) {
if (data.error) {
alert("error");
alert(data);
} else {
alert("success");
alert(data);
}
}
});
});
</script>

View file

@ -14,4 +14,8 @@ public class VisConstants {
public static final String RESULT_FORMAT_PARAM = "RS_TEXT"; public static final String RESULT_FORMAT_PARAM = "RS_TEXT";
public static final String RDF_RESULT_FORMAT_PARAM = "RDF/XML-ABBREV"; public static final String RDF_RESULT_FORMAT_PARAM = "RDF/XML-ABBREV";
public static enum DataVisMode {
CSV, JSON
};
} }

View file

@ -53,7 +53,7 @@ public class EntityPublicationCountRequestHandler implements
if (StringUtils.isBlank(entityURI)) { if (StringUtils.isBlank(entityURI)) {
entityURI = EntityComparisonUtilityFunctions entityURI = OrganizationUtilityFunctions
.getStaffProvidedOrComputedHighestLevelOrganization( .getStaffProvidedOrComputedHighestLevelOrganization(
log, log,
dataset, dataset,
@ -120,7 +120,7 @@ public class EntityPublicationCountRequestHandler implements
throws MalformedQueryParametersException { throws MalformedQueryParametersException {
Map<String, Set<String>> subOrganizationTypesResult = Map<String, Set<String>> subOrganizationTypesResult =
EntityComparisonUtilityFunctions.getSubEntityTypes( OrganizationUtilityFunctions.getSubEntityTypes(
log, dataset, subjectEntityURI); log, dataset, subjectEntityURI);
return prepareStandaloneDataResponse(vitroRequest, entity, entity.getSubEntities(), return prepareStandaloneDataResponse(vitroRequest, entity, entity.getSubEntities(),
@ -155,7 +155,7 @@ public class EntityPublicationCountRequestHandler implements
vitroRequest, vitroRequest,
log, log,
dataset, dataset,
EntityComparisonUtilityFunctions OrganizationUtilityFunctions
.getStaffProvidedOrComputedHighestLevelOrganization( .getStaffProvidedOrComputedHighestLevelOrganization(
log, log,
dataset, dataset,
@ -178,7 +178,7 @@ public class EntityPublicationCountRequestHandler implements
Entity entity = queryManager.getQueryResult(); Entity entity = queryManager.getQueryResult();
Map<String, Set<String>> subOrganizationTypesResult = Map<String, Set<String>> subOrganizationTypesResult =
EntityComparisonUtilityFunctions.getSubEntityTypes( OrganizationUtilityFunctions.getSubEntityTypes(
log, dataset, entityURI); log, dataset, entityURI);
return prepareDataResponse(entity, entity.getSubEntities(), subOrganizationTypesResult); return prepareDataResponse(entity, entity.getSubEntities(), subOrganizationTypesResult);
@ -251,7 +251,7 @@ public class EntityPublicationCountRequestHandler implements
String standaloneTemplate = "entityComparisonOnPublicationsStandalone.ftl"; String standaloneTemplate = "entityComparisonOnPublicationsStandalone.ftl";
String organizationLabel = EntityComparisonUtilityFunctions String organizationLabel = OrganizationUtilityFunctions
.getEntityLabelFromDAO(vreq, .getEntityLabelFromDAO(vreq,
entityURI); entityURI);

View file

@ -28,7 +28,7 @@ import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.Generi
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.ModelConstructor; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.ModelConstructor;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.QueryRunner; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.QueryRunner;
public class EntityComparisonUtilityFunctions { public class OrganizationUtilityFunctions {
public static String getHighestLevelOrganizationURI(ResultSet resultSet, public static String getHighestLevelOrganizationURI(ResultSet resultSet,
Map<String, String> fieldLabelToOutputFieldLabel) { Map<String, String> fieldLabelToOutputFieldLabel) {
@ -94,7 +94,7 @@ public class EntityComparisonUtilityFunctions {
fieldLabelToOutputFieldLabel, aggregationRules, whereClause, fieldLabelToOutputFieldLabel, aggregationRules, whereClause,
groupOrderClause, dataset, log); groupOrderClause, dataset, log);
String highestLevelOrgURI = EntityComparisonUtilityFunctions String highestLevelOrgURI = OrganizationUtilityFunctions
.getHighestLevelOrganizationURI( .getHighestLevelOrganizationURI(
highestLevelOrganizationQueryHandler.getQueryResult(), highestLevelOrganizationQueryHandler.getQueryResult(),
fieldLabelToOutputFieldLabel); fieldLabelToOutputFieldLabel);
@ -165,7 +165,7 @@ public class EntityComparisonUtilityFunctions {
/* /*
* If the provided value was not proper compute it yourself. * If the provided value was not proper compute it yourself.
* */ * */
return EntityComparisonUtilityFunctions.getHighestLevelOrganizationURI(log, dataset); return OrganizationUtilityFunctions.getHighestLevelOrganizationURI(log, dataset);
} }
public static Entity mergeEntityIfShareSameURI(Entity entityA, Entity entityB) { public static Entity mergeEntityIfShareSameURI(Entity entityA, Entity entityB) {

View file

@ -1,11 +0,0 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.visualization.freemarker.entitycomparison.cached;
public class EntityComparisonConstants {
public static enum DataVisMode {
CSV, JSON
};
}

View file

@ -22,8 +22,9 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.Tem
import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.DataVisualizationController; 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.controller.visualization.freemarker.VisualizationFrameworkConstants;
import edu.cornell.mannlib.vitro.webapp.visualization.constants.VOConstants; 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.exceptions.MalformedQueryParametersException; 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.entitycomparison.OrganizationUtilityFunctions;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Activity; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Activity;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Entity; 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.JsonObject;
@ -55,7 +56,7 @@ public class TemporalGrantVisualizationRequestHandler implements
String entityURI) throws MalformedQueryParametersException { String entityURI) throws MalformedQueryParametersException {
if (StringUtils.isBlank(entityURI)) { if (StringUtils.isBlank(entityURI)) {
entityURI = EntityComparisonUtilityFunctions entityURI = OrganizationUtilityFunctions
.getStaffProvidedOrComputedHighestLevelOrganization( .getStaffProvidedOrComputedHighestLevelOrganization(
log, log,
dataset, dataset,
@ -105,19 +106,19 @@ public class TemporalGrantVisualizationRequestHandler implements
log, log,
dataset, dataset,
entityURI, entityURI,
EntityComparisonConstants.DataVisMode.JSON); VisConstants.DataVisMode.JSON);
} else { } else {
return getSubjectEntityAndGenerateDataResponse( return getSubjectEntityAndGenerateDataResponse(
vitroRequest, vitroRequest,
log, log,
dataset, dataset,
EntityComparisonUtilityFunctions OrganizationUtilityFunctions
.getStaffProvidedOrComputedHighestLevelOrganization( .getStaffProvidedOrComputedHighestLevelOrganization(
log, log,
dataset, dataset,
vitroRequest), vitroRequest),
EntityComparisonConstants.DataVisMode.JSON); VisConstants.DataVisMode.JSON);
} }
} else { } else {
@ -129,7 +130,7 @@ public class TemporalGrantVisualizationRequestHandler implements
log, log,
dataset, dataset,
entityURI, entityURI,
EntityComparisonConstants.DataVisMode.CSV); VisConstants.DataVisMode.CSV);
} }
} }
@ -157,7 +158,7 @@ public class TemporalGrantVisualizationRequestHandler implements
private Map<String, String> getSubjectEntityAndGenerateDataResponse( private Map<String, String> getSubjectEntityAndGenerateDataResponse(
VitroRequest vitroRequest, Log log, Dataset dataset, VitroRequest vitroRequest, Log log, Dataset dataset,
String subjectEntityURI, EntityComparisonConstants.DataVisMode visMode) String subjectEntityURI, VisConstants.DataVisMode visMode)
throws MalformedQueryParametersException { throws MalformedQueryParametersException {
Entity organizationEntity = SelectOnModelUtilities Entity organizationEntity = SelectOnModelUtilities
@ -165,7 +166,7 @@ public class TemporalGrantVisualizationRequestHandler implements
if (organizationEntity.getSubEntities() == null) { if (organizationEntity.getSubEntities() == null) {
if (EntityComparisonConstants.DataVisMode.JSON.equals(visMode)) { if (VisConstants.DataVisMode.JSON.equals(visMode)) {
return prepareStandaloneDataErrorResponse(); return prepareStandaloneDataErrorResponse();
} else { } else {
return prepareDataErrorResponse(); return prepareDataErrorResponse();
@ -194,14 +195,14 @@ public class TemporalGrantVisualizationRequestHandler implements
grantURIForAssociatedPeopleToVO = SelectOnModelUtilities grantURIForAssociatedPeopleToVO = SelectOnModelUtilities
.getGrantsForAssociatedPeople(dataset, organizationWithAssociatedPeople.getSubEntities()); .getGrantsForAssociatedPeople(dataset, organizationWithAssociatedPeople.getSubEntities());
organizationEntity = EntityComparisonUtilityFunctions.mergeEntityIfShareSameURI( organizationEntity = OrganizationUtilityFunctions.mergeEntityIfShareSameURI(
organizationEntity, organizationEntity,
organizationWithAssociatedPeople); organizationWithAssociatedPeople);
} }
if (allGrantURIToVO.isEmpty() && grantURIForAssociatedPeopleToVO.isEmpty()) { if (allGrantURIToVO.isEmpty() && grantURIForAssociatedPeopleToVO.isEmpty()) {
if (EntityComparisonConstants.DataVisMode.JSON.equals(visMode)) { if (VisConstants.DataVisMode.JSON.equals(visMode)) {
return prepareStandaloneDataErrorResponse(); return prepareStandaloneDataErrorResponse();
} else { } else {
return prepareDataErrorResponse(); return prepareDataErrorResponse();
@ -209,7 +210,7 @@ public class TemporalGrantVisualizationRequestHandler implements
} else { } else {
if (EntityComparisonConstants.DataVisMode.JSON.equals(visMode)) { if (VisConstants.DataVisMode.JSON.equals(visMode)) {
return prepareStandaloneDataResponse(vitroRequest, organizationEntity); return prepareStandaloneDataResponse(vitroRequest, organizationEntity);
} else { } else {
return prepareDataResponse(organizationEntity); return prepareDataResponse(organizationEntity);
@ -283,7 +284,7 @@ public class TemporalGrantVisualizationRequestHandler implements
String standaloneTemplate = "entityComparisonOnGrantsStandalone.ftl"; String standaloneTemplate = "entityComparisonOnGrantsStandalone.ftl";
String organizationLabel = EntityComparisonUtilityFunctions.getEntityLabelFromDAO(vreq, String organizationLabel = OrganizationUtilityFunctions.getEntityLabelFromDAO(vreq,
entityURI); entityURI);
Map<String, Object> body = new HashMap<String, Object>(); Map<String, Object> body = new HashMap<String, Object>();

View file

@ -22,8 +22,9 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.Tem
import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.DataVisualizationController; 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.controller.visualization.freemarker.VisualizationFrameworkConstants;
import edu.cornell.mannlib.vitro.webapp.visualization.constants.VOConstants; 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.exceptions.MalformedQueryParametersException; 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.entitycomparison.OrganizationUtilityFunctions;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Activity; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Activity;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Entity; 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.JsonObject;
@ -66,7 +67,7 @@ public class TemporalPublicationVisualizationRequestHandler implements
if (StringUtils.isBlank(entityURI)) { if (StringUtils.isBlank(entityURI)) {
entityURI = EntityComparisonUtilityFunctions entityURI = OrganizationUtilityFunctions
.getStaffProvidedOrComputedHighestLevelOrganization( .getStaffProvidedOrComputedHighestLevelOrganization(
log, log,
dataset, dataset,
@ -85,7 +86,7 @@ public class TemporalPublicationVisualizationRequestHandler implements
private Map<String, String> getSubjectEntityAndGenerateDataResponse( private Map<String, String> getSubjectEntityAndGenerateDataResponse(
VitroRequest vitroRequest, Log log, Dataset dataset, VitroRequest vitroRequest, Log log, Dataset dataset,
String subjectEntityURI, EntityComparisonConstants.DataVisMode visMode) String subjectEntityURI, VisConstants.DataVisMode visMode)
throws MalformedQueryParametersException { throws MalformedQueryParametersException {
Entity organizationEntity = SelectOnModelUtilities Entity organizationEntity = SelectOnModelUtilities
@ -93,7 +94,7 @@ public class TemporalPublicationVisualizationRequestHandler implements
if (organizationEntity.getSubEntities() == null) { if (organizationEntity.getSubEntities() == null) {
if (EntityComparisonConstants.DataVisMode.JSON.equals(visMode)) { if (VisConstants.DataVisMode.JSON.equals(visMode)) {
return prepareStandaloneDataErrorResponse(); return prepareStandaloneDataErrorResponse();
} else { } else {
return prepareDataErrorResponse(); return prepareDataErrorResponse();
@ -113,14 +114,14 @@ public class TemporalPublicationVisualizationRequestHandler implements
documentURIForAssociatedPeopleTOVO = SelectOnModelUtilities documentURIForAssociatedPeopleTOVO = SelectOnModelUtilities
.getPublicationsForAssociatedPeople(dataset, organizationWithAssociatedPeople.getSubEntities()); .getPublicationsForAssociatedPeople(dataset, organizationWithAssociatedPeople.getSubEntities());
organizationEntity = EntityComparisonUtilityFunctions.mergeEntityIfShareSameURI( organizationEntity = OrganizationUtilityFunctions.mergeEntityIfShareSameURI(
organizationEntity, organizationEntity,
organizationWithAssociatedPeople); organizationWithAssociatedPeople);
} }
if (allDocumentURIToVOs.isEmpty() && documentURIForAssociatedPeopleTOVO.isEmpty()) { if (allDocumentURIToVOs.isEmpty() && documentURIForAssociatedPeopleTOVO.isEmpty()) {
if (EntityComparisonConstants.DataVisMode.JSON.equals(visMode)) { if (VisConstants.DataVisMode.JSON.equals(visMode)) {
return prepareStandaloneDataErrorResponse(); return prepareStandaloneDataErrorResponse();
} else { } else {
return prepareDataErrorResponse(); return prepareDataErrorResponse();
@ -128,7 +129,7 @@ public class TemporalPublicationVisualizationRequestHandler implements
} else { } else {
if (EntityComparisonConstants.DataVisMode.JSON.equals(visMode)) { if (VisConstants.DataVisMode.JSON.equals(visMode)) {
return prepareStandaloneDataResponse(vitroRequest, organizationEntity); return prepareStandaloneDataResponse(vitroRequest, organizationEntity);
} else { } else {
return prepareDataResponse(organizationEntity); return prepareDataResponse(organizationEntity);
@ -217,19 +218,19 @@ public class TemporalPublicationVisualizationRequestHandler implements
log, log,
dataset, dataset,
entityURI, entityURI,
EntityComparisonConstants.DataVisMode.JSON); VisConstants.DataVisMode.JSON);
} else { } else {
return getSubjectEntityAndGenerateDataResponse( return getSubjectEntityAndGenerateDataResponse(
vitroRequest, vitroRequest,
log, log,
dataset, dataset,
EntityComparisonUtilityFunctions OrganizationUtilityFunctions
.getStaffProvidedOrComputedHighestLevelOrganization( .getStaffProvidedOrComputedHighestLevelOrganization(
log, log,
dataset, dataset,
vitroRequest), vitroRequest),
EntityComparisonConstants.DataVisMode.JSON); VisConstants.DataVisMode.JSON);
} }
} else { } else {
@ -242,7 +243,7 @@ public class TemporalPublicationVisualizationRequestHandler implements
log, log,
dataset, dataset,
entityURI, entityURI,
EntityComparisonConstants.DataVisMode.CSV); VisConstants.DataVisMode.CSV);
} }
@ -274,7 +275,7 @@ public class TemporalPublicationVisualizationRequestHandler implements
String standaloneTemplate = "entityComparisonOnPublicationsStandalone.ftl"; String standaloneTemplate = "entityComparisonOnPublicationsStandalone.ftl";
String organizationLabel = EntityComparisonUtilityFunctions String organizationLabel = OrganizationUtilityFunctions
.getEntityLabelFromDAO(vreq, .getEntityLabelFromDAO(vreq,
entityURI); entityURI);

View file

@ -24,7 +24,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.Data
import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants; import edu.cornell.mannlib.vitro.webapp.controller.visualization.freemarker.VisualizationFrameworkConstants;
import edu.cornell.mannlib.vitro.webapp.visualization.constants.VOConstants; 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.exceptions.MalformedQueryParametersException;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.entitycomparison.EntityComparisonUtilityFunctions; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.entitycomparison.OrganizationUtilityFunctions;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Entity; 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.JsonObject;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.SubEntity; import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.SubEntity;
@ -54,7 +54,7 @@ public class EntityGrantCountRequestHandler implements
String entityURI) throws MalformedQueryParametersException { String entityURI) throws MalformedQueryParametersException {
if (StringUtils.isBlank(entityURI)) { if (StringUtils.isBlank(entityURI)) {
entityURI = EntityComparisonUtilityFunctions entityURI = OrganizationUtilityFunctions
.getStaffProvidedOrComputedHighestLevelOrganization( .getStaffProvidedOrComputedHighestLevelOrganization(
log, log,
dataset, dataset,
@ -102,7 +102,7 @@ public class EntityGrantCountRequestHandler implements
vitroRequest, vitroRequest,
log, log,
dataset, dataset,
EntityComparisonUtilityFunctions OrganizationUtilityFunctions
.getStaffProvidedOrComputedHighestLevelOrganization( .getStaffProvidedOrComputedHighestLevelOrganization(
log, log,
dataset, dataset,
@ -125,7 +125,7 @@ public class EntityGrantCountRequestHandler implements
Map<String, Set<String>> subOrganizationTypesResult = Map<String, Set<String>> subOrganizationTypesResult =
EntityComparisonUtilityFunctions.getSubEntityTypes( OrganizationUtilityFunctions.getSubEntityTypes(
log, dataset, entityURI); log, dataset, entityURI);
return prepareDataResponse(entity, entity.getSubEntities(), subOrganizationTypesResult); return prepareDataResponse(entity, entity.getSubEntities(), subOrganizationTypesResult);
@ -173,7 +173,7 @@ public class EntityGrantCountRequestHandler implements
throws MalformedQueryParametersException { throws MalformedQueryParametersException {
Map<String, Set<String>> subOrganizationTypesResult = Map<String, Set<String>> subOrganizationTypesResult =
EntityComparisonUtilityFunctions.getSubEntityTypes( OrganizationUtilityFunctions.getSubEntityTypes(
log, dataset, subjectOrganization); log, dataset, subjectOrganization);
return prepareStandaloneDataResponse(vitroRequest, entity, subOrganizationTypesResult); return prepareStandaloneDataResponse(vitroRequest, entity, subOrganizationTypesResult);
@ -250,7 +250,7 @@ public class EntityGrantCountRequestHandler implements
String standaloneTemplate = "entityComparisonOnGrantsStandalone.ftl"; String standaloneTemplate = "entityComparisonOnGrantsStandalone.ftl";
String organizationLabel = EntityComparisonUtilityFunctions.getEntityLabelFromDAO(vreq, String organizationLabel = OrganizationUtilityFunctions.getEntityLabelFromDAO(vreq,
entityURI); entityURI);
Map<String, Object> body = new HashMap<String, Object>(); Map<String, Object> body = new HashMap<String, Object>();

View file

@ -0,0 +1,373 @@
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
package edu.cornell.mannlib.vitro.webapp.visualization.freemarker.mapofscience;
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.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import com.google.gson.Gson;
import com.hp.hpl.jena.query.Dataset;
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.constants.VOConstants;
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.entitycomparison.OrganizationUtilityFunctions;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.Activity;
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;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.valueobjects.SubjectEntityJSON;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.SelectOnModelUtilities;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.UtilityFunctions;
import edu.cornell.mannlib.vitro.webapp.visualization.freemarker.visutils.VisualizationRequestHandler;
public class MapOfScienceVisualizationRequestHandler implements
VisualizationRequestHandler {
@Override
public ResponseValues generateStandardVisualization(
VitroRequest vitroRequest, Log log, Dataset dataset)
throws MalformedQueryParametersException {
String entityURI = vitroRequest
.getParameter(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY);
return generateStandardVisualizationForScienceMapVis(
vitroRequest, log, dataset, entityURI);
}
@Override
public ResponseValues generateVisualizationForShortURLRequests(
Map<String, String> parameters, VitroRequest vitroRequest, Log log,
Dataset dataset) throws MalformedQueryParametersException {
return generateStandardVisualizationForScienceMapVis(
vitroRequest, log, dataset, parameters.get(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY));
}
private ResponseValues generateStandardVisualizationForScienceMapVis(
VitroRequest vitroRequest, Log log, Dataset dataset,
String entityURI) throws MalformedQueryParametersException {
if (StringUtils.isBlank(entityURI)) {
entityURI = OrganizationUtilityFunctions
.getStaffProvidedOrComputedHighestLevelOrganization(
log,
dataset,
vitroRequest);
}
// 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);
}
private Map<String, String> getSubjectEntityAndGenerateDataResponse(
VitroRequest vitroRequest, Log log, Dataset dataset,
String subjectEntityURI, VisConstants.DataVisMode visMode)
throws MalformedQueryParametersException {
Entity organizationEntity = SelectOnModelUtilities
.getSubjectOrganizationHierarchy(dataset, subjectEntityURI);
if (organizationEntity.getSubEntities() == null) {
if (VisConstants.DataVisMode.JSON.equals(visMode)) {
return prepareStandaloneDataErrorResponse();
} else {
return prepareDataErrorResponse();
}
}
Map<String, Activity> documentURIForAssociatedPeopleTOVO = new HashMap<String, Activity>();
Map<String, Activity> allDocumentURIToVOs = new HashMap<String, Activity>();
allDocumentURIToVOs = SelectOnModelUtilities.getPublicationsForAllSubOrganizations(dataset, organizationEntity);
Entity organizationWithAssociatedPeople = SelectOnModelUtilities
.getSubjectOrganizationAssociatedPeople(dataset, subjectEntityURI);
if (organizationWithAssociatedPeople.getSubEntities() != null) {
documentURIForAssociatedPeopleTOVO = SelectOnModelUtilities
.getPublicationsForAssociatedPeople(dataset, organizationWithAssociatedPeople.getSubEntities());
organizationEntity = OrganizationUtilityFunctions.mergeEntityIfShareSameURI(
organizationEntity,
organizationWithAssociatedPeople);
}
if (allDocumentURIToVOs.isEmpty() && documentURIForAssociatedPeopleTOVO.isEmpty()) {
if (VisConstants.DataVisMode.JSON.equals(visMode)) {
return prepareStandaloneDataErrorResponse();
} else {
return prepareDataErrorResponse();
}
} else {
if (VisConstants.DataVisMode.JSON.equals(visMode)) {
return prepareStandaloneDataResponse(vitroRequest, organizationEntity);
} else {
return prepareDataResponse(organizationEntity);
}
}
}
/**
* Provides response when json file containing the publication count over the
* years is requested.
*
* @param entity
* @param subentities
* @param subOrganizationTypesResult
*/
private Map<String, String> prepareDataResponse(Entity entity) {
String entityLabel = entity.getEntityLabel();
/*
* To make sure that null/empty records for entity names do not cause any mischief.
* */
if (StringUtils.isBlank(entityLabel)) {
entityLabel = "no-organization";
}
String outputFileName = UtilityFunctions.slugify(entityLabel)
+ "_publications-per-year" + ".csv";
Map<String, String> fileData = new HashMap<String, String>();
fileData.put(DataVisualizationController.FILE_NAME_KEY,
outputFileName);
fileData.put(DataVisualizationController.FILE_CONTENT_TYPE_KEY,
"application/octet-stream");
fileData.put(DataVisualizationController.FILE_CONTENT_KEY,
getEntityPublicationsPerYearCSVContent(entity));
return fileData;
}
private Map<String, String> prepareDataErrorResponse() {
String outputFileName = "no-organization_publications-per-year.csv";
Map<String, String> fileData = new HashMap<String, String>();
fileData.put(DataVisualizationController.FILE_NAME_KEY,
outputFileName);
fileData.put(DataVisualizationController.FILE_CONTENT_TYPE_KEY,
"application/octet-stream");
fileData.put(DataVisualizationController.FILE_CONTENT_KEY, "");
return fileData;
}
private Map<String, String> prepareStandaloneDataErrorResponse() {
Map<String, String> fileData = new HashMap<String, String>();
fileData.put(DataVisualizationController.FILE_CONTENT_TYPE_KEY,
"application/octet-stream");
fileData.put(DataVisualizationController.FILE_CONTENT_KEY,
"{\"error\" : \"No Publications for this Organization found in VIVO.\"}");
return fileData;
}
@Override
public Map<String, String> generateDataVisualization(
VitroRequest vitroRequest, Log log, Dataset dataset)
throws MalformedQueryParametersException {
String entityURI = vitroRequest
.getParameter(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY);
/*
* This will provide the data in json format mainly used for standalone tmeporal vis.
* */
if (VisualizationFrameworkConstants.TEMPORAL_GRAPH_JSON_DATA_VIS_MODE
.equalsIgnoreCase(vitroRequest.getParameter(
VisualizationFrameworkConstants.VIS_MODE_KEY))) {
if (StringUtils.isNotBlank(entityURI)) {
return getSubjectEntityAndGenerateDataResponse(
vitroRequest,
log,
dataset,
entityURI,
VisConstants.DataVisMode.JSON);
} else {
return getSubjectEntityAndGenerateDataResponse(
vitroRequest,
log,
dataset,
OrganizationUtilityFunctions
.getStaffProvidedOrComputedHighestLevelOrganization(
log,
dataset,
vitroRequest),
VisConstants.DataVisMode.JSON);
}
} else {
/*
* This provides csv download files for the content in the tables.
* */
return getSubjectEntityAndGenerateDataResponse(
vitroRequest,
log,
dataset,
entityURI,
VisConstants.DataVisMode.CSV);
}
}
@Override
public Object generateAjaxVisualization(VitroRequest vitroRequest, Log log,
Dataset dataset) throws MalformedQueryParametersException {
throw new UnsupportedOperationException("Entity Pub Count does not provide Ajax Response.");
}
private Map<String, String> prepareStandaloneDataResponse(
VitroRequest vitroRequest,
Entity entity) {
Map<String, String> fileData = new HashMap<String, String>();
fileData.put(DataVisualizationController.FILE_CONTENT_TYPE_KEY,
"application/octet-stream");
fileData.put(DataVisualizationController.FILE_CONTENT_KEY,
writePublicationsOverTimeJSON(vitroRequest,
entity));
return fileData;
}
private TemplateResponseValues prepareStandaloneMarkupResponse(VitroRequest vreq,
String entityURI) {
String standaloneTemplate = "mapOfScienceStandalone.ftl";
String organizationLabel = OrganizationUtilityFunctions
.getEntityLabelFromDAO(vreq,
entityURI);
Map<String, Object> body = new HashMap<String, Object>();
body.put("title", organizationLabel + " - Map of Science Visualization");
body.put("organizationURI", entityURI);
body.put("organizationLocalName", UtilityFunctions.getIndividualLocalName(entityURI, vreq));
body.put("vivoDefaultNamespace", vreq.getWebappDaoFactory().getDefaultNamespace());
body.put("organizationLabel", organizationLabel);
return new TemplateResponseValues(standaloneTemplate, body);
}
/**
* Function to generate a json file for year <-> publication count mapping.
* @param vreq
* @param subentities
* @param subOrganizationTypesResult
*/
private String writePublicationsOverTimeJSON(VitroRequest vreq,
Entity subjectEntity) {
Gson json = new Gson();
Set subEntitiesJson = new HashSet();
for (SubEntity subentity : subjectEntity.getSubEntities()) {
JsonObject entityJson = new JsonObject(
subentity.getIndividualLabel());
List<List<Integer>> yearPubCount = new ArrayList<List<Integer>>();
for (Map.Entry<String, Integer> pubEntry : UtilityFunctions
.getYearToActivityCount(subentity.getActivities())
.entrySet()) {
List<Integer> currentPubYear = new ArrayList<Integer>();
if (pubEntry.getKey().equals(VOConstants.DEFAULT_PUBLICATION_YEAR)) {
currentPubYear.add(-1);
} else {
currentPubYear.add(Integer.parseInt(pubEntry.getKey()));
}
currentPubYear.add(pubEntry.getValue());
yearPubCount.add(currentPubYear);
}
entityJson.setYearToActivityCount(yearPubCount);
entityJson.setOrganizationTypes(subentity.getEntityTypeLabels());
entityJson.setEntityURI(subentity.getIndividualURI());
entityJson.setLastCachedAtDateTime(subentity.getLastCachedAtDateTime());
if (subentity.getEntityClass().equals(VOConstants.EntityClassType.PERSON)) {
entityJson.setVisMode("PERSON");
} else if (subentity.getEntityClass().equals(VOConstants.EntityClassType.ORGANIZATION)) {
entityJson.setVisMode("ORGANIZATION");
}
subEntitiesJson.add(entityJson);
}
SubjectEntityJSON subjectEntityJSON = new SubjectEntityJSON(subjectEntity.getEntityLabel(),
subjectEntity.getEntityURI(),
subjectEntity.getParents());
subEntitiesJson.add(subjectEntityJSON);
return json.toJson(subEntitiesJson);
}
private String getEntityPublicationsPerYearCSVContent(Entity entity) {
StringBuilder csvFileContent = new StringBuilder();
csvFileContent.append("Entity Name, Publication Count, Entity Type\n");
for (SubEntity subEntity : entity.getSubEntities()) {
csvFileContent.append(StringEscapeUtils.escapeCsv(subEntity.getIndividualLabel()));
csvFileContent.append(", ");
csvFileContent.append(subEntity.getActivities().size());
csvFileContent.append(", ");
String allTypes = StringUtils.join(subEntity.getEntityTypeLabels(), "; ");
csvFileContent.append(StringEscapeUtils.escapeCsv(allTypes));
csvFileContent.append("\n");
}
return csvFileContent.toString();
}
}