Divide the MSB source codes into two repos
[msb/apigateway.git] / apiroute / apiroute-service / src / main / java / org / onap / msb / apiroute / wrapper / service / ApiRouteService.java
1 package org.onap.msb.apiroute.wrapper.service;
2
3 import org.onap.msb.apiroute.api.ApiRouteInfo;
4 import org.onap.msb.apiroute.api.RouteServer;
5 import org.onap.msb.apiroute.wrapper.dao.DAOFactory;
6 import org.onap.msb.apiroute.wrapper.dao.route.IRouteDAO;
7 import org.onap.msb.apiroute.wrapper.dao.route.bean.Metadata;
8 import org.onap.msb.apiroute.wrapper.dao.route.bean.Node;
9 import org.onap.msb.apiroute.wrapper.dao.route.bean.RouteInfo;
10 import org.onap.msb.apiroute.wrapper.dao.route.bean.Spec;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
13
14 import java.util.ArrayList;
15 import java.util.Calendar;
16 import java.util.List;
17
18
19 public class ApiRouteService {
20     private static final Logger LOGGER = LoggerFactory.getLogger(ApiRouteService.class);
21     private static final ApiRouteService instance = new ApiRouteService();
22     private IRouteDAO routeDAO = DAOFactory.getRouteDAO();
23
24     private ApiRouteService() {
25     }
26
27     public static ApiRouteService getInstance() {
28         return instance;
29     }
30
31     public void saveApiRouteService2Redis(ApiRouteInfo apiRouteInfo, String routeKey) throws Exception {
32         if(apiRouteInfo ==null){
33             throw new Exception("input apiRouteInfo to be saved is null!");
34         }
35         RouteInfo routeInfo = APIRouteAdapter.toRouteInfo(apiRouteInfo);
36         routeDAO.saveRoute(routeKey, routeInfo);
37     }
38
39     public long deleteApiRouteService2Redis(String routeKey) throws Exception {
40         return routeDAO.deleteRoute(routeKey);
41     }
42
43     public long deleteMultiApiRouteService2Redis(String routeKeyPattern) throws Exception {
44         return routeDAO.deleteMultiRoute(routeKeyPattern);
45     }
46
47     public ApiRouteInfo getApiRouteInstance(String routeKey) throws Exception {
48         ApiRouteInfo apiRouteInfo = null;
49         RouteInfo routeInfo = null;
50         routeInfo = routeDAO.queryRoute(routeKey);
51         if(routeInfo!=null) {
52             apiRouteInfo = APIRouteAdapter.fromRouteInfo(routeInfo);
53         }
54         return apiRouteInfo;
55     }
56
57     public List<ApiRouteInfo> getMultiApiRouteInstances(String apiRedisKeyPattern) throws Exception {
58         List<ApiRouteInfo> apiRouteList = new ArrayList<>();
59         List<RouteInfo> routeInfoList = routeDAO.queryMultiRoute(apiRedisKeyPattern);
60         for (RouteInfo routeInfo : routeInfoList) {
61             if (routeInfo != null) {
62                  ApiRouteInfo apiRouteInfo = APIRouteAdapter.fromRouteInfo(routeInfo);;
63                 apiRouteList.add(apiRouteInfo);
64             }
65         }
66         return apiRouteList;
67     }
68
69     public void updateApiRouteStatus2Redis(String routeKey,String status) throws Exception {
70         RouteInfo routeInfo = routeDAO.queryRoute(routeKey);
71         if(routeInfo != null){
72             routeInfo.setStatus(status);
73             routeDAO.saveRoute(routeKey,routeInfo);
74         }else{
75             throw new Exception("service to be updated is not exist! Update failed");
76         }
77     }
78 }
79
80 class APIRouteAdapter {
81     public static RouteInfo toRouteInfo(ApiRouteInfo apiRouteInfo) {
82         RouteInfo routeInfo = new RouteInfo();
83         routeInfo.setApiVersion(apiRouteInfo.getVersion());
84         routeInfo.setStatus(apiRouteInfo.getStatus());
85
86
87         Spec spec = new Spec();
88         spec.setVisualRange(apiRouteInfo.getVisualRange());
89         spec.setUrl(apiRouteInfo.getUrl().trim());
90         spec.setPublish_port(apiRouteInfo.getPublish_port());
91         spec.setHost(apiRouteInfo.getHost());
92         spec.setApijson(apiRouteInfo.getApiJson());
93         spec.setApijsontype(apiRouteInfo.getApiJsonType());
94         spec.setMetricsUrl(apiRouteInfo.getMetricsUrl());
95         spec.setConsulServiceName(apiRouteInfo.getConsulServiceName());
96         spec.setUseOwnUpstream(apiRouteInfo.getUseOwnUpstream());
97         spec.setPublish_protocol(apiRouteInfo.getPublishProtocol());
98         spec.setEnable_ssl(apiRouteInfo.isEnable_ssl());
99         spec.setControl(apiRouteInfo.getControl());
100         RouteServer[] routeServers = apiRouteInfo.getServers();
101         List<Node> nodeList = new ArrayList<>();
102         for (RouteServer server: routeServers){
103             Node node = new Node();
104             node.setIp(server.getIp());
105             node.setPort(Integer.parseInt(server.getPort()));
106             node.setWeight(server.getWeight());
107             nodeList.add(node);
108         }
109         spec.setNodes(nodeList.toArray(new Node[]{}));
110         routeInfo.setSpec(spec);
111
112         Metadata metadata = new Metadata();
113         metadata.setName(apiRouteInfo.getServiceName());
114         metadata.setNamespace(apiRouteInfo.getNamespace());
115         Calendar now = Calendar.getInstance();
116         now.set(Calendar.MILLISECOND, 0);
117         metadata.setUpdateTimestamp(now.getTime());
118         routeInfo.setMetadata(metadata);
119
120         return routeInfo;
121     }
122
123     public static ApiRouteInfo fromRouteInfo(RouteInfo routeInfo) {
124         ApiRouteInfo apiRouteInfo = new ApiRouteInfo();
125
126         apiRouteInfo.setVersion(routeInfo.getApiVersion());
127         apiRouteInfo.setStatus(routeInfo.getStatus());
128
129         Spec spec = routeInfo.getSpec();
130         apiRouteInfo.setVisualRange(spec.getVisualRange());
131         apiRouteInfo.setUrl(spec.getUrl());
132         apiRouteInfo.setPublish_port(spec.getPublish_port());
133         apiRouteInfo.setHost(spec.getHost());
134         apiRouteInfo.setApiJson(spec.getApijson());
135         apiRouteInfo.setApiJsonType(spec.getApijsontype());
136         apiRouteInfo.setMetricsUrl(spec.getMetricsUrl());
137         apiRouteInfo.setConsulServiceName(spec.getConsulServiceName());
138         apiRouteInfo.setUseOwnUpstream(spec.getUseOwnUpstream());
139         apiRouteInfo.setPublishProtocol(spec.getPublish_protocol());
140         apiRouteInfo.setEnable_ssl(spec.isEnable_ssl());
141         apiRouteInfo.setControl(spec.getControl());
142         Node[] nodes = spec.getNodes();
143         List<RouteServer> routeServerList = new ArrayList<>();
144         for (Node node: nodes){
145             RouteServer routeServer = new RouteServer();
146             routeServer.setIp(node.getIp());
147             routeServer.setPort(String.valueOf(node.getPort()));
148             routeServer.setWeight(node.getWeight());
149             routeServerList.add(routeServer);
150         }
151         apiRouteInfo.setServers(routeServerList.toArray(new RouteServer[]{}));
152
153         Metadata metadata = routeInfo.getMetadata();
154         apiRouteInfo.setServiceName(metadata.getName());
155         apiRouteInfo.setNamespace(metadata.getNamespace());
156
157         return apiRouteInfo;
158     }
159 }