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