Divide the MSB source codes into two repos
[msb/apigateway.git] / apiroute / apiroute-service / src / main / java / org / onap / msb / apiroute / wrapper / queue / QueueManager.java
1 package org.onap.msb.apiroute.wrapper.queue;
2
3 import java.util.List;
4 import java.util.Map;
5
6 import org.apache.http.HttpEntity;
7 import org.onap.msb.apiroute.wrapper.consulextend.model.health.ServiceHealth;
8 import org.onap.msb.apiroute.wrapper.util.RouteUtil;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11
12
13
14 public class QueueManager {
15
16         private static final Logger LOGGER = LoggerFactory
17                         .getLogger(QueueManager.class);
18
19         private final BaseQueue<HttpEntity> serviceListQueue;
20         private final BaseQueue<List<ServiceHealth>> serviceQueue;
21
22         private volatile  static QueueManager instance = null;
23
24           public static QueueManager getInstance() {
25             if (instance == null) {    
26               synchronized (QueueManager.class) {    
27                  if (instance == null) {    
28                     instance = new QueueManager();   
29                  }    
30               }    
31             }   
32             return instance;
33           }
34
35         private QueueManager() {
36                 serviceListQueue = new ServiceListQueue(
37                                 RouteUtil.SERVICE_LIST_QUEUE_CAPACITY);
38                 serviceQueue = new ServiceQueue(RouteUtil.SERVICE_DATA_QUEUE_NUM,
39                                 RouteUtil.SERVICE_QUEUE_CAPACITY);
40         }
41
42         public ServiceData<HttpEntity> takeFromServiceListQueue(
43                         int queueIndex) throws InterruptedException {
44                 return serviceListQueue.take(queueIndex);
45         }
46
47         public ServiceData<List<ServiceHealth>> takeFromServiceQueue(int queueIndex)
48                         throws InterruptedException {
49                 return serviceQueue.take(queueIndex);
50         }
51
52
53         @SuppressWarnings("unchecked")
54         public <T> void putIn(ServiceData<T> data) throws InterruptedException {
55
56                 if (data.getDataType() == ServiceData.DataType.service_list) {
57                     LOGGER.debug("putIn service_list queue success");
58                         serviceListQueue.put((ServiceData<HttpEntity>) data);
59                 } else if (data.getDataType() == ServiceData.DataType.service) {
60                         serviceQueue.put((ServiceData<List<ServiceHealth>>) data);
61                 } else {
62                         LOGGER.warn("DATA TYPE NOT SUPPORT:"+data.getDataType());
63                 }
64         }
65 }