1. Addition of new scimaps vis related jar file.

2. COmpleted the task of providing subdiscipline activity for an entity & other metadata to the front-end in the json format.
3/ Minor refactor of utility functions.
This commit is contained in:
tankchintan 2011-05-18 19:58:40 +00:00
parent 42d4a2ae86
commit 69311ae53f
9 changed files with 242 additions and 111 deletions

Binary file not shown.

View file

@ -52,6 +52,7 @@ public class VisualizationFrameworkConstants {
public static final String INDIVIDUAL_URI_KEY = "uri";
public static final String VIS_MODE_KEY = "vis_mode";
public static final String RENDER_MODE_KEY = "render_mode";
public static final String OUTPUT_FORMAT_KEY = "output";
/*
* These values represent possible render modes.
@ -121,7 +122,9 @@ public class VisualizationFrameworkConstants {
/*
* These values represent possible vis-modes for temporal graph vis
* These values represent possible data serialization formats corresponding to
* output format key.
* */
public static final String TEMPORAL_GRAPH_JSON_DATA_VIS_MODE = "json";
public static final String JSON_OUTPUT_FORMAT = "json";
public static final String CSV_OUTPUT_FORMAT = "csv";
}

View file

@ -138,7 +138,7 @@ public class EntityPublicationCountRequestHandler implements
/*
* This will provide the data in json format mainly used for standalone tmeporal vis.
* */
if (VisualizationFrameworkConstants.TEMPORAL_GRAPH_JSON_DATA_VIS_MODE
if (VisualizationFrameworkConstants.JSON_OUTPUT_FORMAT
.equalsIgnoreCase(vitroRequest.getParameter(
VisualizationFrameworkConstants.VIS_MODE_KEY))) {
@ -306,7 +306,7 @@ public class EntityPublicationCountRequestHandler implements
entityJson.setEntityURI(subentity.getIndividualURI());
boolean isPerson = UtilityFunctions.isEntityAPerson(vreq, subentity);
boolean isPerson = UtilityFunctions.isEntityAPerson(vreq, subentity.getIndividualURI());
if (isPerson) {
entityJson.setVisMode("PERSON");

View file

@ -95,7 +95,7 @@ public class TemporalGrantVisualizationRequestHandler implements
/*
* This will provide the data in json format mainly used for standalone temporal vis.
* */
if (VisualizationFrameworkConstants.TEMPORAL_GRAPH_JSON_DATA_VIS_MODE
if (VisualizationFrameworkConstants.JSON_OUTPUT_FORMAT
.equalsIgnoreCase(vitroRequest
.getParameter(VisualizationFrameworkConstants.VIS_MODE_KEY))) {

View file

@ -207,7 +207,7 @@ public class TemporalPublicationVisualizationRequestHandler implements
/*
* This will provide the data in json format mainly used for standalone tmeporal vis.
* */
if (VisualizationFrameworkConstants.TEMPORAL_GRAPH_JSON_DATA_VIS_MODE
if (VisualizationFrameworkConstants.JSON_OUTPUT_FORMAT
.equalsIgnoreCase(vitroRequest.getParameter(
VisualizationFrameworkConstants.VIS_MODE_KEY))) {

View file

@ -85,7 +85,7 @@ public class EntityGrantCountRequestHandler implements
/*
* This will provide the data in json format mainly used for standalone temporal vis.
* */
if (VisualizationFrameworkConstants.TEMPORAL_GRAPH_JSON_DATA_VIS_MODE
if (VisualizationFrameworkConstants.JSON_OUTPUT_FORMAT
.equalsIgnoreCase(vitroRequest
.getParameter(VisualizationFrameworkConstants.VIS_MODE_KEY))) {
@ -304,7 +304,7 @@ public class EntityGrantCountRequestHandler implements
entityJson.setEntityURI(subentity.getIndividualURI());
if (UtilityFunctions.isEntityAPerson(vreq, subentity)) {
if (UtilityFunctions.isEntityAPerson(vreq, subentity.getIndividualURI())) {
entityJson.setVisMode("PERSON");
} else {
entityJson.setVisMode("ORGANIZATION");

View file

@ -2,11 +2,15 @@
package edu.cornell.mannlib.vitro.webapp.visualization.mapofscience;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import mapping.ScienceMapping;
import mapping.ScienceMappingResult;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
@ -130,7 +134,7 @@ public class MapOfScienceVisualizationRequestHandler implements
if (VisConstants.DataVisMode.JSON.equals(visMode)) {
return prepareStandaloneDataResponse(vitroRequest, organizationEntity);
} else {
return prepareDataResponse(organizationEntity);
return prepareDataResponse(vitroRequest, organizationEntity);
}
}
}
@ -138,12 +142,13 @@ public class MapOfScienceVisualizationRequestHandler implements
/**
* Provides response when json file containing the publication count over the
* years is requested.
* @param vitroRequest
*
* @param entity
* @param subentities
* @param subOrganizationTypesResult
*/
private Map<String, String> prepareDataResponse(Entity entity) {
private Map<String, String> prepareDataResponse(VitroRequest vitroRequest, Entity entity) {
String entityLabel = entity.getEntityLabel();
@ -190,7 +195,7 @@ public class MapOfScienceVisualizationRequestHandler implements
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.\"}");
"{\"error\" : \"No Publications for this Entity found in VIVO.\"}");
return fileData;
}
@ -202,48 +207,29 @@ public class MapOfScienceVisualizationRequestHandler implements
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
if (StringUtils.isBlank(entityURI)) {
entityURI = OrganizationUtilityFunctions
.getStaffProvidedOrComputedHighestLevelOrganization(
log,
dataset,
vitroRequest),
VisConstants.DataVisMode.JSON);
vitroRequest);
}
VisConstants.DataVisMode currentDataVisMode = VisConstants.DataVisMode.CSV;
if (VisualizationFrameworkConstants.JSON_OUTPUT_FORMAT
.equalsIgnoreCase(vitroRequest.getParameter(
VisualizationFrameworkConstants.OUTPUT_FORMAT_KEY))) {
currentDataVisMode = VisConstants.DataVisMode.JSON;
}
} else {
/*
* This provides csv download files for the content in the tables.
* */
return getSubjectEntityAndGenerateDataResponse(
vitroRequest,
log,
dataset,
entityURI,
VisConstants.DataVisMode.CSV);
}
currentDataVisMode);
}
@ -251,7 +237,7 @@ public class MapOfScienceVisualizationRequestHandler implements
@Override
public Object generateAjaxVisualization(VitroRequest vitroRequest, Log log,
Dataset dataset) throws MalformedQueryParametersException {
throw new UnsupportedOperationException("Entity Pub Count does not provide Ajax Response.");
throw new UnsupportedOperationException("Map of Science Vis does not provide Ajax Response.");
}
private Map<String, String> prepareStandaloneDataResponse(
@ -299,27 +285,60 @@ public class MapOfScienceVisualizationRequestHandler implements
Gson json = new Gson();
Set jsonContent = new HashSet();
for (SubEntity subentity : subjectEntity.getSubEntities()) {
MapOfScience entityJson = new MapOfScience(subjectEntity.getIndividualURI());
entityJson.setLabel(subjectEntity.getIndividualLabel());
MapOfScience entityJson = new MapOfScience(subentity.getIndividualURI());
entityJson.setLabel(subentity.getIndividualLabel());
entityJson.setLastCachedAtDateTime(subentity.getLastCachedAtDateTime());
if (subentity.getEntityClass().equals(VOConstants.EntityClassType.PERSON)) {
if (UtilityFunctions.isEntityAPerson(vreq, subjectEntity.getEntityURI())) {
entityJson.setType("PERSON");
} else if (subentity.getEntityClass().equals(VOConstants.EntityClassType.ORGANIZATION)) {
} else {
entityJson.setType("ORGANIZATION");
}
Set<Activity> publicationsForEntity = new HashSet<Activity>();
for (SubEntity subentity : subjectEntity.getSubEntities()) {
Set<Activity> subEntityActivities = subentity.getActivities();
publicationsForEntity.addAll(subEntityActivities);
String subEntityType = "ORGANIZATION";
if (subentity.getEntityClass().equals(VOConstants.EntityClassType.PERSON)) {
subEntityType = "PERSON";
}
entityJson.addSubEntity(subentity.getIndividualURI(),
subentity.getIndividualLabel(),
subEntityType,
subEntityActivities.size());
}
PublicationJournalStats publicationStats = getPublicationJournalStats(publicationsForEntity);
entityJson.setPubsWithNoJournals(publicationStats.noJournalCount);
/*
* This method side-effects entityJson by updating its counts for mapped publications,
* publications with no journal names & publications with invalid journal names &
* map of subdiscipline to activity.
* */
updateEntityMapOfScienceInformation(entityJson,
publicationStats.journalToPublicationCount);
jsonContent.add(entityJson);
return json.toJson(jsonContent);
}
private PublicationJournalStats getPublicationJournalStats(
Set<Activity> subEntityActivities) {
Map<String, Integer> journalToPublicationCount = new HashMap<String, Integer>();
int publicationsWithNoJournalCount = 0;
int mappedPublicationCount = 0;
int unMappedPublicationCount = 0;
for (Activity activity : subentity.getActivities()) {
for (Activity activity : subEntityActivities) {
if (StringUtils.isNotBlank(((MapOfScienceActivity) activity).getPublishedInJournal())) {
@ -333,23 +352,50 @@ public class MapOfScienceVisualizationRequestHandler implements
journalToPublicationCount.put(journalName, 1);
}
mappedPublicationCount++;
} else {
unMappedPublicationCount++;
publicationsWithNoJournalCount++;
}
}
return new PublicationJournalStats(publicationsWithNoJournalCount, journalToPublicationCount);
}
private void updateEntityMapOfScienceInformation(MapOfScience entityJson,
Map<String, Integer> journalToPublicationCount) {
// System.out.println("journalToPublicationCount " + journalToPublicationCount);
int mappedPublicationCount = 0;
int publicationsWithInvalidJournalCount = 0;
ScienceMappingResult result = null;
Map<Integer, Float> subdisciplineToActivity = new HashMap<Integer, Float>();
try {
result = (new ScienceMapping()).generateScienceMappingResult(journalToPublicationCount);
} catch (NumberFormatException e) {
System.err.println("NumberFormatException coming from Map Of Science Vis");
e.printStackTrace();
} catch (IOException e) {
System.err.println("IOException coming from Map Of Science Vis");
e.printStackTrace();
} finally {
if (result != null) {
subdisciplineToActivity = result.getMappedResult();
publicationsWithInvalidJournalCount = Math.round(result.getUnMappedPublications());
mappedPublicationCount = Math.round(result.getMappedPublications());
}
}
// System.out.println("subdisciplineToActivity " + subdisciplineToActivity);
entityJson.setPubsMapped(mappedPublicationCount);
entityJson.setPubsUnmapped(unMappedPublicationCount);
entityJson.setSubdisciplineActivity(journalToPublicationCount);
entityJson.setPubsWithInvalidJournals(publicationsWithInvalidJournalCount);
jsonContent.add(entityJson);
}
return json.toJson(jsonContent);
entityJson.setSubdisciplineActivity(subdisciplineToActivity);
}
private String getEntityPublicationsPerYearCSVContent(Entity entity) {
@ -373,4 +419,18 @@ public class MapOfScienceVisualizationRequestHandler implements
return csvFileContent.toString();
}
private class PublicationJournalStats {
int noJournalCount;
Map<String, Integer> journalToPublicationCount;
public PublicationJournalStats(int noJournalCount,
Map<String, Integer> journalToPublicationCount) {
this.noJournalCount = noJournalCount;
this.journalToPublicationCount = journalToPublicationCount;
}
}
}

View file

@ -2,7 +2,9 @@
package edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.json;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class MapOfScience {
@ -10,9 +12,11 @@ public class MapOfScience {
private String label;
private String type;
private int pubsMapped;
private int pubsUnmapped;
private int pubsWithNoJournals;
private int pubsWithInvalidJournals;
private String lastCachedAtDateTime;
private Map<String, Integer> subdisciplineActivity = new HashMap<String, Integer>();
private Map<Integer, Float> subdisciplineActivity = new HashMap<Integer, Float>();
private Set<SubEntityInfo> subEntities = new HashSet<SubEntityInfo>();
public MapOfScience(String uri) {
this.uri = uri;
@ -43,16 +47,24 @@ public class MapOfScience {
public int getPubsMapped() {
return pubsMapped;
}
public void setPubsUnmapped(int pubsUnmapped) {
this.pubsUnmapped = pubsUnmapped;
public void setPubsWithNoJournals(int pubsUnmapped) {
this.pubsWithNoJournals = pubsUnmapped;
}
public int getPubsUnmapped() {
return pubsUnmapped;
public int getPubsWithNoJournals() {
return pubsWithNoJournals;
}
public void setSubdisciplineActivity(Map<String, Integer> subdisciplineActivity) {
public void setPubsWithInvalidJournals(int pubsWithInvalidJournals) {
this.pubsWithInvalidJournals = pubsWithInvalidJournals;
}
public int getPubsWithInvalidJournals() {
return pubsWithInvalidJournals;
}
public void setSubdisciplineActivity(Map<Integer, Float> subdisciplineActivity) {
this.subdisciplineActivity = subdisciplineActivity;
}
public Map<String, Integer> getSubdisciplineActivity() {
public Map<Integer, Float> getSubdisciplineActivity() {
return subdisciplineActivity;
}
@ -64,4 +76,60 @@ public class MapOfScience {
return lastCachedAtDateTime;
}
public void addSubEntity(String uri, String label, String type, int pubs) {
this.subEntities.add(new SubEntityInfo(uri, label, type, pubs));
}
public Set<SubEntityInfo> getSubEntities() {
return subEntities;
}
private class SubEntityInfo {
private String uri;
private String label;
private String type;
private int pubs;
public SubEntityInfo(String uri, String label, String type, int pubs) {
this.uri = uri;
this.label = label;
this.type = type;
this.pubs = pubs;
}
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getPubs() {
return pubs;
}
public void setPubs(int pubs) {
this.pubs = pubs;
}
}
}

View file

@ -251,10 +251,10 @@ public class UtilityFunctions {
return collaboratorshipNetworkURL != null ? collaboratorshipNetworkURL : "" ;
}
public static boolean isEntityAPerson(VitroRequest vreq, SubEntity subentity) {
public static boolean isEntityAPerson(VitroRequest vreq, String individualURI) {
return vreq.getWebappDaoFactory()
.getIndividualDao()
.getIndividualByURI(subentity.getIndividualURI())
.getIndividualByURI(individualURI)
.isVClass("http://xmlns.com/foaf/0.1/Person");
}