blob: 35df890ee122450d6c07358aef36a9889fd91460 [file] [log] [blame]
/*
* Copyright (c) OSGi Alliance (2015, 2016). All Rights Reserved.
*
* 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 org.osgi.util.pushstream;
import java.util.concurrent.BlockingQueue;
/**
* {@link QueuePolicyOption} provides a standard set of simple
* {@link QueuePolicy} implementations.
*
* @see QueuePolicy
*/
public enum QueuePolicyOption {
/**
* Attempt to add the supplied event to the queue. If the queue is unable to
* immediately accept the value then discard the value at the head of the
* queue and try again. Repeat this process until the event is enqueued.
*/
DISCARD_OLDEST {
@Override
public <T, U extends BlockingQueue<PushEvent<? extends T>>> QueuePolicy<T, U> getPolicy() {
return (queue, event) -> {
while (!queue.offer(event)) {
queue.poll();
}
};
}
},
/**
* Attempt to add the supplied event to the queue, blocking until the
* enqueue is successful.
*/
BLOCK {
@Override
public <T, U extends BlockingQueue<PushEvent<? extends T>>> QueuePolicy<T, U> getPolicy() {
return (queue, event) -> {
try {
queue.put(event);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}
},
/**
* Attempt to add the supplied event to the queue, throwing an exception if
* the queue is full.
*/
FAIL {
@Override
public <T, U extends BlockingQueue<PushEvent<? extends T>>> QueuePolicy<T, U> getPolicy() {
return (queue, event) -> queue.add(event);
}
};
/**
* @return a {@link QueuePolicy} implementation
*/
public abstract <T, U extends BlockingQueue<PushEvent<? extends T>>> QueuePolicy<T, U> getPolicy();
}