/******************************************************************************* * Copyright 2011 André Rouél * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package net.sf.jacclog.util.observer; import java.util.Queue; import java.util.concurrent.atomic.AtomicInteger; /** * A thread-safe observer for an <code>ObservableQueue</code> to count the current number of elements stored in a queue. * * @author André Rouél */ public class CurrentElementCounter<E> implements QueueItemCounter<E> { private final AtomicInteger counter = new AtomicInteger(); @Override public void added(final Queue<E> queue, final E element) { if (element != null) { counter.incrementAndGet(); } } @Override public void empty(final Queue<E> queue) { // not interesting, do nothing } @Override public int getCount() { return counter.get(); } @Override public void removed(final Queue<E> queue, final E element) { if (element != null) { counter.decrementAndGet(); } } }