All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.dspace.browse.ItemCounter Maven / Gradle / Ivy

There is a newer version: 8.0
Show newest version
/**
 * 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
 *
 * http://www.dspace.org/license/
 */
package org.dspace.browse;

import java.sql.SQLException;

import org.apache.logging.log4j.Logger;
import org.dspace.content.Collection;
import org.dspace.content.Community;
import org.dspace.content.DSpaceObject;
import org.dspace.content.factory.ContentServiceFactory;
import org.dspace.content.service.ItemService;
import org.dspace.core.Context;
import org.dspace.services.ConfigurationService;
import org.dspace.services.factory.DSpaceServicesFactory;

/**
 * This class provides a standard interface to all item counting
 * operations for communities and collections.  It can be run from the
 * command line to prepare the cached data if desired, simply by
 * running:
 *
 * java org.dspace.browse.ItemCounter
 *
 * It can also be invoked via its standard API.  In the event that
 * the data cache is not being used, this class will return direct
 * real time counts of content.
 *
 * @author Richard Jones
 */
public class ItemCounter {
    /**
     * Log4j logger
     */
    private static Logger log = org.apache.logging.log4j.LogManager.getLogger(ItemCounter.class);

    /**
     * DAO to use to store and retrieve data
     */
    private ItemCountDAO dao;

    /**
     * DSpace Context
     */
    private Context context;

    protected ItemService itemService;
    protected ConfigurationService configurationService;

    /**
     * Construct a new item counter which will use the given DSpace Context
     *
     * @param context current context
     * @throws ItemCountException if count error
     */
    public ItemCounter(Context context) throws ItemCountException {
        this.context = context;
        this.dao = ItemCountDAOFactory.getInstance(this.context);
        this.itemService = ContentServiceFactory.getInstance().getItemService();
        this.configurationService = DSpaceServicesFactory.getInstance().getConfigurationService();
    }

    /**
     * Get the count of the items in the given container.  If the configuration
     * value webui.strengths.cache is equal to 'true' this will return the
     * cached value if it exists.  If it is equal to 'false' it will count
     * the number of items in the container in real time.
     *
     * @param dso DSpaceObject
     * @return count
     * @throws ItemCountException when error occurs
     */
    public int getCount(DSpaceObject dso) throws ItemCountException {
        boolean useCache = configurationService.getBooleanProperty(
            "webui.strengths.cache", true);

        if (useCache) {
            return dao.getCount(dso);
        }

        // if we make it this far, we need to manually count
        if (dso instanceof Collection) {
            try {
                return itemService.countItems(context, (Collection) dso);
            } catch (SQLException e) {
                log.error("caught exception: ", e);
                throw new ItemCountException(e);
            }
        }

        if (dso instanceof Community) {
            try {
                return itemService.countItems(context, ((Community) dso));
            } catch (SQLException e) {
                log.error("caught exception: ", e);
                throw new ItemCountException(e);
            }
        }

        return 0;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy