org.dspace.app.webui.cris.servlet.ProfileResearcherNetworkServlet.java Source code

Java tutorial

Introduction

Here is the source code for org.dspace.app.webui.cris.servlet.ProfileResearcherNetworkServlet.java

Source

/**
 * The contents of this file are subject to the license and copyright
 * detailed in the LICENSE and NOTICE files at the root of the source
 * tree and available online at
 *
 * https://github.com/CILEA/dspace-cris/wiki/License
 */
package org.dspace.app.webui.cris.servlet;

import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.response.FacetField;
import org.apache.solr.client.solrj.response.FacetField.Count;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.dspace.app.cris.discovery.CrisSearchService;
import org.dspace.app.cris.model.ResearcherPage;
import org.dspace.app.cris.network.VisualizationGraphSolrService;
import org.dspace.app.cris.service.ApplicationService;
import org.dspace.app.cris.util.Researcher;
import org.dspace.app.cris.util.ResearcherPageUtils;
import org.dspace.app.webui.servlet.DSpaceServlet;
import org.dspace.app.webui.util.JSPManager;
import org.dspace.core.Context;
import org.dspace.discovery.SearchServiceException;
import org.dspace.utils.DSpace;

public class ProfileResearcherNetworkServlet extends DSpaceServlet {

    /** log4j category */
    private static Logger log = Logger.getLogger(ProfileResearcherNetworkServlet.class);

    private DSpace dspace = new DSpace();
    private VisualizationGraphSolrService service = dspace.getServiceManager()
            .getServiceByName("visualNetworkSolrService", VisualizationGraphSolrService.class);

    public static Pattern patternRP = Pattern.compile("rp[0-9]{5}$");

    @Override
    protected void doDSGet(Context context, HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException {
        Researcher util = new Researcher();

        ApplicationService applicationService = util.getApplicationService();
        CrisSearchService searchService = (CrisSearchService) util.getCrisSearchService();

        String idString = request.getPathInfo();
        String[] pathInfo = idString.split("/", 2);
        String authority = pathInfo[1];

        String target = request.getParameter("target");
        String depth = request.getParameter("depth");
        String root = request.getParameter("root");
        String typo = request.getParameter("typo");

        Pattern patt = Pattern.compile("rp[0-9]{5}$");
        if (root == null) {
            response.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        }

        String focus = authority;
        if (!root.equals(authority)) {
            focus = root;
        }

        Matcher matcher1 = patt.matcher(focus);
        if (matcher1.find()) {
            typo = "rp";
            request.setAttribute("fullname", ResearcherPageUtils.getFullName(focus));
        }

        ResearcherPage researcherTarget = new ResearcherPage();
        String authorityTarget = target;
        if (target != null) {

            Matcher matcher = patt.matcher(target);
            if (matcher.find()) {
                researcherTarget = applicationService.getResearcherByAuthorityKey(target);

            } else {
                researcherTarget.setInternalRP(false);
                researcherTarget.setFullName(target);
            }
        }

        request.setAttribute("researchertarget", researcherTarget);
        request.setAttribute("authoritytarget", authorityTarget);
        request.setAttribute("authority", focus);
        Map<String, Integer> relations = getRelationsInformation(focus, authorityTarget);
        request.setAttribute("relations", relations);
        request.setAttribute("depth", depth);
        request.setAttribute("typo", typo);

        if (!focus.equals(authority) && false) { //disabled programmatically

            JSPManager.showJSP(request, response, "/graph/profilefragmenttwice.jsp");
        } else {
            JSPManager.showJSP(request, response, "/graph/profilefragment.jsp");
        }

    }

    private Map<String, Integer> getRelationsInformation(String from, String to) {

        Map<String, Integer> result = null;

        try {
            result = getRelations(from, to);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }

        return result;
    }

    public Map<String, Integer> getRelations(String from, String to) throws SearchServiceException {
        Map<String, Integer> result = new HashMap<String, Integer>();
        SolrQuery solrQuery = new SolrQuery();

        Matcher matcher = patternRP.matcher(from);
        String field1 = "";
        String field2 = "";

        if (matcher.find()) {
            field1 = "focus_auth";
        } else {
            field1 = "focus_val";
        }

        matcher = patternRP.matcher(to);

        if (matcher.find()) {
            field2 = "focus_auth";
        } else {
            field2 = "focus_val";
        }

        solrQuery.setQuery(

                field1 + ":\"" + from + "\" AND " + field2 + ":\"" + to + "\""

        );

        solrQuery.setFacet(true);
        solrQuery.addFacetField("type");
        solrQuery.setFacetLimit(Integer.MAX_VALUE);
        solrQuery.setFacetMinCount(1);
        solrQuery.setRows(0);

        QueryResponse rsp = service.search(solrQuery);

        FacetField facets = rsp.getFacetField("type");
        for (Count facet : facets.getValues()) {
            result.put(facet.getName(), Integer.valueOf((int) facet.getCount()));
        }
        return result;
    }
}