design modify 2
[dcaegen2/services.git] / components / datalake-handler / feeder / src / main / java / org / onap / datalake / feeder / service / DesignService.java
1 /*\r
2  * ============LICENSE_START=======================================================\r
3  * ONAP : DataLake\r
4  * ================================================================================\r
5  * Copyright 2019 China Mobile\r
6  *=================================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  *\r
11  *     http://www.apache.org/licenses/LICENSE-2.0\r
12  *\r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * ============LICENSE_END=========================================================\r
19  */\r
20 \r
21 package org.onap.datalake.feeder.service;\r
22 \r
23 import java.util.ArrayList;\r
24 import java.util.List;\r
25 import java.util.Optional;\r
26 import java.util.Set;\r
27 import java.util.HashSet;\r
28 \r
29 import org.onap.datalake.feeder.config.ApplicationConfiguration;\r
30 import org.onap.datalake.feeder.domain.*;\r
31 import org.onap.datalake.feeder.domain.Design;\r
32 import org.onap.datalake.feeder.dto.DesignConfig;\r
33 import org.onap.datalake.feeder.enumeration.DesignTypeEnum;\r
34 import org.onap.datalake.feeder.repository.DbRepository;\r
35 import org.onap.datalake.feeder.repository.DesignTypeRepository;\r
36 import org.onap.datalake.feeder.repository.DesignRepository;\r
37 import org.onap.datalake.feeder.repository.TopicNameRepository;\r
38 import org.onap.datalake.feeder.util.HttpClientUtil;\r
39 import org.slf4j.Logger;\r
40 import org.slf4j.LoggerFactory;\r
41 import org.springframework.beans.factory.annotation.Autowired;\r
42 import org.springframework.stereotype.Service;\r
43 \r
44 /**\r
45  * Service for portalDesigns\r
46  *\r
47  * @author guochunmeng\r
48  */\r
49 \r
50 @Service\r
51 public class DesignService {\r
52 \r
53         private final Logger log = LoggerFactory.getLogger(this.getClass());\r
54 \r
55         static String POST_FLAG;\r
56 \r
57         @Autowired\r
58         private DesignRepository designRepository;\r
59 \r
60         @Autowired\r
61         private TopicNameRepository topicNameRepository;\r
62 \r
63         @Autowired\r
64         private DesignTypeRepository designTypeRepository;\r
65 \r
66         @Autowired\r
67         private ApplicationConfiguration applicationConfiguration;\r
68 \r
69         @Autowired\r
70         private DbRepository dbRepository;\r
71 \r
72         public Design fillDesignConfiguration(DesignConfig designConfig) {\r
73                 Design design = new Design();\r
74                 fillDesign(designConfig, design);\r
75                 return design;\r
76         }\r
77 \r
78         public void fillDesignConfiguration(DesignConfig designConfig, Design design) {\r
79                 fillDesign(designConfig, design);\r
80         }\r
81 \r
82         private void fillDesign(DesignConfig designConfig, Design design) throws IllegalArgumentException {\r
83 \r
84                 design.setId(designConfig.getId());\r
85                 design.setBody(designConfig.getBody());\r
86                 design.setName(designConfig.getName());\r
87                 design.setNote(designConfig.getNote());\r
88                 design.setSubmitted(designConfig.getSubmitted());\r
89 \r
90                 if (designConfig.getTopicName() == null)\r
91                         throw new IllegalArgumentException("Can not find topicName in tpoic_name, topic name: " + designConfig.getTopicName());\r
92                 Optional<TopicName> topicName = topicNameRepository.findById(designConfig.getTopicName());\r
93                 if (!topicName.isPresent())\r
94                         throw new IllegalArgumentException("topicName is null " + designConfig.getTopicName());\r
95                 design.setTopicName(topicName.get());\r
96 \r
97                 if (designConfig.getDesignType() == null)\r
98                         throw new IllegalArgumentException("Can not find designType in design_type, designType id " + designConfig.getDesignType());\r
99                 Optional<DesignType> designType = designTypeRepository.findById(designConfig.getDesignType());\r
100                 if (!designType.isPresent())\r
101                         throw new IllegalArgumentException("designType is null");\r
102                 design.setDesignType(designType.get());\r
103 \r
104                 Set<Db> dbs = new HashSet<>();\r
105                 if (designConfig.getDbs() != null) {\r
106                         for (Integer item : designConfig.getDbs()) {\r
107                                 Optional<Db> db = dbRepository.findById(item);\r
108                                 if (db.isPresent()) {\r
109                                         dbs.add(db.get());\r
110                                 }\r
111                         }\r
112                         if (dbs.size() > 0)\r
113                                 design.setDbs(dbs);\r
114                         else {\r
115                                 design.getDbs().clear();\r
116                                 design.setDbs(dbs);\r
117                         }\r
118                 } else {\r
119                         design.setDbs(dbs);\r
120                 }\r
121         }\r
122 \r
123         public Design getDesign(Integer id) {\r
124 \r
125                 Optional<Design> ret = designRepository.findById(id);\r
126                 return ret.isPresent() ? ret.get() : null;\r
127         }\r
128 \r
129         public List<DesignConfig> queryAllDesign() {\r
130 \r
131                 List<Design> designList = null;\r
132                 List<DesignConfig> designConfigList = new ArrayList<>();\r
133                 designList = (List<Design>) designRepository.findAll();\r
134                 if (designList != null && designList.size() > 0) {\r
135                         log.info("DesignList is not null");\r
136                         for (Design design : designList) {\r
137                                 designConfigList.add(design.getDesignConfig());\r
138                         }\r
139                 }\r
140                 return designConfigList;\r
141         }\r
142 \r
143         public boolean deploy(Design design) {\r
144                 DesignType designType = design.getDesignType();\r
145                 DesignTypeEnum designTypeEnum = DesignTypeEnum.valueOf(designType.getId());\r
146 \r
147                 switch (designTypeEnum) {\r
148                 case KIBANA_DB:\r
149                         return deployKibanaImport(design);\r
150                 case ES_MAPPING:\r
151                         return postEsMappingTemplate(design, design.getTopicName().getId().toLowerCase());\r
152                 default:\r
153                         log.error("Not implemented {}", designTypeEnum);\r
154                         return false;\r
155                 }\r
156         }\r
157 \r
158         private boolean deployKibanaImport(Design design) throws RuntimeException {\r
159                 POST_FLAG = "KibanaDashboardImport";\r
160                 String requestBody = design.getBody();\r
161                 String url = "";\r
162                 //TODO\r
163                 return HttpClientUtil.sendPostHttpClient(url, requestBody, POST_FLAG);\r
164 \r
165         }\r
166 \r
167         private String kibanaImportUrl(String host, Integer port) {\r
168                 if (port == null) {\r
169                         port = applicationConfiguration.getKibanaPort();\r
170                 }\r
171                 return "http://" + host + ":" + port + applicationConfiguration.getKibanaDashboardImportApi();\r
172         }\r
173 \r
174         /**\r
175          * successed resp: { "acknowledged": true }\r
176          * \r
177          * @param design\r
178          * @param templateName\r
179          * @return flag\r
180          */\r
181         public boolean postEsMappingTemplate(Design design, String templateName) throws RuntimeException {\r
182                 POST_FLAG = "ElasticsearchMappingTemplate";\r
183                 String requestBody = design.getBody();\r
184 \r
185                 //FIXME\r
186                 Set<Db> dbs = design.getDbs();\r
187                 //submit to each ES in dbs\r
188 \r
189                 //return HttpClientUtil.sendPostHttpClient("http://"+dbService.getElasticsearch().getHost()+":9200/_template/"+templateName, requestBody, POST_FLAG);\r
190                 return false;\r
191         }\r
192 \r
193 }\r