/* * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.openflowplugin.api.openflow.md.util; import java.util.Queue; /** * Zipper groups together a list of queues and exposes one poll method. Polling * iterates through all groups and returns first not-null result of poll method * on each queue. If after polling each grouped queue for one time there is * still null result, poll will return null. <br> * Iterating keeps last position so this polling is supposed to be fairly * distributed. * * @param <T> common item type of zipped queues */ public class PollableQueuesPriorityZipper<T> { private Queue<T> prioritizedSource; private PollableQueuesZipper<T> zipper; public PollableQueuesPriorityZipper() { zipper = new PollableQueuesZipper<>(); } /** * Add all member queues before first invocation of {@link PollableQueuesPriorityZipper#poll()}. * @param queue to be added to group */ public void addSource(Queue<T> queue) { zipper.addSource(queue); } /** * Next common product. * @return next common product of polling member groups */ public T poll() { T item = null; item = prioritizedSource.poll(); if (item == null) { item = zipper.poll(); } return item; } public void setPrioritizedSource(Queue<T> prioritizedSource) { this.prioritizedSource = prioritizedSource; } }