/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.portal.livetrace; import java.util.LinkedList; import java.util.List; import com.google.common.collect.ImmutableList; /** * Oct 6, 2010 */ public class CompletedPortalRequests { private static long historyCounter = 0; private int maxSize; private final LinkedList<PortalRequestTrace> list = new LinkedList<PortalRequestTrace>(); public CompletedPortalRequests( int maxSize ) { this.maxSize = maxSize; } public void add( PortalRequestTrace portalRequestTrace ) { synchronized ( list ) { portalRequestTrace.setCompletedNumber( ++historyCounter ); list.addFirst( portalRequestTrace ); doRetainSize(); } } public List<PortalRequestTrace> getList() { synchronized ( list ) { return ImmutableList.copyOf( list ); } } public List<PortalRequestTrace> getCompletedAfter( long completedNumber ) { LinkedList<PortalRequestTrace> list = new LinkedList<PortalRequestTrace>(); for ( PortalRequestTrace trace : getList() ) { if ( trace.getCompletedNumber() > completedNumber ) { list.addLast( trace ); } } return list; } public List<PortalRequestTrace> getCompletedBefore( long completedNumber ) { LinkedList<PortalRequestTrace> list = new LinkedList<PortalRequestTrace>(); for ( PortalRequestTrace trace : getList() ) { if ( trace.getCompletedNumber() < completedNumber ) { list.addLast( trace ); } } return list; } private void doRetainSize() { if ( list.size() > maxSize ) { list.removeLast(); } } public int getSize() { return list.size(); } }