org.dspace.app.webui.cris.components.statistics.StatTopObjectComponent.java Source code

Java tutorial

Introduction

Here is the source code for org.dspace.app.webui.cris.components.statistics.StatTopObjectComponent.java

Source

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

import java.sql.SQLException;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.dspace.app.cris.integration.statistics.StatComponentsService;
import org.dspace.app.cris.model.CrisConstants;
import org.dspace.app.cris.statistics.bean.PieStatisticBean;
import org.dspace.app.cris.statistics.bean.StatisticDatasBeanRow;
import org.dspace.app.cris.statistics.bean.TreeKeyMap;
import org.dspace.app.cris.statistics.bean.TwoKeyMap;
import org.dspace.app.webui.cris.components.BeanFacetComponent;
import org.dspace.content.DSpaceObject;
import org.dspace.content.Item;
import org.dspace.core.Context;
import org.dspace.statistics.ObjectCount;
import org.dspace.statistics.SolrLogger;

public class StatTopObjectComponent<T extends DSpaceObject> extends StatsComponent<T> {

    private static final String QUERY_COMMON = "'''{'''!join from={0} to=search.uniqueid fromIndex=search'''}'''{1} AND -withdrawn:true";

    private String fromField;

    @Override
    public TreeKeyMap query(String id, HttpSolrServer solrServer) throws Exception {
        statisticDatasBeans = new TreeKeyMap();
        if (id != null && !id.equals("") && StatComponentsService.getYearsQuery() != null) {

            // HttpSolrServer solrServer = new HttpSolrServer(
            // solrConfig.getUrl()+solrCore);
            solrServer.setMaxRetries(0);
            SolrQuery solrQuery = new SolrQuery();
            // http://localhost:8983/solr/statistics/select/?q=type%3A2&rows=20&facet=true&facet.date=time&facet.date.start=2008-07-00T00:00:00.000Z&facet.date.end=2009-06-31T00:00:00.000Z&facet.date.gap=%2B1MONTHS&facet.field=id
            _prepareBasicQuery(solrQuery, StatComponentsService.getYearsQuery());
            // _prepareTopQuery(type, id, fieldName, solrQuery);

            if (StatComponentsService.isExcludeBot()) {
                solrQuery.addFilterQuery("-isBot:true");
            }

            Integer relationType = getRelationObjectType();
            if (relationType == null) {
                relationType = CrisConstants.getEntityType(getRelationObjectClass().newInstance());
            }
            solrQuery.addFilterQuery("type:" + relationType);
            for (String filter : getBean().getFilters()) {
                solrQuery.addFilterQuery(filter);
            }
            String query = MessageFormat.format(QUERY_COMMON, getFromField(), getBean().getQuery());
            String sID = getObjectId(id);
            query = MessageFormat.format(query, sID);
            solrQuery.setQuery(query);
            if (getBean() instanceof BeanFacetComponent) {
                BeanFacetComponent beanFacet = (BeanFacetComponent) getBean();
                solrQuery.setFacet(true);
                solrQuery.addFacetQuery(beanFacet.getFacetQuery());
                solrQuery.addFacetField(beanFacet.getFacetField());
            }
            solrResponse = solrServer.query(solrQuery);
            if (!getBean().getSubQueries().isEmpty()) {
                statisticDatasBeans.addValue(TOP, CrisConstants.getEntityTypeText(relationType), CATEGORY,
                        generateCategoryView(solrServer, TOP, relationType.toString(), CATEGORY,
                                StatComponentsService.getTopCityLength(), query, getBean().getSubQueries(), sID));
            }
            buildTopResultModules(relationType);

        } else {
            throw new Exception("Object Id not valid");
        }
        return statisticDatasBeans;
    }

    protected String getObjectId(String id) {
        return id;
    }

    @Override
    public TwoKeyMap getLabels(Context context, String type) throws SQLException {
        TwoKeyMap labels = new TwoKeyMap();
        PieStatisticBean myvalue = (PieStatisticBean) statisticDatasBeans.get("top").get(type).get("id");
        if (myvalue != null) {
            if (myvalue.getLimitedDataTable() != null) {
                for (StatisticDatasBeanRow row : myvalue.getLimitedDataTable()) {
                    DSpaceObject item = DSpaceObject.find(context, getRelationObjectType(),
                            Integer.parseInt(row.getLabel()));
                    //                    if (item != null)
                    {
                        labels.addValue(type, row.getLabel(), item);
                    }
                }
            }
        }

        return labels;
    }

    protected void _prepareBasicQuery(SolrQuery solrQuery, Integer yearsQuery) {
        _addBasicConfiguration(solrQuery, yearsQuery);
        solrQuery.addFacetField(_CONTINENT, _COUNTRY_CODE, _CITY, ID, _LOCATION, _FISCALYEAR, _SOLARYEAR);
        solrQuery.set("facet.missing", true);
        solrQuery.set("f." + _LOCATION + ".facet.missing", false);
        solrQuery.set("f." + ID + ".facet.missing", false);
        solrQuery.set("f." + _FISCALYEAR + ".facet.missing", false);
        solrQuery.set("f." + _SOLARYEAR + ".facet.missing", false);
        solrQuery.set("f." + _FISCALYEAR + ".facet.sort", false);
        solrQuery.set("f." + _SOLARYEAR + ".facet.sort", false);

        solrQuery.set("f." + FILE + ".facet.missing", false);
        solrQuery.set("f." + FILE + ".facet.mincount", 1);
        solrQuery.set("f." + ID + ".facet.mincount", 1);
        solrQuery.set("f." + _CONTINENT + ".facet.mincount", 1);
        solrQuery.set("f." + _COUNTRY_CODE + ".facet.mincount", 1);
        solrQuery.set("f." + _CITY + ".facet.mincount", 1);
        solrQuery.set("f." + _LOCATION + ".facet.mincount", 1);
        solrQuery.set("f." + _FISCALYEAR + ".facet.mincount", 1);
        solrQuery.set("f." + _SOLARYEAR + ".facet.mincount", 1);
        solrQuery.set("f." + _CONTINENT + ".facet.mincount", 1);
    }

    public void setFromField(String fromField) {
        this.fromField = fromField;
    }

    public String getFromField() {
        return fromField;
    }

    @Override
    public Map<String, ObjectCount[]> queryFacetDate(SolrLogger statsLogger, DSpaceObject object, String dateType,
            String dateStart, String dateEnd, int gap) throws SolrServerException {
        String query = MessageFormat.format(QUERY_COMMON, getFromField(), getBean().getQuery());
        String sID = getObjectId("" + object.getID());
        query = MessageFormat.format(query, sID);
        Map<String, ObjectCount[]> map = new HashMap<String, ObjectCount[]>();

        map.put(getMode(),
                statsLogger.queryFacetDate(query, "time:[* TO NOW/" + dateType + dateEnd + dateType + "]", 0,
                        dateType, dateStart, dateEnd, gap, true));
        return map;

    }

    @Override
    public String getMode() {
        return VIEW;
    }

}