Divide the MSB source codes into two repos
[msb/apigateway.git] / apiroute / apiroute-service / src / main / java / org / onap / msb / apiroute / wrapper / consulextend / expose / WatchTask.java
1 package org.onap.msb.apiroute.wrapper.consulextend.expose;
2
3 import java.util.concurrent.CopyOnWriteArrayList;
4
5 import org.onap.msb.apiroute.wrapper.consulextend.cache.ConsulCache;
6 import org.slf4j.Logger;
7 import org.slf4j.LoggerFactory;
8
9 import com.orbitz.consul.model.ConsulResponse;
10
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);
16         
17         //start
18         public abstract boolean startWatch();
19         
20         //stop
21         public abstract boolean stopWatch();
22         
23         // filters
24         public interface Filter<T> {
25                 public boolean filter(final ConsulResponse<T> object);
26         }
27
28         public boolean addFilter(Filter<T> filter) {
29                 boolean added = filters.add(filter);
30                 return added;
31         }
32         
33         public void removeAllFilter() {
34                 filters.clear();
35         }
36
37
38         public final CopyOnWriteArrayList<Filter<T>> getAllFilters(){
39                 return filters;
40         }
41         
42         // handlers
43         public interface Handler<T> {
44                 void handle(final ConsulResponse<T> object);
45         }
46
47         public boolean addHandler(Handler<T> handler) {
48                 boolean added = handlers.add(handler);
49                 return added;
50         }
51         
52         public void removeAllHandler() {
53                 handlers.clear();
54         }
55         
56         // internal listener
57         protected class InternalListener implements ConsulCache.Listener<T> {
58                 @Override
59                 public void notify(ConsulResponse<T> newValues) {
60                         
61                         long startTime = System.currentTimeMillis();
62                         
63                         // filter
64                         for (Filter<T> f : filters) {
65                                 // false,return
66                                 if (!f.filter(newValues)) {
67                                         return;
68                                 }
69                         }
70
71                         // handle
72                         for (Handler<T> h : handlers) {
73                                 h.handle(newValues);
74                         }
75                         
76                         long endTime = System.currentTimeMillis();
77                         
78                         if(endTime-startTime > 10*1000)
79                         {
80                                 LOGGER.info("WatchTask THEAD WORK TIMEOUT");
81                         }
82                 }
83
84         }
85
86
87 }