Package org.dspace.app.webui.cris.components

Source Code of org.dspace.app.webui.cris.components.AFacetedQueryConfigurerComponent

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

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.MissingResourceException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.dspace.app.cris.model.ACrisObject;
import org.dspace.app.cris.model.CrisConstants;
import org.dspace.app.cris.model.ResearchObject;
import org.dspace.app.webui.util.UIUtil;
import org.dspace.content.DSpaceObject;
import org.dspace.core.Context;
import org.dspace.core.I18nUtil;
import org.dspace.core.LogManager;
import org.dspace.discovery.DiscoverQuery;
import org.dspace.discovery.DiscoverQuery.SORT_ORDER;
import org.dspace.discovery.DiscoverResult.FacetResult;
import org.dspace.discovery.DiscoverResult;
import org.dspace.discovery.SearchServiceException;

public abstract class AFacetedQueryConfigurerComponent<T extends DSpaceObject>
        extends ASolrConfigurerComponent<T, ICrisBeanComponent> implements
        IFacetedQueryConfigurerComponent
{
   
    /** log4j logger */
    private static Logger log = Logger
            .getLogger(AFacetedQueryConfigurerComponent.class);

       
    @Override
    protected List<String[]> addActiveTypeInRequest(HttpServletRequest request)
            throws Exception
    {
        ACrisObject cris = getCrisObject(request);
        Context c = UIUtil.obtainContext(request);
        List<String[]> subLinks = new ArrayList<String[]>();

        DiscoverResult docs = search(c, cris, 0, 0, null, true);
        if (docs.getTotalSearchResults() > 0)
        {
            for (String type : docs.getFacetResults().keySet())
            {
                Long size = docs.getFacetResults().get(type).get(0).getCount();
                String message = "";
                try
                {
                    message = I18nUtil.getMessage(
                            "jsp.layout.dspace.detail.fieldset-legend.component."
                            + type, c);
                }
                catch (MissingResourceException e)
                {
                    log.warn("Missing Resource: jsp.layout.dspace.detail.fieldset-legend.component." + type);
                    message = I18nUtil.getMessage(
                            "jsp.layout.dspace.detail.fieldset-legend.component.default"
                            , c);
                }
               
                subLinks.add(new String[] {
                        type,
                        MessageFormat.format(message, size), "" + size });
            }
        }
        request.setAttribute("activeTypes"
                + getRelationConfiguration().getRelationName(), subLinks);
        return subLinks;
    }

    protected DiscoverResult search(Context context, ACrisObject cris, int start,
            int rpp, String orderfield, boolean ascending)
            throws SearchServiceException
    {
        // can't start earlier than 0 in the results!
        if (start < 0)
        {
            start = 0;
        }
        String authority = cris.getCrisID();
        String uuid = cris.getUuid();

        String query = MessageFormat.format(getRelationConfiguration()
                .getQuery(), authority, uuid);

        DiscoverQuery solrQuery = new DiscoverQuery();
        solrQuery.setFacetMinCount(1);
        try
        {
            solrQuery.addFilterQueries(getTypeFilterQuery());
        }
        catch (InstantiationException e)
        {
            log.error(e.getMessage(), e);
        }
        catch (IllegalAccessException e)
        {
            log.error(e.getMessage(), e);
        }
        solrQuery.setQuery(query);
        solrQuery.addSearchField("search.resourceid");
        solrQuery.addSearchField("search.resourcetype");
        solrQuery.setStart(start);
        solrQuery.setMaxResults(rpp);
        if (orderfield == null)
        {
            orderfield = "score";
        }
        solrQuery.setSortField(orderfield, ascending ? SORT_ORDER.asc
                : SORT_ORDER.desc);

        for (ICrisBeanComponent facetComponent : getTypes().values())
        {
            String format = MessageFormat.format(
                    facetComponent.getFacetQuery(), authority, uuid);
            solrQuery.addFacetQuery(format);
            solrQuery.getNamedFacetQueries().put(format, facetComponent.getComponentIdentifier());
        }

        if(getCommonFilter()!=null) {           
            String format = MessageFormat.format(getCommonFilter(), getRelationConfiguration().getRelationName(),
                    cris.getUuid(), authority);
            solrQuery.addFilterQueries(format);
        }   
       
        return getSearchService().search(context, solrQuery);
    }
   
   
    @Override
    public List<String[]> sublinks(HttpServletRequest request,
            HttpServletResponse response) throws Exception
    {
        List<String[]> subLinks = (List<String[]>) request
                .getAttribute("activeTypes"+getRelationConfiguration().getRelationName());
        if (subLinks == null)
        {
            return addActiveTypeInRequest(request);
        }
        return subLinks;
    }

    public long count(String type, Integer id)
    {
        Context context = null;

        try
        {
            context = new Context();
            ACrisObject cris = getApplicationService().get(getTarget(), id);
            List<FacetResult> facetresults = search(context, cris, 0, 0, null, true).getFacetResult(type);
            if(facetresults.isEmpty()) {
                return 0;   
            }
            return facetresults.get(0).getCount();
        }

        catch (Exception ex)
        {
            log.error(ex.getMessage(), ex);
        }
        finally
        {
            if (context != null && context.isValid())
            {
                context.abort();
            }
        }
        return -1;
    }


}
TOP

Related Classes of org.dspace.app.webui.cris.components.AFacetedQueryConfigurerComponent

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.