package org.onap.msb.apiroute.wrapper.consulextend.expose; import java.util.concurrent.CopyOnWriteArrayList; import org.onap.msb.apiroute.wrapper.consulextend.cache.ConsulCache; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.orbitz.consul.model.ConsulResponse; public abstract class WatchTask { private final CopyOnWriteArrayList> filters = new CopyOnWriteArrayList>(); private final CopyOnWriteArrayList> handlers = new CopyOnWriteArrayList>(); private final static Logger LOGGER = LoggerFactory .getLogger(WatchTask.class); //start public abstract boolean startWatch(); //stop public abstract boolean stopWatch(); // filters public interface Filter { public boolean filter(final ConsulResponse object); } public boolean addFilter(Filter filter) { boolean added = filters.add(filter); return added; } public void removeAllFilter() { filters.clear(); } public final CopyOnWriteArrayList> getAllFilters(){ return filters; } // handlers public interface Handler { void handle(final ConsulResponse object); } public boolean addHandler(Handler handler) { boolean added = handlers.add(handler); return added; } public void removeAllHandler() { handlers.clear(); } // internal listener protected class InternalListener implements ConsulCache.Listener { @Override public void notify(ConsulResponse newValues) { long startTime = System.currentTimeMillis(); // filter for (Filter f : filters) { // false,return if (!f.filter(newValues)) { return; } } // handle for (Handler h : handlers) { h.handle(newValues); } long endTime = System.currentTimeMillis(); if(endTime-startTime > 10*1000) { LOGGER.info("WatchTask THEAD WORK TIMEOUT"); } } } }