/**
* Copyright (c) 2013 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.openflow.md.queue;
import org.opendaylight.openflowplugin.api.openflow.md.queue.MessageSourcePollRegistrator;
import org.opendaylight.openflowplugin.api.openflow.md.queue.QueueKeeper;
import org.opendaylight.openflowplugin.api.openflow.md.queue.WaterMarkListener;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
/**
* factory for
* {@link org.opendaylight.openflowplugin.api.openflow.md.queue.QueueKeeper}
* implementations
*/
public abstract class QueueKeeperFactory {
/**
* @param sourceRegistrator source registrator
* @param capacity blocking queue capacity
* @param waterMarkListener water mark listener
* @return fair reading implementation of
* {@link org.opendaylight.openflowplugin.api.openflow.md.queue.QueueKeeper}
* (not registered = not started yet)
*/
public static QueueKeeper<OfHeader> createFairQueueKeeper(
MessageSourcePollRegistrator<QueueKeeper<OfHeader>> sourceRegistrator,
int capacity, WaterMarkListener waterMarkListener) {
QueueKeeperFairImpl queueKeeper = new QueueKeeperFairImpl();
queueKeeper.setCapacity(capacity);
queueKeeper.setHarvesterHandle(sourceRegistrator.getHarvesterHandle());
queueKeeper.setWaterMarkListener(waterMarkListener);
queueKeeper.init();
return queueKeeper;
}
/**
* register queue by harvester, start processing it. Use
* {@link QueueKeeperFairImpl#close()} to kill the queue and stop
* processing.
*
* @param sourceRegistrator source registrator
* @param queueKeeper queue keeper
*/
public static <V> void plugQueue(
MessageSourcePollRegistrator<QueueKeeper<V>> sourceRegistrator,
QueueKeeper<V> queueKeeper) {
AutoCloseable registration = sourceRegistrator
.registerMessageSource(queueKeeper);
queueKeeper.setPollRegistration(registration);
sourceRegistrator.getHarvesterHandle().ping();
}
}