Package org.dspace.app.cris.network

Source Code of org.dspace.app.cris.network.DepartmentNetworkPlugin

/**
* 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.cris.network;

import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.LinkedList;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
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.apache.solr.client.solrj.util.ClientUtils;
import org.dspace.utils.DSpace;

public class DepartmentNetworkPlugin
{

    /** log4j logger */
    protected static Logger log = Logger.getLogger(AVisualizationGraph.class);

    private DSpace dspace = new DSpace();

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

    private VisualizationGraphIndexer indexer = dspace.getServiceManager()
            .getServiceByName("visualNetworkIndexer",
                    VisualizationGraphIndexer.class);

    private static String FACET = "focus_dept";

    private static String FACET_AUTHOR = "focus";

    public List<VisualizationGraphNode> load(List<String[]> discardedNode,
            Integer importedNodes, Boolean otherError, List<String> connections)
            throws Exception
    {

        for (String connection : connections)
        {
            SolrQuery solrQuery = new SolrQuery();
            solrQuery.setQuery("type:" + connection);
            solrQuery.addFacetField(FACET);
            solrQuery.setFacetLimit(Integer.MAX_VALUE);
            solrQuery.setFacetMinCount(1);
            solrQuery.setRows(0);
            QueryResponse rsp = service.search(solrQuery);
            FacetField facets = rsp.getFacetField(FACET);

            // for each interests get authority's authors
            List<VisualizationGraphNode> result = null;
            int counter = 0;
            external: for (Count facetElement : facets.getValues())
            {

                counter++;
                log.debug("" + counter + " of " + facets.getValueCount());
                result = new LinkedList<VisualizationGraphNode>();
                try
                {
                    String facetValue = facetElement.getName();
                    String[] splittedFacetValue = facetValue.split("\\|\\|\\|");
                    if (!splittedFacetValue[0].equals("null") && splittedFacetValue[0].equals(splittedFacetValue[1]))
                    {
                        SolrQuery solrQuery2 = new SolrQuery();
                        solrQuery2.setQuery("type:" + connection + " AND "
                                + FACET + ":\"" + ClientUtils.escapeQueryChars(facetValue) + "\" AND a_auth:[* TO *] AND b_auth:[* TO *]");

                        solrQuery2.addFacetField(FACET_AUTHOR);
                        solrQuery2.setFacetMinCount(1);
                        solrQuery2.setFacetLimit(Integer.MAX_VALUE);
                        solrQuery2.setRows(0);

                        QueryResponse rsp2 = service.search(
                                solrQuery2);
                        FacetField relations = rsp2.getFacetField(FACET_AUTHOR);
                        int i = 0;
                        internal: for (Count relation : relations.getValues())
                        {
                            log.debug("" + counter + " works on " + i + " of "
                                    + relations.getValueCount());
                            List<String> values = new LinkedList<String>();
                            values.add(splittedFacetValue[0]);

                            String aaa = relation.getName();
                            String[] split = aaa.split("\\|\\|\\|");

                            String a = aaa;
                            String a_authority = null;
                            String a_displayValue = "";

                            if (split.length > 1)
                            {
                                a_displayValue = split[1];
                            }

                            if (split.length > 2)
                            {
                                a_authority = split[2];
                            }

                            buildRow(result, splittedFacetValue[0], null, splittedFacetValue[1], a,
                                    a_authority, a_displayValue, values,
                                    buildExtra(splittedFacetValue[0]), connection);

                            i++;

                        }
                       
                        importedNodes = importNode(discardedNode, importedNodes, result);
                        log.debug("commit DEPARTMENT " + facetValue);
                        indexer.getSolr().commit();
                    }                 
                   
                }
                catch (Exception e)
                {
                    log.error("Error try to build object to index with ID:"
                            + "");
                    log.error(e.getMessage(), e);
                    otherError = true;
                    continue;
                }           
               
            }
                       
        }

        return null;
    }

    private Integer importNode(List<String[]> discardedNode,
            Integer importedNodes, List<VisualizationGraphNode> result)
    {
        for (VisualizationGraphNode node : result)
        {
            try
            {
                indexer.index(node); // index node
                importedNodes++;
            }
            catch (SolrServerException e)
            {
                log.error(e.getMessage(), e);
                discardedNode.add(new String[] { node.getType() });
            }
            catch (IOException e)
            {
                log.error(e.getMessage(), e);
                discardedNode.add(new String[] { node.getType() });
            }
            catch (NoSuchAlgorithmException e)
            {
                log.error(e.getMessage(), e);
                discardedNode.add(new String[] { node.getType() });
            }
        }
        return importedNodes;
    }

    private String buildExtra(String facetValue)
    {
        // TODO Auto-generated method stub
        return null;
    }

    protected void buildRow(List<VisualizationGraphNode> result, String a,
            String a_authority, String a_value, String b, String b_authority,
            String b_value, List<String> values, String extra, String connection)
            throws NoSuchAlgorithmException
    {

        VisualizationGraphNode node = new VisualizationGraphNode();
        node.setA(a);
        node.setA_auth(a_authority);
        node.setFavalue(a_value);
        node.setType(connection);
        node.setB(b);
        node.setB_auth(b_authority);
        node.setFbvalue(b_value);
        node.getValue().addAll(values);
        node.getExtra().add(extra);
        node.setA_dept(a);
        node.setB_dept(a);
        node.setEntity(ConstantNetwork.ENTITY_DEPT);
        result.add(node);

    }

}
TOP

Related Classes of org.dspace.app.cris.network.DepartmentNetworkPlugin

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.