Package org.dspace.app.webui.cris.servlet

Source Code of org.dspace.app.webui.cris.servlet.ProfileResearcherNetworkServlet

/**
* 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;
  }
}
TOP

Related Classes of org.dspace.app.webui.cris.servlet.ProfileResearcherNetworkServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.