edu.cornell.mannlib.vitro.webapp.visualization.visutils.UtilityFunctions.java Source code

Java tutorial

Introduction

Here is the source code for edu.cornell.mannlib.vitro.webapp.visualization.visutils.UtilityFunctions.java

Source

/* $This file is distributed under the terms of the license in /doc/license.txt$ */

package edu.cornell.mannlib.vitro.webapp.visualization.visutils;

import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormatter;

import com.google.gson.Gson;

import edu.cornell.mannlib.vitro.webapp.beans.Individual;
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.responsevalues.ResponseValues;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues;
import edu.cornell.mannlib.vitro.webapp.controller.visualization.VisualizationFrameworkConstants;
import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
import edu.cornell.mannlib.vitro.webapp.visualization.collaborationutils.CollaborationData;
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.valueobjects.Activity;
import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.Collaborator;
import edu.cornell.mannlib.vitro.webapp.visualization.valueobjects.GenericQueryMap;

public class UtilityFunctions {

    public static Map<String, Integer> getYearToActivityCount(Set<Activity> activities) {

        /*
         * Create a map from the year to number of publications. Use the BiboDocument's
         * or Grant's parsedPublicationYear or parsedGrantYear to populate the data passed
         * via Activity's getParsedActivityYear.
         * */
        Map<String, Integer> yearToActivityCount = new TreeMap<String, Integer>();

        for (Activity currentActivity : activities) {

            /*
             * Increment the count because there is an entry already available for
             * that particular year.
             * */
            String activityYear = currentActivity.getParsedActivityYear();

            if (yearToActivityCount.containsKey(activityYear)) {
                yearToActivityCount.put(activityYear, yearToActivityCount.get(activityYear) + 1);

            } else {
                yearToActivityCount.put(activityYear, 1);
            }

        }

        return yearToActivityCount;
    }

    public static Map<String, Integer> getYearToActivityCount(Collection<Activity> activities) {
        return getYearToActivityCount(new HashSet<Activity>(activities));
    }

    /**
     * This method is used to return a mapping between activity year & all the collaborators
     * that published with ego in that year. 
     * @param collaborationData
     * @return
     */
    public static Map<String, Set<Collaborator>> getActivityYearToCollaborators(
            CollaborationData collaborationData) {

        Map<String, Set<Collaborator>> yearToCollaborators = new TreeMap<String, Set<Collaborator>>();

        Collaborator egoCollaborator = collaborationData.getEgoCollaborator();

        for (Collaborator currNode : collaborationData.getCollaborators()) {

            /*
             * We have already printed the Ego Node info.
             * */
            if (currNode != egoCollaborator) {

                for (String year : currNode.getYearToActivityCount().keySet()) {

                    Set<Collaborator> collaboratorNodes;

                    if (yearToCollaborators.containsKey(year)) {

                        collaboratorNodes = yearToCollaborators.get(year);
                        collaboratorNodes.add(currNode);

                    } else {

                        collaboratorNodes = new HashSet<Collaborator>();
                        collaboratorNodes.add(currNode);
                        yearToCollaborators.put(year, collaboratorNodes);
                    }

                }

            }
        }
        return yearToCollaborators;
    }

    /**
     * Currently the approach for slugifying filenames is naive. In future if there is need, 
     * we can write more sophisticated method.
     * @param textToBeSlugified
     * @return
     */
    public static String slugify(String textToBeSlugified) {
        String textBlockSeparator = "-";
        return StringUtils.removeEnd(StringUtils.substring(
                textToBeSlugified.toLowerCase().trim().replaceAll("[^a-zA-Z0-9-]+", textBlockSeparator), 0,
                VisConstants.MAX_NAME_TEXT_LENGTH), textBlockSeparator);
    }

    public static ResponseValues handleMalformedParameters(String errorPageTitle, String errorMessage,
            VitroRequest vitroRequest) {

        Map<String, Object> body = new HashMap<String, Object>();
        body.put("error", errorMessage);
        body.put("title", errorPageTitle);

        return new TemplateResponseValues(VisualizationFrameworkConstants.ERROR_TEMPLATE, body);
    }

    public static void handleMalformedParameters(String errorMessage, HttpServletResponse response, Log log)
            throws IOException {

        GenericQueryMap errorDataResponse = new GenericQueryMap();
        errorDataResponse.addEntry("error", errorMessage);

        Gson jsonErrorResponse = new Gson();

        response.setContentType("application/octet-stream");
        response.getWriter().write(jsonErrorResponse.toJson(errorDataResponse));
    }

    public static DateTime getValidParsedDateTimeObject(String unparsedDateTime) {

        for (DateTimeFormatter currentFormatter : VOConstants.POSSIBLE_DATE_TIME_FORMATTERS) {

            try {

                DateTime dateTime = currentFormatter.parseDateTime(unparsedDateTime);
                return dateTime;

            } catch (Exception e2) {
                /*
                 * The current date-time formatter did not pass the muster. 
                 * */
            }
        }

        /*
         * This means that none of the date time formatters worked. 
         * */
        return null;
    }

    /**
     * This method will be called to get the inferred end year for the entity. 
     * The 2 choices, in order, are,
     *       1. parsed year from core:DateTime object saved in core:dateTimeValue 
     *       2. Default Entity Year 
     * @return
     */
    public static String getValidYearFromCoreDateTimeString(String inputDate, String defaultYearInCaseOfError) {
        /*
         * Always return default year identifier in case of an illegal parsed year.
         * */
        String parsedInputYear = defaultYearInCaseOfError;

        if (inputDate != null) {

            DateTime validParsedDateTimeObject = UtilityFunctions.getValidParsedDateTimeObject(inputDate);

            if (validParsedDateTimeObject != null) {
                return String.valueOf(validParsedDateTimeObject.getYear());
            }
        }

        return parsedInputYear;
    }

    public static String getCSVDownloadURL(String individualURI, String visType, String visMode) {

        ParamMap csvDownloadURLParams = null;

        if (StringUtils.isBlank(visMode)) {

            csvDownloadURLParams = new ParamMap(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY, individualURI,
                    VisualizationFrameworkConstants.VIS_TYPE_KEY, visType);

        } else {

            csvDownloadURLParams = new ParamMap(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY, individualURI,
                    VisualizationFrameworkConstants.VIS_TYPE_KEY, visType,
                    VisualizationFrameworkConstants.VIS_MODE_KEY, visMode);

        }

        String csvDownloadLink = UrlBuilder.getUrl(
                VisualizationFrameworkConstants.DATA_VISUALIZATION_SERVICE_URL_PREFIX, csvDownloadURLParams);

        return csvDownloadLink != null ? csvDownloadLink : "";

    }

    public static String getCollaboratorshipNetworkLink(String individualURI, String visType, String visMode) {

        ParamMap collaboratorshipNetworkURLParams = new ParamMap(VisualizationFrameworkConstants.INDIVIDUAL_URI_KEY,
                individualURI, VisualizationFrameworkConstants.VIS_TYPE_KEY, visType,
                VisualizationFrameworkConstants.VIS_MODE_KEY, visMode);

        String collaboratorshipNetworkURL = UrlBuilder.getUrl(
                VisualizationFrameworkConstants.FREEMARKERIZED_VISUALIZATION_URL_PREFIX,
                collaboratorshipNetworkURLParams);

        return collaboratorshipNetworkURL != null ? collaboratorshipNetworkURL : "";
    }

    public static boolean isEntityAPerson(VitroRequest vreq, String individualURI)
            throws MalformedQueryParametersException {
        Individual individualByURI = vreq.getWebappDaoFactory().getIndividualDao()
                .getIndividualByURI(individualURI);

        if (individualByURI != null) {

            return individualByURI.isVClass("http://xmlns.com/foaf/0.1/Person");
        } else {
            throw new MalformedQueryParametersException(
                    "Individual with " + individualURI + " not found in the system.");
        }

    }

    /**
     * 
     * This method will test whether the current uri is based off of default namespace. If so, 
     * go ahead & provide local name. 
     * @param givenURI
     * @param vitroRequest
     * @return
     */
    public static String getIndividualLocalName(String givenURI, VitroRequest vitroRequest) {

        if (UrlBuilder.isUriInDefaultNamespace(givenURI, vitroRequest)) {

            try {

                Individual individual = vitroRequest.getWebappDaoFactory().getIndividualDao()
                        .getIndividualByURI(givenURI);

                return individual.getLocalName();

            } catch (Exception e) {

            }
        }

        return "";
    }

    public static String getIndividualLabelFromDAO(VitroRequest vitroRequest, String entityURI) {

        IndividualDao iDao = vitroRequest.getWebappDaoFactory().getIndividualDao();
        Individual ind = iDao.getIndividualByURI(entityURI);

        String individualLabel = "Unknown Individual";

        if (ind != null) {
            individualLabel = ind.getName();
        }
        return individualLabel;
    }
}