StatisticsBean.java 2.82 KB
/*
 * Copyright Codecrew Ry
 * 
 * All rights reserved.
 * 
 * This license applies to any software containing a notice placed by the 
 * copyright holder. Such software is herein referred to as the Software. 
 * This license covers modification, distribution and use of the Software. 
 * 
 * Any distribution and use in source and binary forms, with or without 
 * modification is not permitted without explicit written permission from the 
 * copyright owner. 
 * 
 * A non-exclusive royalty-free right is granted to the copyright owner of the 
 * Software to use, modify and distribute all modifications to the Software in 
 * future versions of the Software. 
 * 
 */
package fi.codecrew.moya.beans;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.codecrew.moya.enums.apps.EventPermission;
import fi.codecrew.moya.facade.GroupMembershipFacade;
import fi.codecrew.moya.facade.PrintedCardFacade;
import fi.codecrew.moya.model.GroupMembership;

/**
 * Session Bean implementation class FoodWaveBean
 */
@Stateless
@DeclareRoles({ EventPermission.S_VIEW_STATISTICS })
public class StatisticsBean implements StatisticsBeanLocal {

	private static final Logger logger = LoggerFactory.getLogger(StatisticsBean.class);
	
	@EJB
	GroupMembershipFacade groupMembershipFacade;
	
	@EJB
	PrintedCardFacade printedCardFacade;
	
	

	@Override
	@RolesAllowed(EventPermission.S_VIEW_STATISTICS)
	public Long getGroupMembershipsEnteredEvent() {
		return groupMembershipFacade.findGroupMembershipsEnteredCount();
	}

	@Override
	@RolesAllowed(EventPermission.S_VIEW_STATISTICS)
	public Long getCardDeliveredCount() {
		return printedCardFacade.findDeliveredCardCount();
	}

	@Override
	@RolesAllowed(EventPermission.S_VIEW_STATISTICS)
	public Long getGroupMembershipsTotalCount() {
		return groupMembershipFacade.findGroupMembershipsCount();
	}

	@Override
	public Map<Long, Long> getHourlyIncomingStatistics(long startingFromMillis, int hourCount) {
		List<GroupMembership> groupMemberships = groupMembershipFacade.findAllEnteredBetween(startingFromMillis, (startingFromMillis + ((long) hourCount)*60l*60l*1000l));
		 
		HashMap<Long, Long> retMap = new HashMap<Long, Long>();
		
		long currentTimestamp = startingFromMillis;
		long hour = (60l*60l*1000l);
		long hourEntered = 0;
		
		for(GroupMembership gm : groupMemberships) {
				
			// find the hour this one belongs to (sometime we need to skip empty hours)
			while(gm.getEnteredEvent().getTimeInMillis() > currentTimestamp+hour) {
				
				retMap.put(currentTimestamp, hourEntered);
				hourEntered = 0;
				
				currentTimestamp += hour;
			}
			
			hourEntered++;
		}
		
		return retMap;
	}
	
	
	
}