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

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

/**
* 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.ArrayList;
import java.util.Iterator;
import java.util.List;

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.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.dspace.app.cris.model.CrisConstants;
import org.dspace.app.cris.model.ResearcherPage;
import org.dspace.app.cris.network.ConstantNetwork;
import org.dspace.app.cris.network.NetworkPlugin;
import org.dspace.app.cris.network.VisualizationGraphSolrService;
import org.dspace.app.cris.network.dto.DTOMetric;
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.ConfigurationManager;
import org.dspace.core.Context;
import org.dspace.discovery.SearchServiceException;
import org.dspace.utils.DSpace;

public class DeptMetricsNetworkServlet extends DSpaceServlet
{
    /** log4j category */
    private static Logger log = Logger
            .getLogger(DeptMetricsNetworkServlet.class);

    private DSpace dspace = new DSpace();

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

    @Override
    protected void doDSGet(Context context, HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException,
            SQLException
    {

        String dept = request.getParameter("dept");

        boolean found = false;

        if (dept == null)
        {
            response.sendError(HttpServletResponse.SC_NOT_FOUND,
                    "A department name could be passed as parameter");
        }
        else
        {
            found = true;
        }

        // load all publications
        SolrQuery solrQuery = new SolrQuery();

        List<DTOMetric> results = new ArrayList<DTOMetric>();

        String connection = ConfigurationManager
                .getProperty(NetworkPlugin.CFG_MODULE, "network.connection");

        String[] connections = connection.split(",");
        List<String> fieldsToRetrieve = new ArrayList<String>();
        fieldsToRetrieve.add("search.resourceid");
        fieldsToRetrieve.add("rp_fullname");
        for (String conn : connections)
        {
            fieldsToRetrieve
                    .add(ConstantNetwork.PREFIX_METADATA_BIBLIOMETRIC_1_RETRIEVE
                            + conn);
            fieldsToRetrieve
                    .add(ConstantNetwork.PREFIX_METADATA_BIBLIOMETRIC_2_RETRIEVE
                            + conn);
            fieldsToRetrieve
                    .add(ConstantNetwork.PREFIX_METADATA_BIBLIOMETRIC_3_RETRIEVE
                            + conn);
            fieldsToRetrieve
                    .add(ConstantNetwork.PREFIX_METADATA_BIBLIOMETRIC_4_RETRIEVE
                            + conn);
        }
        String[] fields = fieldsToRetrieve.toArray(new String[] {});
        QueryResponse rsp;
        try
        {
            solrQuery = new SolrQuery();
            solrQuery.setQuery("search.resourcetype:"
                    + CrisConstants.RP_TYPE_ID + " AND rp_dept:\"" + dept
                    + "\"");
            solrQuery.setFields(fields);
            solrQuery.setRows(Integer.MAX_VALUE);
            rsp = getService().getSearcher().search(solrQuery);

            SolrDocumentList rows = rsp.getResults();

            external: for (String conn : connections)
            {
                Iterator<SolrDocument> iter = rows.iterator();
                internal: while (iter.hasNext())
                {
                    DTOMetric metric = new DTOMetric();

                    SolrDocument publication = iter.next();

                    Integer rp_id = (Integer) publication
                            .getFirstValue("search.resourceid");
                    String rp_fullname = (String) publication
                            .getFirstValue("rp_fullname");
                    String averageStrength = (String) publication
                            .getFirstValue(ConstantNetwork.PREFIX_METADATA_BIBLIOMETRIC_3_RETRIEVE
                                    + conn);
                    String maxStrength = (String) publication
                            .getFirstValue(ConstantNetwork.PREFIX_METADATA_BIBLIOMETRIC_2_RETRIEVE
                                    + conn);
                    String numbersConnections = (String) publication
                            .getFirstValue(ConstantNetwork.PREFIX_METADATA_BIBLIOMETRIC_1_RETRIEVE
                                    + conn);
                    String quadraticVariance = (String) publication
                            .getFirstValue(ConstantNetwork.PREFIX_METADATA_BIBLIOMETRIC_4_RETRIEVE
                                    + conn);

                    metric.setAuthority(ResearcherPageUtils
                            .getPersistentIdentifier(rp_id, ResearcherPage.class));
                    metric.setFullName(rp_fullname);
                    metric.setType(conn);
                    metric.setAverageStrength(averageStrength);
                    metric.setMaxStrength(maxStrength);
                    metric.setNumbersConnections(numbersConnections);
                    metric.setQuadraticVariance(quadraticVariance);

                    if ((averageStrength == null || averageStrength.isEmpty())
                            && (maxStrength == null || maxStrength.isEmpty())
                            && (numbersConnections == null || numbersConnections
                                    .isEmpty())
                            && (quadraticVariance == null || quadraticVariance
                                    .isEmpty()))
                    {
                        //do not show anythings
                    }
                    else {
                        results.add(metric);
                    }

                }
            }
        }
        catch (SearchServiceException e)
        {
            log.error(e.getMessage(), new ServletException(e));
        }

        request.setAttribute("dept", dept);
        request.setAttribute("metrics", results);

        JSPManager.showJSP(request, response, "/graph/dmetrics.jsp");

    }

    public void setService(VisualizationGraphSolrService service)
    {
        this.service = service;
    }

    public VisualizationGraphSolrService getService()
    {
        return service;
    }
}
TOP

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

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.