1 package org.onap.msb.apiroute.wrapper.consulextend.expose;
3 import java.util.concurrent.CopyOnWriteArrayList;
5 import org.onap.msb.apiroute.wrapper.consulextend.cache.ConsulCache;
6 import org.slf4j.Logger;
7 import org.slf4j.LoggerFactory;
9 import com.orbitz.consul.model.ConsulResponse;
11 public abstract class WatchTask<T> {
12 private final CopyOnWriteArrayList<Filter<T>> filters = new CopyOnWriteArrayList<Filter<T>>();
13 private final CopyOnWriteArrayList<Handler<T>> handlers = new CopyOnWriteArrayList<Handler<T>>();
14 private final static Logger LOGGER = LoggerFactory
15 .getLogger(WatchTask.class);
18 public abstract boolean startWatch();
21 public abstract boolean stopWatch();
24 public interface Filter<T> {
25 public boolean filter(final ConsulResponse<T> object);
28 public boolean addFilter(Filter<T> filter) {
29 boolean added = filters.add(filter);
33 public void removeAllFilter() {
38 public final CopyOnWriteArrayList<Filter<T>> getAllFilters(){
43 public interface Handler<T> {
44 void handle(final ConsulResponse<T> object);
47 public boolean addHandler(Handler<T> handler) {
48 boolean added = handlers.add(handler);
52 public void removeAllHandler() {
57 protected class InternalListener implements ConsulCache.Listener<T> {
59 public void notify(ConsulResponse<T> newValues) {
61 long startTime = System.currentTimeMillis();
64 for (Filter<T> f : filters) {
66 if (!f.filter(newValues)) {
72 for (Handler<T> h : handlers) {
76 long endTime = System.currentTimeMillis();
78 if(endTime-startTime > 10*1000)
80 LOGGER.info("WatchTask THEAD WORK TIMEOUT");