/**
* 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.statistics;
import org.apache.log4j.Logger;
import org.dspace.eperson.EPerson;
import org.dspace.services.model.Event;
import org.dspace.statistics.factory.StatisticsServiceFactory;
import org.dspace.statistics.service.SolrLoggerService;
import org.dspace.usage.AbstractUsageEventListener;
import org.dspace.usage.UsageEvent;
import org.dspace.usage.UsageSearchEvent;
import org.dspace.usage.UsageWorkflowEvent;
import org.springframework.util.CollectionUtils;
/**
* Simple SolrLoggerUsageEvent facade to separate Solr specific
* logging implementation from DSpace.
*
* @author mdiggory
*
*/
public class SolrLoggerUsageEventListener extends AbstractUsageEventListener {
private static Logger log = Logger.getLogger(SolrLoggerUsageEventListener.class);
protected SolrLoggerService solrLoggerService;
public SolrLoggerUsageEventListener() {
solrLoggerService = StatisticsServiceFactory.getInstance().getSolrLoggerService();
}
@Override
public void receiveEvent(Event event) {
if(event instanceof UsageEvent)
{
log.debug("Usage event received " + event.getName());
try{
UsageEvent ue = (UsageEvent)event;
EPerson currentUser = ue.getContext() == null ? null : ue.getContext().getCurrentUser();
if(UsageEvent.Action.VIEW == ue.getAction()){
if(ue.getRequest()!=null){
solrLoggerService.postView(ue.getObject(), ue.getRequest(), currentUser);
} else {
solrLoggerService.postView(ue.getObject(), ue.getIp(), ue.getUserAgent(), ue.getXforwardedfor(), currentUser);
}
}else
if(UsageEvent.Action.SEARCH == ue.getAction()){
UsageSearchEvent usageSearchEvent = (UsageSearchEvent) ue;
//Only log if the user has already filled in a query !
if(!CollectionUtils.isEmpty(((UsageSearchEvent) ue).getQueries())){
solrLoggerService.postSearch(ue.getObject(), ue.getRequest(), currentUser,
usageSearchEvent.getQueries(), usageSearchEvent.getRpp(), usageSearchEvent.getSortBy(),
usageSearchEvent.getSortOrder(), usageSearchEvent.getPage(), usageSearchEvent.getScope());
}
}else
if(UsageEvent.Action.WORKFLOW == ue.getAction()){
UsageWorkflowEvent usageWorkflowEvent = (UsageWorkflowEvent) ue;
solrLoggerService.postWorkflow(usageWorkflowEvent);
}
}
catch(Exception e)
{
log.error(e.getMessage());
}
}
}
}