org.dspace.app.webui.cris.controller.RSSStatController.java Source code

Java tutorial

Introduction

Here is the source code for org.dspace.app.webui.cris.controller.RSSStatController.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.controller;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

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

import org.apache.commons.lang.StringUtils;
import org.apache.solr.client.solrj.SolrServerException;
import org.dspace.app.cris.model.StatSubscription;
import org.dspace.app.cris.service.ApplicationService;
import org.dspace.app.cris.statistics.StatSyndicationFeed;
import org.dspace.app.cris.statistics.SummaryStatBean;
import org.dspace.app.cris.statistics.service.StatSubscribeService;
import org.dspace.app.webui.util.UIUtil;
import org.dspace.core.ConfigurationManager;
import org.dspace.core.Context;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

/**
 * This SpringMVC controller distributes RSS feeds with statistics update on
 * several types of object: Item, Collection, Community and Researcher Page
 * 
 * @author cilea
 * 
 */
public class RSSStatController extends MultiActionController {

    private StatSubscribeService statSubscribeService;

    private List<String> formats;

    public RSSStatController(StatSubscribeService statSubscribeService) {
        String fmtsStr = ConfigurationManager.getProperty("webui.feed.formats");
        if (fmtsStr != null) {
            formats = new ArrayList<String>();
            String[] fmts = fmtsStr.split(",");
            for (int i = 0; i < fmts.length; i++) {
                formats.add(fmts[i].trim());
            }
        }
        this.statSubscribeService = statSubscribeService;
    }

    public ModelAndView daily(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
        arg1.setContentType("application/rss+xml");
        processRSSStat(arg0, StatSubscription.FREQUENCY_DAILY).output(arg1.getWriter());
        arg1.getWriter().flush();
        return null;
    }

    public ModelAndView weekly(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
        arg1.setContentType("application/rss+xml");
        processRSSStat(arg0, StatSubscription.FREQUENCY_WEEKLY).output(arg1.getWriter());
        arg1.getWriter().flush();
        return null;
    }

    public ModelAndView monthly(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
        arg1.setContentType("application/rss+xml");
        processRSSStat(arg0, StatSubscription.FREQUENCY_MONTHLY).output(arg1.getWriter());
        arg1.getWriter().flush();
        return null;
    }

    private StatSyndicationFeed processRSSStat(HttpServletRequest arg0, int freq)
            throws SQLException, SolrServerException {
        String uid = arg0.getParameter("uid");
        int type = UIUtil.getIntParameter(arg0, "type");
        String feedType = arg0.getParameter("feedtype");
        Context context = UIUtil.obtainContext(arg0);
        int numsFeed = ConfigurationManager.getIntProperty("webui.feed.stats", 4);
        SummaryStatBean summary = statSubscribeService.getStatBean(context, uid, type, freq, numsFeed);
        StatSyndicationFeed feed = new StatSyndicationFeed();

        if (StringUtils.isEmpty(feedType) || !formats.contains(feedType)) {
            feedType = formats.get(0);
        }
        feed.setType(feedType);
        feed.populate(arg0, summary);
        return feed;
    }
}