Package org.dspace.app.cris.batch

Source Code of org.dspace.app.cris.batch.ScriptIndexNetwork

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


import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
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.SolrDocumentList;
import org.dspace.app.cris.network.ConstantNetwork;
import org.dspace.app.cris.network.DepartmentNetworkPlugin;
import org.dspace.app.cris.network.NetworkPlugin;
import org.dspace.app.cris.network.VisualizationGraphSolrService;
import org.dspace.core.ConfigurationManager;
import org.dspace.core.PluginManager;
import org.dspace.discovery.SearchServiceException;
import org.dspace.utils.DSpace;

public class ScriptIndexNetwork
{

    /** log4j logger */
    private static Logger log = Logger.getLogger(ScriptIndexNetwork.class);

    /**
     * Batch script to find potential matches between DSpace items and RP. See
     * the technical documentation for further details.
     */
    public static void main(String[] args) throws ParseException
    {

        log.info("#### START Script index collaboration network: -----"
                + new Date() + " ----- ####");

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

        CommandLineParser parser = new PosixParser();

        Options options = new Options();
        options.addOption("h", "help", false, "help");
        options.addOption("a", "all_connections", false,
                "Work on all connections read from configuration");
        options.addOption("s", "single_connection", true,
                "Work on single connection");
        options.addOption("d", "departments", false,
                "At end index departmental network");

        CommandLine line = parser.parse(options, args);

        if (line.hasOption('h'))
        {
            HelpFormatter myhelp = new HelpFormatter();
            myhelp.printHelp("ScriptIndexNetwork \n", options);
            System.out
                    .println("\n\nUSAGE:\n ScriptIndexNetwork -a|-s <connection_name>] \n");

            System.exit(0);
        }

        if (line.hasOption('a') && line.hasOption('s'))
        {
            System.out
                    .println("\n\nUSAGE:\n ScriptIndexNetwork -a|-s <connection_name>] \n");
            System.out.println("Insert either a or s like parameters");
            log.error("Either a or s like parameters");
            System.exit(1);
        }
        List<String> discardedConnection = new LinkedList<String>();
        List<String[]> discardedNode = new LinkedList<String[]>();
        List<String> connections = new LinkedList<String>();
        Integer importedNodes = 0;
        Boolean otherError = false;
        if (line.hasOption('a'))
        {

            String connectionsString = ConfigurationManager.getProperty(NetworkPlugin.CFG_MODULE, ConstantNetwork.CONFIG_CONNECTIONS);
            if (connectionsString == null || connectionsString.isEmpty())
            {
                System.out
                        .println("\n\nUSAGE:\n ScriptIndexNetwork -a|-s <connection_name>] \n");
                System.out
                        .println("Error to get configuration values, check your dspace.cfg");
                log.error("Error to get configuration values, check your dspace.cfg");
                System.exit(1);
            }
            else
            {
                for (String connection : connectionsString.split(","))
                {
                    connections.add(connection);
                }
            }
        }
        else
        {
            if (line.hasOption('s'))
            {
                // get researcher by parameter
                String connection = line.getOptionValue("s");
                if (connection == null || connection.isEmpty())
                {
                    System.out
                            .println("\n\nUSAGE:\n ScriptIndexNetwork -a|-s <connection_name>] \n");
                    System.out
                            .println("Connection name parameter is needed after option -s");
                    log.error("Connection name parameter is needed after option -s");
                    System.exit(1);
                }

                log.info("Script launched with -s parameter...it will work on connection with name "
                        + connection);
                connections.add(connection);
            }

        }

        external: for (String connection : connections)
        {
            // get plugin
            try
            {
                VisualizationGraphSolrService.getSolr().deleteByQuery(
                        "type:\"" + connection + "\"");

                NetworkPlugin plugin = (NetworkPlugin) PluginManager
                        .getNamedPlugin(NetworkPlugin.CFG_MODULE, NetworkPlugin.class, connection);
                // load data from connection
                plugin.load(discardedNode, importedNodes, otherError); // load
                                                                       // all
                                                                       // node

            }
            catch (Exception e)
            {
                log.error(e.getMessage(), e);
                discardedConnection.add(connection);
                continue external;
            }

        }

        if (line.hasOption('d'))
        {
            // load network departmental data
            try
            {

                log.info("Work on department");
                DepartmentNetworkPlugin deptPlugin = (DepartmentNetworkPlugin) PluginManager
                        .getSinglePlugin(NetworkPlugin.CFG_MODULE, NetworkPlugin.class);
                deptPlugin.load(discardedNode, importedNodes, otherError,
                        connections);

            }
            catch (Exception e)
            {
                log.error(e.getMessage(), e);
                discardedConnection.add("DEPT mode");
            }
        }
        log.info("#### ----------- STATS --------- ####");
        log.info("Imported nodes: " + importedNodes);
        if (!discardedConnection.isEmpty())
        {
            log.info("Connection discarded (all nodes discarded):");
            for (String discC : discardedConnection)
            {
                log.info("# " + discC + "#");
            }
        }
        log.info("Node discarded:");
        for (String[] discC : discardedNode)
        {
            log.info("# Node: " + discC[1] + " in connection: " + discC[0]);
        }

        if (otherError)
        {
            log.info("Warning there are other nodes discarded,please see log");
        }
        log.info("#### ########################### ####");
        log.info("#### END: -----" + new Date() + " ----- ####");

        System.exit(0);
    }

    private static boolean checkAvailableData(String connection,
            VisualizationGraphSolrService service)
            throws SearchServiceException
    {

        String query = "type:" + connection;

        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery(query);
        solrQuery.setStart(0);
        solrQuery.setRows(0);
        QueryResponse rsp = service.search(solrQuery);
        SolrDocumentList docs = rsp.getResults();
        if (docs != null)
        {
            if (docs.getNumFound() > 0)
            {
                return true;
            }
        }
        return false;
    }

}
TOP

Related Classes of org.dspace.app.cris.batch.ScriptIndexNetwork

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.